github.com/nicgrayson/terraform@v0.4.3-0.20150415203910-c4de50829380/builtin/providers/aws/resource_aws_key_pair.go (about)

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