From bfeba24a98160339fef16750c87dd9e6acb41739 Mon Sep 17 00:00:00 2001 From: Renato Orgito Date: Thu, 10 Dec 2020 17:42:15 -0300 Subject: [PATCH 1/6] ds/ec2_instance_type_offering: return locations field --- aws/data_source_aws_ec2_instance_type_offerings.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/aws/data_source_aws_ec2_instance_type_offerings.go b/aws/data_source_aws_ec2_instance_type_offerings.go index 19143031bb7f..36de59c21a7b 100644 --- a/aws/data_source_aws_ec2_instance_type_offerings.go +++ b/aws/data_source_aws_ec2_instance_type_offerings.go @@ -47,6 +47,7 @@ func dataSourceAwsEc2InstanceTypeOfferingsRead(d *schema.ResourceData, meta inte } var instanceTypes []string + var locations []string for { output, err := conn.DescribeInstanceTypeOfferings(input) @@ -65,6 +66,7 @@ func dataSourceAwsEc2InstanceTypeOfferingsRead(d *schema.ResourceData, meta inte } instanceTypes = append(instanceTypes, aws.StringValue(instanceTypeOffering.InstanceType)) + locations = append(locations, aws.StringValue(instanceTypeOffering.Location)) } if aws.StringValue(output.NextToken) == "" { @@ -78,6 +80,10 @@ func dataSourceAwsEc2InstanceTypeOfferingsRead(d *schema.ResourceData, meta inte return fmt.Errorf("error setting instance_types: %w", err) } + if err := d.Set("locations", locations); err != nil { + return fmt.Errorf("error setting locations: %s", err) + } + d.SetId(meta.(*AWSClient).region) return nil From 1a15bd23f04c52a6755961bfb757897398615bb4 Mon Sep 17 00:00:00 2001 From: Renato Orgito Date: Thu, 10 Dec 2020 17:42:42 -0300 Subject: [PATCH 2/6] tests/ds/ec2_instance_type_offering: return locations field --- ...ource_aws_ec2_instance_type_offerings_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/aws/data_source_aws_ec2_instance_type_offerings_test.go b/aws/data_source_aws_ec2_instance_type_offerings_test.go index b3b41eb3f720..6a90deb830ce 100644 --- a/aws/data_source_aws_ec2_instance_type_offerings_test.go +++ b/aws/data_source_aws_ec2_instance_type_offerings_test.go @@ -42,6 +42,7 @@ func TestAccAWSEc2InstanceTypeOfferingsDataSource_LocationType(t *testing.T) { Config: testAccAWSEc2InstanceTypeOfferingsDataSourceConfigLocationType(), Check: resource.ComposeTestCheckFunc( testAccCheckEc2InstanceTypeOfferingsInstanceTypes(dataSourceName), + testAccCheckEc2InstanceTypeOfferingsLocations(dataSourceName), ), }, }, @@ -63,6 +64,21 @@ func testAccCheckEc2InstanceTypeOfferingsInstanceTypes(dataSourceName string) re } } +func testAccCheckEc2InstanceTypeOfferingsLocations(dataSourceName string) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[dataSourceName] + if !ok { + return fmt.Errorf("Not found: %s", dataSourceName) + } + + if v := rs.Primary.Attributes["locations.#"]; v == "0" { + return fmt.Errorf("expected at least one locations result, got none") + } + + return nil + } +} + func testAccPreCheckAWSEc2InstanceTypeOfferings(t *testing.T) { conn := testAccProvider.Meta().(*AWSClient).ec2conn From abc67dce822e756957d0ee57bbb7f0b86857a38d Mon Sep 17 00:00:00 2001 From: Michael Juliano Date: Tue, 23 Feb 2021 15:58:31 -0500 Subject: [PATCH 3/6] Added locations and location_types to the output. #15272 --- ..._source_aws_ec2_instance_type_offerings.go | 50 ++++++++++--------- ...ce_aws_ec2_instance_type_offerings_test.go | 8 +++ 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/aws/data_source_aws_ec2_instance_type_offerings.go b/aws/data_source_aws_ec2_instance_type_offerings.go index 36de59c21a7b..fb1c12dd3746 100644 --- a/aws/data_source_aws_ec2_instance_type_offerings.go +++ b/aws/data_source_aws_ec2_instance_type_offerings.go @@ -20,14 +20,20 @@ func dataSourceAwsEc2InstanceTypeOfferings() *schema.Resource { Computed: true, Elem: &schema.Schema{Type: schema.TypeString}, }, + "locations": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Schema{Type: schema.TypeString}, + }, "location_type": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validation.StringInSlice([]string{ - ec2.LocationTypeAvailabilityZone, - ec2.LocationTypeAvailabilityZoneId, - ec2.LocationTypeRegion, - }, false), + Type: schema.TypeString, + Optional: true, + ValidateFunc: validation.StringInSlice(ec2.LocationType_Values(), false), + }, + "location_types": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Schema{Type: schema.TypeString}, }, }, } @@ -48,40 +54,38 @@ func dataSourceAwsEc2InstanceTypeOfferingsRead(d *schema.ResourceData, meta inte var instanceTypes []string var locations []string + var locationTypes []string - for { - output, err := conn.DescribeInstanceTypeOfferings(input) - - if err != nil { - return fmt.Errorf("error reading EC2 Instance Type Offerings: %w", err) - } - - if output == nil { - break + err := conn.DescribeInstanceTypeOfferingsPages(input, func(page *ec2.DescribeInstanceTypeOfferingsOutput, lastPage bool) bool { + if page == nil { + return !lastPage } - for _, instanceTypeOffering := range output.InstanceTypeOfferings { + for _, instanceTypeOffering := range page.InstanceTypeOfferings { if instanceTypeOffering == nil { continue } instanceTypes = append(instanceTypes, aws.StringValue(instanceTypeOffering.InstanceType)) locations = append(locations, aws.StringValue(instanceTypeOffering.Location)) + locationTypes = append(locationTypes, aws.StringValue(instanceTypeOffering.LocationType)) } - if aws.StringValue(output.NextToken) == "" { - break - } + return !lastPage + }) - input.NextToken = output.NextToken + if err != nil { + return fmt.Errorf("error reading EC2 Instance Type Offerings: %w", err) } if err := d.Set("instance_types", instanceTypes); err != nil { return fmt.Errorf("error setting instance_types: %w", err) } - if err := d.Set("locations", locations); err != nil { - return fmt.Errorf("error setting locations: %s", err) + return fmt.Errorf("error setting locations: %w", err) + } + if err := d.Set("location_types", locationTypes); err != nil { + return fmt.Errorf("error setting location_types: %w", err) } d.SetId(meta.(*AWSClient).region) diff --git a/aws/data_source_aws_ec2_instance_type_offerings_test.go b/aws/data_source_aws_ec2_instance_type_offerings_test.go index 6a90deb830ce..bbeab9864776 100644 --- a/aws/data_source_aws_ec2_instance_type_offerings_test.go +++ b/aws/data_source_aws_ec2_instance_type_offerings_test.go @@ -60,6 +60,14 @@ func testAccCheckEc2InstanceTypeOfferingsInstanceTypes(dataSourceName string) re return fmt.Errorf("expected at least one instance_types result, got none") } + if v := rs.Primary.Attributes["locations.#"]; v == "0" { + return fmt.Errorf("expected at least one locations result, got none") + } + + if v := rs.Primary.Attributes["location_types.#"]; v == "0" { + return fmt.Errorf("expected at least one location_types result, got none") + } + return nil } } From db6b8cff4caa1861cb4cf15757a5011067797450 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jul 2021 11:30:50 -0400 Subject: [PATCH 4/6] Add CHANGELOG entry. --- .changelog/16704.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/16704.txt diff --git a/.changelog/16704.txt b/.changelog/16704.txt new file mode 100644 index 000000000000..5681b0180b54 --- /dev/null +++ b/.changelog/16704.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +data-source/aws_ec2_instance_type_offerings: Add `locations` and `location_types` attributes +``` \ No newline at end of file From f0cdf78fabdfa57b16c01b57c5e1be70c5e5e2e8 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jul 2021 11:36:44 -0400 Subject: [PATCH 5/6] Update documentation. --- website/docs/d/ec2_instance_type_offerings.html.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/website/docs/d/ec2_instance_type_offerings.html.markdown b/website/docs/d/ec2_instance_type_offerings.html.markdown index e65360ae0773..e18454964c4a 100644 --- a/website/docs/d/ec2_instance_type_offerings.html.markdown +++ b/website/docs/d/ec2_instance_type_offerings.html.markdown @@ -46,3 +46,5 @@ In addition to all arguments above, the following attributes are exported: * `id` - AWS Region. * `instance_types` - Set of EC2 Instance Types. +* `locations` - Set of locations. +* `location_types` - Set of location types. From 383202ea7e78ff96dd8b293be8a223c6d4e1dacc Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 23 Jul 2021 11:40:17 -0400 Subject: [PATCH 6/6] Sets not Lists. --- aws/data_source_aws_ec2_instance_type_offerings.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aws/data_source_aws_ec2_instance_type_offerings.go b/aws/data_source_aws_ec2_instance_type_offerings.go index fb1c12dd3746..4c62aa18b072 100644 --- a/aws/data_source_aws_ec2_instance_type_offerings.go +++ b/aws/data_source_aws_ec2_instance_type_offerings.go @@ -21,7 +21,7 @@ func dataSourceAwsEc2InstanceTypeOfferings() *schema.Resource { Elem: &schema.Schema{Type: schema.TypeString}, }, "locations": { - Type: schema.TypeList, + Type: schema.TypeSet, Computed: true, Elem: &schema.Schema{Type: schema.TypeString}, }, @@ -31,7 +31,7 @@ func dataSourceAwsEc2InstanceTypeOfferings() *schema.Resource { ValidateFunc: validation.StringInSlice(ec2.LocationType_Values(), false), }, "location_types": { - Type: schema.TypeList, + Type: schema.TypeSet, Computed: true, Elem: &schema.Schema{Type: schema.TypeString}, },