github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/aws/resource_aws_ssm_parameter.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/aws/aws-sdk-go/aws"
     8  	"github.com/aws/aws-sdk-go/service/ssm"
     9  	"github.com/hashicorp/errwrap"
    10  	"github.com/hashicorp/terraform/helper/schema"
    11  )
    12  
    13  func resourceAwsSsmParameter() *schema.Resource {
    14  	return &schema.Resource{
    15  		Create: resourceAwsSsmParameterCreate,
    16  		Read:   resourceAwsSsmParameterRead,
    17  		Update: resourceAwsSsmParameterUpdate,
    18  		Delete: resourceAwsSsmParameterDelete,
    19  
    20  		Schema: map[string]*schema.Schema{
    21  			"name": {
    22  				Type:     schema.TypeString,
    23  				Required: true,
    24  			},
    25  			"type": {
    26  				Type:         schema.TypeString,
    27  				Required:     true,
    28  				ForceNew:     true,
    29  				ValidateFunc: validateSsmParameterType,
    30  			},
    31  			"value": {
    32  				Type:      schema.TypeString,
    33  				Required:  true,
    34  				Sensitive: true,
    35  			},
    36  			"key_id": {
    37  				Type:     schema.TypeString,
    38  				Optional: true,
    39  				ForceNew: true,
    40  			},
    41  		},
    42  	}
    43  }
    44  
    45  func resourceAwsSsmParameterCreate(d *schema.ResourceData, meta interface{}) error {
    46  	return putAwsSSMParameter(d, meta)
    47  }
    48  
    49  func resourceAwsSsmParameterRead(d *schema.ResourceData, meta interface{}) error {
    50  	ssmconn := meta.(*AWSClient).ssmconn
    51  
    52  	log.Printf("[DEBUG] Reading SSM Parameter: %s", d.Id())
    53  
    54  	paramInput := &ssm.GetParametersInput{
    55  		Names: []*string{
    56  			aws.String(d.Get("name").(string)),
    57  		},
    58  		WithDecryption: aws.Bool(true),
    59  	}
    60  
    61  	resp, err := ssmconn.GetParameters(paramInput)
    62  
    63  	if err != nil {
    64  		return errwrap.Wrapf("[ERROR] Error describing SSM parameter: {{err}}", err)
    65  	}
    66  
    67  	if len(resp.InvalidParameters) > 0 {
    68  		return fmt.Errorf("[ERROR] SSM Parameter %s is invalid", d.Id())
    69  	}
    70  
    71  	param := resp.Parameters[0]
    72  	d.Set("name", param.Name)
    73  	d.Set("type", param.Type)
    74  	d.Set("value", param.Value)
    75  
    76  	return nil
    77  }
    78  
    79  func resourceAwsSsmParameterUpdate(d *schema.ResourceData, meta interface{}) error {
    80  	return putAwsSSMParameter(d, meta)
    81  }
    82  
    83  func resourceAwsSsmParameterDelete(d *schema.ResourceData, meta interface{}) error {
    84  	ssmconn := meta.(*AWSClient).ssmconn
    85  
    86  	log.Printf("[INFO] Deleting SSM Parameter: %s", d.Id())
    87  
    88  	paramInput := &ssm.DeleteParameterInput{
    89  		Name: aws.String(d.Get("name").(string)),
    90  	}
    91  
    92  	_, err := ssmconn.DeleteParameter(paramInput)
    93  	if err != nil {
    94  		return err
    95  	}
    96  
    97  	d.SetId("")
    98  
    99  	return nil
   100  }
   101  
   102  func putAwsSSMParameter(d *schema.ResourceData, meta interface{}) error {
   103  	ssmconn := meta.(*AWSClient).ssmconn
   104  
   105  	log.Printf("[INFO] Creating SSM Parameter: %s", d.Get("name").(string))
   106  
   107  	paramInput := &ssm.PutParameterInput{
   108  		Name:      aws.String(d.Get("name").(string)),
   109  		Type:      aws.String(d.Get("type").(string)),
   110  		Value:     aws.String(d.Get("value").(string)),
   111  		Overwrite: aws.Bool(!d.IsNewResource()),
   112  	}
   113  	if keyID, ok := d.GetOk("key_id"); ok {
   114  		log.Printf("[DEBUG] Setting key_id for SSM Parameter %s: %s", d.Get("name").(string), keyID.(string))
   115  		paramInput.SetKeyId(keyID.(string))
   116  	}
   117  
   118  	log.Printf("[DEBUG] Waiting for SSM Parameter %q to be updated", d.Get("name").(string))
   119  	_, err := ssmconn.PutParameter(paramInput)
   120  
   121  	if err != nil {
   122  		return errwrap.Wrapf("[ERROR] Error creating SSM parameter: {{err}}", err)
   123  	}
   124  
   125  	d.SetId(d.Get("name").(string))
   126  
   127  	return resourceAwsSsmParameterRead(d, meta)
   128  }