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  }