From d3c275b50118ec2d8fa57446c14bfc6651011bf7 Mon Sep 17 00:00:00 2001 From: Ismayil Mirzali Date: Wed, 4 Dec 2024 16:05:33 +0200 Subject: [PATCH 01/14] feat: add aws_vpc_ipam & aws_vpc_ipams data sources Signed-off-by: Ismayil Mirzali --- .../service/ec2/aws_vpc_ipam_data_source.go | 149 ++++++++++++++++++ .../ec2/aws_vpc_ipam_data_source_test.go | 58 +++++++ .../service/ec2/aws_vpc_ipams_data_source.go | 121 ++++++++++++++ .../ec2/aws_vpc_ipams_data_source_test.go | 67 ++++++++ internal/service/ec2/service_package_gen.go | 10 ++ website/docs/d/vpc_ipam.html.markdown | 49 ++++++ website/docs/d/vpc_ipams.html.markdown | 70 ++++++++ 7 files changed, 524 insertions(+) create mode 100644 internal/service/ec2/aws_vpc_ipam_data_source.go create mode 100644 internal/service/ec2/aws_vpc_ipam_data_source_test.go create mode 100644 internal/service/ec2/aws_vpc_ipams_data_source.go create mode 100644 internal/service/ec2/aws_vpc_ipams_data_source_test.go create mode 100644 website/docs/d/vpc_ipam.html.markdown create mode 100644 website/docs/d/vpc_ipams.html.markdown diff --git a/internal/service/ec2/aws_vpc_ipam_data_source.go b/internal/service/ec2/aws_vpc_ipam_data_source.go new file mode 100644 index 00000000000..e2b9b25d32a --- /dev/null +++ b/internal/service/ec2/aws_vpc_ipam_data_source.go @@ -0,0 +1,149 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package ec2 + +import ( + "context" + + awstypes "github.com/aws/aws-sdk-go-v2/service/ec2/types" + "github.com/hashicorp/terraform-plugin-framework/datasource" + "github.com/hashicorp/terraform-plugin-framework/datasource/schema" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/framework" + "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" + fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" + tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" + "github.com/hashicorp/terraform-provider-aws/names" +) + +// @FrameworkDataSource("aws_vpc_ipam", name="AWS IPAM") +func newDataSourceAwsVpcIpam(context.Context) (datasource.DataSourceWithConfigure, error) { + return &dataSourceAwsVpcIpam{}, nil +} + +const ( + DSNameAwsVpcIpam = "AWS IPAM Data Source" +) + +type dataSourceAwsVpcIpam struct { + framework.DataSourceWithConfigure +} + +func (d *dataSourceAwsVpcIpam) Metadata(_ context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) { // nosemgrep:ci.meta-in-func-name + resp.TypeName = "aws_vpc_ipam" +} + +func (d *dataSourceAwsVpcIpam) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) { + resp.Schema = schema.Schema{ + Attributes: map[string]schema.Attribute{ + names.AttrARN: framework.ARNAttributeComputedOnly(), + names.AttrDescription: schema.StringAttribute{ + Computed: true, + }, + names.AttrID: schema.StringAttribute{ + Required: true, + }, + names.AttrTags: tftags.TagsAttributeComputedOnly(), + "default_resource_discovery_association_id": schema.StringAttribute{ + Computed: true, + }, + "default_resource_discovery_id": schema.StringAttribute{ + Computed: true, + }, + "tier": schema.StringAttribute{ + Computed: true, + CustomType: fwtypes.StringEnumType[awstypes.IpamTier](), + }, + "scope_count": schema.Int32Attribute{ + Computed: true, + }, + "enable_private_gua": schema.BoolAttribute{ + Computed: true, + }, + "region": schema.StringAttribute{ + Computed: true, + }, + "operating_regions": framework.DataSourceComputedListOfObjectAttribute[ipamOperatingRegionModel](ctx), + "owner_id": schema.StringAttribute{ + Computed: true, + }, + "private_default_scope_id": schema.StringAttribute{ + Computed: true, + }, + "public_default_scope_id": schema.StringAttribute{ + Computed: true, + }, + "resource_discovery_association_count": schema.Int32Attribute{ + Computed: true, + }, + "state": schema.StringAttribute{ + Computed: true, + CustomType: fwtypes.StringEnumType[awstypes.IpamState](), + }, + "state_message": schema.StringAttribute{ + Computed: true, + }, + }, + } +} + +func (d *dataSourceAwsVpcIpam) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) { + conn := d.Meta().EC2Client(ctx) + + var data dataSourceAwsVpcIpamModel + resp.Diagnostics.Append(req.Config.Get(ctx, &data)...) + if resp.Diagnostics.HasError() { + return + } + + ipam, err := findIPAMByID(ctx, conn, data.IpamId.ValueString()) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.EC2, create.ErrActionReading, DSNameAwsVpcIpam, data.IpamId.String(), err), + err.Error(), + ) + return + } + + resp.Diagnostics.Append(flex.Flatten(ctx, ipam, &data, flex.WithFieldNamePrefix("ipam"))...) + if resp.Diagnostics.HasError() { + return + } + + data.Tags = tftags.FlattenStringValueMap(ctx, keyValueTags(ctx, ipam.Tags).IgnoreAWS().Map()) + // ignoreTagsConfig := d.Meta().IgnoreTagsConfig(ctx) + // tags := keyValueTags(ctx, ipam.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig) + // data.Tags = tftags.FlattenStringValueMap(ctx, keyValueTags(ctx, ipam.Tags).IgnoreAWS().Map()) + + resp.Diagnostics.Append(resp.State.Set(ctx, &data)...) +} + +type dataSourceAwsVpcIpamSummaryModel struct { + Description types.String `tfsdk:"description"` + DefaultResourceDiscoveryAssociationId types.String `tfsdk:"default_resource_discovery_association_id"` + DefaultResourceDiscoveryId types.String `tfsdk:"default_resource_discovery_id"` + EnablePrivateGua types.Bool `tfsdk:"enable_private_gua"` + IpamARN types.String `tfsdk:"arn"` + IpamId types.String `tfsdk:"id"` + IpamRegion types.String `tfsdk:"region"` + OperatingRegions fwtypes.ListNestedObjectValueOf[ipamOperatingRegionModel] `tfsdk:"operating_regions"` + OwnerID types.String `tfsdk:"owner_id"` + PrivateDefaultScopeId types.String `tfsdk:"private_default_scope_id"` + PublicDefaultScopeId types.String `tfsdk:"public_default_scope_id"` + ResourceDiscoveryAssociationCount types.Int32 `tfsdk:"resource_discovery_association_count"` + ScopeCount types.Int32 `tfsdk:"scope_count"` + State fwtypes.StringEnum[awstypes.IpamState] `tfsdk:"state"` + StateMessage types.String `tfsdk:"state_message"` + Tier fwtypes.StringEnum[awstypes.IpamTier] `tfsdk:"tier"` +} + +type dataSourceAwsVpcIpamModel struct { + dataSourceAwsVpcIpamSummaryModel + Tags tftags.Map `tfsdk:"tags"` +} + +type ipamOperatingRegionModel struct { + RegionName types.String `tfsdk:"region_name"` +} diff --git a/internal/service/ec2/aws_vpc_ipam_data_source_test.go b/internal/service/ec2/aws_vpc_ipam_data_source_test.go new file mode 100644 index 00000000000..0ec29c354c4 --- /dev/null +++ b/internal/service/ec2/aws_vpc_ipam_data_source_test.go @@ -0,0 +1,58 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package ec2_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" + "github.com/hashicorp/terraform-provider-aws/names" +) + +func TestAccEC2AwsVpcIpamDataSourceBasic(t *testing.T) { + ctx := acctest.Context(t) + resourceName := "aws_vpc_ipam.test" + dataSourceName := "data.aws_vpc_ipam.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: acctest.CheckDestroyNoop, + Steps: []resource.TestStep{ + { + Config: testAccAwsVpcIpamDataSourceConfig_basic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrPair(dataSourceName, "operating_regions.0.region_name", resourceName, "operating_regions.0.region_name"), + resource.TestCheckResourceAttrPair(dataSourceName, "tags.Test", resourceName, "tags.Test"), + ), + }, + }, + }) +} + +func testAccAwsVpcIpamDataSourceConfig_basic() string { + return ` +data "aws_region" "current" {} + +resource "aws_vpc_ipam" "test" { + description = "My IPAM" + operating_regions { + region_name = data.aws_region.current.name + } + + tags = { + Test = "Test" + } +} + +data "aws_vpc_ipam" "test" { + id = aws_vpc_ipam.test.id +} +` +} diff --git a/internal/service/ec2/aws_vpc_ipams_data_source.go b/internal/service/ec2/aws_vpc_ipams_data_source.go new file mode 100644 index 00000000000..eb0a71b4d8e --- /dev/null +++ b/internal/service/ec2/aws_vpc_ipams_data_source.go @@ -0,0 +1,121 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package ec2 + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/service/ec2" + awstypes "github.com/aws/aws-sdk-go-v2/service/ec2/types" + "github.com/hashicorp/terraform-plugin-framework/datasource" + "github.com/hashicorp/terraform-plugin-framework/datasource/schema" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/framework" + fwflex "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" + fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" + "github.com/hashicorp/terraform-provider-aws/names" +) + +// @FrameworkDataSource("aws_vpc_ipams", name="AWS IPAM") +func newDataSourceAwsVpcIpams(context.Context) (datasource.DataSourceWithConfigure, error) { + return &dataSourceAwsVpcIpams{}, nil +} + +const ( + DSNameAwsVpcIpams = "AWS IPAMs Data Source" +) + +type dataSourceAwsVpcIpams struct { + framework.DataSourceWithConfigure +} + +func (d *dataSourceAwsVpcIpams) Metadata(_ context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) { // nosemgrep:ci.meta-in-func-name + resp.TypeName = "aws_vpc_ipams" +} + +func (d *dataSourceAwsVpcIpams) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) { + resp.Schema = schema.Schema{ + Attributes: map[string]schema.Attribute{ + "ipams": framework.DataSourceComputedListOfObjectAttribute[dataSourceAwsVpcIpamSummaryModel](ctx), + "ipam_ids": schema.ListAttribute{ + Optional: true, + ElementType: types.StringType, + }, + }, + Blocks: map[string]schema.Block{ + names.AttrFilter: schema.ListNestedBlock{ + CustomType: fwtypes.NewListNestedObjectTypeOf[filterModel](ctx), + NestedObject: schema.NestedBlockObject{ + Attributes: map[string]schema.Attribute{ + names.AttrName: schema.StringAttribute{ + Required: true, + }, + names.AttrValues: schema.SetAttribute{ + CustomType: fwtypes.SetOfStringType, + Required: true, + }, + }, + }, + }, + }, + } +} + +func findAwsVpcIpams(ctx context.Context, conn *ec2.Client, input *ec2.DescribeIpamsInput) ([]awstypes.Ipam, error) { + var output []awstypes.Ipam + + pages := ec2.NewDescribeIpamsPaginator(conn, input) + for pages.HasMorePages() { + page, err := pages.NextPage(ctx) + if err != nil { + return nil, err + } + output = append(output, page.Ipams...) + } + return output, nil +} + +func (d *dataSourceAwsVpcIpams) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) { + conn := d.Meta().EC2Client(ctx) + + var data dataSourceAwsVpcIpamsModel + resp.Diagnostics.Append(req.Config.Get(ctx, &data)...) + if resp.Diagnostics.HasError() { + return + } + + input := ec2.DescribeIpamsInput{} + resp.Diagnostics.Append(fwflex.Expand(ctx, data, &input)...) + if resp.Diagnostics.HasError() { + return + } + + output, err := findAwsVpcIpams(ctx, conn, &input) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.EC2, create.ErrActionReading, DSNameAwsVpcIpams, "", err), + err.Error(), + ) + return + } + + resp.Diagnostics.Append(fwflex.Flatten(ctx, output, &data.Ipams, fwflex.WithFieldNamePrefix("ipam"))...) + if resp.Diagnostics.HasError() { + return + } + + resp.Diagnostics.Append(resp.State.Set(ctx, &data)...) +} + +type filterModel struct { + Name types.String `tfsdk:"name"` + Values fwtypes.SetOfString `tfsdk:"values"` +} + +type dataSourceAwsVpcIpamsModel struct { + Ipams fwtypes.ListNestedObjectValueOf[dataSourceAwsVpcIpamSummaryModel] `tfsdk:"ipams"` + Filters fwtypes.ListNestedObjectValueOf[filterModel] `tfsdk:"filter"` + IpamIds types.List `tfsdk:"ipam_ids"` +} diff --git a/internal/service/ec2/aws_vpc_ipams_data_source_test.go b/internal/service/ec2/aws_vpc_ipams_data_source_test.go new file mode 100644 index 00000000000..2f3ce15b0b4 --- /dev/null +++ b/internal/service/ec2/aws_vpc_ipams_data_source_test.go @@ -0,0 +1,67 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package ec2_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" + + "github.com/hashicorp/terraform-provider-aws/names" +) + +func TestAccEC2AwsVpcIpamsDataSourceTiered(t *testing.T) { + ctx := acctest.Context(t) + resourceName := "aws_vpc_ipam.test" + dataSourceName := "data.aws_vpc_ipams.test" + dataSourceFree := "data.aws_vpc_ipams.free" + dataSourceAdvanced := "data.aws_vpc_ipams.advanced" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + testAccPreCheck(ctx, t) + }, + + ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: acctest.CheckDestroyNoop, + Steps: []resource.TestStep{ + { + Config: testAccAwsVpcIpamsDataSourceConfig_filterWithTiers(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrPair(dataSourceName, "ipams.0.operating_regions.0.region_name", resourceName, "operating_regions.0.region_name"), + resource.TestCheckResourceAttrPair(dataSourceName, "ipams.0.tags.#", resourceName, "tags.#"), + resource.TestCheckResourceAttr(dataSourceAdvanced, "ipams.#", "1"), + resource.TestCheckResourceAttr(dataSourceFree, "ipams.#", "0"), + ), + }, + }, + }) +} + +func testAccAwsVpcIpamsDataSourceConfig_filterWithTiers() string { + return acctest.ConfigCompose(testAccIPAMConfig_tags("Some", "Value"), ` +data "aws_vpc_ipams" "test" { + ipam_ids = [aws_vpc_ipam.test.id] +} + +data "aws_vpc_ipams" "advanced" { + ipam_ids = [aws_vpc_ipam.test.id] + filter { + name = "tier" + values = ["advanced"] + } +} + +data "aws_vpc_ipams" "free" { + ipam_ids = [aws_vpc_ipam.test.id] + filter { + name = "tier" + values = ["free"] + } +} +`) +} diff --git a/internal/service/ec2/service_package_gen.go b/internal/service/ec2/service_package_gen.go index 9efe167be70..b5d97971861 100644 --- a/internal/service/ec2/service_package_gen.go +++ b/internal/service/ec2/service_package_gen.go @@ -24,6 +24,16 @@ func (p *servicePackage) FrameworkDataSources(ctx context.Context) []*types.Serv TypeName: "aws_spot_datafeed_subscription", Name: "Spot Data Feed Subscription Data Source", }, + { + Factory: newDataSourceAwsVpcIpam, + TypeName: "aws_vpc_ipam", + Name: "AWS IPAM", + }, + { + Factory: newDataSourceAwsVpcIpams, + TypeName: "aws_vpc_ipams", + Name: "AWS IPAM", + }, { Factory: newSecurityGroupRuleDataSource, TypeName: "aws_vpc_security_group_rule", diff --git a/website/docs/d/vpc_ipam.html.markdown b/website/docs/d/vpc_ipam.html.markdown new file mode 100644 index 00000000000..0d9a23d8721 --- /dev/null +++ b/website/docs/d/vpc_ipam.html.markdown @@ -0,0 +1,49 @@ +--- +subcategory: "VPC IPAM (IP Address Manager)" +layout: "aws" +page_title: "AWS: aws_vpc_ipam" +description: |- + Terraform data source for managing an AWS VPC IPAM. +--- + +# Data Source: aws_vpc_ipam + +Terraform data source for managing an AWS VPC IPAM resource. + +## Example Usage + +### Basic Usage + +```terraform +data "aws_vpc_ipam" "example" { + id = "" +} +``` + +## Argument Reference + +The following arguments are required: + +* `id` - (Required) ID of the IPAM. + +## Attribute Reference + +This data source exports the following attributes in addition to the arguments above: + +* `arn` - ARN of the IPAM. +* `default_resource_discovery_association_id` - The default resource discovery association ID. +* `default_resource_discovery_id` - The default resource discovery ID. +* `description` - Description for the IPAM. +* `enable_private_gua` - If private GUA is enabled. +* `id` - ID of the IPAM resource. +* `operating_regions` - Regions that the IPAM is configured to operate in. +* `owner_id` - ID of the account that owns this IPAM. +* `private_default_scope_id` - ID of the default private scope. +* `public_default_scope_id` - ID of the default public scope. +* `region` - Region that the IPAM exists in. +* `resource_discovery_association_count` - Number of resource discovery associations. +* `scope_count` - Number of scopes on this IPAM. +* `state` - Current state of the IPAM. +* `state_message` - State message of the IPAM. +* `tier` - IPAM Tier. +* `tags` - Tags of the IPAM resource. diff --git a/website/docs/d/vpc_ipams.html.markdown b/website/docs/d/vpc_ipams.html.markdown new file mode 100644 index 00000000000..eddc025e394 --- /dev/null +++ b/website/docs/d/vpc_ipams.html.markdown @@ -0,0 +1,70 @@ +--- +subcategory: "VPC IPAM (IP Address Manager)" +layout: "aws" +page_title: "AWS: aws_vpc_ipams" +description: |- + Describes AWS VPC IPAM resources +--- + +# Data Source: aws_vpc_ipams + +Use this data source to get details of Amazon VPC IPAM resources + +## Example Usage + +```terraform +# Declare the data source +data "aws_vpc_ipams" "ipams" { + filter { + name = "tags.Some" + values = ["value"] + } +} +``` + +## Argument Reference + +The arguments of this data source act as filters for querying the available IPAMs. + +* `ipam_ids` - (Optional) IDs of the IPAM resources to query for. +* `filter` - (Optional) Custom filter block as described below. + +More complex filters can be expressed using one or more `filter` sub-blocks, +which take the following arguments: + +* `name` - (Required) Name of the field to filter by, as defined by + [the underlying AWS API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeIpams.html). + +* `values` - (Required) Set of values that are accepted for the given field. + An IPAM resource will be selected if any one of the given values matches. + +## Attribute Reference + +All of the argument attributes except `filter` are also exported as result attributes. + +* `ipams` - List of IPAM resources matching the provided arguments. + +### ipams + +* `arn` - ARN of the IPAM. +* `default_resource_discovery_association_id` - The default resource discovery association ID. +* `default_resource_discovery_id` - The default resource discovery ID. +* `description` - Description for the IPAM. +* `enable_private_gua` - If private GUA is enabled. +* `id` - ID of the IPAM resource. +* `operating_regions` - Regions that the IPAM is configured to operate in. +* `owner_id` - ID of the account that owns this IPAM. +* `private_default_scope_id` - ID of the default private scope. +* `public_default_scope_id` - ID of the default public scope. +* `region` - Region that the IPAM exists in. +* `resource_discovery_association_count` - Number of resource discovery associations. +* `scope_count` - Number of scopes on this IPAM. +* `state` - Current state of the IPAM. +* `state_message` - State message of the IPAM. +* `tier` - IPAM Tier. + +## Timeouts + +[Configuration options](https://developer.hashicorp.com/terraform/language/resources/syntax#operation-timeouts): + +- `read` - (Default `20m`) From 20aabefd5ebfe9f8322186090c8623fc97b07e78 Mon Sep 17 00:00:00 2001 From: Ismayil Mirzali Date: Thu, 5 Dec 2024 13:28:09 +0200 Subject: [PATCH 02/14] feat: add changelog Signed-off-by: Ismayil Mirzali --- .changelog/40459.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changelog/40459.txt diff --git a/.changelog/40459.txt b/.changelog/40459.txt new file mode 100644 index 00000000000..89070e4913d --- /dev/null +++ b/.changelog/40459.txt @@ -0,0 +1,7 @@ +```release-note:new-data-source +aws_vpc_ipam +``` + +```release-note:new-data-source +aws_vpc_ipams +``` \ No newline at end of file From 4e8b844e0e1a21b7d31f85612d6b9139fcdcfd38 Mon Sep 17 00:00:00 2001 From: Ismayil Mirzali Date: Fri, 10 Jan 2025 10:42:05 +0200 Subject: [PATCH 03/14] fix: resolve issues with naming scheme Signed-off-by: Ismayil Mirzali --- .../service/ec2/aws_vpc_ipam_data_source.go | 30 ++++++++--------- .../ec2/aws_vpc_ipam_data_source_test.go | 8 ++--- .../service/ec2/aws_vpc_ipams_data_source.go | 32 +++++++++--------- .../ec2/aws_vpc_ipams_data_source_test.go | 33 +++++++++---------- internal/service/ec2/service_package_gen.go | 4 +-- 5 files changed, 53 insertions(+), 54 deletions(-) diff --git a/internal/service/ec2/aws_vpc_ipam_data_source.go b/internal/service/ec2/aws_vpc_ipam_data_source.go index e2b9b25d32a..a1352e27cc5 100644 --- a/internal/service/ec2/aws_vpc_ipam_data_source.go +++ b/internal/service/ec2/aws_vpc_ipam_data_source.go @@ -19,23 +19,23 @@ import ( ) // @FrameworkDataSource("aws_vpc_ipam", name="AWS IPAM") -func newDataSourceAwsVpcIpam(context.Context) (datasource.DataSourceWithConfigure, error) { - return &dataSourceAwsVpcIpam{}, nil +func newDataSourceVPCIPAM(context.Context) (datasource.DataSourceWithConfigure, error) { + return &dataSourceVPCIPAM{}, nil } const ( - DSNameAwsVpcIpam = "AWS IPAM Data Source" + DSNameVPCIPAM = "AWS IPAM Data Source" ) -type dataSourceAwsVpcIpam struct { +type dataSourceVPCIPAM struct { framework.DataSourceWithConfigure } -func (d *dataSourceAwsVpcIpam) Metadata(_ context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) { // nosemgrep:ci.meta-in-func-name +func (d *dataSourceVPCIPAM) Metadata(_ context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) { // nosemgrep:ci.meta-in-func-name resp.TypeName = "aws_vpc_ipam" } -func (d *dataSourceAwsVpcIpam) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) { +func (d *dataSourceVPCIPAM) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) { resp.Schema = schema.Schema{ Attributes: map[string]schema.Attribute{ names.AttrARN: framework.ARNAttributeComputedOnly(), @@ -62,11 +62,11 @@ func (d *dataSourceAwsVpcIpam) Schema(ctx context.Context, req datasource.Schema "enable_private_gua": schema.BoolAttribute{ Computed: true, }, - "region": schema.StringAttribute{ + names.AttrRegion: schema.StringAttribute{ Computed: true, }, "operating_regions": framework.DataSourceComputedListOfObjectAttribute[ipamOperatingRegionModel](ctx), - "owner_id": schema.StringAttribute{ + names.AttrOwnerID: schema.StringAttribute{ Computed: true, }, "private_default_scope_id": schema.StringAttribute{ @@ -78,7 +78,7 @@ func (d *dataSourceAwsVpcIpam) Schema(ctx context.Context, req datasource.Schema "resource_discovery_association_count": schema.Int32Attribute{ Computed: true, }, - "state": schema.StringAttribute{ + names.AttrState: schema.StringAttribute{ Computed: true, CustomType: fwtypes.StringEnumType[awstypes.IpamState](), }, @@ -89,10 +89,10 @@ func (d *dataSourceAwsVpcIpam) Schema(ctx context.Context, req datasource.Schema } } -func (d *dataSourceAwsVpcIpam) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) { +func (d *dataSourceVPCIPAM) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) { conn := d.Meta().EC2Client(ctx) - var data dataSourceAwsVpcIpamModel + var data dataSourceVPCIPAMModel resp.Diagnostics.Append(req.Config.Get(ctx, &data)...) if resp.Diagnostics.HasError() { return @@ -101,7 +101,7 @@ func (d *dataSourceAwsVpcIpam) Read(ctx context.Context, req datasource.ReadRequ ipam, err := findIPAMByID(ctx, conn, data.IpamId.ValueString()) if err != nil { resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.EC2, create.ErrActionReading, DSNameAwsVpcIpam, data.IpamId.String(), err), + create.ProblemStandardMessage(names.EC2, create.ErrActionReading, DSNameVPCIPAM, data.IpamId.String(), err), err.Error(), ) return @@ -120,7 +120,7 @@ func (d *dataSourceAwsVpcIpam) Read(ctx context.Context, req datasource.ReadRequ resp.Diagnostics.Append(resp.State.Set(ctx, &data)...) } -type dataSourceAwsVpcIpamSummaryModel struct { +type dataSourceVPCIPAMSummaryModel struct { Description types.String `tfsdk:"description"` DefaultResourceDiscoveryAssociationId types.String `tfsdk:"default_resource_discovery_association_id"` DefaultResourceDiscoveryId types.String `tfsdk:"default_resource_discovery_id"` @@ -139,8 +139,8 @@ type dataSourceAwsVpcIpamSummaryModel struct { Tier fwtypes.StringEnum[awstypes.IpamTier] `tfsdk:"tier"` } -type dataSourceAwsVpcIpamModel struct { - dataSourceAwsVpcIpamSummaryModel +type dataSourceVPCIPAMModel struct { + dataSourceVPCIPAMSummaryModel Tags tftags.Map `tfsdk:"tags"` } diff --git a/internal/service/ec2/aws_vpc_ipam_data_source_test.go b/internal/service/ec2/aws_vpc_ipam_data_source_test.go index 0ec29c354c4..92b5d77ba84 100644 --- a/internal/service/ec2/aws_vpc_ipam_data_source_test.go +++ b/internal/service/ec2/aws_vpc_ipam_data_source_test.go @@ -11,7 +11,7 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -func TestAccEC2AwsVpcIpamDataSourceBasic(t *testing.T) { +func TestAccEC2VPCIPAMDataSource_Basic(t *testing.T) { ctx := acctest.Context(t) resourceName := "aws_vpc_ipam.test" dataSourceName := "data.aws_vpc_ipam.test" @@ -26,7 +26,7 @@ func TestAccEC2AwsVpcIpamDataSourceBasic(t *testing.T) { CheckDestroy: acctest.CheckDestroyNoop, Steps: []resource.TestStep{ { - Config: testAccAwsVpcIpamDataSourceConfig_basic(), + Config: testAccVPCIPAMDataSourceConfig_basic(), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrPair(dataSourceName, "operating_regions.0.region_name", resourceName, "operating_regions.0.region_name"), resource.TestCheckResourceAttrPair(dataSourceName, "tags.Test", resourceName, "tags.Test"), @@ -36,7 +36,7 @@ func TestAccEC2AwsVpcIpamDataSourceBasic(t *testing.T) { }) } -func testAccAwsVpcIpamDataSourceConfig_basic() string { +func testAccVPCIPAMDataSourceConfig_basic() string { return ` data "aws_region" "current" {} @@ -52,7 +52,7 @@ resource "aws_vpc_ipam" "test" { } data "aws_vpc_ipam" "test" { - id = aws_vpc_ipam.test.id + id = aws_vpc_ipam.test.id } ` } diff --git a/internal/service/ec2/aws_vpc_ipams_data_source.go b/internal/service/ec2/aws_vpc_ipams_data_source.go index eb0a71b4d8e..11f99cdd3d9 100644 --- a/internal/service/ec2/aws_vpc_ipams_data_source.go +++ b/internal/service/ec2/aws_vpc_ipams_data_source.go @@ -19,26 +19,26 @@ import ( ) // @FrameworkDataSource("aws_vpc_ipams", name="AWS IPAM") -func newDataSourceAwsVpcIpams(context.Context) (datasource.DataSourceWithConfigure, error) { - return &dataSourceAwsVpcIpams{}, nil +func newDataSourceVPCIPAMs(context.Context) (datasource.DataSourceWithConfigure, error) { + return &dataSourceVPCIPAMs{}, nil } const ( - DSNameAwsVpcIpams = "AWS IPAMs Data Source" + DSNameVPCIPAMs = "AWS IPAMs Data Source" ) -type dataSourceAwsVpcIpams struct { +type dataSourceVPCIPAMs struct { framework.DataSourceWithConfigure } -func (d *dataSourceAwsVpcIpams) Metadata(_ context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) { // nosemgrep:ci.meta-in-func-name +func (d *dataSourceVPCIPAMs) Metadata(_ context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) { // nosemgrep:ci.meta-in-func-name resp.TypeName = "aws_vpc_ipams" } -func (d *dataSourceAwsVpcIpams) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) { +func (d *dataSourceVPCIPAMs) Schema(ctx context.Context, req datasource.SchemaRequest, resp *datasource.SchemaResponse) { resp.Schema = schema.Schema{ Attributes: map[string]schema.Attribute{ - "ipams": framework.DataSourceComputedListOfObjectAttribute[dataSourceAwsVpcIpamSummaryModel](ctx), + "ipams": framework.DataSourceComputedListOfObjectAttribute[dataSourceVPCIPAMSummaryModel](ctx), "ipam_ids": schema.ListAttribute{ Optional: true, ElementType: types.StringType, @@ -63,7 +63,7 @@ func (d *dataSourceAwsVpcIpams) Schema(ctx context.Context, req datasource.Schem } } -func findAwsVpcIpams(ctx context.Context, conn *ec2.Client, input *ec2.DescribeIpamsInput) ([]awstypes.Ipam, error) { +func findVPCIPAMs(ctx context.Context, conn *ec2.Client, input *ec2.DescribeIpamsInput) ([]awstypes.Ipam, error) { var output []awstypes.Ipam pages := ec2.NewDescribeIpamsPaginator(conn, input) @@ -77,10 +77,10 @@ func findAwsVpcIpams(ctx context.Context, conn *ec2.Client, input *ec2.DescribeI return output, nil } -func (d *dataSourceAwsVpcIpams) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) { +func (d *dataSourceVPCIPAMs) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) { conn := d.Meta().EC2Client(ctx) - var data dataSourceAwsVpcIpamsModel + var data dataSourceVPCIPAMsModel resp.Diagnostics.Append(req.Config.Get(ctx, &data)...) if resp.Diagnostics.HasError() { return @@ -92,10 +92,10 @@ func (d *dataSourceAwsVpcIpams) Read(ctx context.Context, req datasource.ReadReq return } - output, err := findAwsVpcIpams(ctx, conn, &input) + output, err := findVPCIPAMs(ctx, conn, &input) if err != nil { resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.EC2, create.ErrActionReading, DSNameAwsVpcIpams, "", err), + create.ProblemStandardMessage(names.EC2, create.ErrActionReading, DSNameVPCIPAMs, "", err), err.Error(), ) return @@ -114,8 +114,8 @@ type filterModel struct { Values fwtypes.SetOfString `tfsdk:"values"` } -type dataSourceAwsVpcIpamsModel struct { - Ipams fwtypes.ListNestedObjectValueOf[dataSourceAwsVpcIpamSummaryModel] `tfsdk:"ipams"` - Filters fwtypes.ListNestedObjectValueOf[filterModel] `tfsdk:"filter"` - IpamIds types.List `tfsdk:"ipam_ids"` +type dataSourceVPCIPAMsModel struct { + Ipams fwtypes.ListNestedObjectValueOf[dataSourceVPCIPAMSummaryModel] `tfsdk:"ipams"` + Filters fwtypes.ListNestedObjectValueOf[filterModel] `tfsdk:"filter"` + IpamIds types.List `tfsdk:"ipam_ids"` } diff --git a/internal/service/ec2/aws_vpc_ipams_data_source_test.go b/internal/service/ec2/aws_vpc_ipams_data_source_test.go index 2f3ce15b0b4..74540c37335 100644 --- a/internal/service/ec2/aws_vpc_ipams_data_source_test.go +++ b/internal/service/ec2/aws_vpc_ipams_data_source_test.go @@ -8,11 +8,10 @@ import ( "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-provider-aws/internal/acctest" - "github.com/hashicorp/terraform-provider-aws/names" ) -func TestAccEC2AwsVpcIpamsDataSourceTiered(t *testing.T) { +func TestAccEC2VPCIPAMsDataSource_Tiered(t *testing.T) { ctx := acctest.Context(t) resourceName := "aws_vpc_ipam.test" dataSourceName := "data.aws_vpc_ipams.test" @@ -30,7 +29,7 @@ func TestAccEC2AwsVpcIpamsDataSourceTiered(t *testing.T) { CheckDestroy: acctest.CheckDestroyNoop, Steps: []resource.TestStep{ { - Config: testAccAwsVpcIpamsDataSourceConfig_filterWithTiers(), + Config: testAccVPCIPAMsDataSourceConfig_filterWithTiers(), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrPair(dataSourceName, "ipams.0.operating_regions.0.region_name", resourceName, "operating_regions.0.region_name"), resource.TestCheckResourceAttrPair(dataSourceName, "ipams.0.tags.#", resourceName, "tags.#"), @@ -42,26 +41,26 @@ func TestAccEC2AwsVpcIpamsDataSourceTiered(t *testing.T) { }) } -func testAccAwsVpcIpamsDataSourceConfig_filterWithTiers() string { +func testAccVPCIPAMsDataSourceConfig_filterWithTiers() string { return acctest.ConfigCompose(testAccIPAMConfig_tags("Some", "Value"), ` data "aws_vpc_ipams" "test" { - ipam_ids = [aws_vpc_ipam.test.id] + ipam_ids = [aws_vpc_ipam.test.id] } data "aws_vpc_ipams" "advanced" { - ipam_ids = [aws_vpc_ipam.test.id] - filter { - name = "tier" - values = ["advanced"] - } + ipam_ids = [aws_vpc_ipam.test.id] + filter { + name = "tier" + values = ["advanced"] + } } data "aws_vpc_ipams" "free" { - ipam_ids = [aws_vpc_ipam.test.id] - filter { - name = "tier" - values = ["free"] - } -} -`) + ipam_ids = [aws_vpc_ipam.test.id] + filter { + name = "tier" + values = ["free"] + } } + +`)} diff --git a/internal/service/ec2/service_package_gen.go b/internal/service/ec2/service_package_gen.go index b5d97971861..383196a0823 100644 --- a/internal/service/ec2/service_package_gen.go +++ b/internal/service/ec2/service_package_gen.go @@ -25,12 +25,12 @@ func (p *servicePackage) FrameworkDataSources(ctx context.Context) []*types.Serv Name: "Spot Data Feed Subscription Data Source", }, { - Factory: newDataSourceAwsVpcIpam, + Factory: newDataSourceVPCIPAM, TypeName: "aws_vpc_ipam", Name: "AWS IPAM", }, { - Factory: newDataSourceAwsVpcIpams, + Factory: newDataSourceVPCIPAMs, TypeName: "aws_vpc_ipams", Name: "AWS IPAM", }, From 82333884c47b612720516d7dcd3346c4614f32f8 Mon Sep 17 00:00:00 2001 From: Ismayil Mirzali Date: Wed, 22 Jan 2025 11:17:42 +0200 Subject: [PATCH 04/14] fix: formatting issue Signed-off-by: Ismayil Mirzali --- internal/service/ec2/aws_vpc_ipams_data_source_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/service/ec2/aws_vpc_ipams_data_source_test.go b/internal/service/ec2/aws_vpc_ipams_data_source_test.go index 74540c37335..7141a1f016b 100644 --- a/internal/service/ec2/aws_vpc_ipams_data_source_test.go +++ b/internal/service/ec2/aws_vpc_ipams_data_source_test.go @@ -63,4 +63,5 @@ data "aws_vpc_ipams" "free" { } } -`)} +`) +} From 3046edc1f42b7948c272b7579ed6e1fb767039db Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Fri, 31 Jan 2025 09:44:09 -0500 Subject: [PATCH 05/14] d/aws_vpc_ipam[s]: rename source files --- .../ec2/{aws_vpc_ipam_data_source.go => vpc_ipam_data_source.go} | 0 ..._vpc_ipam_data_source_test.go => vpc_ipam_data_source_test.go} | 0 .../{aws_vpc_ipams_data_source.go => vpc_ipams_data_source.go} | 0 ...pc_ipams_data_source_test.go => vpc_ipams_data_source_test.go} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename internal/service/ec2/{aws_vpc_ipam_data_source.go => vpc_ipam_data_source.go} (100%) rename internal/service/ec2/{aws_vpc_ipam_data_source_test.go => vpc_ipam_data_source_test.go} (100%) rename internal/service/ec2/{aws_vpc_ipams_data_source.go => vpc_ipams_data_source.go} (100%) rename internal/service/ec2/{aws_vpc_ipams_data_source_test.go => vpc_ipams_data_source_test.go} (100%) diff --git a/internal/service/ec2/aws_vpc_ipam_data_source.go b/internal/service/ec2/vpc_ipam_data_source.go similarity index 100% rename from internal/service/ec2/aws_vpc_ipam_data_source.go rename to internal/service/ec2/vpc_ipam_data_source.go diff --git a/internal/service/ec2/aws_vpc_ipam_data_source_test.go b/internal/service/ec2/vpc_ipam_data_source_test.go similarity index 100% rename from internal/service/ec2/aws_vpc_ipam_data_source_test.go rename to internal/service/ec2/vpc_ipam_data_source_test.go diff --git a/internal/service/ec2/aws_vpc_ipams_data_source.go b/internal/service/ec2/vpc_ipams_data_source.go similarity index 100% rename from internal/service/ec2/aws_vpc_ipams_data_source.go rename to internal/service/ec2/vpc_ipams_data_source.go diff --git a/internal/service/ec2/aws_vpc_ipams_data_source_test.go b/internal/service/ec2/vpc_ipams_data_source_test.go similarity index 100% rename from internal/service/ec2/aws_vpc_ipams_data_source_test.go rename to internal/service/ec2/vpc_ipams_data_source_test.go From 950c2861f4483c4ba9e5d94d3b0ce537578fd94d Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Fri, 31 Jan 2025 10:49:41 -0500 Subject: [PATCH 06/14] d/aws_vpc_ipam[s]: naming cleanup --- internal/service/ec2/service_package_gen.go | 8 ++++---- internal/service/ec2/vpc_ipam_data_source.go | 6 +++--- internal/service/ec2/vpc_ipams_data_source.go | 6 +++--- internal/service/ec2/vpc_ipams_data_source_test.go | 3 +-- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/internal/service/ec2/service_package_gen.go b/internal/service/ec2/service_package_gen.go index 383196a0823..ad26c2de3d1 100644 --- a/internal/service/ec2/service_package_gen.go +++ b/internal/service/ec2/service_package_gen.go @@ -25,14 +25,14 @@ func (p *servicePackage) FrameworkDataSources(ctx context.Context) []*types.Serv Name: "Spot Data Feed Subscription Data Source", }, { - Factory: newDataSourceVPCIPAM, + Factory: newVPCIPAMDataSource, TypeName: "aws_vpc_ipam", - Name: "AWS IPAM", + Name: "IPAM", }, { - Factory: newDataSourceVPCIPAMs, + Factory: newVPCIPAMsDataSource, TypeName: "aws_vpc_ipams", - Name: "AWS IPAM", + Name: "IPAMs", }, { Factory: newSecurityGroupRuleDataSource, diff --git a/internal/service/ec2/vpc_ipam_data_source.go b/internal/service/ec2/vpc_ipam_data_source.go index a1352e27cc5..ca22916993c 100644 --- a/internal/service/ec2/vpc_ipam_data_source.go +++ b/internal/service/ec2/vpc_ipam_data_source.go @@ -18,13 +18,13 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -// @FrameworkDataSource("aws_vpc_ipam", name="AWS IPAM") -func newDataSourceVPCIPAM(context.Context) (datasource.DataSourceWithConfigure, error) { +// @FrameworkDataSource("aws_vpc_ipam", name="IPAM") +func newVPCIPAMDataSource(context.Context) (datasource.DataSourceWithConfigure, error) { return &dataSourceVPCIPAM{}, nil } const ( - DSNameVPCIPAM = "AWS IPAM Data Source" + DSNameVPCIPAM = "IPAM Data Source" ) type dataSourceVPCIPAM struct { diff --git a/internal/service/ec2/vpc_ipams_data_source.go b/internal/service/ec2/vpc_ipams_data_source.go index 11f99cdd3d9..57183c8b701 100644 --- a/internal/service/ec2/vpc_ipams_data_source.go +++ b/internal/service/ec2/vpc_ipams_data_source.go @@ -18,13 +18,13 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -// @FrameworkDataSource("aws_vpc_ipams", name="AWS IPAM") -func newDataSourceVPCIPAMs(context.Context) (datasource.DataSourceWithConfigure, error) { +// @FrameworkDataSource("aws_vpc_ipams", name="IPAMs") +func newVPCIPAMsDataSource(context.Context) (datasource.DataSourceWithConfigure, error) { return &dataSourceVPCIPAMs{}, nil } const ( - DSNameVPCIPAMs = "AWS IPAMs Data Source" + DSNameVPCIPAMs = "IPAMs Data Source" ) type dataSourceVPCIPAMs struct { diff --git a/internal/service/ec2/vpc_ipams_data_source_test.go b/internal/service/ec2/vpc_ipams_data_source_test.go index 7141a1f016b..dd3d585abb9 100644 --- a/internal/service/ec2/vpc_ipams_data_source_test.go +++ b/internal/service/ec2/vpc_ipams_data_source_test.go @@ -11,7 +11,7 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -func TestAccEC2VPCIPAMsDataSource_Tiered(t *testing.T) { +func TestAccVPCIPAMsDataSource_tiered(t *testing.T) { ctx := acctest.Context(t) resourceName := "aws_vpc_ipam.test" dataSourceName := "data.aws_vpc_ipams.test" @@ -62,6 +62,5 @@ data "aws_vpc_ipams" "free" { values = ["free"] } } - `) } From 3bfb176a699e93d746770dacf293312f6f5ff22c Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Fri, 31 Jan 2025 11:06:37 -0500 Subject: [PATCH 07/14] d/aws_vpc_ipam: tidy tagging --- internal/service/ec2/service_package_gen.go | 1 + internal/service/ec2/vpc_ipam_data_source.go | 7 +++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/service/ec2/service_package_gen.go b/internal/service/ec2/service_package_gen.go index ad26c2de3d1..aa4cdc67218 100644 --- a/internal/service/ec2/service_package_gen.go +++ b/internal/service/ec2/service_package_gen.go @@ -28,6 +28,7 @@ func (p *servicePackage) FrameworkDataSources(ctx context.Context) []*types.Serv Factory: newVPCIPAMDataSource, TypeName: "aws_vpc_ipam", Name: "IPAM", + Tags: &types.ServicePackageResourceTags{}, }, { Factory: newVPCIPAMsDataSource, diff --git a/internal/service/ec2/vpc_ipam_data_source.go b/internal/service/ec2/vpc_ipam_data_source.go index ca22916993c..00577088f41 100644 --- a/internal/service/ec2/vpc_ipam_data_source.go +++ b/internal/service/ec2/vpc_ipam_data_source.go @@ -19,6 +19,8 @@ import ( ) // @FrameworkDataSource("aws_vpc_ipam", name="IPAM") +// @Tags +// @Testing(tagsTest=false) func newVPCIPAMDataSource(context.Context) (datasource.DataSourceWithConfigure, error) { return &dataSourceVPCIPAM{}, nil } @@ -112,10 +114,7 @@ func (d *dataSourceVPCIPAM) Read(ctx context.Context, req datasource.ReadRequest return } - data.Tags = tftags.FlattenStringValueMap(ctx, keyValueTags(ctx, ipam.Tags).IgnoreAWS().Map()) - // ignoreTagsConfig := d.Meta().IgnoreTagsConfig(ctx) - // tags := keyValueTags(ctx, ipam.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig) - // data.Tags = tftags.FlattenStringValueMap(ctx, keyValueTags(ctx, ipam.Tags).IgnoreAWS().Map()) + setTagsOut(ctx, ipam.Tags) resp.Diagnostics.Append(resp.State.Set(ctx, &data)...) } From 2b5b89fb982ca4b4e1f2c58c4683fc1ced773691 Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Fri, 31 Jan 2025 11:24:01 -0500 Subject: [PATCH 08/14] d/aws_vpc_ipam: tweak flattener, add test checks --- internal/service/ec2/vpc_ipam_data_source.go | 8 ++++---- internal/service/ec2/vpc_ipam_data_source_test.go | 13 ++++++++++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/internal/service/ec2/vpc_ipam_data_source.go b/internal/service/ec2/vpc_ipam_data_source.go index 00577088f41..e6875a5085b 100644 --- a/internal/service/ec2/vpc_ipam_data_source.go +++ b/internal/service/ec2/vpc_ipam_data_source.go @@ -55,8 +55,8 @@ func (d *dataSourceVPCIPAM) Schema(ctx context.Context, req datasource.SchemaReq Computed: true, }, "tier": schema.StringAttribute{ - Computed: true, CustomType: fwtypes.StringEnumType[awstypes.IpamTier](), + Computed: true, }, "scope_count": schema.Int32Attribute{ Computed: true, @@ -81,8 +81,8 @@ func (d *dataSourceVPCIPAM) Schema(ctx context.Context, req datasource.SchemaReq Computed: true, }, names.AttrState: schema.StringAttribute{ - Computed: true, CustomType: fwtypes.StringEnumType[awstypes.IpamState](), + Computed: true, }, "state_message": schema.StringAttribute{ Computed: true, @@ -109,7 +109,7 @@ func (d *dataSourceVPCIPAM) Read(ctx context.Context, req datasource.ReadRequest return } - resp.Diagnostics.Append(flex.Flatten(ctx, ipam, &data, flex.WithFieldNamePrefix("ipam"))...) + resp.Diagnostics.Append(flex.Flatten(ctx, ipam, &data)...) if resp.Diagnostics.HasError() { return } @@ -124,7 +124,7 @@ type dataSourceVPCIPAMSummaryModel struct { DefaultResourceDiscoveryAssociationId types.String `tfsdk:"default_resource_discovery_association_id"` DefaultResourceDiscoveryId types.String `tfsdk:"default_resource_discovery_id"` EnablePrivateGua types.Bool `tfsdk:"enable_private_gua"` - IpamARN types.String `tfsdk:"arn"` + IpamArn types.String `tfsdk:"arn"` IpamId types.String `tfsdk:"id"` IpamRegion types.String `tfsdk:"region"` OperatingRegions fwtypes.ListNestedObjectValueOf[ipamOperatingRegionModel] `tfsdk:"operating_regions"` diff --git a/internal/service/ec2/vpc_ipam_data_source_test.go b/internal/service/ec2/vpc_ipam_data_source_test.go index 92b5d77ba84..852455e3b85 100644 --- a/internal/service/ec2/vpc_ipam_data_source_test.go +++ b/internal/service/ec2/vpc_ipam_data_source_test.go @@ -11,7 +11,7 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -func TestAccEC2VPCIPAMDataSource_Basic(t *testing.T) { +func TestAccVPCIPAMDataSource_basic(t *testing.T) { ctx := acctest.Context(t) resourceName := "aws_vpc_ipam.test" dataSourceName := "data.aws_vpc_ipam.test" @@ -28,7 +28,18 @@ func TestAccEC2VPCIPAMDataSource_Basic(t *testing.T) { { Config: testAccVPCIPAMDataSourceConfig_basic(), Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrPair(dataSourceName, "arn", resourceName, "arn"), + resource.TestCheckResourceAttrPair(dataSourceName, "description", resourceName, "description"), + resource.TestCheckResourceAttrPair(dataSourceName, "id", resourceName, "id"), + resource.TestCheckResourceAttrPair(dataSourceName, "default_resource_discovery_id", resourceName, "default_resource_discovery_id"), + resource.TestCheckResourceAttrPair(dataSourceName, "default_resource_discovery_association_id", resourceName, "default_resource_discovery_association_id"), + resource.TestCheckResourceAttrPair(dataSourceName, "enable_private_gua", resourceName, "enable_private_gua"), resource.TestCheckResourceAttrPair(dataSourceName, "operating_regions.0.region_name", resourceName, "operating_regions.0.region_name"), + resource.TestCheckResourceAttrPair(dataSourceName, "private_default_scope_id", resourceName, "private_default_scope_id"), + resource.TestCheckResourceAttrPair(dataSourceName, "public_default_scope_id", resourceName, "public_default_scope_id"), + resource.TestCheckResourceAttrPair(dataSourceName, "scope_count", resourceName, "scope_count"), + resource.TestCheckResourceAttrPair(dataSourceName, "tier", resourceName, "tier"), + resource.TestCheckResourceAttrPair(dataSourceName, "tags.%", resourceName, "tags.%"), resource.TestCheckResourceAttrPair(dataSourceName, "tags.Test", resourceName, "tags.Test"), ), }, From 278590064dc2e8696aab97f05a7b3a31fb889f5a Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Fri, 31 Jan 2025 11:33:27 -0500 Subject: [PATCH 09/14] d/aws_vpc_ipam: alphabetize attributes --- internal/service/ec2/vpc_ipam_data_source.go | 28 ++++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/internal/service/ec2/vpc_ipam_data_source.go b/internal/service/ec2/vpc_ipam_data_source.go index e6875a5085b..f56ceedbd92 100644 --- a/internal/service/ec2/vpc_ipam_data_source.go +++ b/internal/service/ec2/vpc_ipam_data_source.go @@ -41,31 +41,20 @@ func (d *dataSourceVPCIPAM) Schema(ctx context.Context, req datasource.SchemaReq resp.Schema = schema.Schema{ Attributes: map[string]schema.Attribute{ names.AttrARN: framework.ARNAttributeComputedOnly(), - names.AttrDescription: schema.StringAttribute{ - Computed: true, - }, - names.AttrID: schema.StringAttribute{ - Required: true, - }, - names.AttrTags: tftags.TagsAttributeComputedOnly(), "default_resource_discovery_association_id": schema.StringAttribute{ Computed: true, }, "default_resource_discovery_id": schema.StringAttribute{ Computed: true, }, - "tier": schema.StringAttribute{ - CustomType: fwtypes.StringEnumType[awstypes.IpamTier](), - Computed: true, - }, - "scope_count": schema.Int32Attribute{ + names.AttrDescription: schema.StringAttribute{ Computed: true, }, "enable_private_gua": schema.BoolAttribute{ Computed: true, }, - names.AttrRegion: schema.StringAttribute{ - Computed: true, + names.AttrID: schema.StringAttribute{ + Required: true, }, "operating_regions": framework.DataSourceComputedListOfObjectAttribute[ipamOperatingRegionModel](ctx), names.AttrOwnerID: schema.StringAttribute{ @@ -77,9 +66,15 @@ func (d *dataSourceVPCIPAM) Schema(ctx context.Context, req datasource.SchemaReq "public_default_scope_id": schema.StringAttribute{ Computed: true, }, + names.AttrRegion: schema.StringAttribute{ + Computed: true, + }, "resource_discovery_association_count": schema.Int32Attribute{ Computed: true, }, + "scope_count": schema.Int32Attribute{ + Computed: true, + }, names.AttrState: schema.StringAttribute{ CustomType: fwtypes.StringEnumType[awstypes.IpamState](), Computed: true, @@ -87,6 +82,11 @@ func (d *dataSourceVPCIPAM) Schema(ctx context.Context, req datasource.SchemaReq "state_message": schema.StringAttribute{ Computed: true, }, + names.AttrTags: tftags.TagsAttributeComputedOnly(), + "tier": schema.StringAttribute{ + CustomType: fwtypes.StringEnumType[awstypes.IpamTier](), + Computed: true, + }, }, } } From 76b5472f1d08e704afbc37123e42fa9a3950b8ca Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Fri, 31 Jan 2025 12:02:45 -0500 Subject: [PATCH 10/14] d/aws_vpc_ipams: split basic, filter acctests --- .../service/ec2/vpc_ipams_data_source_test.go | 45 ++++++++++++++++--- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/internal/service/ec2/vpc_ipams_data_source_test.go b/internal/service/ec2/vpc_ipams_data_source_test.go index dd3d585abb9..5379c76ee4c 100644 --- a/internal/service/ec2/vpc_ipams_data_source_test.go +++ b/internal/service/ec2/vpc_ipams_data_source_test.go @@ -11,12 +11,10 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -func TestAccVPCIPAMsDataSource_tiered(t *testing.T) { +func TestAccVPCIPAMsDataSource_basic(t *testing.T) { ctx := acctest.Context(t) resourceName := "aws_vpc_ipam.test" dataSourceName := "data.aws_vpc_ipams.test" - dataSourceFree := "data.aws_vpc_ipams.free" - dataSourceAdvanced := "data.aws_vpc_ipams.advanced" resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { @@ -29,24 +27,57 @@ func TestAccVPCIPAMsDataSource_tiered(t *testing.T) { CheckDestroy: acctest.CheckDestroyNoop, Steps: []resource.TestStep{ { - Config: testAccVPCIPAMsDataSourceConfig_filterWithTiers(), + Config: testAccVPCIPAMsDataSourceConfig_basic(), Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(dataSourceName, "ipams.#", "1"), + resource.TestCheckResourceAttrPair(dataSourceName, "ipams.0.id", resourceName, "id"), resource.TestCheckResourceAttrPair(dataSourceName, "ipams.0.operating_regions.0.region_name", resourceName, "operating_regions.0.region_name"), resource.TestCheckResourceAttrPair(dataSourceName, "ipams.0.tags.#", resourceName, "tags.#"), - resource.TestCheckResourceAttr(dataSourceAdvanced, "ipams.#", "1"), - resource.TestCheckResourceAttr(dataSourceFree, "ipams.#", "0"), ), }, }, }) } -func testAccVPCIPAMsDataSourceConfig_filterWithTiers() string { +func TestAccVPCIPAMsDataSource_filter(t *testing.T) { + ctx := acctest.Context(t) + resourceName := "aws_vpc_ipam.test" + dataSourceNameAdvanced := "data.aws_vpc_ipams.advanced" + dataSourceNameFree := "data.aws_vpc_ipams.free" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + testAccPreCheck(ctx, t) + }, + + ErrorCheck: acctest.ErrorCheck(t, names.EC2ServiceID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: acctest.CheckDestroyNoop, + Steps: []resource.TestStep{ + { + Config: testAccVPCIPAMsDataSourceConfig_filter(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(dataSourceNameAdvanced, "ipams.#", "1"), + resource.TestCheckResourceAttrPair(dataSourceNameAdvanced, "ipams.0.id", resourceName, "id"), + resource.TestCheckResourceAttrPair(dataSourceNameAdvanced, "ipams.0.tier", resourceName, "tier"), + resource.TestCheckResourceAttr(dataSourceNameFree, "ipams.#", "0"), + ), + }, + }, + }) +} + +func testAccVPCIPAMsDataSourceConfig_basic() string { return acctest.ConfigCompose(testAccIPAMConfig_tags("Some", "Value"), ` data "aws_vpc_ipams" "test" { ipam_ids = [aws_vpc_ipam.test.id] } +`) +} +func testAccVPCIPAMsDataSourceConfig_filter() string { + return acctest.ConfigCompose(testAccIPAMConfig_tags("Some", "Value"), ` data "aws_vpc_ipams" "advanced" { ipam_ids = [aws_vpc_ipam.test.id] filter { From 783d5b8d8afdafc0460a73029e3031ef78b9f3bd Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Fri, 31 Jan 2025 12:03:57 -0500 Subject: [PATCH 11/14] d/aws_vpc_ipam[s](doc): add examples, tidy up --- website/docs/d/vpc_ipam.html.markdown | 2 +- website/docs/d/vpc_ipams.html.markdown | 32 ++++++++++++++++++-------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/website/docs/d/vpc_ipam.html.markdown b/website/docs/d/vpc_ipam.html.markdown index 0d9a23d8721..da526282322 100644 --- a/website/docs/d/vpc_ipam.html.markdown +++ b/website/docs/d/vpc_ipam.html.markdown @@ -16,7 +16,7 @@ Terraform data source for managing an AWS VPC IPAM resource. ```terraform data "aws_vpc_ipam" "example" { - id = "" + id = "ipam-abcd1234" } ``` diff --git a/website/docs/d/vpc_ipams.html.markdown b/website/docs/d/vpc_ipams.html.markdown index eddc025e394..6ff848bc29b 100644 --- a/website/docs/d/vpc_ipams.html.markdown +++ b/website/docs/d/vpc_ipams.html.markdown @@ -12,12 +12,32 @@ Use this data source to get details of Amazon VPC IPAM resources ## Example Usage +### Basic Usage + +```terraform +data "aws_vpc_ipams" "example" { + ipam_ids = ["ipam-abcd1234"] +} +``` + +### Filter by `tags` + ```terraform -# Declare the data source -data "aws_vpc_ipams" "ipams" { +data "aws_vpc_ipams" "example" { filter { name = "tags.Some" - values = ["value"] + values = ["Value"] + } +} +``` + +### Filter by `tier` + +```terraform +data "aws_vpc_ipams" "example" { + filter { + name = "tier" + values = ["free"] } } ``` @@ -62,9 +82,3 @@ All of the argument attributes except `filter` are also exported as result attri * `state` - Current state of the IPAM. * `state_message` - State message of the IPAM. * `tier` - IPAM Tier. - -## Timeouts - -[Configuration options](https://developer.hashicorp.com/terraform/language/resources/syntax#operation-timeouts): - -- `read` - (Default `20m`) From 35ffecad94d0c2d5c89eda7e320fc30f03e52fc5 Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Fri, 31 Jan 2025 12:11:28 -0500 Subject: [PATCH 12/14] d/aws_vpc_ipam[s](doc): rename region attribute to `ipam_region` This will prevent future naming conflicts with multi-region support planned for v6.0.0. --- internal/service/ec2/vpc_ipam_data_source.go | 8 ++++---- website/docs/d/vpc_ipam.html.markdown | 2 +- website/docs/d/vpc_ipams.html.markdown | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/service/ec2/vpc_ipam_data_source.go b/internal/service/ec2/vpc_ipam_data_source.go index f56ceedbd92..4ada1ff7b76 100644 --- a/internal/service/ec2/vpc_ipam_data_source.go +++ b/internal/service/ec2/vpc_ipam_data_source.go @@ -56,6 +56,9 @@ func (d *dataSourceVPCIPAM) Schema(ctx context.Context, req datasource.SchemaReq names.AttrID: schema.StringAttribute{ Required: true, }, + "ipam_region": schema.StringAttribute{ + Computed: true, + }, "operating_regions": framework.DataSourceComputedListOfObjectAttribute[ipamOperatingRegionModel](ctx), names.AttrOwnerID: schema.StringAttribute{ Computed: true, @@ -66,9 +69,6 @@ func (d *dataSourceVPCIPAM) Schema(ctx context.Context, req datasource.SchemaReq "public_default_scope_id": schema.StringAttribute{ Computed: true, }, - names.AttrRegion: schema.StringAttribute{ - Computed: true, - }, "resource_discovery_association_count": schema.Int32Attribute{ Computed: true, }, @@ -126,7 +126,7 @@ type dataSourceVPCIPAMSummaryModel struct { EnablePrivateGua types.Bool `tfsdk:"enable_private_gua"` IpamArn types.String `tfsdk:"arn"` IpamId types.String `tfsdk:"id"` - IpamRegion types.String `tfsdk:"region"` + IpamRegion types.String `tfsdk:"ipam_region"` OperatingRegions fwtypes.ListNestedObjectValueOf[ipamOperatingRegionModel] `tfsdk:"operating_regions"` OwnerID types.String `tfsdk:"owner_id"` PrivateDefaultScopeId types.String `tfsdk:"private_default_scope_id"` diff --git a/website/docs/d/vpc_ipam.html.markdown b/website/docs/d/vpc_ipam.html.markdown index da526282322..a565e6d9bb7 100644 --- a/website/docs/d/vpc_ipam.html.markdown +++ b/website/docs/d/vpc_ipam.html.markdown @@ -36,11 +36,11 @@ This data source exports the following attributes in addition to the arguments a * `description` - Description for the IPAM. * `enable_private_gua` - If private GUA is enabled. * `id` - ID of the IPAM resource. +* `ipam_region` - Region that the IPAM exists in. * `operating_regions` - Regions that the IPAM is configured to operate in. * `owner_id` - ID of the account that owns this IPAM. * `private_default_scope_id` - ID of the default private scope. * `public_default_scope_id` - ID of the default public scope. -* `region` - Region that the IPAM exists in. * `resource_discovery_association_count` - Number of resource discovery associations. * `scope_count` - Number of scopes on this IPAM. * `state` - Current state of the IPAM. diff --git a/website/docs/d/vpc_ipams.html.markdown b/website/docs/d/vpc_ipams.html.markdown index 6ff848bc29b..f85ffe968e0 100644 --- a/website/docs/d/vpc_ipams.html.markdown +++ b/website/docs/d/vpc_ipams.html.markdown @@ -72,11 +72,11 @@ All of the argument attributes except `filter` are also exported as result attri * `description` - Description for the IPAM. * `enable_private_gua` - If private GUA is enabled. * `id` - ID of the IPAM resource. +* `ipam_region` - Region that the IPAM exists in. * `operating_regions` - Regions that the IPAM is configured to operate in. * `owner_id` - ID of the account that owns this IPAM. * `private_default_scope_id` - ID of the default private scope. * `public_default_scope_id` - ID of the default public scope. -* `region` - Region that the IPAM exists in. * `resource_discovery_association_count` - Number of resource discovery associations. * `scope_count` - Number of scopes on this IPAM. * `state` - Current state of the IPAM. From 6e93a8aea8a928b98786a5b83fd75db9dc1dde48 Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Fri, 31 Jan 2025 12:34:24 -0500 Subject: [PATCH 13/14] d/aws_vpc_ipam[s](doc): make page description, summary consistent --- website/docs/d/vpc_ipam.html.markdown | 4 ++-- website/docs/d/vpc_ipams.html.markdown | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/docs/d/vpc_ipam.html.markdown b/website/docs/d/vpc_ipam.html.markdown index a565e6d9bb7..85ceb043157 100644 --- a/website/docs/d/vpc_ipam.html.markdown +++ b/website/docs/d/vpc_ipam.html.markdown @@ -3,12 +3,12 @@ subcategory: "VPC IPAM (IP Address Manager)" layout: "aws" page_title: "AWS: aws_vpc_ipam" description: |- - Terraform data source for managing an AWS VPC IPAM. + Terraform data source for managing a VPC IPAM. --- # Data Source: aws_vpc_ipam -Terraform data source for managing an AWS VPC IPAM resource. +Terraform data source for managing a VPC IPAM. ## Example Usage diff --git a/website/docs/d/vpc_ipams.html.markdown b/website/docs/d/vpc_ipams.html.markdown index f85ffe968e0..c7da416bf13 100644 --- a/website/docs/d/vpc_ipams.html.markdown +++ b/website/docs/d/vpc_ipams.html.markdown @@ -3,12 +3,12 @@ subcategory: "VPC IPAM (IP Address Manager)" layout: "aws" page_title: "AWS: aws_vpc_ipams" description: |- - Describes AWS VPC IPAM resources + Terraform data source for managing VPC IPAMs. --- # Data Source: aws_vpc_ipams -Use this data source to get details of Amazon VPC IPAM resources +Terraform data source for managing VPC IPAMs. ## Example Usage From ee17088046389e7c84553b8dc0ed91f2d720758d Mon Sep 17 00:00:00 2001 From: Jared Baker Date: Fri, 31 Jan 2025 12:35:16 -0500 Subject: [PATCH 14/14] chore: make fix-constants --- internal/service/ec2/vpc_ipam_data_source_test.go | 8 ++++---- internal/service/ec2/vpc_ipams_data_source_test.go | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/service/ec2/vpc_ipam_data_source_test.go b/internal/service/ec2/vpc_ipam_data_source_test.go index 852455e3b85..09ff3eceafa 100644 --- a/internal/service/ec2/vpc_ipam_data_source_test.go +++ b/internal/service/ec2/vpc_ipam_data_source_test.go @@ -28,9 +28,9 @@ func TestAccVPCIPAMDataSource_basic(t *testing.T) { { Config: testAccVPCIPAMDataSourceConfig_basic(), Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrPair(dataSourceName, "arn", resourceName, "arn"), - resource.TestCheckResourceAttrPair(dataSourceName, "description", resourceName, "description"), - resource.TestCheckResourceAttrPair(dataSourceName, "id", resourceName, "id"), + resource.TestCheckResourceAttrPair(dataSourceName, names.AttrARN, resourceName, names.AttrARN), + resource.TestCheckResourceAttrPair(dataSourceName, names.AttrDescription, resourceName, names.AttrDescription), + resource.TestCheckResourceAttrPair(dataSourceName, names.AttrID, resourceName, names.AttrID), resource.TestCheckResourceAttrPair(dataSourceName, "default_resource_discovery_id", resourceName, "default_resource_discovery_id"), resource.TestCheckResourceAttrPair(dataSourceName, "default_resource_discovery_association_id", resourceName, "default_resource_discovery_association_id"), resource.TestCheckResourceAttrPair(dataSourceName, "enable_private_gua", resourceName, "enable_private_gua"), @@ -39,7 +39,7 @@ func TestAccVPCIPAMDataSource_basic(t *testing.T) { resource.TestCheckResourceAttrPair(dataSourceName, "public_default_scope_id", resourceName, "public_default_scope_id"), resource.TestCheckResourceAttrPair(dataSourceName, "scope_count", resourceName, "scope_count"), resource.TestCheckResourceAttrPair(dataSourceName, "tier", resourceName, "tier"), - resource.TestCheckResourceAttrPair(dataSourceName, "tags.%", resourceName, "tags.%"), + resource.TestCheckResourceAttrPair(dataSourceName, acctest.CtTagsPercent, resourceName, acctest.CtTagsPercent), resource.TestCheckResourceAttrPair(dataSourceName, "tags.Test", resourceName, "tags.Test"), ), }, diff --git a/internal/service/ec2/vpc_ipams_data_source_test.go b/internal/service/ec2/vpc_ipams_data_source_test.go index 5379c76ee4c..707061ba10f 100644 --- a/internal/service/ec2/vpc_ipams_data_source_test.go +++ b/internal/service/ec2/vpc_ipams_data_source_test.go @@ -30,7 +30,7 @@ func TestAccVPCIPAMsDataSource_basic(t *testing.T) { Config: testAccVPCIPAMsDataSourceConfig_basic(), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "ipams.#", "1"), - resource.TestCheckResourceAttrPair(dataSourceName, "ipams.0.id", resourceName, "id"), + resource.TestCheckResourceAttrPair(dataSourceName, "ipams.0.id", resourceName, names.AttrID), resource.TestCheckResourceAttrPair(dataSourceName, "ipams.0.operating_regions.0.region_name", resourceName, "operating_regions.0.region_name"), resource.TestCheckResourceAttrPair(dataSourceName, "ipams.0.tags.#", resourceName, "tags.#"), ), @@ -59,7 +59,7 @@ func TestAccVPCIPAMsDataSource_filter(t *testing.T) { Config: testAccVPCIPAMsDataSourceConfig_filter(), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(dataSourceNameAdvanced, "ipams.#", "1"), - resource.TestCheckResourceAttrPair(dataSourceNameAdvanced, "ipams.0.id", resourceName, "id"), + resource.TestCheckResourceAttrPair(dataSourceNameAdvanced, "ipams.0.id", resourceName, names.AttrID), resource.TestCheckResourceAttrPair(dataSourceNameAdvanced, "ipams.0.tier", resourceName, "tier"), resource.TestCheckResourceAttr(dataSourceNameFree, "ipams.#", "0"), ),