From b69130ca51bba2c628ad9e01e5c181b7a8271cdd Mon Sep 17 00:00:00 2001 From: Aegon95 Date: Tue, 26 Apr 2022 22:40:16 +0530 Subject: [PATCH 01/12] Added new datasource for listing instance profiles for a role --- .changelog/23646.txt | 3 + internal/provider/provider.go | 1 + .../iam/instance_profiles_data_source.go | 74 +++++++++++++++++++ .../iam/instance_profiles_data_source_test.go | 58 +++++++++++++++ 4 files changed, 136 insertions(+) create mode 100644 .changelog/23646.txt create mode 100644 internal/service/iam/instance_profiles_data_source.go create mode 100644 internal/service/iam/instance_profiles_data_source_test.go diff --git a/.changelog/23646.txt b/.changelog/23646.txt new file mode 100644 index 000000000000..96830637e9db --- /dev/null +++ b/.changelog/23646.txt @@ -0,0 +1,3 @@ +```release-note:new-data-source +aws_iam_instance_profiles +``` \ No newline at end of file diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 623e936065ea..d950ecef1ab7 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -646,6 +646,7 @@ func Provider() *schema.Provider { "aws_iam_account_alias": iam.DataSourceAccountAlias(), "aws_iam_group": iam.DataSourceGroup(), "aws_iam_instance_profile": iam.DataSourceInstanceProfile(), + "aws_iam_instance_profiles": iam.DataSourceInstanceProfiles(), "aws_iam_openid_connect_provider": iam.DataSourceOpenIDConnectProvider(), "aws_iam_policy": iam.DataSourcePolicy(), "aws_iam_policy_document": iam.DataSourcePolicyDocument(), diff --git a/internal/service/iam/instance_profiles_data_source.go b/internal/service/iam/instance_profiles_data_source.go new file mode 100644 index 000000000000..095429e02ffe --- /dev/null +++ b/internal/service/iam/instance_profiles_data_source.go @@ -0,0 +1,74 @@ +package iam + +import ( + "fmt" + "log" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/iam" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-provider-aws/internal/conns" +) + +func DataSourceInstanceProfiles() *schema.Resource { + return &schema.Resource{ + Read: dataSourceInstanceProfilesRead, + + Schema: map[string]*schema.Schema{ + "role_name": { + Type: schema.TypeString, + Required: true, + }, + "arns": { + Type: schema.TypeSet, + Computed: true, + Elem: &schema.Schema{Type: schema.TypeString}, + }, + "paths": { + Type: schema.TypeSet, + Computed: true, + Elem: &schema.Schema{Type: schema.TypeString}, + }, + "names": { + Type: schema.TypeSet, + Computed: true, + Elem: &schema.Schema{Type: schema.TypeString}, + }, + }, + } +} + +func dataSourceInstanceProfilesRead(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*conns.AWSClient).IAMConn + + roleName := d.Get("role_name").(string) + + req := &iam.ListInstanceProfilesForRoleInput{ + RoleName: &roleName, + } + + log.Printf("[DEBUG] Reading IAM Instance Profiles for given role %s: %s", roleName, req) + resp, err := conn.ListInstanceProfilesForRole(req) + if err != nil { + return fmt.Errorf("Error getting instance profiles: %w", err) + } + if resp == nil { + return fmt.Errorf("no IAM instance profiles found for role %s", roleName) + } + + instanceProfiles := resp.InstanceProfiles + + var arns, paths, names []string + for _, profile := range instanceProfiles { + arns = append(arns, *profile.Arn) + paths = append(paths, *profile.Path) + names = append(names, *profile.InstanceProfileName) + } + + d.SetId(aws.StringValue(&roleName)) + d.Set("arns", arns) + d.Set("paths", paths) + d.Set("names", names) + + return nil +} diff --git a/internal/service/iam/instance_profiles_data_source_test.go b/internal/service/iam/instance_profiles_data_source_test.go new file mode 100644 index 000000000000..a2b75a8b1821 --- /dev/null +++ b/internal/service/iam/instance_profiles_data_source_test.go @@ -0,0 +1,58 @@ +package iam_test + +import ( + "fmt" + "testing" + + "github.com/aws/aws-sdk-go/service/iam" + sdkacctest "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" +) + +func TestAccIAMInstanceProfilesDataSource_basic(t *testing.T) { + datasourceName := "data.aws_iam_instance_profiles.test" + resourceName := "aws_iam_instance_profile.test" + + roleName := fmt.Sprintf("tf-acc-ds-instance-profile-role-%d", sdkacctest.RandInt()) + profileName := fmt.Sprintf("tf-acc-ds-instance-profile-%d", sdkacctest.RandInt()) + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(t) }, + ErrorCheck: acctest.ErrorCheck(t, iam.EndpointsID), + Providers: acctest.Providers, + Steps: []resource.TestStep{ + { + Config: testAccInstanceProfilesDataSourceConfig(roleName, profileName), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(datasourceName, "arns.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "paths.#", "1"), + resource.TestCheckResourceAttr(datasourceName, "names.#", "1"), + resource.TestCheckResourceAttrPair(datasourceName, "arns.*", resourceName, "arn"), + resource.TestCheckResourceAttrPair(datasourceName, "paths.*", resourceName, "path"), + resource.TestCheckResourceAttrPair(datasourceName, "names.*", resourceName, "name"), + ), + }, + }, + }) +} + +func testAccInstanceProfilesDataSourceConfig(roleName, profileName string) string { + return fmt.Sprintf(` +resource "aws_iam_role" "test" { + name = "%s" + assume_role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"ec2.amazonaws.com\"]},\"Action\":[\"sts:AssumeRole\"]}]}" +} + +resource "aws_iam_instance_profile" "test" { + name = "%s" + role = aws_iam_role.test.name + path = "/testpath/" +} + +data "aws_iam_instance_profiles" "test" { + role_name = aws_iam_role.test.name + depends_on = [aws_iam_role.test, aws_iam_instance_profile.test] +} +`, roleName, profileName) +} From f793571d5ebba5951220574a39cd06360b3ec0d0 Mon Sep 17 00:00:00 2001 From: Aegon95 Date: Wed, 27 Apr 2022 01:18:34 +0530 Subject: [PATCH 02/12] Added markdown for new datasource iam_instance roles and fixed format issue in tests --- .../iam/instance_profiles_data_source_test.go | 4 +-- .../d/iam_instance_profiles.html.markdown | 33 +++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 website/docs/d/iam_instance_profiles.html.markdown diff --git a/internal/service/iam/instance_profiles_data_source_test.go b/internal/service/iam/instance_profiles_data_source_test.go index a2b75a8b1821..b371fbedefab 100644 --- a/internal/service/iam/instance_profiles_data_source_test.go +++ b/internal/service/iam/instance_profiles_data_source_test.go @@ -40,12 +40,12 @@ func TestAccIAMInstanceProfilesDataSource_basic(t *testing.T) { func testAccInstanceProfilesDataSourceConfig(roleName, profileName string) string { return fmt.Sprintf(` resource "aws_iam_role" "test" { - name = "%s" + name = %[1]q assume_role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"ec2.amazonaws.com\"]},\"Action\":[\"sts:AssumeRole\"]}]}" } resource "aws_iam_instance_profile" "test" { - name = "%s" + name = %[2]q role = aws_iam_role.test.name path = "/testpath/" } diff --git a/website/docs/d/iam_instance_profiles.html.markdown b/website/docs/d/iam_instance_profiles.html.markdown new file mode 100644 index 000000000000..54e0a5d8124b --- /dev/null +++ b/website/docs/d/iam_instance_profiles.html.markdown @@ -0,0 +1,33 @@ +--- +subcategory: "IAM (Identity & Access Management)" +layout: "aws" +page_title: "AWS: aws_iam_instance_profiles" +description: |- + Get information on a Amazon IAM Instance Profiles from IAM role +--- + +# Data Source: aws_iam_instance_profiles + +This data source can be used to fetch information about all +IAM instance profiles under a role. By using this data source, you can reference IAM +instance profile properties without having to hard code ARNs as input. + +## Example Usage + +```terraform +data "aws_iam_instance_profiles" "example" { + role_name = "an_example_iam_role_name" +} +``` + +## Argument Reference + +* `role_name` - (Required) The IAM role name. + +## Attributes Reference + +* `arns` - Set of Amazon Resource Name (ARN) specifying the instance profile. + +* `names` - Set of IAM instance profile names. + +* `paths` - Set of IAM instance profile paths. \ No newline at end of file From 18d585fb1dec2293fd11791b3f0d56f4ec6de8a3 Mon Sep 17 00:00:00 2001 From: Aegon95 Date: Tue, 3 May 2022 00:42:58 +0530 Subject: [PATCH 03/12] Fixed terrafmt issue, added changes based on PR comments --- .changelog/{23646.txt => 24423.txt} | 0 .../service/iam/instance_profiles_data_source.go | 13 +++++++------ .../iam/instance_profiles_data_source_test.go | 4 ++-- 3 files changed, 9 insertions(+), 8 deletions(-) rename .changelog/{23646.txt => 24423.txt} (100%) diff --git a/.changelog/23646.txt b/.changelog/24423.txt similarity index 100% rename from .changelog/23646.txt rename to .changelog/24423.txt diff --git a/internal/service/iam/instance_profiles_data_source.go b/internal/service/iam/instance_profiles_data_source.go index 095429e02ffe..658d8e346bfe 100644 --- a/internal/service/iam/instance_profiles_data_source.go +++ b/internal/service/iam/instance_profiles_data_source.go @@ -16,8 +16,9 @@ func DataSourceInstanceProfiles() *schema.Resource { Schema: map[string]*schema.Schema{ "role_name": { - Type: schema.TypeString, - Required: true, + Type: schema.TypeString, + Required: true, + ValidateFunc: validIamResourceName(roleNameMaxLen), }, "arns": { Type: schema.TypeSet, @@ -60,12 +61,12 @@ func dataSourceInstanceProfilesRead(d *schema.ResourceData, meta interface{}) er var arns, paths, names []string for _, profile := range instanceProfiles { - arns = append(arns, *profile.Arn) - paths = append(paths, *profile.Path) - names = append(names, *profile.InstanceProfileName) + arns = append(arns, aws.StringValue(profile.Arn)) + paths = append(paths, aws.StringValue(profile.Path)) + names = append(names, aws.StringValue(profile.InstanceProfileName)) } - d.SetId(aws.StringValue(&roleName)) + d.SetId(roleName) d.Set("arns", arns) d.Set("paths", paths) d.Set("names", names) diff --git a/internal/service/iam/instance_profiles_data_source_test.go b/internal/service/iam/instance_profiles_data_source_test.go index b371fbedefab..ca162d02a7b9 100644 --- a/internal/service/iam/instance_profiles_data_source_test.go +++ b/internal/service/iam/instance_profiles_data_source_test.go @@ -14,8 +14,8 @@ func TestAccIAMInstanceProfilesDataSource_basic(t *testing.T) { datasourceName := "data.aws_iam_instance_profiles.test" resourceName := "aws_iam_instance_profile.test" - roleName := fmt.Sprintf("tf-acc-ds-instance-profile-role-%d", sdkacctest.RandInt()) - profileName := fmt.Sprintf("tf-acc-ds-instance-profile-%d", sdkacctest.RandInt()) + roleName := sdkacctest.RandomWithPrefix("tf-acc-ds-instance-profile-role") + profileName := sdkacctest.RandomWithPrefix("tf-acc-ds-instance-profile") resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(t) }, From 68fd7502e7f947d38c504ec5a9570d7598d217a3 Mon Sep 17 00:00:00 2001 From: Aegon95 Date: Tue, 3 May 2022 01:23:54 +0530 Subject: [PATCH 04/12] Fixed terrafmt issue and markdown lint issue --- .../iam/instance_profiles_data_source_test.go | 17 ++++++++--------- .../docs/d/iam_instance_profiles.html.markdown | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/internal/service/iam/instance_profiles_data_source_test.go b/internal/service/iam/instance_profiles_data_source_test.go index ca162d02a7b9..f49a29dfcc8a 100644 --- a/internal/service/iam/instance_profiles_data_source_test.go +++ b/internal/service/iam/instance_profiles_data_source_test.go @@ -14,8 +14,7 @@ func TestAccIAMInstanceProfilesDataSource_basic(t *testing.T) { datasourceName := "data.aws_iam_instance_profiles.test" resourceName := "aws_iam_instance_profile.test" - roleName := sdkacctest.RandomWithPrefix("tf-acc-ds-instance-profile-role") - profileName := sdkacctest.RandomWithPrefix("tf-acc-ds-instance-profile") + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(t) }, @@ -23,7 +22,7 @@ func TestAccIAMInstanceProfilesDataSource_basic(t *testing.T) { Providers: acctest.Providers, Steps: []resource.TestStep{ { - Config: testAccInstanceProfilesDataSourceConfig(roleName, profileName), + Config: testAccInstanceProfilesDataSourceConfig(rName), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttr(datasourceName, "arns.#", "1"), resource.TestCheckResourceAttr(datasourceName, "paths.#", "1"), @@ -37,22 +36,22 @@ func TestAccIAMInstanceProfilesDataSource_basic(t *testing.T) { }) } -func testAccInstanceProfilesDataSourceConfig(roleName, profileName string) string { +func testAccInstanceProfilesDataSourceConfig(rName string) string { return fmt.Sprintf(` resource "aws_iam_role" "test" { - name = %[1]q + name = "%[1]s-role" assume_role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"ec2.amazonaws.com\"]},\"Action\":[\"sts:AssumeRole\"]}]}" } resource "aws_iam_instance_profile" "test" { - name = %[2]q + name = "%[1]s-instance-profile" role = aws_iam_role.test.name path = "/testpath/" } data "aws_iam_instance_profiles" "test" { - role_name = aws_iam_role.test.name - depends_on = [aws_iam_role.test, aws_iam_instance_profile.test] + role_name = aws_iam_role.test.name + depends_on = [aws_iam_role.test, aws_iam_instance_profile.test] } -`, roleName, profileName) +`, rName) } diff --git a/website/docs/d/iam_instance_profiles.html.markdown b/website/docs/d/iam_instance_profiles.html.markdown index 54e0a5d8124b..cedf1ad1e94a 100644 --- a/website/docs/d/iam_instance_profiles.html.markdown +++ b/website/docs/d/iam_instance_profiles.html.markdown @@ -30,4 +30,4 @@ data "aws_iam_instance_profiles" "example" { * `names` - Set of IAM instance profile names. -* `paths` - Set of IAM instance profile paths. \ No newline at end of file +* `paths` - Set of IAM instance profile paths. From 7e2b501d5c076ceab2aa96715b0abc4122912abd Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 5 May 2022 13:53:42 -0400 Subject: [PATCH 05/12] Update internal/service/iam/instance_profiles_data_source.go Co-authored-by: Kamil Turek --- internal/service/iam/instance_profiles_data_source.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/iam/instance_profiles_data_source.go b/internal/service/iam/instance_profiles_data_source.go index 658d8e346bfe..7f8e1d01e10b 100644 --- a/internal/service/iam/instance_profiles_data_source.go +++ b/internal/service/iam/instance_profiles_data_source.go @@ -45,7 +45,7 @@ func dataSourceInstanceProfilesRead(d *schema.ResourceData, meta interface{}) er roleName := d.Get("role_name").(string) req := &iam.ListInstanceProfilesForRoleInput{ - RoleName: &roleName, + RoleName: aws.String(roleName), } log.Printf("[DEBUG] Reading IAM Instance Profiles for given role %s: %s", roleName, req) From 279de82d992db37e24f48eb7d65a4f4c69944ce3 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 5 May 2022 13:53:54 -0400 Subject: [PATCH 06/12] Update internal/service/iam/instance_profiles_data_source_test.go Co-authored-by: Kamil Turek --- internal/service/iam/instance_profiles_data_source_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/iam/instance_profiles_data_source_test.go b/internal/service/iam/instance_profiles_data_source_test.go index f49a29dfcc8a..a5680c986361 100644 --- a/internal/service/iam/instance_profiles_data_source_test.go +++ b/internal/service/iam/instance_profiles_data_source_test.go @@ -39,7 +39,7 @@ func TestAccIAMInstanceProfilesDataSource_basic(t *testing.T) { func testAccInstanceProfilesDataSourceConfig(rName string) string { return fmt.Sprintf(` resource "aws_iam_role" "test" { - name = "%[1]s-role" + name = %[1]q assume_role_policy = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"ec2.amazonaws.com\"]},\"Action\":[\"sts:AssumeRole\"]}]}" } From 187b249165bf9d20fa645ac5a402b9382ff0b3c2 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 5 May 2022 13:53:59 -0400 Subject: [PATCH 07/12] Update internal/service/iam/instance_profiles_data_source_test.go Co-authored-by: Kamil Turek --- internal/service/iam/instance_profiles_data_source_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/iam/instance_profiles_data_source_test.go b/internal/service/iam/instance_profiles_data_source_test.go index a5680c986361..813ede6aabbd 100644 --- a/internal/service/iam/instance_profiles_data_source_test.go +++ b/internal/service/iam/instance_profiles_data_source_test.go @@ -44,7 +44,7 @@ resource "aws_iam_role" "test" { } resource "aws_iam_instance_profile" "test" { - name = "%[1]s-instance-profile" + name = %[1]q role = aws_iam_role.test.name path = "/testpath/" } From a02cb842e9cd84a6cd3f76bca0fddeb22cac34bd Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 5 May 2022 14:04:36 -0400 Subject: [PATCH 08/12] d/aws_iam_instance_profiles: Alphabetize attributes. --- .../service/iam/instance_profiles_data_source.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/service/iam/instance_profiles_data_source.go b/internal/service/iam/instance_profiles_data_source.go index 7f8e1d01e10b..ada1416a1558 100644 --- a/internal/service/iam/instance_profiles_data_source.go +++ b/internal/service/iam/instance_profiles_data_source.go @@ -15,26 +15,26 @@ func DataSourceInstanceProfiles() *schema.Resource { Read: dataSourceInstanceProfilesRead, Schema: map[string]*schema.Schema{ - "role_name": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validIamResourceName(roleNameMaxLen), - }, "arns": { Type: schema.TypeSet, Computed: true, Elem: &schema.Schema{Type: schema.TypeString}, }, - "paths": { + "names": { Type: schema.TypeSet, Computed: true, Elem: &schema.Schema{Type: schema.TypeString}, }, - "names": { + "paths": { Type: schema.TypeSet, Computed: true, Elem: &schema.Schema{Type: schema.TypeString}, }, + "role_name": { + Type: schema.TypeString, + Required: true, + ValidateFunc: validIamResourceName(roleNameMaxLen), + }, }, } } From fc9b96f155620dbe0143de99176402997d547e90 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 5 May 2022 14:14:14 -0400 Subject: [PATCH 09/12] d/aws_iam_instance_profiles: Use 'ListInstanceProfilesForRolePages'. --- .../iam/instance_profiles_data_source.go | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/internal/service/iam/instance_profiles_data_source.go b/internal/service/iam/instance_profiles_data_source.go index ada1416a1558..1ec60061be14 100644 --- a/internal/service/iam/instance_profiles_data_source.go +++ b/internal/service/iam/instance_profiles_data_source.go @@ -2,7 +2,6 @@ package iam import ( "fmt" - "log" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/iam" @@ -43,33 +42,33 @@ func dataSourceInstanceProfilesRead(d *schema.ResourceData, meta interface{}) er conn := meta.(*conns.AWSClient).IAMConn roleName := d.Get("role_name").(string) - - req := &iam.ListInstanceProfilesForRoleInput{ + input := &iam.ListInstanceProfilesForRoleInput{ RoleName: aws.String(roleName), } + var arns, names, paths []string - log.Printf("[DEBUG] Reading IAM Instance Profiles for given role %s: %s", roleName, req) - resp, err := conn.ListInstanceProfilesForRole(req) - if err != nil { - return fmt.Errorf("Error getting instance profiles: %w", err) - } - if resp == nil { - return fmt.Errorf("no IAM instance profiles found for role %s", roleName) - } + err := conn.ListInstanceProfilesForRolePages(input, func(page *iam.ListInstanceProfilesForRoleOutput, lastPage bool) bool { + if page == nil { + return !lastPage + } - instanceProfiles := resp.InstanceProfiles + for _, v := range page.InstanceProfiles { + arns = append(arns, aws.StringValue(v.Arn)) + names = append(names, aws.StringValue(v.InstanceProfileName)) + paths = append(paths, aws.StringValue(v.Path)) + } - var arns, paths, names []string - for _, profile := range instanceProfiles { - arns = append(arns, aws.StringValue(profile.Arn)) - paths = append(paths, aws.StringValue(profile.Path)) - names = append(names, aws.StringValue(profile.InstanceProfileName)) + return !lastPage + }) + + if err != nil { + return fmt.Errorf("listing IAM Instance Profiles for Role (%s): %w", roleName, err) } d.SetId(roleName) d.Set("arns", arns) - d.Set("paths", paths) d.Set("names", names) + d.Set("paths", paths) return nil } From 9e16c96aed1bffd6e5d16aeff106408768254405 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 5 May 2022 14:20:01 -0400 Subject: [PATCH 10/12] Tidy up 'TestAccIAMInstanceProfilesDataSource_basic'. --- .../service/iam/instance_profiles_data_source_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/service/iam/instance_profiles_data_source_test.go b/internal/service/iam/instance_profiles_data_source_test.go index 813ede6aabbd..2154e6ef956a 100644 --- a/internal/service/iam/instance_profiles_data_source_test.go +++ b/internal/service/iam/instance_profiles_data_source_test.go @@ -13,7 +13,6 @@ import ( func TestAccIAMInstanceProfilesDataSource_basic(t *testing.T) { datasourceName := "data.aws_iam_instance_profiles.test" resourceName := "aws_iam_instance_profile.test" - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resource.ParallelTest(t, resource.TestCase{ @@ -27,9 +26,9 @@ func TestAccIAMInstanceProfilesDataSource_basic(t *testing.T) { resource.TestCheckResourceAttr(datasourceName, "arns.#", "1"), resource.TestCheckResourceAttr(datasourceName, "paths.#", "1"), resource.TestCheckResourceAttr(datasourceName, "names.#", "1"), - resource.TestCheckResourceAttrPair(datasourceName, "arns.*", resourceName, "arn"), - resource.TestCheckResourceAttrPair(datasourceName, "paths.*", resourceName, "path"), - resource.TestCheckResourceAttrPair(datasourceName, "names.*", resourceName, "name"), + resource.TestCheckResourceAttrPair(datasourceName, "arns.0", resourceName, "arn"), + resource.TestCheckResourceAttrPair(datasourceName, "paths.0", resourceName, "path"), + resource.TestCheckResourceAttrPair(datasourceName, "names.0", resourceName, "name"), ), }, }, @@ -51,7 +50,8 @@ resource "aws_iam_instance_profile" "test" { data "aws_iam_instance_profiles" "test" { role_name = aws_iam_role.test.name - depends_on = [aws_iam_role.test, aws_iam_instance_profile.test] + + depends_on = [aws_iam_instance_profile.test] } `, rName) } From b998e6763eff9baec4de9b2e0960cae98674da6d Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 5 May 2022 14:23:04 -0400 Subject: [PATCH 11/12] Use Terraform Plugin SDK v2 'WithoutTimeout' signatures (#15090). --- internal/service/iam/instance_profiles_data_source.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/internal/service/iam/instance_profiles_data_source.go b/internal/service/iam/instance_profiles_data_source.go index 1ec60061be14..7e3cc8e3576a 100644 --- a/internal/service/iam/instance_profiles_data_source.go +++ b/internal/service/iam/instance_profiles_data_source.go @@ -1,17 +1,18 @@ package iam import ( - "fmt" + "context" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/iam" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-provider-aws/internal/conns" ) func DataSourceInstanceProfiles() *schema.Resource { return &schema.Resource{ - Read: dataSourceInstanceProfilesRead, + ReadWithoutTimeout: dataSourceInstanceProfilesRead, Schema: map[string]*schema.Schema{ "arns": { @@ -38,7 +39,7 @@ func DataSourceInstanceProfiles() *schema.Resource { } } -func dataSourceInstanceProfilesRead(d *schema.ResourceData, meta interface{}) error { +func dataSourceInstanceProfilesRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { conn := meta.(*conns.AWSClient).IAMConn roleName := d.Get("role_name").(string) @@ -47,7 +48,7 @@ func dataSourceInstanceProfilesRead(d *schema.ResourceData, meta interface{}) er } var arns, names, paths []string - err := conn.ListInstanceProfilesForRolePages(input, func(page *iam.ListInstanceProfilesForRoleOutput, lastPage bool) bool { + err := conn.ListInstanceProfilesForRolePagesWithContext(ctx, input, func(page *iam.ListInstanceProfilesForRoleOutput, lastPage bool) bool { if page == nil { return !lastPage } @@ -62,7 +63,7 @@ func dataSourceInstanceProfilesRead(d *schema.ResourceData, meta interface{}) er }) if err != nil { - return fmt.Errorf("listing IAM Instance Profiles for Role (%s): %w", roleName, err) + return diag.Errorf("listing IAM Instance Profiles for Role (%s): %s", roleName, err) } d.SetId(roleName) From fd8954c23c08572a996314e5d4c8e17c3d4e36a9 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 5 May 2022 14:26:21 -0400 Subject: [PATCH 12/12] Fix terrafmt error. --- internal/service/iam/instance_profiles_data_source_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/iam/instance_profiles_data_source_test.go b/internal/service/iam/instance_profiles_data_source_test.go index 2154e6ef956a..dba2bd947e69 100644 --- a/internal/service/iam/instance_profiles_data_source_test.go +++ b/internal/service/iam/instance_profiles_data_source_test.go @@ -49,7 +49,7 @@ resource "aws_iam_instance_profile" "test" { } data "aws_iam_instance_profiles" "test" { - role_name = aws_iam_role.test.name + role_name = aws_iam_role.test.name depends_on = [aws_iam_instance_profile.test] }