github.com/anuaimi/terraform@v0.6.4-0.20150904235404-2bf9aec61da8/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/aws/aws-sdk-go/aws"
    10  	"github.com/aws/aws-sdk-go/aws/awserr"
    11  	"github.com/aws/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  }