From 84a12551139be697c2af1ecc98e059363141dfe2 Mon Sep 17 00:00:00 2001 From: drewmullen Date: Mon, 3 Oct 2022 12:35:46 -0400 Subject: [PATCH] add pageination --- internal/service/ec2/find.go | 31 +++++++++++++++++++ .../ec2/ipam_pool_cidrs_data_source.go | 15 +++++---- 2 files changed, 38 insertions(+), 8 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..c3d98435d89b 100644 --- a/internal/service/ec2/ipam_pool_cidrs_data_source.go +++ b/internal/service/ec2/ipam_pool_cidrs_data_source.go @@ -47,10 +47,12 @@ func DataSourceIPAMPoolCIDRs() *schema.Resource { func dataSourceIPAMPoolCIDRsRead(d *schema.ResourceData, meta interface{}) error { conn := meta.(*conns.AWSClient).EC2Conn + var id string input := &ec2.GetIpamPoolCidrsInput{} if v, ok := d.GetOk("ipam_pool_id"); ok { - input.IpamPoolId = aws.String(v.(string)) + id = v.(string) + input.IpamPoolId = aws.String(id) } filters, filtersOk := d.GetOk("filter") @@ -58,21 +60,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 }