github.com/i0n/terraform@v0.4.3-0.20150506151324-010a39a58ec1/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/service/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  				Optional: true,
    24  				Computed: true,
    25  				ForceNew: true,
    26  			},
    27  			"public_key": &schema.Schema{
    28  				Type:     schema.TypeString,
    29  				Required: true,
    30  				ForceNew: true,
    31  			},
    32  			"fingerprint": &schema.Schema{
    33  				Type:     schema.TypeString,
    34  				Computed: true,
    35  			},
    36  		},
    37  	}
    38  }
    39  
    40  func resourceAwsKeyPairCreate(d *schema.ResourceData, meta interface{}) error {
    41  	conn := meta.(*AWSClient).ec2conn
    42  
    43  	keyName := d.Get("key_name").(string)
    44  	if keyName == "" {
    45  		keyName = resource.UniqueId()
    46  	}
    47  	publicKey := d.Get("public_key").(string)
    48  	req := &ec2.ImportKeyPairInput{
    49  		KeyName:           aws.String(keyName),
    50  		PublicKeyMaterial: []byte(publicKey),
    51  	}
    52  	resp, err := conn.ImportKeyPair(req)
    53  	if err != nil {
    54  		return fmt.Errorf("Error import KeyPair: %s", err)
    55  	}
    56  
    57  	d.SetId(*resp.KeyName)
    58  	return nil
    59  }
    60  
    61  func resourceAwsKeyPairRead(d *schema.ResourceData, meta interface{}) error {
    62  	conn := meta.(*AWSClient).ec2conn
    63  	req := &ec2.DescribeKeyPairsInput{
    64  		KeyNames: []*string{aws.String(d.Id())},
    65  	}
    66  	resp, err := conn.DescribeKeyPairs(req)
    67  	if err != nil {
    68  		return fmt.Errorf("Error retrieving KeyPair: %s", err)
    69  	}
    70  
    71  	for _, keyPair := range resp.KeyPairs {
    72  		if *keyPair.KeyName == d.Id() {
    73  			d.Set("key_name", keyPair.KeyName)
    74  			d.Set("fingerprint", keyPair.KeyFingerprint)
    75  			return nil
    76  		}
    77  	}
    78  
    79  	return fmt.Errorf("Unable to find key pair within: %#v", resp.KeyPairs)
    80  }
    81  
    82  func resourceAwsKeyPairDelete(d *schema.ResourceData, meta interface{}) error {
    83  	conn := meta.(*AWSClient).ec2conn
    84  
    85  	_, err := conn.DeleteKeyPair(&ec2.DeleteKeyPairInput{
    86  		KeyName: aws.String(d.Id()),
    87  	})
    88  	return err
    89  }