diff --git a/aws/resource_aws_waf_size_constraint_set.go b/aws/resource_aws_waf_size_constraint_set.go index deb78c7a9651..f14ee9ddb527 100644 --- a/aws/resource_aws_waf_size_constraint_set.go +++ b/aws/resource_aws_waf_size_constraint_set.go @@ -5,6 +5,7 @@ import ( "log" "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/arn" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/service/waf" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" @@ -16,6 +17,9 @@ func resourceAwsWafSizeConstraintSet() *schema.Resource { Read: resourceAwsWafSizeConstraintSetRead, Update: resourceAwsWafSizeConstraintSetUpdate, Delete: resourceAwsWafSizeConstraintSetDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, Schema: wafSizeConstraintSetSchema(), } @@ -54,7 +58,7 @@ func resourceAwsWafSizeConstraintSetRead(d *schema.ResourceData, meta interface{ resp, err := conn.GetSizeConstraintSet(params) if err != nil { - if awsErr, ok := err.(awserr.Error); ok && awsErr.Code() == "WAFNonexistentItemException" { + if awsErr, ok := err.(awserr.Error); ok && awsErr.Code() == waf.ErrCodeNonexistentItemException { log.Printf("[WARN] WAF SizeConstraintSet (%s) not found, removing from state", d.Id()) d.SetId("") return nil @@ -66,6 +70,14 @@ func resourceAwsWafSizeConstraintSetRead(d *schema.ResourceData, meta interface{ d.Set("name", resp.SizeConstraintSet.Name) d.Set("size_constraints", flattenWafSizeConstraints(resp.SizeConstraintSet.SizeConstraints)) + arn := arn.ARN{ + Partition: meta.(*AWSClient).partition, + Service: "waf", + AccountID: meta.(*AWSClient).accountid, + Resource: fmt.Sprintf("sizeconstraintset/%s", d.Id()), + } + d.Set("arn", arn.String()) + return nil } diff --git a/aws/resource_aws_waf_size_constraint_set_test.go b/aws/resource_aws_waf_size_constraint_set_test.go index 374793a5185b..a506cc44d873 100644 --- a/aws/resource_aws_waf_size_constraint_set_test.go +++ b/aws/resource_aws_waf_size_constraint_set_test.go @@ -2,6 +2,7 @@ package aws import ( "fmt" + "regexp" "testing" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" @@ -16,6 +17,7 @@ import ( func TestAccAWSWafSizeConstraintSet_basic(t *testing.T) { var v waf.SizeConstraintSet sizeConstraintSet := fmt.Sprintf("sizeConstraintSet-%s", acctest.RandString(5)) + resourceName := "aws_waf_size_constraint_set.size_constraint_set" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSWaf(t) }, @@ -25,25 +27,23 @@ func TestAccAWSWafSizeConstraintSet_basic(t *testing.T) { { Config: testAccAWSWafSizeConstraintSetConfig(sizeConstraintSet), Check: resource.ComposeTestCheckFunc( - testAccCheckAWSWafSizeConstraintSetExists("aws_waf_size_constraint_set.size_constraint_set", &v), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "name", sizeConstraintSet), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.#", "1"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.2029852522.comparison_operator", "EQ"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.2029852522.field_to_match.#", "1"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.2029852522.field_to_match.281401076.data", ""), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.2029852522.field_to_match.281401076.type", "BODY"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.2029852522.size", "4096"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.2029852522.text_transformation", "NONE"), + testAccCheckAWSWafSizeConstraintSetExists(resourceName, &v), + testAccMatchResourceAttrGlobalARN(resourceName, "arn", "waf", regexp.MustCompile(`sizeconstraintset/.+`)), + resource.TestCheckResourceAttr(resourceName, "name", sizeConstraintSet), + resource.TestCheckResourceAttr(resourceName, "size_constraints.#", "1"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.2029852522.comparison_operator", "EQ"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.2029852522.field_to_match.#", "1"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.2029852522.field_to_match.281401076.data", ""), + resource.TestCheckResourceAttr(resourceName, "size_constraints.2029852522.field_to_match.281401076.type", "BODY"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.2029852522.size", "4096"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.2029852522.text_transformation", "NONE"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, }, }) } @@ -52,6 +52,7 @@ func TestAccAWSWafSizeConstraintSet_changeNameForceNew(t *testing.T) { var before, after waf.SizeConstraintSet sizeConstraintSet := fmt.Sprintf("sizeConstraintSet-%s", acctest.RandString(5)) sizeConstraintSetNewName := fmt.Sprintf("sizeConstraintSet-%s", acctest.RandString(5)) + resourceName := "aws_waf_size_constraint_set.size_constraint_set" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSWaf(t) }, @@ -61,23 +62,24 @@ func TestAccAWSWafSizeConstraintSet_changeNameForceNew(t *testing.T) { { Config: testAccAWSWafSizeConstraintSetConfig(sizeConstraintSet), Check: resource.ComposeTestCheckFunc( - testAccCheckAWSWafSizeConstraintSetExists("aws_waf_size_constraint_set.size_constraint_set", &before), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "name", sizeConstraintSet), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.#", "1"), + testAccCheckAWSWafSizeConstraintSetExists(resourceName, &before), + resource.TestCheckResourceAttr(resourceName, "name", sizeConstraintSet), + resource.TestCheckResourceAttr(resourceName, "size_constraints.#", "1"), ), }, { Config: testAccAWSWafSizeConstraintSetConfigChangeName(sizeConstraintSetNewName), Check: resource.ComposeTestCheckFunc( - testAccCheckAWSWafSizeConstraintSetExists("aws_waf_size_constraint_set.size_constraint_set", &after), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "name", sizeConstraintSetNewName), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.#", "1"), + testAccCheckAWSWafSizeConstraintSetExists(resourceName, &after), + resource.TestCheckResourceAttr(resourceName, "name", sizeConstraintSetNewName), + resource.TestCheckResourceAttr(resourceName, "size_constraints.#", "1"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, }, }) } @@ -85,6 +87,7 @@ func TestAccAWSWafSizeConstraintSet_changeNameForceNew(t *testing.T) { func TestAccAWSWafSizeConstraintSet_disappears(t *testing.T) { var v waf.SizeConstraintSet sizeConstraintSet := fmt.Sprintf("sizeConstraintSet-%s", acctest.RandString(5)) + resourceName := "aws_waf_size_constraint_set.size_constraint_set" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSWaf(t) }, @@ -94,7 +97,7 @@ func TestAccAWSWafSizeConstraintSet_disappears(t *testing.T) { { Config: testAccAWSWafSizeConstraintSetConfig(sizeConstraintSet), Check: resource.ComposeTestCheckFunc( - testAccCheckAWSWafSizeConstraintSetExists("aws_waf_size_constraint_set.size_constraint_set", &v), + testAccCheckAWSWafSizeConstraintSetExists(resourceName, &v), testAccCheckAWSWafSizeConstraintSetDisappears(&v), ), ExpectNonEmptyPlan: true, @@ -106,6 +109,7 @@ func TestAccAWSWafSizeConstraintSet_disappears(t *testing.T) { func TestAccAWSWafSizeConstraintSet_changeConstraints(t *testing.T) { var before, after waf.SizeConstraintSet setName := fmt.Sprintf("sizeConstraintSet-%s", acctest.RandString(5)) + resourceName := "aws_waf_size_constraint_set.size_constraint_set" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSWaf(t) }, @@ -115,47 +119,36 @@ func TestAccAWSWafSizeConstraintSet_changeConstraints(t *testing.T) { { Config: testAccAWSWafSizeConstraintSetConfig(setName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckAWSWafSizeConstraintSetExists("aws_waf_size_constraint_set.size_constraint_set", &before), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "name", setName), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.#", "1"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.2029852522.comparison_operator", "EQ"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.2029852522.field_to_match.#", "1"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.2029852522.field_to_match.281401076.data", ""), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.2029852522.field_to_match.281401076.type", "BODY"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.2029852522.size", "4096"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.2029852522.text_transformation", "NONE"), + testAccCheckAWSWafSizeConstraintSetExists(resourceName, &before), + resource.TestCheckResourceAttr(resourceName, "name", setName), + resource.TestCheckResourceAttr(resourceName, "size_constraints.#", "1"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.2029852522.comparison_operator", "EQ"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.2029852522.field_to_match.#", "1"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.2029852522.field_to_match.281401076.data", ""), + resource.TestCheckResourceAttr(resourceName, "size_constraints.2029852522.field_to_match.281401076.type", "BODY"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.2029852522.size", "4096"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.2029852522.text_transformation", "NONE"), ), }, { Config: testAccAWSWafSizeConstraintSetConfig_changeConstraints(setName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckAWSWafSizeConstraintSetExists("aws_waf_size_constraint_set.size_constraint_set", &after), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "name", setName), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.#", "1"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.3222308386.comparison_operator", "GE"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.3222308386.field_to_match.#", "1"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.3222308386.field_to_match.281401076.data", ""), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.3222308386.field_to_match.281401076.type", "BODY"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.3222308386.size", "1024"), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.3222308386.text_transformation", "NONE"), + testAccCheckAWSWafSizeConstraintSetExists(resourceName, &after), + resource.TestCheckResourceAttr(resourceName, "name", setName), + resource.TestCheckResourceAttr(resourceName, "size_constraints.#", "1"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.3222308386.comparison_operator", "GE"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.3222308386.field_to_match.#", "1"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.3222308386.field_to_match.281401076.data", ""), + resource.TestCheckResourceAttr(resourceName, "size_constraints.3222308386.field_to_match.281401076.type", "BODY"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.3222308386.size", "1024"), + resource.TestCheckResourceAttr(resourceName, "size_constraints.3222308386.text_transformation", "NONE"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, }, }) } @@ -163,6 +156,7 @@ func TestAccAWSWafSizeConstraintSet_changeConstraints(t *testing.T) { func TestAccAWSWafSizeConstraintSet_noConstraints(t *testing.T) { var contraints waf.SizeConstraintSet setName := fmt.Sprintf("sizeConstraintSet-%s", acctest.RandString(5)) + resourceName := "aws_waf_size_constraint_set.size_constraint_set" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t); testAccPreCheckAWSWaf(t) }, @@ -172,13 +166,16 @@ func TestAccAWSWafSizeConstraintSet_noConstraints(t *testing.T) { { Config: testAccAWSWafSizeConstraintSetConfig_noConstraints(setName), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckAWSWafSizeConstraintSetExists("aws_waf_size_constraint_set.size_constraint_set", &contraints), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "name", setName), - resource.TestCheckResourceAttr( - "aws_waf_size_constraint_set.size_constraint_set", "size_constraints.#", "0"), + testAccCheckAWSWafSizeConstraintSetExists(resourceName, &contraints), + resource.TestCheckResourceAttr(resourceName, "name", setName), + resource.TestCheckResourceAttr(resourceName, "size_constraints.#", "0"), ), }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, }, }) } @@ -273,7 +270,7 @@ func testAccCheckAWSWafSizeConstraintSetDestroy(s *terraform.State) error { // Return nil if the SizeConstraintSet is already destroyed if awsErr, ok := err.(awserr.Error); ok { - if awsErr.Code() == "WAFNonexistentItemException" { + if awsErr.Code() == waf.ErrCodeNonexistentItemException { return nil } } diff --git a/aws/waf_helpers.go b/aws/waf_helpers.go index 0e7b3437536a..917f44f480f6 100644 --- a/aws/waf_helpers.go +++ b/aws/waf_helpers.go @@ -18,7 +18,10 @@ func wafSizeConstraintSetSchema() map[string]*schema.Schema { Required: true, ForceNew: true, }, - + "arn": { + Type: schema.TypeString, + Computed: true, + }, "size_constraints": { Type: schema.TypeSet, Optional: true, diff --git a/website/docs/r/waf_size_constraint_set.html.markdown b/website/docs/r/waf_size_constraint_set.html.markdown index 20f212b2996e..3a9cc837c7c3 100644 --- a/website/docs/r/waf_size_constraint_set.html.markdown +++ b/website/docs/r/waf_size_constraint_set.html.markdown @@ -69,3 +69,12 @@ The following arguments are supported: In addition to all arguments above, the following attributes are exported: * `id` - The ID of the WAF Size Constraint Set. +* `arn` - Amazon Resource Name (ARN) + +## Import + +AWS WAF Size Constraint Set can be imported using their ID, e.g. + +``` +$ terraform import aws_waf_size_constraint_set.example a1b2c3d4-d5f6-7777-8888-9999aaaabbbbcccc +```