From 4bd61487061d86c9410ac3879b1a11c2c1f64427 Mon Sep 17 00:00:00 2001 From: Albert Silva Date: Wed, 22 Jun 2022 17:45:30 -0400 Subject: [PATCH 01/12] add data source for aws_servicecatalog_provisioning_artifacts --- internal/provider/provider.go | 11 +- .../provisioning_artifacts_data_source.go | 147 ++++++++++++++++++ 2 files changed, 153 insertions(+), 5 deletions(-) create mode 100644 internal/service/servicecatalog/provisioning_artifacts_data_source.go diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 07f6e19c20e6..74df6d2caeda 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -845,11 +845,12 @@ func Provider() *schema.Provider { "aws_serverlessapplicationrepository_application": serverlessrepo.DataSourceApplication(), - "aws_servicecatalog_constraint": servicecatalog.DataSourceConstraint(), - "aws_servicecatalog_launch_paths": servicecatalog.DataSourceLaunchPaths(), - "aws_servicecatalog_portfolio_constraints": servicecatalog.DataSourcePortfolioConstraints(), - "aws_servicecatalog_portfolio": servicecatalog.DataSourcePortfolio(), - "aws_servicecatalog_product": servicecatalog.DataSourceProduct(), + "aws_servicecatalog_constraint": servicecatalog.DataSourceConstraint(), + "aws_servicecatalog_launch_paths": servicecatalog.DataSourceLaunchPaths(), + "aws_servicecatalog_portfolio_constraints": servicecatalog.DataSourcePortfolioConstraints(), + "aws_servicecatalog_portfolio": servicecatalog.DataSourcePortfolio(), + "aws_servicecatalog_product": servicecatalog.DataSourceProduct(), + "aws_servicecatalog_provisioning_artifacts": servicecatalog.DataSourceProvisioningArtifacts(), "aws_service_discovery_dns_namespace": servicediscovery.DataSourceDNSNamespace(), diff --git a/internal/service/servicecatalog/provisioning_artifacts_data_source.go b/internal/service/servicecatalog/provisioning_artifacts_data_source.go new file mode 100644 index 000000000000..b558e609b960 --- /dev/null +++ b/internal/service/servicecatalog/provisioning_artifacts_data_source.go @@ -0,0 +1,147 @@ +package servicecatalog + +import ( + "fmt" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/servicecatalog" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" + "github.com/hashicorp/terraform-provider-aws/internal/conns" +) + +func DataSourceProvisioningArtifacts() *schema.Resource { + return &schema.Resource{ + Read: dataSourceProvisioningArtifactsRead, + + Timeouts: &schema.ResourceTimeout{ + Read: schema.DefaultTimeout(ConstraintReadTimeout), + }, + + Schema: map[string]*schema.Schema{ + "product_id": { + Type: schema.TypeString, + Required: true, + }, + "provisioning_artifact_details": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "accept_language": { + Type: schema.TypeString, + Optional: true, + Default: AcceptLanguageEnglish, + ValidateFunc: validation.StringInSlice(AcceptLanguage_Values(), false), + }, + "active": { + Type: schema.TypeBool, + Computed: true, + }, + "created_time": { + Type: schema.TypeString, + Computed: true, + }, + "description": { + Type: schema.TypeString, + Computed: true, + }, + "guidance": { + Type: schema.TypeString, + Computed: true, + }, + "id": { + Type: schema.TypeString, + Computed: true, + }, + "name": { + Type: schema.TypeString, + Computed: true, + }, + "type": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + }, + } +} + +func dataSourceProvisioningArtifactsRead(d *schema.ResourceData, meta interface{}) error { + conn := meta.(*conns.AWSClient).ServiceCatalogConn + product_id := aws.String(d.Get("product_id").(string)) + + input := &servicecatalog.ListProvisioningArtifactsInput{ + ProductId: product_id, + } + + output, err := conn.ListProvisioningArtifacts(input) + + if err != nil { + return fmt.Errorf("error describing Service Catalog Constraint: %w", err) + } + if output == nil { + return fmt.Errorf("no provisioning artifacts found matching criteria; try different search") + } + if err := d.Set("provisioning_artifact_details", flattenProvisioningArtifactDetails(output.ProvisioningArtifactDetails)); err != nil { + return fmt.Errorf("error setting provisioning artifact details: %w", err) + } + + d.SetId(aws.StringValue(output.ProvisioningArtifactDetails[0].Id)) + d.SetId(d.Get("product_id").(string)) + + return nil +} + +func flattenProvisioningArtifactDetails(apiObjects []*servicecatalog.ProvisioningArtifactDetail) []interface{} { + + if len(apiObjects) == 0 { + return nil + } + + var tfList []interface{} + + for _, apiObject := range apiObjects { + if apiObject == nil { + continue + } + + tfList = append(tfList, flattenProvisioningArtifactDetail(apiObject)) + } + + return tfList +} + +func flattenProvisioningArtifactDetail(apiObject *servicecatalog.ProvisioningArtifactDetail) map[string]interface{} { + if apiObject == nil { + return nil + } + + tfMap := map[string]interface{}{} + + if apiObject.Active != nil { + tfMap["active"] = aws.BoolValue(apiObject.Active) + } + if apiObject.CreatedTime != nil { + tfMap["created_time"] = aws.TimeValue(apiObject.CreatedTime).String() + } + if apiObject.Description != nil { + tfMap["description"] = aws.StringValue(apiObject.Description) + } + if apiObject.Guidance != nil { + tfMap["guidance"] = aws.StringValue(apiObject.Guidance) + } + if apiObject.Id != nil { + tfMap["id"] = aws.StringValue(apiObject.Id) + } + if apiObject.Name != nil { + tfMap["name"] = aws.StringValue(apiObject.Name) + } + if apiObject.Type != nil { + tfMap["type"] = aws.StringValue(apiObject.Type) + } + + return tfMap +} From 5de5ddd9ec381494f93f81130665caa696799b91 Mon Sep 17 00:00:00 2001 From: Albert Silva Date: Wed, 22 Jun 2022 17:49:14 -0400 Subject: [PATCH 02/12] add changelog --- .changelog/25535.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/25535.txt diff --git a/.changelog/25535.txt b/.changelog/25535.txt new file mode 100644 index 000000000000..714365821acd --- /dev/null +++ b/.changelog/25535.txt @@ -0,0 +1,3 @@ +```release-note:new-data-source +aws_servicecatalog_provisioning_artifacts +``` \ No newline at end of file From b0e25a949ba6aab599dd144a5b723aabebbd289e Mon Sep 17 00:00:00 2001 From: Albert Silva Date: Wed, 22 Jun 2022 17:52:58 -0400 Subject: [PATCH 03/12] added accept_language to read --- .../provisioning_artifacts_data_source.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/internal/service/servicecatalog/provisioning_artifacts_data_source.go b/internal/service/servicecatalog/provisioning_artifacts_data_source.go index b558e609b960..dc0d4735b923 100644 --- a/internal/service/servicecatalog/provisioning_artifacts_data_source.go +++ b/internal/service/servicecatalog/provisioning_artifacts_data_source.go @@ -23,17 +23,17 @@ func DataSourceProvisioningArtifacts() *schema.Resource { Type: schema.TypeString, Required: true, }, + "accept_language": { + Type: schema.TypeString, + Default: AcceptLanguageEnglish, + Optional: true, + ValidateFunc: validation.StringInSlice(AcceptLanguage_Values(), false), + }, "provisioning_artifact_details": { Type: schema.TypeList, Computed: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "accept_language": { - Type: schema.TypeString, - Optional: true, - Default: AcceptLanguageEnglish, - ValidateFunc: validation.StringInSlice(AcceptLanguage_Values(), false), - }, "active": { Type: schema.TypeBool, Computed: true, @@ -71,10 +71,10 @@ func DataSourceProvisioningArtifacts() *schema.Resource { func dataSourceProvisioningArtifactsRead(d *schema.ResourceData, meta interface{}) error { conn := meta.(*conns.AWSClient).ServiceCatalogConn - product_id := aws.String(d.Get("product_id").(string)) input := &servicecatalog.ListProvisioningArtifactsInput{ - ProductId: product_id, + ProductId: aws.String(d.Get("product_id").(string)), + AcceptLanguage: aws.String(d.Get("accept_language").(string)), } output, err := conn.ListProvisioningArtifacts(input) From 5ed070d6a8e8bacedad71cef015cc77b7bcfcc7f Mon Sep 17 00:00:00 2001 From: Albert Silva Date: Wed, 22 Jun 2022 17:58:45 -0400 Subject: [PATCH 04/12] added accept_language to read --- .../servicecatalog/provisioning_artifacts_data_source.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/servicecatalog/provisioning_artifacts_data_source.go b/internal/service/servicecatalog/provisioning_artifacts_data_source.go index dc0d4735b923..e253610cff3e 100644 --- a/internal/service/servicecatalog/provisioning_artifacts_data_source.go +++ b/internal/service/servicecatalog/provisioning_artifacts_data_source.go @@ -80,7 +80,7 @@ func dataSourceProvisioningArtifactsRead(d *schema.ResourceData, meta interface{ output, err := conn.ListProvisioningArtifacts(input) if err != nil { - return fmt.Errorf("error describing Service Catalog Constraint: %w", err) + return fmt.Errorf("error describing provisioning artifact: %w", err) } if output == nil { return fmt.Errorf("no provisioning artifacts found matching criteria; try different search") @@ -89,8 +89,8 @@ func dataSourceProvisioningArtifactsRead(d *schema.ResourceData, meta interface{ return fmt.Errorf("error setting provisioning artifact details: %w", err) } - d.SetId(aws.StringValue(output.ProvisioningArtifactDetails[0].Id)) d.SetId(d.Get("product_id").(string)) + d.Set("accept_language", d.Get("accept_language").(string)) return nil } From 2b25b758f938f8d211fd4f3aa19c9a074a26e77a Mon Sep 17 00:00:00 2001 From: Albert Silva Date: Wed, 22 Jun 2022 17:59:19 -0400 Subject: [PATCH 05/12] formatting --- .../servicecatalog/provisioning_artifacts_data_source.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/service/servicecatalog/provisioning_artifacts_data_source.go b/internal/service/servicecatalog/provisioning_artifacts_data_source.go index e253610cff3e..4ec45c7f42e2 100644 --- a/internal/service/servicecatalog/provisioning_artifacts_data_source.go +++ b/internal/service/servicecatalog/provisioning_artifacts_data_source.go @@ -96,7 +96,6 @@ func dataSourceProvisioningArtifactsRead(d *schema.ResourceData, meta interface{ } func flattenProvisioningArtifactDetails(apiObjects []*servicecatalog.ProvisioningArtifactDetail) []interface{} { - if len(apiObjects) == 0 { return nil } @@ -107,7 +106,6 @@ func flattenProvisioningArtifactDetails(apiObjects []*servicecatalog.Provisionin if apiObject == nil { continue } - tfList = append(tfList, flattenProvisioningArtifactDetail(apiObject)) } From f5bd9dfceb5e6a08c3dae76c37e0b9299884df74 Mon Sep 17 00:00:00 2001 From: Albert Silva Date: Wed, 22 Jun 2022 18:11:48 -0400 Subject: [PATCH 06/12] added documentation --- ...talog_provisioning_artifacts.html.markdown | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 website/docs/d/servicecatalog_provisioning_artifacts.html.markdown diff --git a/website/docs/d/servicecatalog_provisioning_artifacts.html.markdown b/website/docs/d/servicecatalog_provisioning_artifacts.html.markdown new file mode 100644 index 000000000000..78e9d42c3f6e --- /dev/null +++ b/website/docs/d/servicecatalog_provisioning_artifacts.html.markdown @@ -0,0 +1,47 @@ +--- +subcategory: "Service Catalog" +layout: "aws" +page_title: "AWS: aws_servicecatalog_provisioning_artifacts" +description: |- + Provides information on Service Catalog Provisioning Artifacts +--- + +# Data Source: aws_servicecatalog_provisioning_artifacts + +Lists the provisioning artifacts for the specified product. + +## Example Usage + +### Basic Usage + +```terraform +data "aws_servicecatalog_provisioning_artifacts" "example" { + product_id = "prod-yakog5pdriver" +} +``` + +## Argument Reference + +The following arguments are required: + +* `product_id` - (Required) Product identifier. + +The following arguments are optional: + +* `accept_language` - (Optional) Language code. Valid values: `en` (English), `jp` (Japanese), `zh` (Chinese). Default value is `en`. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `provisioning_artifact_details` - List with information about the provisioning artifacts. See details below. + +### provisioning_artifact_details + +* `active` - Indicates whether the product version is active. +* `created_time` - The UTC time stamp of the creation time. +* `description` - The description of the provisioning artifact. +* `guidance` - Information set by the administrator to provide guidance to end users about which provisioning artifacts to use. +* `id` - The identifier of the provisioning artifact. +* `name` - The name of the provisioning artifact. +* `type` - The type of provisioning artifact. From 26fed6d46f7be22e3dd26d39e31f8ea66c0e8783 Mon Sep 17 00:00:00 2001 From: Albert Silva Date: Wed, 22 Jun 2022 19:11:56 -0400 Subject: [PATCH 07/12] add tests --- ...provisioning_artifacts_data_source_test.go | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 internal/service/servicecatalog/provisioning_artifacts_data_source_test.go diff --git a/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go b/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go new file mode 100644 index 000000000000..2d09ccdd3ce4 --- /dev/null +++ b/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go @@ -0,0 +1,124 @@ +package servicecatalog_test + +import ( + "fmt" + "testing" + + "github.com/aws/aws-sdk-go/service/servicecatalog" + 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" + tfservicecatalog "github.com/hashicorp/terraform-provider-aws/internal/service/servicecatalog" +) + +func TestAccServiceCatalogProvisioningArtifactsDataSource_basic(t *testing.T) { + dataSourceName := "data.aws_servicecatalog_provisioning_artifacts.test" + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + + domain := fmt.Sprintf("http://%s", acctest.RandomDomainName()) + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(t) }, + ErrorCheck: acctest.ErrorCheck(t, servicecatalog.EndpointsID), + ProviderFactories: acctest.ProviderFactories, + CheckDestroy: testAccCheckProvisioningArtifactDestroy, + Steps: []resource.TestStep{ + { + Config: testAccProvisioningArtifactsDataSourceConfig_basic(rName, domain), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(dataSourceName, "accept_language", tfservicecatalog.AcceptLanguageEnglish), + resource.TestCheckResourceAttr(dataSourceName, "provisioning_artifact_details.0.active", "true"), + resource.TestCheckResourceAttrSet(dataSourceName, "provisioning_artifact_details.0.description"), + resource.TestCheckResourceAttr(dataSourceName, "provisioning_artifact_details.0.guidance", servicecatalog.ProvisioningArtifactGuidanceDefault), + resource.TestCheckResourceAttr(dataSourceName, "provisioning_artifact_details.0.name", rName), + resource.TestCheckResourceAttrPair(dataSourceName, "product_id", "aws_servicecatalog_product.test", "id"), + resource.TestCheckResourceAttr(dataSourceName, "provisioning_artifact_details.0.type", servicecatalog.ProductTypeCloudFormationTemplate), + ), + }, + }, + }) +} + +func testAccProvisioningArtifactsDataSourceBaseConfig(rName, domain string) string { + return fmt.Sprintf(` +resource "aws_s3_bucket" "test" { + bucket = %[1]q + force_destroy = true +} + +resource "aws_s3_bucket_acl" "test" { + bucket = aws_s3_bucket.test.id + acl = "private" +} + +resource "aws_s3_object" "test" { + bucket = aws_s3_bucket.test.id + key = "%[1]s.json" + + content = jsonencode({ + AWSTemplateFormatVersion = "2010-09-09" + + Resources = { + MyVPC = { + Type = "AWS::EC2::VPC" + Properties = { + CidrBlock = "10.1.0.0/16" + } + } + } + + Outputs = { + VpcID = { + Description = "VPC ID" + Value = { + Ref = "MyVPC" + } + } + } + }) +} + +resource "aws_servicecatalog_product" "test" { + description = %[1]q + distributor = "distributör" + name = %[1]q + owner = "ägare" + type = "CLOUD_FORMATION_TEMPLATE" + support_description = %[1]q + support_email = %[3]q + support_url = %[2]q + + provisioning_artifact_parameters { + description = "artefaktbeskrivning" + disable_template_validation = true + name = %[1]q + template_url = "https://${aws_s3_bucket.test.bucket_regional_domain_name}/${aws_s3_object.test.key}" + type = "CLOUD_FORMATION_TEMPLATE" + } + + tags = { + Name = %[1]q + } +} +resource "aws_servicecatalog_provisioning_artifact" "test" { + accept_language = "en" + active = true + description = %[1]q + disable_template_validation = true + guidance = "DEFAULT" + name = "%[1]s-2" + product_id = aws_servicecatalog_product.test.id + template_url = "https://${aws_s3_bucket.test.bucket_regional_domain_name}/${aws_s3_object.test.key}" + type = "CLOUD_FORMATION_TEMPLATE" +} +`, rName, domain, acctest.DefaultEmailAddress) +} + +func testAccProvisioningArtifactsDataSourceConfig_basic(rName, domain string) string { + return acctest.ConfigCompose(testAccProvisioningArtifactsDataSourceBaseConfig(rName, domain), fmt.Sprint(` +data "aws_servicecatalog_provisioning_artifacts" "test" { + accept_language = "en" + product_id = aws_servicecatalog_product.test.id +} +`)) +} From 7d36b894c25e517e3e39c0c6485ba86ae8de6ce8 Mon Sep 17 00:00:00 2001 From: Albert Silva Date: Wed, 22 Jun 2022 20:07:26 -0400 Subject: [PATCH 08/12] fix lint errors --- .../servicecatalog/provisioning_artifacts_data_source_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go b/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go index 2d09ccdd3ce4..78ca5860889c 100644 --- a/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go +++ b/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go @@ -115,10 +115,10 @@ resource "aws_servicecatalog_provisioning_artifact" "test" { } func testAccProvisioningArtifactsDataSourceConfig_basic(rName, domain string) string { - return acctest.ConfigCompose(testAccProvisioningArtifactsDataSourceBaseConfig(rName, domain), fmt.Sprint(` + return acctest.ConfigCompose(testAccProvisioningArtifactsDataSourceBaseConfig(rName, domain), ` data "aws_servicecatalog_provisioning_artifacts" "test" { accept_language = "en" product_id = aws_servicecatalog_product.test.id } -`)) +`) } From 3c84850f4a6d4db45502f21781d8d1ec70f46bbb Mon Sep 17 00:00:00 2001 From: Albert Silva Date: Wed, 22 Jun 2022 20:56:50 -0400 Subject: [PATCH 09/12] removed destroy validation from test --- .../servicecatalog/provisioning_artifacts_data_source_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go b/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go index 78ca5860889c..45d39261c0f6 100644 --- a/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go +++ b/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go @@ -21,7 +21,6 @@ func TestAccServiceCatalogProvisioningArtifactsDataSource_basic(t *testing.T) { PreCheck: func() { acctest.PreCheck(t) }, ErrorCheck: acctest.ErrorCheck(t, servicecatalog.EndpointsID), ProviderFactories: acctest.ProviderFactories, - CheckDestroy: testAccCheckProvisioningArtifactDestroy, Steps: []resource.TestStep{ { Config: testAccProvisioningArtifactsDataSourceConfig_basic(rName, domain), From 9938078ccaa64bdaeeb428f6266f7b58e422508d Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Sun, 12 Mar 2023 14:35:25 -0400 Subject: [PATCH 10/12] d/aws_servicecatalog_provisioning_artifacts: Alphabetize attributes. --- .../servicecatalog/provisioning_artifacts_data_source.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/service/servicecatalog/provisioning_artifacts_data_source.go b/internal/service/servicecatalog/provisioning_artifacts_data_source.go index 50c6d2013794..219cd3d39309 100644 --- a/internal/service/servicecatalog/provisioning_artifacts_data_source.go +++ b/internal/service/servicecatalog/provisioning_artifacts_data_source.go @@ -19,16 +19,16 @@ func DataSourceProvisioningArtifacts() *schema.Resource { }, Schema: map[string]*schema.Schema{ - "product_id": { - Type: schema.TypeString, - Required: true, - }, "accept_language": { Type: schema.TypeString, Default: AcceptLanguageEnglish, Optional: true, ValidateFunc: validation.StringInSlice(AcceptLanguage_Values(), false), }, + "product_id": { + Type: schema.TypeString, + Required: true, + }, "provisioning_artifact_details": { Type: schema.TypeList, Computed: true, From 90ec7e4fd680f7413e48ac588dfc1f7564ddb67a Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Sun, 12 Mar 2023 14:37:17 -0400 Subject: [PATCH 11/12] d/aws_servicecatalog_provisioning_artifacts: Add '@SDKDataSource'. --- .../servicecatalog/provisioning_artifacts_data_source.go | 1 + internal/service/servicecatalog/service_package_gen.go | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/internal/service/servicecatalog/provisioning_artifacts_data_source.go b/internal/service/servicecatalog/provisioning_artifacts_data_source.go index 219cd3d39309..4d4c4489c41d 100644 --- a/internal/service/servicecatalog/provisioning_artifacts_data_source.go +++ b/internal/service/servicecatalog/provisioning_artifacts_data_source.go @@ -10,6 +10,7 @@ import ( "github.com/hashicorp/terraform-provider-aws/internal/conns" ) +// @SDKDataSource("aws_servicecatalog_provisioning_artifacts") func DataSourceProvisioningArtifacts() *schema.Resource { return &schema.Resource{ Read: dataSourceProvisioningArtifactsRead, diff --git a/internal/service/servicecatalog/service_package_gen.go b/internal/service/servicecatalog/service_package_gen.go index f9ebd2907307..8e5d2591e955 100644 --- a/internal/service/servicecatalog/service_package_gen.go +++ b/internal/service/servicecatalog/service_package_gen.go @@ -41,6 +41,10 @@ func (p *servicePackage) SDKDataSources(ctx context.Context) []*types.ServicePac Factory: DataSourceProduct, TypeName: "aws_servicecatalog_product", }, + { + Factory: DataSourceProvisioningArtifacts, + TypeName: "aws_servicecatalog_provisioning_artifacts", + }, } } From eb92c0c0d4d99a1f927a1d5894cb20482b41bc85 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Sun, 12 Mar 2023 14:43:19 -0400 Subject: [PATCH 12/12] d/aws_servicecatalog_provisioning_artifacts: Use 'WithoutTimeout' handler variant. --- .../provisioning_artifacts_data_source.go | 26 +++++++++---------- ...provisioning_artifacts_data_source_test.go | 13 +++++----- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/internal/service/servicecatalog/provisioning_artifacts_data_source.go b/internal/service/servicecatalog/provisioning_artifacts_data_source.go index 4d4c4489c41d..96747f401643 100644 --- a/internal/service/servicecatalog/provisioning_artifacts_data_source.go +++ b/internal/service/servicecatalog/provisioning_artifacts_data_source.go @@ -1,19 +1,21 @@ package servicecatalog import ( - "fmt" + "context" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/servicecatalog" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" ) // @SDKDataSource("aws_servicecatalog_provisioning_artifacts") func DataSourceProvisioningArtifacts() *schema.Resource { return &schema.Resource{ - Read: dataSourceProvisioningArtifactsRead, + ReadWithoutTimeout: dataSourceProvisioningArtifactsRead, Timeouts: &schema.ResourceTimeout{ Read: schema.DefaultTimeout(ConstraintReadTimeout), @@ -70,29 +72,27 @@ func DataSourceProvisioningArtifacts() *schema.Resource { } } -func dataSourceProvisioningArtifactsRead(d *schema.ResourceData, meta interface{}) error { +func dataSourceProvisioningArtifactsRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + var diags diag.Diagnostics conn := meta.(*conns.AWSClient).ServiceCatalogConn() + productID := d.Get("product_id").(string) input := &servicecatalog.ListProvisioningArtifactsInput{ - ProductId: aws.String(d.Get("product_id").(string)), AcceptLanguage: aws.String(d.Get("accept_language").(string)), + ProductId: aws.String(productID), } - output, err := conn.ListProvisioningArtifacts(input) + output, err := conn.ListProvisioningArtifactsWithContext(ctx, input) if err != nil { - return fmt.Errorf("error describing provisioning artifact: %w", err) - } - if output == nil { - return fmt.Errorf("no provisioning artifacts found matching criteria; try different search") + return sdkdiag.AppendErrorf(diags, "listing Service Catalog Provisioning Artifacts: %s", err) } + + d.SetId(productID) if err := d.Set("provisioning_artifact_details", flattenProvisioningArtifactDetails(output.ProvisioningArtifactDetails)); err != nil { - return fmt.Errorf("error setting provisioning artifact details: %w", err) + return sdkdiag.AppendErrorf(diags, "setting provisioning_artifact_details: %s", err) } - d.SetId(d.Get("product_id").(string)) - d.Set("accept_language", d.Get("accept_language").(string)) - return nil } diff --git a/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go b/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go index b794e777eb6a..ac01396c2277 100644 --- a/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go +++ b/internal/service/servicecatalog/provisioning_artifacts_data_source_test.go @@ -23,13 +23,14 @@ func TestAccServiceCatalogProvisioningArtifactsDataSource_basic(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccProvisioningArtifactsDataSourceConfig_basic(rName, domain), - Check: resource.ComposeTestCheckFunc( + Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(dataSourceName, "accept_language", tfservicecatalog.AcceptLanguageEnglish), + resource.TestCheckResourceAttrPair(dataSourceName, "product_id", "aws_servicecatalog_product.test", "id"), + resource.TestCheckResourceAttr(dataSourceName, "provisioning_artifact_details.#", "1"), resource.TestCheckResourceAttr(dataSourceName, "provisioning_artifact_details.0.active", "true"), resource.TestCheckResourceAttrSet(dataSourceName, "provisioning_artifact_details.0.description"), resource.TestCheckResourceAttr(dataSourceName, "provisioning_artifact_details.0.guidance", servicecatalog.ProvisioningArtifactGuidanceDefault), resource.TestCheckResourceAttr(dataSourceName, "provisioning_artifact_details.0.name", rName), - resource.TestCheckResourceAttrPair(dataSourceName, "product_id", "aws_servicecatalog_product.test", "id"), resource.TestCheckResourceAttr(dataSourceName, "provisioning_artifact_details.0.type", servicecatalog.ProductTypeCloudFormationTemplate), ), }, @@ -37,7 +38,7 @@ func TestAccServiceCatalogProvisioningArtifactsDataSource_basic(t *testing.T) { }) } -func testAccProvisioningArtifactsDataSourceBaseConfig(rName, domain string) string { +func testAccProvisioningArtifactsDataSourceConfig_base(rName, domain string) string { return fmt.Sprintf(` resource "aws_s3_bucket" "test" { bucket = %[1]q @@ -98,6 +99,7 @@ resource "aws_servicecatalog_product" "test" { Name = %[1]q } } + resource "aws_servicecatalog_provisioning_artifact" "test" { accept_language = "en" active = true @@ -113,10 +115,9 @@ resource "aws_servicecatalog_provisioning_artifact" "test" { } func testAccProvisioningArtifactsDataSourceConfig_basic(rName, domain string) string { - return acctest.ConfigCompose(testAccProvisioningArtifactsDataSourceBaseConfig(rName, domain), ` + return acctest.ConfigCompose(testAccProvisioningArtifactsDataSourceConfig_base(rName, domain), ` data "aws_servicecatalog_provisioning_artifacts" "test" { - accept_language = "en" - product_id = aws_servicecatalog_product.test.id + product_id = aws_servicecatalog_product.test.id } `) }