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  }