From 629e734bd977dcbaffaa1439e80ca28067b982d7 Mon Sep 17 00:00:00 2001 From: drewmullen Date: Fri, 30 Sep 2022 23:24:40 -0400 Subject: [PATCH 1/7] new ds ipam_pool_cidrs --- internal/provider/provider.go | 1 + .../ec2/ipam_pool_cidrs_data_source.go | 94 ++++++++++++++++ .../ec2/ipam_pool_cidrs_data_source_test.go | 102 ++++++++++++++++++ .../docs/d/vpc_ipam_pool_cidrs.html.markdown | 86 +++++++++++++++ 4 files changed, 283 insertions(+) create mode 100644 internal/service/ec2/ipam_pool_cidrs_data_source.go create mode 100644 internal/service/ec2/ipam_pool_cidrs_data_source_test.go create mode 100644 website/docs/d/vpc_ipam_pool_cidrs.html.markdown diff --git a/internal/provider/provider.go b/internal/provider/provider.go index c49bd366d3a8..bd6c2a0c9db1 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -592,6 +592,7 @@ func New(_ context.Context) (*schema.Provider, error) { "aws_vpc_endpoint_service": ec2.DataSourceVPCEndpointService(), "aws_vpc_endpoint": ec2.DataSourceVPCEndpoint(), "aws_vpc_ipam_pool": ec2.DataSourceIPAMPool(), + "aws_vpc_ipam_pool_cidrs": ec2.DataSourceIPAMPoolCidrs(), "aws_vpc_ipam_preview_next_cidr": ec2.DataSourceIPAMPreviewNextCIDR(), "aws_vpc_peering_connection": ec2.DataSourceVPCPeeringConnection(), "aws_vpc_peering_connections": ec2.DataSourceVPCPeeringConnections(), diff --git a/internal/service/ec2/ipam_pool_cidrs_data_source.go b/internal/service/ec2/ipam_pool_cidrs_data_source.go new file mode 100644 index 000000000000..71558c685262 --- /dev/null +++ b/internal/service/ec2/ipam_pool_cidrs_data_source.go @@ -0,0 +1,94 @@ +package ec2 + +import ( + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/ec2" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" +) + +func DataSourceIPAMPoolCidrs() *schema.Resource { + return &schema.Resource{ + Read: dataSourceIPAMPoolCidrsRead, + + Timeouts: &schema.ResourceTimeout{ + Read: schema.DefaultTimeout(1 * time.Minute), + }, + + Schema: map[string]*schema.Schema{ + "filter": DataSourceFiltersSchema(), + "ipam_pool_id": { + Type: schema.TypeString, + Required: true, + }, + // computed + "ipam_pool_cidrs": { + Type: schema.TypeSet, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "cidr": { + Type: schema.TypeString, + Computed: true, + }, + "state": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + }, + } +} + +func dataSourceIPAMPoolCidrsRead(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*conns.AWSClient).EC2Conn + + input := &ec2.GetIpamPoolCidrsInput{} + + if v, ok := d.GetOk("ipam_pool_id"); ok { + input.IpamPoolId = aws.String(v.(string)) + } + + filters, filtersOk := d.GetOk("filter") + if filtersOk { + input.Filters = BuildFiltersDataSource(filters.(*schema.Set)) + } + + output, err := conn.GetIpamPoolCidrs(input) + var cidrs []*ec2.IpamPoolCidr + + if err != nil { + return err + } + + if len(output.IpamPoolCidrs) == 0 || output.IpamPoolCidrs[0] == nil { + return tfresource.SingularDataSourceFindError("EC2 VPC IPAM POOL CIDRS", tfresource.NewEmptyResultError(input)) + } + + cidrs = output.IpamPoolCidrs + + d.SetId(d.Get("ipam_pool_id").(string)) + d.Set("ipam_pool_cidrs", flattenIPAMPoolCidrs(cidrs)) + + return nil +} + +func flattenIPAMPoolCidrs(c []*ec2.IpamPoolCidr) []interface{} { + cidrs := []interface{}{} + for _, cidr := range c { + cidrs = append(cidrs, flattenIPAMPoolCidr(cidr)) + } + return cidrs +} + +func flattenIPAMPoolCidr(c *ec2.IpamPoolCidr) map[string]interface{} { + cidr := make(map[string]interface{}) + cidr["cidr"] = aws.StringValue(c.Cidr) + cidr["state"] = aws.StringValue(c.State) + return cidr +} diff --git a/internal/service/ec2/ipam_pool_cidrs_data_source_test.go b/internal/service/ec2/ipam_pool_cidrs_data_source_test.go new file mode 100644 index 000000000000..6b5d3b9c6756 --- /dev/null +++ b/internal/service/ec2/ipam_pool_cidrs_data_source_test.go @@ -0,0 +1,102 @@ +package ec2_test + +import ( + "testing" + + "github.com/aws/aws-sdk-go/service/ec2" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" +) + +func TestAccIPAMPoolCidrsDataSource_basic(t *testing.T) { + dataSourceName := "data.aws_vpc_ipam_pool_cidrs.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(t); testAccIPAMPreCheck(t) }, + ErrorCheck: acctest.ErrorCheck(t, ec2.EndpointsID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + Steps: []resource.TestStep{ + { + Config: testAccIPAMPoolCidrsDataSourceConfig_BasicOneCidrs, + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr(dataSourceName, "ipam_pool_cidrs.#", "1"), + ), + }, + { + Config: testAccIPAMPoolCidrsDataSourceConfig_BasicTwoCidrs, + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr(dataSourceName, "ipam_pool_cidrs.#", "2"), + ), + }, + { + Config: testAccIPAMPoolCidrsDataSourceConfig_BasicTwoCidrsFiltered, + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr(dataSourceName, "ipam_pool_cidrs.#", "1"), + ), + }, + }, + }) +} + +var testAccIPAMPoolCidrsDataSourceConfig_BasicOneCidrs = acctest.ConfigCompose( + testAccIPAMPoolConfig_basic, ` +resource "aws_vpc_ipam_pool_cidr" "test" { + ipam_pool_id = aws_vpc_ipam_pool.test.id + cidr = "172.2.0.0/16" +} + +data "aws_vpc_ipam_pool_cidrs" "test" { + ipam_pool_id = aws_vpc_ipam_pool.test.id + depends_on = [ + aws_vpc_ipam_pool_cidr.test + ] +} +`) + +var testAccIPAMPoolCidrsDataSourceConfig_BasicTwoCidrs = acctest.ConfigCompose( + testAccIPAMPoolConfig_basic, ` + + +resource "aws_vpc_ipam_pool_cidr" "test" { + ipam_pool_id = aws_vpc_ipam_pool.test.id + cidr = "172.2.0.0/16" +} +resource "aws_vpc_ipam_pool_cidr" "testtwo" { + ipam_pool_id = aws_vpc_ipam_pool.test.id + cidr = "10.2.0.0/16" +} + +data "aws_vpc_ipam_pool_cidrs" "test" { + ipam_pool_id = aws_vpc_ipam_pool.test.id + depends_on = [ + aws_vpc_ipam_pool_cidr.test, + aws_vpc_ipam_pool_cidr.testtwo, + ] +} +`) + +var testAccIPAMPoolCidrsDataSourceConfig_BasicTwoCidrsFiltered = acctest.ConfigCompose( + testAccIPAMPoolConfig_basic, ` +resource "aws_vpc_ipam_pool_cidr" "test" { + ipam_pool_id = aws_vpc_ipam_pool.test.id + cidr = "172.2.0.0/16" +} +resource "aws_vpc_ipam_pool_cidr" "testtwo" { + ipam_pool_id = aws_vpc_ipam_pool.test.id + cidr = "10.2.0.0/16" +} + +data "aws_vpc_ipam_pool_cidrs" "test" { + ipam_pool_id = aws_vpc_ipam_pool.test.id + + filter { + name = "cidr" + values = ["10.*"] + } + + depends_on = [ + aws_vpc_ipam_pool_cidr.test, + aws_vpc_ipam_pool_cidr.testtwo, + ] +} +`) diff --git a/website/docs/d/vpc_ipam_pool_cidrs.html.markdown b/website/docs/d/vpc_ipam_pool_cidrs.html.markdown new file mode 100644 index 000000000000..d170e4b3bd87 --- /dev/null +++ b/website/docs/d/vpc_ipam_pool_cidrs.html.markdown @@ -0,0 +1,86 @@ +--- +subcategory: "VPC IPAM (IP Address Manager)" +layout: "aws" +page_title: "AWS: aws_vpc_ipam_pool_cidrs" +description: |- + Returns cidrs provisioned into an IPAM pool. +--- + +# Data Source: aws_vpc_ipam_pool_cidrs + +`aws_vpc_ipam_pool_cidrs` provides details about an IPAM pool. + +This resource can prove useful when an ipam pool was shared to your account and you want to know all (or a filtered list) of the CIDRs that are provisioned into the pool. + +## Example Usage + +Basic usage: + +```terraform +data "aws_vpc_ipam_pool_cidrs" "c" { + ipam_pool_id = "ipam-pool-123" +} +``` + +Filtering: + +```terraform +data "aws_vpc_ipam_pool_cidrs" "c" { + ipam_pool_id = "ipam-pool-123" + filter { + name = "cidr" + values = ["10.*"] + } +} + +locals { + mycidrs = [for cidr in data.aws_vpc_ipam_pool_cidrs.c.ipam_pool_cidrs : + cidr.cidr if + cidr.state == "provisioned"] +} + +resource "aws_ec2_managed_prefix_list" "pls" { + name = "IPAM Pool (${aws_vpc_ipam_pool.test.id}) Cidrs" + address_family = "IPv4" + max_entries = length(local.mycidrs) + + dynamic "entry" { + for_each = local.mycidrs + content { + cidr = entry.value + description = entry.value + } + } +} +``` + +## Argument Reference + +The arguments of this data source act as filters for querying the available +VPCs in the current region. The given filters must match exactly one +VPC whose data will be exported as attributes. + +* `ipam_pool_id` - ID of the IPAM pool you would like the list of provisioned CIDRs. +* `filter` - Custom filter block as described below. + +## Attributes Reference + +All of the argument attributes except `filter` blocks are also exported as +result attributes. This data source will complete the data by populating +any fields that are not included in the configuration with the data for +the selected IPAM Pool CIDRs. + +The following attribute is additionally exported: + +* `ipam_pool_cidrs` - The CIDRs provisioned into the IPAM pool, described below. + +### ipam_pool_cidrs + +* `cidr` - A network CIDR. +* `state` - The provisioning state of that CIDR. + +## Timeouts + +[Configuration options](https://www.terraform.io/docs/configuration/blocks/resources/syntax.html#operation-timeouts): + +- `read` - (Default `1m`) From a18598176b239592c9a677b3bb37dd99605d1a28 Mon Sep 17 00:00:00 2001 From: drewmullen Date: Fri, 30 Sep 2022 23:30:20 -0400 Subject: [PATCH 2/7] new ds vpc_ipam_pool_cidrs --- .changelog/27051.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/27051.txt diff --git a/.changelog/27051.txt b/.changelog/27051.txt new file mode 100644 index 000000000000..de0f5ff9ee88 --- /dev/null +++ b/.changelog/27051.txt @@ -0,0 +1,3 @@ +```release-note:new-data-source +aws_vpc_ipam_pool_cidrs +``` From 865a63e1d81bfcc49d4872f5c9c36914675497ea Mon Sep 17 00:00:00 2001 From: drewmullen Date: Fri, 30 Sep 2022 23:39:51 -0400 Subject: [PATCH 3/7] semgrep --- .../service/ec2/ipam_pool_cidrs_data_source.go | 14 +++++++------- .../ec2/ipam_pool_cidrs_data_source_test.go | 14 +++++++------- website/docs/d/vpc_ipam_pool_cidrs.html.markdown | 14 +++++++++++++- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/internal/service/ec2/ipam_pool_cidrs_data_source.go b/internal/service/ec2/ipam_pool_cidrs_data_source.go index 71558c685262..caa3640cd4c1 100644 --- a/internal/service/ec2/ipam_pool_cidrs_data_source.go +++ b/internal/service/ec2/ipam_pool_cidrs_data_source.go @@ -10,9 +10,9 @@ import ( "github.com/hashicorp/terraform-provider-aws/internal/tfresource" ) -func DataSourceIPAMPoolCidrs() *schema.Resource { +func DataSourceIPAMPoolCIDRs() *schema.Resource { return &schema.Resource{ - Read: dataSourceIPAMPoolCidrsRead, + Read: dataSourceIPAMPoolCIDRsRead, Timeouts: &schema.ResourceTimeout{ Read: schema.DefaultTimeout(1 * time.Minute), @@ -45,7 +45,7 @@ func DataSourceIPAMPoolCidrs() *schema.Resource { } } -func dataSourceIPAMPoolCidrsRead(d *schema.ResourceData, meta interface{}) error { +func dataSourceIPAMPoolCIDRsRead(d *schema.ResourceData, meta interface{}) error { conn := meta.(*conns.AWSClient).EC2Conn input := &ec2.GetIpamPoolCidrsInput{} @@ -73,20 +73,20 @@ func dataSourceIPAMPoolCidrsRead(d *schema.ResourceData, meta interface{}) error cidrs = output.IpamPoolCidrs d.SetId(d.Get("ipam_pool_id").(string)) - d.Set("ipam_pool_cidrs", flattenIPAMPoolCidrs(cidrs)) + d.Set("ipam_pool_cidrs", flattenIPAMPoolCIDRs(cidrs)) return nil } -func flattenIPAMPoolCidrs(c []*ec2.IpamPoolCidr) []interface{} { +func flattenIPAMPoolCIDRs(c []*ec2.IpamPoolCidr) []interface{} { cidrs := []interface{}{} for _, cidr := range c { - cidrs = append(cidrs, flattenIPAMPoolCidr(cidr)) + cidrs = append(cidrs, flattenIPAMPoolCIDR(cidr)) } return cidrs } -func flattenIPAMPoolCidr(c *ec2.IpamPoolCidr) map[string]interface{} { +func flattenIPAMPoolCIDR(c *ec2.IpamPoolCidr) map[string]interface{} { cidr := make(map[string]interface{}) cidr["cidr"] = aws.StringValue(c.Cidr) cidr["state"] = aws.StringValue(c.State) diff --git a/internal/service/ec2/ipam_pool_cidrs_data_source_test.go b/internal/service/ec2/ipam_pool_cidrs_data_source_test.go index 6b5d3b9c6756..fe40e7fcdfc0 100644 --- a/internal/service/ec2/ipam_pool_cidrs_data_source_test.go +++ b/internal/service/ec2/ipam_pool_cidrs_data_source_test.go @@ -8,7 +8,7 @@ import ( "github.com/hashicorp/terraform-provider-aws/internal/acctest" ) -func TestAccIPAMPoolCidrsDataSource_basic(t *testing.T) { +func TestAccIPAMPoolCIDRsDataSource_basic(t *testing.T) { dataSourceName := "data.aws_vpc_ipam_pool_cidrs.test" resource.ParallelTest(t, resource.TestCase{ @@ -17,19 +17,19 @@ func TestAccIPAMPoolCidrsDataSource_basic(t *testing.T) { ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, Steps: []resource.TestStep{ { - Config: testAccIPAMPoolCidrsDataSourceConfig_BasicOneCidrs, + Config: testAccIPAMPoolCIDRsDataSourceConfig_BasicOneCIDRs, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "ipam_pool_cidrs.#", "1"), ), }, { - Config: testAccIPAMPoolCidrsDataSourceConfig_BasicTwoCidrs, + Config: testAccIPAMPoolCIDRsDataSourceConfig_BasicTwoCIDRs, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "ipam_pool_cidrs.#", "2"), ), }, { - Config: testAccIPAMPoolCidrsDataSourceConfig_BasicTwoCidrsFiltered, + Config: testAccIPAMPoolCIDRsDataSourceConfig_BasicTwoCIDRsFiltered, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "ipam_pool_cidrs.#", "1"), ), @@ -38,7 +38,7 @@ func TestAccIPAMPoolCidrsDataSource_basic(t *testing.T) { }) } -var testAccIPAMPoolCidrsDataSourceConfig_BasicOneCidrs = acctest.ConfigCompose( +var testAccIPAMPoolCIDRsDataSourceConfig_BasicOneCIDRs = acctest.ConfigCompose( testAccIPAMPoolConfig_basic, ` resource "aws_vpc_ipam_pool_cidr" "test" { ipam_pool_id = aws_vpc_ipam_pool.test.id @@ -53,7 +53,7 @@ data "aws_vpc_ipam_pool_cidrs" "test" { } `) -var testAccIPAMPoolCidrsDataSourceConfig_BasicTwoCidrs = acctest.ConfigCompose( +var testAccIPAMPoolCIDRsDataSourceConfig_BasicTwoCIDRs = acctest.ConfigCompose( testAccIPAMPoolConfig_basic, ` @@ -75,7 +75,7 @@ data "aws_vpc_ipam_pool_cidrs" "test" { } `) -var testAccIPAMPoolCidrsDataSourceConfig_BasicTwoCidrsFiltered = acctest.ConfigCompose( +var testAccIPAMPoolCIDRsDataSourceConfig_BasicTwoCIDRsFiltered = acctest.ConfigCompose( testAccIPAMPoolConfig_basic, ` resource "aws_vpc_ipam_pool_cidr" "test" { ipam_pool_id = aws_vpc_ipam_pool.test.id diff --git a/website/docs/d/vpc_ipam_pool_cidrs.html.markdown b/website/docs/d/vpc_ipam_pool_cidrs.html.markdown index d170e4b3bd87..a6714adf0e98 100644 --- a/website/docs/d/vpc_ipam_pool_cidrs.html.markdown +++ b/website/docs/d/vpc_ipam_pool_cidrs.html.markdown @@ -18,7 +18,19 @@ Basic usage: ```terraform data "aws_vpc_ipam_pool_cidrs" "c" { - ipam_pool_id = "ipam-pool-123" + ipam_pool_id = data.aws_vpc_ipam_pool.p.id +} + +data "aws_vpc_ipam_pool" "p" { + filter { + name = "description" + values = ["*mypool*"] + } + + filter { + name = "address-family" + values = ["ipv4"] + } } ``` From e2ae8b9f38fb0d6c753fecd9b49d3076fece8c06 Mon Sep 17 00:00:00 2001 From: drewmullen Date: Fri, 30 Sep 2022 23:49:22 -0400 Subject: [PATCH 4/7] semgrep --- .../service/ec2/ipam_pool_cidrs_data_source_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/service/ec2/ipam_pool_cidrs_data_source_test.go b/internal/service/ec2/ipam_pool_cidrs_data_source_test.go index fe40e7fcdfc0..841734958f2b 100644 --- a/internal/service/ec2/ipam_pool_cidrs_data_source_test.go +++ b/internal/service/ec2/ipam_pool_cidrs_data_source_test.go @@ -17,19 +17,19 @@ func TestAccIPAMPoolCIDRsDataSource_basic(t *testing.T) { ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, Steps: []resource.TestStep{ { - Config: testAccIPAMPoolCIDRsDataSourceConfig_BasicOneCIDRs, + Config: testAccIPAMPoolCIDRsDataSourceConfig_basicOneCIDRs, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "ipam_pool_cidrs.#", "1"), ), }, { - Config: testAccIPAMPoolCIDRsDataSourceConfig_BasicTwoCIDRs, + Config: testAccIPAMPoolCIDRsDataSourceConfig_basicTwoCIDRs, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "ipam_pool_cidrs.#", "2"), ), }, { - Config: testAccIPAMPoolCIDRsDataSourceConfig_BasicTwoCIDRsFiltered, + Config: testAccIPAMPoolCIDRsDataSourceConfig_basicTwoCIDRsFiltered, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "ipam_pool_cidrs.#", "1"), ), @@ -38,7 +38,7 @@ func TestAccIPAMPoolCIDRsDataSource_basic(t *testing.T) { }) } -var testAccIPAMPoolCIDRsDataSourceConfig_BasicOneCIDRs = acctest.ConfigCompose( +var testAccIPAMPoolCIDRsDataSourceConfig_basicOneCIDRs = acctest.ConfigCompose( testAccIPAMPoolConfig_basic, ` resource "aws_vpc_ipam_pool_cidr" "test" { ipam_pool_id = aws_vpc_ipam_pool.test.id @@ -53,7 +53,7 @@ data "aws_vpc_ipam_pool_cidrs" "test" { } `) -var testAccIPAMPoolCIDRsDataSourceConfig_BasicTwoCIDRs = acctest.ConfigCompose( +var testAccIPAMPoolCIDRsDataSourceConfig_basicTwoCIDRs = acctest.ConfigCompose( testAccIPAMPoolConfig_basic, ` @@ -75,7 +75,7 @@ data "aws_vpc_ipam_pool_cidrs" "test" { } `) -var testAccIPAMPoolCIDRsDataSourceConfig_BasicTwoCIDRsFiltered = acctest.ConfigCompose( +var testAccIPAMPoolCIDRsDataSourceConfig_basicTwoCIDRsFiltered = acctest.ConfigCompose( testAccIPAMPoolConfig_basic, ` resource "aws_vpc_ipam_pool_cidr" "test" { ipam_pool_id = aws_vpc_ipam_pool.test.id From becebb9eae04d0004963cdac1cb206188e99e142 Mon Sep 17 00:00:00 2001 From: drewmullen Date: Fri, 30 Sep 2022 23:56:21 -0400 Subject: [PATCH 5/7] semgrep --- internal/provider/provider.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/provider/provider.go b/internal/provider/provider.go index bd6c2a0c9db1..90261537ab3d 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -592,7 +592,7 @@ func New(_ context.Context) (*schema.Provider, error) { "aws_vpc_endpoint_service": ec2.DataSourceVPCEndpointService(), "aws_vpc_endpoint": ec2.DataSourceVPCEndpoint(), "aws_vpc_ipam_pool": ec2.DataSourceIPAMPool(), - "aws_vpc_ipam_pool_cidrs": ec2.DataSourceIPAMPoolCidrs(), + "aws_vpc_ipam_pool_cidrs": ec2.DataSourceIPAMPoolCIDRs(), "aws_vpc_ipam_preview_next_cidr": ec2.DataSourceIPAMPreviewNextCIDR(), "aws_vpc_peering_connection": ec2.DataSourceVPCPeeringConnection(), "aws_vpc_peering_connections": ec2.DataSourceVPCPeeringConnections(), From a066b6efbe2cc753e61f676786a18abf05b47960 Mon Sep 17 00:00:00 2001 From: drewmullen Date: Mon, 3 Oct 2022 08:38:28 -0400 Subject: [PATCH 6/7] bump: retry tests --- internal/service/ec2/ipam_pool_cidrs_data_source.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/service/ec2/ipam_pool_cidrs_data_source.go b/internal/service/ec2/ipam_pool_cidrs_data_source.go index caa3640cd4c1..002ae0a8391b 100644 --- a/internal/service/ec2/ipam_pool_cidrs_data_source.go +++ b/internal/service/ec2/ipam_pool_cidrs_data_source.go @@ -24,7 +24,6 @@ func DataSourceIPAMPoolCIDRs() *schema.Resource { Type: schema.TypeString, Required: true, }, - // computed "ipam_pool_cidrs": { Type: schema.TypeSet, Computed: true, From fafbcdc9f1d0be8a1aec1748fd9663585e297404 Mon Sep 17 00:00:00 2001 From: drewmullen Date: Mon, 3 Oct 2022 12:35:46 -0400 Subject: [PATCH 7/7] add pageination --- internal/service/ec2/find.go | 31 +++++++++++++++++++ .../ec2/ipam_pool_cidrs_data_source.go | 11 +++---- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/internal/service/ec2/find.go b/internal/service/ec2/find.go index 841d603037cd..df9c0f660622 100644 --- a/internal/service/ec2/find.go +++ b/internal/service/ec2/find.go @@ -4937,6 +4937,37 @@ func FindInternetGatewayAttachment(conn *ec2.EC2, internetGatewayID, vpcID strin return attachment, nil } +func FindIPAMPoolCIDRs(conn *ec2.EC2, input *ec2.GetIpamPoolCidrsInput) ([]*ec2.IpamPoolCidr, error) { + var output []*ec2.IpamPoolCidr + + err := conn.GetIpamPoolCidrsPages(input, func(page *ec2.GetIpamPoolCidrsOutput, lastPage bool) bool { + if page == nil { + return !lastPage + } + + for _, v := range page.IpamPoolCidrs { + if v != nil { + output = append(output, v) + } + } + + return !lastPage + }) + + if tfawserr.ErrCodeEquals(err, InvalidIPAMPoolIDNotFound) { + return nil, &resource.NotFoundError{ + LastError: err, + LastRequest: input, + } + } + + if err != nil { + return nil, err + } + + return output, nil +} + func FindKeyPair(conn *ec2.EC2, input *ec2.DescribeKeyPairsInput) (*ec2.KeyPairInfo, error) { output, err := FindKeyPairs(conn, input) diff --git a/internal/service/ec2/ipam_pool_cidrs_data_source.go b/internal/service/ec2/ipam_pool_cidrs_data_source.go index 002ae0a8391b..1e8cc6265ebe 100644 --- a/internal/service/ec2/ipam_pool_cidrs_data_source.go +++ b/internal/service/ec2/ipam_pool_cidrs_data_source.go @@ -58,21 +58,18 @@ func dataSourceIPAMPoolCIDRsRead(d *schema.ResourceData, meta interface{}) error input.Filters = BuildFiltersDataSource(filters.(*schema.Set)) } - output, err := conn.GetIpamPoolCidrs(input) - var cidrs []*ec2.IpamPoolCidr + output, err := FindIPAMPoolCIDRs(conn, input) if err != nil { return err } - if len(output.IpamPoolCidrs) == 0 || output.IpamPoolCidrs[0] == nil { - return tfresource.SingularDataSourceFindError("EC2 VPC IPAM POOL CIDRS", tfresource.NewEmptyResultError(input)) + if len(output) == 0 || output[0] == nil { + return tfresource.SingularDataSourceFindError("CIDRS IN EC2 VPC IPAM POOL", tfresource.NewEmptyResultError(input)) } - cidrs = output.IpamPoolCidrs - d.SetId(d.Get("ipam_pool_id").(string)) - d.Set("ipam_pool_cidrs", flattenIPAMPoolCIDRs(cidrs)) + d.Set("ipam_pool_cidrs", flattenIPAMPoolCIDRs(output)) return nil }