From 6da6a49d502f028e9234167dbcc54a094b74797b Mon Sep 17 00:00:00 2001 From: Julien Duchesne Date: Thu, 9 Nov 2017 11:29:15 -0500 Subject: [PATCH] Include the import for ssm_parameter as suggested by jduchesne --- aws/import_aws_ssm_parameter_test.go | 32 ++++++++++++++++++++++ aws/resource_aws_ssm_parameter.go | 30 +++++++++++--------- website/docs/r/ssm_parameter.html.markdown | 8 ++++++ 3 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 aws/import_aws_ssm_parameter_test.go diff --git a/aws/import_aws_ssm_parameter_test.go b/aws/import_aws_ssm_parameter_test.go new file mode 100644 index 000000000000..fc1a2c79f7a2 --- /dev/null +++ b/aws/import_aws_ssm_parameter_test.go @@ -0,0 +1,32 @@ +package aws + +import ( + "testing" + + "github.com/hashicorp/terraform/helper/acctest" + "github.com/hashicorp/terraform/helper/resource" +) + +func TestAccAWSSSMParameter_importBasic(t *testing.T) { + resourceName := "aws_ssm_parameter.foo" + randName := acctest.RandString(5) + randValue := acctest.RandString(5) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSSSMParameterDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSSSMParameterBasicConfig(randName, randValue), + }, + + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"overwrite"}, + }, + }, + }) +} diff --git a/aws/resource_aws_ssm_parameter.go b/aws/resource_aws_ssm_parameter.go index 9348df48a0df..b289799745a3 100644 --- a/aws/resource_aws_ssm_parameter.go +++ b/aws/resource_aws_ssm_parameter.go @@ -1,6 +1,7 @@ package aws import ( + "fmt" "log" "strings" @@ -17,6 +18,9 @@ func resourceAwsSsmParameter() *schema.Resource { Update: resourceAwsSsmParameterPut, Delete: resourceAwsSsmParameterDelete, Exists: resourceAwsSmmParameterExists, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, Schema: map[string]*schema.Schema{ "name": { @@ -58,10 +62,10 @@ func resourceAwsSsmParameter() *schema.Resource { } func resourceAwsSmmParameterExists(d *schema.ResourceData, meta interface{}) (bool, error) { - conn := meta.(*AWSClient).ssmconn + ssmconn := meta.(*AWSClient).ssmconn - resp, err := conn.GetParameters(&ssm.GetParametersInput{ - Names: []*string{aws.String(d.Get("name").(string))}, + resp, err := ssmconn.GetParameters(&ssm.GetParametersInput{ + Names: []*string{aws.String(d.Id())}, WithDecryption: aws.Bool(true), }) @@ -72,12 +76,12 @@ func resourceAwsSmmParameterExists(d *schema.ResourceData, meta interface{}) (bo } func resourceAwsSsmParameterRead(d *schema.ResourceData, meta interface{}) error { - conn := meta.(*AWSClient).ssmconn + ssmconn := meta.(*AWSClient).ssmconn log.Printf("[DEBUG] Reading SSM Parameter: %s", d.Id()) - resp, err := conn.GetParameters(&ssm.GetParametersInput{ - Names: []*string{aws.String(d.Get("name").(string))}, + resp, err := ssmconn.GetParameters(&ssm.GetParametersInput{ + Names: []*string{aws.String(d.Id())}, WithDecryption: aws.Bool(true), }) if err != nil { @@ -89,7 +93,7 @@ func resourceAwsSsmParameterRead(d *schema.ResourceData, meta interface{}) error d.Set("type", param.Type) d.Set("value", param.Value) - respDetailed, err := conn.DescribeParameters(&ssm.DescribeParametersInput{ + respDetailed, err := ssmconn.DescribeParameters(&ssm.DescribeParametersInput{ Filters: []*ssm.ParametersFilter{ &ssm.ParametersFilter{ Key: aws.String("Name"), @@ -116,7 +120,7 @@ func resourceAwsSsmParameterRead(d *schema.ResourceData, meta interface{}) error d.Set("description", detail.Description) d.Set("allowed_pattern", detail.AllowedPattern) - if tagList, err := conn.ListTagsForResource(&ssm.ListTagsForResourceInput{ + if tagList, err := ssmconn.ListTagsForResource(&ssm.ListTagsForResourceInput{ ResourceId: aws.String(d.Get("name").(string)), ResourceType: aws.String("Parameter"), }); err != nil { @@ -129,11 +133,11 @@ func resourceAwsSsmParameterRead(d *schema.ResourceData, meta interface{}) error } func resourceAwsSsmParameterDelete(d *schema.ResourceData, meta interface{}) error { - conn := meta.(*AWSClient).ssmconn + ssmconn := meta.(*AWSClient).ssmconn log.Printf("[INFO] Deleting SSM Parameter: %s", d.Id()) - _, err := conn.DeleteParameter(&ssm.DeleteParameterInput{ + _, err := ssmconn.DeleteParameter(&ssm.DeleteParameterInput{ Name: aws.String(d.Get("name").(string)), }) if err != nil { @@ -145,7 +149,7 @@ func resourceAwsSsmParameterDelete(d *schema.ResourceData, meta interface{}) err } func resourceAwsSsmParameterPut(d *schema.ResourceData, meta interface{}) error { - conn := meta.(*AWSClient).ssmconn + ssmconn := meta.(*AWSClient).ssmconn log.Printf("[INFO] Creating SSM Parameter: %s", d.Get("name").(string)) @@ -171,11 +175,11 @@ func resourceAwsSsmParameterPut(d *schema.ResourceData, meta interface{}) error } log.Printf("[DEBUG] Waiting for SSM Parameter %v to be updated", d.Get("name")) - if _, err := conn.PutParameter(paramInput); err != nil { + if _, err := ssmconn.PutParameter(paramInput); err != nil { return errwrap.Wrapf("[ERROR] Error creating SSM parameter: {{err}}", err) } - if err := setTagsSSM(conn, d, d.Get("name").(string), "Parameter"); err != nil { + if err := setTagsSSM(ssmconn, d, d.Get("name").(string), "Parameter"); err != nil { return errwrap.Wrapf("[ERROR] Error creating SSM parameter tags: {{err}}", err) } diff --git a/website/docs/r/ssm_parameter.html.markdown b/website/docs/r/ssm_parameter.html.markdown index 2c436fd9b5d8..953576e9f4e2 100644 --- a/website/docs/r/ssm_parameter.html.markdown +++ b/website/docs/r/ssm_parameter.html.markdown @@ -74,3 +74,11 @@ The following attributes are exported: * `description` - (Required) The description of the parameter. * `type` - (Required) The type of the parameter. Valid types are `String`, `StringList` and `SecureString`. * `value` - (Required) The value of the parameter. + +## Import + +SSM Parameters can be imported using the `parameter store name`, e.g. + +``` +$ terraform import aws_ssm_parameter.my_param /my_path/my_paramname +```