From 96f2bb55234ab8a5ac3dee36d36727a0711f889b Mon Sep 17 00:00:00 2001 From: Ryn Daniels Date: Wed, 24 Jul 2019 16:44:20 +0200 Subject: [PATCH 1/4] Add WAF IP set data source --- aws/data_source_aws_waf_ipset.go | 58 ++++++++++++++++++++++++++ aws/data_source_aws_waf_ipset_test.go | 51 ++++++++++++++++++++++ aws/provider.go | 1 + website/aws.erb | 6 +++ website/docs/d/waf_ipset.html.markdown | 30 +++++++++++++ 5 files changed, 146 insertions(+) create mode 100644 aws/data_source_aws_waf_ipset.go create mode 100644 aws/data_source_aws_waf_ipset_test.go create mode 100644 website/docs/d/waf_ipset.html.markdown diff --git a/aws/data_source_aws_waf_ipset.go b/aws/data_source_aws_waf_ipset.go new file mode 100644 index 000000000000..fc01fd947413 --- /dev/null +++ b/aws/data_source_aws_waf_ipset.go @@ -0,0 +1,58 @@ +package aws + +import ( + "fmt" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/waf" + "github.com/hashicorp/terraform/helper/schema" +) + +func dataSourceAwsWafIpSet() *schema.Resource { + return &schema.Resource{ + Read: dataSourceAWSWafIpSetRead, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + }, + }, + } +} + +func dataSourceAWSWafIpSetRead(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*AWSClient).wafconn + name := d.Get("name").(string) + + ipsets := make([]*waf.IPSetSummary, 0) + // ListIPSetsInput does not have a name parameter for filtering or a paginator + input := &waf.ListIPSetsInput{} + for { + output, err := conn.ListIPSets(input) + if err != nil { + return fmt.Errorf("Error reading WAF IP sets: %s", err) + } + for _, ipset := range output.IPSets { + if aws.StringValue(ipset.Name) == name { + ipsets = append(ipsets, ipset) + } + } + + if output.NextMarker == nil { + break + } + input.NextMarker = output.NextMarker + } + + if len(ipsets) == 0 { + return fmt.Errorf("WAF IP Set not found for name: %s", name) + } + if len(ipsets) > 1 { + return fmt.Errorf("Multiple WAF IP Sets found for name: %s", name) + } + + ipset := ipsets[0] + d.SetId(aws.StringValue(ipset.IPSetId)) + + return nil +} diff --git a/aws/data_source_aws_waf_ipset_test.go b/aws/data_source_aws_waf_ipset_test.go new file mode 100644 index 000000000000..e6c90d9dec20 --- /dev/null +++ b/aws/data_source_aws_waf_ipset_test.go @@ -0,0 +1,51 @@ +package aws + +import ( + "fmt" + "github.com/hashicorp/terraform/helper/acctest" + "regexp" + "testing" + + "github.com/hashicorp/terraform/helper/resource" +) + +func TestAccDataSourceAwsIPSet_Basic(t *testing.T) { + name := acctest.RandomWithPrefix("tf-acc-test") + resourceName := "aws_waf_ipset.ipset" + datasourceName := "data.aws_waf_ipset.ipset" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceAwsWafIPSet_NonExistent, + ExpectError: regexp.MustCompile(`WAF IP Set not found`), + }, + { + Config: testAccDataSourceAwsWafIPSet_Name(name), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrPair(datasourceName, "id", resourceName, "id"), + resource.TestCheckResourceAttrPair(datasourceName, "name", resourceName, "name"), + ), + }, + }, + }) +} + +func testAccDataSourceAwsWafIPSet_Name(name string) string { + return fmt.Sprintf(` +resource "aws_waf_ipset" "ipset" { + name = %[1]q +} +data "aws_waf_ipset" "ipset" { + name = "${aws_waf_ipset.ipset.name}" +} +`, name) +} + +const testAccDataSourceAwsWafIPSet_NonExistent = ` +data "aws_waf_ipset" "ipset" { + name = "tf-acc-test-does-not-exist" +} +` diff --git a/aws/provider.go b/aws/provider.go index ab25fd228cba..adea1ec6fae3 100644 --- a/aws/provider.go +++ b/aws/provider.go @@ -273,6 +273,7 @@ func Provider() terraform.ResourceProvider { "aws_vpc_endpoint_service": dataSourceAwsVpcEndpointService(), "aws_vpc_peering_connection": dataSourceAwsVpcPeeringConnection(), "aws_vpn_gateway": dataSourceAwsVpnGateway(), + "aws_waf_ipset": dataSourceAwsWafIpSet(), "aws_waf_rule": dataSourceAwsWafRule(), "aws_waf_web_acl": dataSourceAwsWafWebAcl(), "aws_wafregional_rule": dataSourceAwsWafRegionalRule(), diff --git a/website/aws.erb b/website/aws.erb index d2c6cb0769a7..b387a2e2829c 100644 --- a/website/aws.erb +++ b/website/aws.erb @@ -3094,6 +3094,12 @@
  • aws_waf_web_acl
  • +
  • + aws_waf_ipset +
  • +
  • + aws_waf_rule +
  • diff --git a/website/docs/d/waf_ipset.html.markdown b/website/docs/d/waf_ipset.html.markdown new file mode 100644 index 000000000000..19a1b098de85 --- /dev/null +++ b/website/docs/d/waf_ipset.html.markdown @@ -0,0 +1,30 @@ +--- +layout: "aws" +page_title: "AWS: aws_waf_ipset" +sidebar_current: "docs-aws-datasource-waf-ipset" +description: |- + Retrieves an AWS WAF IP set id. +--- + +# Data Source: aws_waf_ipset + +`aws_waf_ipset` Retrieves a WAF IP Set Resource Id. + +## Example Usage + +```hcl +data "aws_waf_ipset" "example" { + name = "tfWAFIPSet" +} +``` + +## Argument Reference + +The following arguments are supported: + +* `name` - (Required) The name of the WAF IP set. + +## Attributes Reference +In addition to all arguments above, the following attributes are exported: + +* `id` - The ID of the WAF IP set. \ No newline at end of file From 73258c6f8b10b27f3cbb3734cef7a47166b4d1ab Mon Sep 17 00:00:00 2001 From: Ryn Daniels Date: Wed, 24 Jul 2019 16:56:15 +0200 Subject: [PATCH 2/4] Fix the test name --- aws/data_source_aws_waf_ipset_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws/data_source_aws_waf_ipset_test.go b/aws/data_source_aws_waf_ipset_test.go index e6c90d9dec20..30fb6343fe21 100644 --- a/aws/data_source_aws_waf_ipset_test.go +++ b/aws/data_source_aws_waf_ipset_test.go @@ -9,7 +9,7 @@ import ( "github.com/hashicorp/terraform/helper/resource" ) -func TestAccDataSourceAwsIPSet_Basic(t *testing.T) { +func TestAccDataSourceAwsWafIPSet_Basic(t *testing.T) { name := acctest.RandomWithPrefix("tf-acc-test") resourceName := "aws_waf_ipset.ipset" datasourceName := "data.aws_waf_ipset.ipset" From 243f2cf431c6e1e05a247456b058e99bc5a3dc45 Mon Sep 17 00:00:00 2001 From: Ryn Daniels Date: Wed, 24 Jul 2019 17:47:08 +0100 Subject: [PATCH 3/4] Update aws/data_source_aws_waf_ipset_test.go Co-Authored-By: Brian Flad --- aws/data_source_aws_waf_ipset_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws/data_source_aws_waf_ipset_test.go b/aws/data_source_aws_waf_ipset_test.go index 30fb6343fe21..8851b5642287 100644 --- a/aws/data_source_aws_waf_ipset_test.go +++ b/aws/data_source_aws_waf_ipset_test.go @@ -36,7 +36,7 @@ func TestAccDataSourceAwsWafIPSet_Basic(t *testing.T) { func testAccDataSourceAwsWafIPSet_Name(name string) string { return fmt.Sprintf(` resource "aws_waf_ipset" "ipset" { - name = %[1]q + name = %[1]q } data "aws_waf_ipset" "ipset" { name = "${aws_waf_ipset.ipset.name}" From 015cc8f0cb5e8b8d696a8c6ea619035215bf1fc9 Mon Sep 17 00:00:00 2001 From: Ryn Daniels Date: Wed, 24 Jul 2019 19:21:12 +0200 Subject: [PATCH 4/4] Import ordering --- aws/data_source_aws_waf_ipset.go | 1 + aws/data_source_aws_waf_ipset_test.go | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/aws/data_source_aws_waf_ipset.go b/aws/data_source_aws_waf_ipset.go index fc01fd947413..8b07bf235e29 100644 --- a/aws/data_source_aws_waf_ipset.go +++ b/aws/data_source_aws_waf_ipset.go @@ -2,6 +2,7 @@ package aws import ( "fmt" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/waf" "github.com/hashicorp/terraform/helper/schema" diff --git a/aws/data_source_aws_waf_ipset_test.go b/aws/data_source_aws_waf_ipset_test.go index 8851b5642287..892a9076da47 100644 --- a/aws/data_source_aws_waf_ipset_test.go +++ b/aws/data_source_aws_waf_ipset_test.go @@ -2,10 +2,10 @@ package aws import ( "fmt" - "github.com/hashicorp/terraform/helper/acctest" "regexp" "testing" + "github.com/hashicorp/terraform/helper/acctest" "github.com/hashicorp/terraform/helper/resource" )