package core.aws.task.ec2; import com.amazonaws.services.ec2.model.KeyPairInfo; import core.aws.client.AWS; import core.aws.env.Environment; import core.aws.resource.ec2.KeyPair; import core.aws.util.Charsets; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.PosixFilePermission; import java.util.HashSet; import java.util.Locale; /** * @author neo */ public class KeyPairHelper { private final Logger logger = LoggerFactory.getLogger(getClass()); private final Environment env; public KeyPairHelper(Environment env) { this.env = env; } public void createKeyPair(KeyPair keyPair) throws IOException { com.amazonaws.services.ec2.model.KeyPair remoteKeyPair = AWS.ec2.createKeyPair(keyPair.name); writeKeyFile(keyPair.name, remoteKeyPair.getKeyMaterial()); keyPair.remoteKeyPair = new KeyPairInfo() .withKeyName(remoteKeyPair.getKeyName()) .withKeyFingerprint(remoteKeyPair.getKeyFingerprint()); } private void writeKeyFile(String keyName, String content) throws IOException { Path keyFile = KeyPair.keyFile(keyName, env); Files.createDirectories(keyFile.getParent()); logger.info("write key, keyName={}, path={}", keyName, keyFile); Files.write(keyFile, content.getBytes(Charsets.UTF_8)); String osName = System.getProperty("os.name").toLowerCase(Locale.getDefault()); if (osName.contains("linux") || osName.contains("mac")) { HashSet<PosixFilePermission> permissions = new HashSet<>(); permissions.add(PosixFilePermission.OWNER_READ); permissions.add(PosixFilePermission.OWNER_WRITE); Files.setPosixFilePermissions(keyFile, permissions); } } public void deleteKeyPair(String keyName) throws IOException { AWS.ec2.deleteKeyPair(keyName); Path keyFile = KeyPair.keyFile(keyName, env); if (Files.exists(keyFile)) { logger.info("delete key, path={}", keyFile); Files.delete(keyFile); } } }