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 }