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