github.com/darmach/terratest@v0.34.8-0.20210517103231-80931f95e3ff/modules/aws/keypair.go (about) 1 package aws 2 3 import ( 4 "github.com/aws/aws-sdk-go/aws" 5 "github.com/aws/aws-sdk-go/service/ec2" 6 "github.com/gruntwork-io/terratest/modules/logger" 7 "github.com/gruntwork-io/terratest/modules/ssh" 8 "github.com/gruntwork-io/terratest/modules/testing" 9 ) 10 11 // Ec2Keypair is an EC2 key pair. 12 type Ec2Keypair struct { 13 *ssh.KeyPair 14 Name string // The name assigned in AWS to the EC2 Key Pair 15 Region string // The AWS region where the EC2 Key Pair lives 16 } 17 18 // CreateAndImportEC2KeyPair generates a public/private KeyPair and import it into EC2 in the given region under the given name. 19 func CreateAndImportEC2KeyPair(t testing.TestingT, region string, name string) *Ec2Keypair { 20 keyPair, err := CreateAndImportEC2KeyPairE(t, region, name) 21 if err != nil { 22 t.Fatal(err) 23 } 24 return keyPair 25 } 26 27 // CreateAndImportEC2KeyPairE generates a public/private KeyPair and import it into EC2 in the given region under the given name. 28 func CreateAndImportEC2KeyPairE(t testing.TestingT, region string, name string) (*Ec2Keypair, error) { 29 keyPair, err := ssh.GenerateRSAKeyPairE(t, 2048) 30 if err != nil { 31 return nil, err 32 } 33 34 return ImportEC2KeyPairE(t, region, name, keyPair) 35 } 36 37 // ImportEC2KeyPair creates a Key Pair in EC2 by importing an existing public key. 38 func ImportEC2KeyPair(t testing.TestingT, region string, name string, keyPair *ssh.KeyPair) *Ec2Keypair { 39 ec2KeyPair, err := ImportEC2KeyPairE(t, region, name, keyPair) 40 if err != nil { 41 t.Fatal(err) 42 } 43 return ec2KeyPair 44 } 45 46 // ImportEC2KeyPairE creates a Key Pair in EC2 by importing an existing public key. 47 func ImportEC2KeyPairE(t testing.TestingT, region string, name string, keyPair *ssh.KeyPair) (*Ec2Keypair, error) { 48 logger.Logf(t, "Creating new Key Pair in EC2 region %s named %s", region, name) 49 50 client, err := NewEc2ClientE(t, region) 51 if err != nil { 52 return nil, err 53 } 54 55 params := &ec2.ImportKeyPairInput{ 56 KeyName: aws.String(name), 57 PublicKeyMaterial: []byte(keyPair.PublicKey), 58 } 59 60 _, err = client.ImportKeyPair(params) 61 if err != nil { 62 return nil, err 63 } 64 65 return &Ec2Keypair{Name: name, Region: region, KeyPair: keyPair}, nil 66 } 67 68 // DeleteEC2KeyPair deletes an EC2 key pair. 69 func DeleteEC2KeyPair(t testing.TestingT, keyPair *Ec2Keypair) { 70 err := DeleteEC2KeyPairE(t, keyPair) 71 if err != nil { 72 t.Fatal(err) 73 } 74 } 75 76 // DeleteEC2KeyPairE deletes an EC2 key pair. 77 func DeleteEC2KeyPairE(t testing.TestingT, keyPair *Ec2Keypair) error { 78 logger.Logf(t, "Deleting Key Pair in EC2 region %s named %s", keyPair.Region, keyPair.Name) 79 80 client, err := NewEc2ClientE(t, keyPair.Region) 81 if err != nil { 82 return err 83 } 84 85 params := &ec2.DeleteKeyPairInput{ 86 KeyName: aws.String(keyPair.Name), 87 } 88 89 _, err = client.DeleteKeyPair(params) 90 return err 91 }