github.com/armen/terraform@v0.5.2-0.20150529052519-caa8117a08f1/builtin/providers/aws/resource_aws_key_pair.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 6 "github.com/hashicorp/terraform/helper/resource" 7 "github.com/hashicorp/terraform/helper/schema" 8 9 "github.com/awslabs/aws-sdk-go/aws" 10 "github.com/awslabs/aws-sdk-go/aws/awserr" 11 "github.com/awslabs/aws-sdk-go/service/ec2" 12 ) 13 14 func resourceAwsKeyPair() *schema.Resource { 15 return &schema.Resource{ 16 Create: resourceAwsKeyPairCreate, 17 Read: resourceAwsKeyPairRead, 18 Update: nil, 19 Delete: resourceAwsKeyPairDelete, 20 21 Schema: map[string]*schema.Schema{ 22 "key_name": &schema.Schema{ 23 Type: schema.TypeString, 24 Optional: true, 25 Computed: true, 26 ForceNew: true, 27 }, 28 "public_key": &schema.Schema{ 29 Type: schema.TypeString, 30 Required: true, 31 ForceNew: true, 32 }, 33 "fingerprint": &schema.Schema{ 34 Type: schema.TypeString, 35 Computed: true, 36 }, 37 }, 38 } 39 } 40 41 func resourceAwsKeyPairCreate(d *schema.ResourceData, meta interface{}) error { 42 conn := meta.(*AWSClient).ec2conn 43 44 keyName := d.Get("key_name").(string) 45 if keyName == "" { 46 keyName = resource.UniqueId() 47 } 48 publicKey := d.Get("public_key").(string) 49 req := &ec2.ImportKeyPairInput{ 50 KeyName: aws.String(keyName), 51 PublicKeyMaterial: []byte(publicKey), 52 } 53 resp, err := conn.ImportKeyPair(req) 54 if err != nil { 55 return fmt.Errorf("Error import KeyPair: %s", err) 56 } 57 58 d.SetId(*resp.KeyName) 59 return nil 60 } 61 62 func resourceAwsKeyPairRead(d *schema.ResourceData, meta interface{}) error { 63 conn := meta.(*AWSClient).ec2conn 64 req := &ec2.DescribeKeyPairsInput{ 65 KeyNames: []*string{aws.String(d.Id())}, 66 } 67 resp, err := conn.DescribeKeyPairs(req) 68 if err != nil { 69 awsErr, ok := err.(awserr.Error) 70 if ok && awsErr.Code() == "InvalidKeyPair.NotFound" { 71 d.SetId("") 72 return nil 73 } 74 return fmt.Errorf("Error retrieving KeyPair: %s", err) 75 } 76 77 for _, keyPair := range resp.KeyPairs { 78 if *keyPair.KeyName == d.Id() { 79 d.Set("key_name", keyPair.KeyName) 80 d.Set("fingerprint", keyPair.KeyFingerprint) 81 return nil 82 } 83 } 84 85 return fmt.Errorf("Unable to find key pair within: %#v", resp.KeyPairs) 86 } 87 88 func resourceAwsKeyPairDelete(d *schema.ResourceData, meta interface{}) error { 89 conn := meta.(*AWSClient).ec2conn 90 91 _, err := conn.DeleteKeyPair(&ec2.DeleteKeyPairInput{ 92 KeyName: aws.String(d.Id()), 93 }) 94 return err 95 }