diff --git a/.changelog/34232.txt b/.changelog/34232.txt new file mode 100644 index 00000000000..eaddc04a996 --- /dev/null +++ b/.changelog/34232.txt @@ -0,0 +1,3 @@ +```release-note:new-data-source +aws_mq_broker_engine_types +``` diff --git a/go.mod b/go.mod index 8c2d7a73991..3291a8c8a45 100644 --- a/go.mod +++ b/go.mod @@ -62,6 +62,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/medialive v1.43.3 github.com/aws/aws-sdk-go-v2/service/mediapackage v1.28.5 github.com/aws/aws-sdk-go-v2/service/mediapackagev2 v1.7.5 + github.com/aws/aws-sdk-go-v2/service/mq v1.20.6 github.com/aws/aws-sdk-go-v2/service/oam v1.7.5 github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.9.5 github.com/aws/aws-sdk-go-v2/service/osis v1.6.5 diff --git a/go.sum b/go.sum index 0761b35d658..3206f77c796 100644 --- a/go.sum +++ b/go.sum @@ -161,6 +161,8 @@ github.com/aws/aws-sdk-go-v2/service/mediapackage v1.28.5 h1:z+b1lClMC3rSxlUQqRb github.com/aws/aws-sdk-go-v2/service/mediapackage v1.28.5/go.mod h1:wGaElJ8kmGJ08nnirzZ/6iWKqBPErlHqtpkbx9go82Q= github.com/aws/aws-sdk-go-v2/service/mediapackagev2 v1.7.5 h1:tkFfqFu8yx0AmRZAlwcF6hdDf7E7J+0P4tRAtfVB2bA= github.com/aws/aws-sdk-go-v2/service/mediapackagev2 v1.7.5/go.mod h1:pPsl4jKNPkhp2unuSQ3upeQ+9U8onSOPA2B++m5bD8o= +github.com/aws/aws-sdk-go-v2/service/mq v1.20.6 h1:n86T5yw0kS6a5nbpkEpDzLPCBXXb35lx3iDkmQWlizA= +github.com/aws/aws-sdk-go-v2/service/mq v1.20.6/go.mod h1:phfKOOpMQhlBv2KE8gF17P82zLcSedA9b7fMSGTLBdQ= github.com/aws/aws-sdk-go-v2/service/oam v1.7.5 h1:Z5qjasrNlticGJVwZahvPiv7cnGeuEFGQ5AdCeTgf/0= github.com/aws/aws-sdk-go-v2/service/oam v1.7.5/go.mod h1:qwJgNmAMUGFkLgAgTtkZZpGf9Qe1L0PwMD4oXMeS9Ic= github.com/aws/aws-sdk-go-v2/service/opensearchserverless v1.9.5 h1:V+zBQiUAATdwx3rLbc4Em+G0IeqPtY1281lHMrTvIK4= diff --git a/internal/conns/awsclient_gen.go b/internal/conns/awsclient_gen.go index 265415a822b..30ef1770a28 100644 --- a/internal/conns/awsclient_gen.go +++ b/internal/conns/awsclient_gen.go @@ -56,6 +56,7 @@ import ( medialive_sdkv2 "github.com/aws/aws-sdk-go-v2/service/medialive" mediapackage_sdkv2 "github.com/aws/aws-sdk-go-v2/service/mediapackage" mediapackagev2_sdkv2 "github.com/aws/aws-sdk-go-v2/service/mediapackagev2" + mq_sdkv2 "github.com/aws/aws-sdk-go-v2/service/mq" oam_sdkv2 "github.com/aws/aws-sdk-go-v2/service/oam" opensearchserverless_sdkv2 "github.com/aws/aws-sdk-go-v2/service/opensearchserverless" osis_sdkv2 "github.com/aws/aws-sdk-go-v2/service/osis" @@ -788,6 +789,10 @@ func (c *AWSClient) MQConn(ctx context.Context) *mq_sdkv1.MQ { return errs.Must(conn[*mq_sdkv1.MQ](ctx, c, names.MQ, make(map[string]any))) } +func (c *AWSClient) MQClient(ctx context.Context) *mq_sdkv2.Client { + return errs.Must(client[*mq_sdkv2.Client](ctx, c, names.MQ, make(map[string]any))) +} + func (c *AWSClient) MWAAConn(ctx context.Context) *mwaa_sdkv1.MWAA { return errs.Must(conn[*mwaa_sdkv1.MWAA](ctx, c, names.MWAA, make(map[string]any))) } diff --git a/internal/service/mq/broker_engine_types_data_source.go b/internal/service/mq/broker_engine_types_data_source.go new file mode 100644 index 00000000000..912dafed251 --- /dev/null +++ b/internal/service/mq/broker_engine_types_data_source.go @@ -0,0 +1,112 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package mq + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/mq" + "github.com/aws/aws-sdk-go-v2/service/mq/types" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag" +) + +// @SDKDataSource("aws_mq_broker_engine_types", name="Broker Engine Types") +func DataSourceBrokerEngineTypes() *schema.Resource { + return &schema.Resource{ + ReadWithoutTimeout: dataSourceBrokerEngineTypesRead, + + Schema: map[string]*schema.Schema{ + "broker_engine_types": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "engine_type": { + Type: schema.TypeString, + Computed: true, + }, + "engine_versions": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + }, + }, + }, + "engine_type": { + Type: schema.TypeString, + Optional: true, + ValidateDiagFunc: enum.Validate[types.EngineType](), + }, + }, + } +} + +func dataSourceBrokerEngineTypesRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + var diags diag.Diagnostics + client := meta.(*conns.AWSClient).MQClient(ctx) + + input := &mq.DescribeBrokerEngineTypesInput{} + + if v, ok := d.GetOk("engine_type"); ok { + input.EngineType = aws.String(v.(string)) + } + + var engineTypes []types.BrokerEngineType + for { + output, err := client.DescribeBrokerEngineTypes(ctx, input) + + if err != nil { + return sdkdiag.AppendErrorf(diags, "reading MQ Broker Engine Types: %s", err) + } + + engineTypes = append(engineTypes, output.BrokerEngineTypes...) + + if output.NextToken == nil { + break + } + + input.NextToken = output.NextToken + } + + d.SetId(id.UniqueId()) + + if err := d.Set("broker_engine_types", flattenBrokerList(engineTypes)); err != nil { + return sdkdiag.AppendErrorf(diags, "setting broker_engine_types: %s", err) + } + + return diags +} + +func flattenBrokerList(types []types.BrokerEngineType) (brokers []map[string]interface{}) { + for _, broker := range types { + brokers = append(brokers, map[string]interface{}{ + "engine_type": broker.EngineType, + "engine_versions": flattenEngineVersions(broker.EngineVersions), + }) + } + return +} + +func flattenEngineVersions(engines []types.EngineVersion) (versions []map[string]string) { + for _, engine := range engines { + versions = append(versions, map[string]string{ + "name": aws.ToString(engine.Name), + }) + } + return +} diff --git a/internal/service/mq/broker_engine_types_data_source_test.go b/internal/service/mq/broker_engine_types_data_source_test.go new file mode 100644 index 00000000000..e703975aac1 --- /dev/null +++ b/internal/service/mq/broker_engine_types_data_source_test.go @@ -0,0 +1,45 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package mq_test + +import ( + "fmt" + "testing" + + "github.com/aws/aws-sdk-go/service/mq" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" +) + +func TestAccMQBrokerEngineTypesDataSource_basic(t *testing.T) { + ctx := acctest.Context(t) + dataSourceName := "data.aws_mq_broker_engine_types.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, mq.EndpointsID) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, mq.EndpointsID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + Steps: []resource.TestStep{ + { + Config: testAccBrokerEngineTypesDataSourceConfig_basic("ACTIVEMQ"), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr(dataSourceName, "broker_engine_types.#", "1"), + resource.TestCheckResourceAttr(dataSourceName, "broker_engine_types.0.engine_type", "ACTIVEMQ"), + ), + }, + }, + }) +} + +func testAccBrokerEngineTypesDataSourceConfig_basic(engineType string) string { + return fmt.Sprintf(` +data "aws_mq_broker_engine_types" "test" { + engine_type = %[1]q +} +`, engineType) +} diff --git a/internal/service/mq/service_package_gen.go b/internal/service/mq/service_package_gen.go index 65642098572..aa815cc431d 100644 --- a/internal/service/mq/service_package_gen.go +++ b/internal/service/mq/service_package_gen.go @@ -5,6 +5,8 @@ package mq import ( "context" + aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws" + mq_sdkv2 "github.com/aws/aws-sdk-go-v2/service/mq" aws_sdkv1 "github.com/aws/aws-sdk-go/aws" session_sdkv1 "github.com/aws/aws-sdk-go/aws/session" mq_sdkv1 "github.com/aws/aws-sdk-go/service/mq" @@ -29,6 +31,11 @@ func (p *servicePackage) SDKDataSources(ctx context.Context) []*types.ServicePac Factory: DataSourceBroker, TypeName: "aws_mq_broker", }, + { + Factory: DataSourceBrokerEngineTypes, + TypeName: "aws_mq_broker_engine_types", + Name: "Broker Engine Types", + }, { Factory: DataSourceBrokerInstanceTypeOfferings, TypeName: "aws_mq_broker_instance_type_offerings", @@ -68,6 +75,17 @@ func (p *servicePackage) NewConn(ctx context.Context, config map[string]any) (*m return mq_sdkv1.New(sess.Copy(&aws_sdkv1.Config{Endpoint: aws_sdkv1.String(config["endpoint"].(string))})), nil } +// NewClient returns a new AWS SDK for Go v2 client for this service package's AWS API. +func (p *servicePackage) NewClient(ctx context.Context, config map[string]any) (*mq_sdkv2.Client, error) { + cfg := *(config["aws_sdkv2_config"].(*aws_sdkv2.Config)) + + return mq_sdkv2.NewFromConfig(cfg, func(o *mq_sdkv2.Options) { + if endpoint := config["endpoint"].(string); endpoint != "" { + o.BaseEndpoint = aws_sdkv2.String(endpoint) + } + }), nil +} + func ServicePackage(ctx context.Context) conns.ServicePackage { return &servicePackage{} } diff --git a/names/data/names_data.csv b/names/data/names_data.csv index e4d861e190f..bd949a153ac 100644 --- a/names/data/names_data.csv +++ b/names/data/names_data.csv @@ -251,7 +251,7 @@ mobile,mobile,mobile,mobile,,mobile,,,Mobile,Mobile,,1,,,aws_mobile_,,mobile_,Mo ,,,,,,,,,,,,,,,,,Mobile SDK for Unity,AWS,x,,,,,,No SDK support ,,,,,,,,,,,,,,,,,Mobile SDK for Xamarin,AWS,x,,,,,,No SDK support ,,,,,,,,,,,,,,,,,Monitron,Amazon,x,,,,,,No SDK support -mq,mq,mq,mq,,mq,,,MQ,MQ,,1,,,aws_mq_,,mq_,MQ,Amazon,,,,,,, +mq,mq,mq,mq,,mq,,,MQ,MQ,,1,2,,aws_mq_,,mq_,MQ,Amazon,,,,,,, mturk,mturk,mturk,mturk,,mturk,,,MTurk,MTurk,,1,,,aws_mturk_,,mturk_,MTurk (Mechanical Turk),Amazon,,x,,,,, mwaa,mwaa,mwaa,mwaa,,mwaa,,,MWAA,MWAA,,1,,,aws_mwaa_,,mwaa_,MWAA (Managed Workflows for Apache Airflow),Amazon,,,,,,, neptune,neptune,neptune,neptune,,neptune,,,Neptune,Neptune,,1,,,aws_neptune_,,neptune_,Neptune,Amazon,,,,,,, diff --git a/website/docs/d/mq_broker_engine_types.html.markdown b/website/docs/d/mq_broker_engine_types.html.markdown new file mode 100644 index 00000000000..0a711a21659 --- /dev/null +++ b/website/docs/d/mq_broker_engine_types.html.markdown @@ -0,0 +1,36 @@ +--- +subcategory: "MQ" +layout: "aws" +page_title: "AWS: aws_mq_broker_engine_types" +description: |- + Retrieve information about available broker engines. +--- + +# Data Source: aws_mq_broker_engine_types + +Retrieve information about available broker engines. + +## Example Usage + +### Basic Usage + +```terraform +data "aws_mq_broker_engine_types" "example" { + engine_type = "ACTIVEMQ" +} +``` + +## Argument Reference + +* `engine_type` - (Optional) The MQ engine type to return version details for. + +## Attribute Reference + +This data source exports the following attributes in addition to the arguments above: + +* `broker_engine_types` - A list of available engine types and versions. See [Engine Types](#engine-types). + +### engine-types + +* `engine_type` - The broker's engine type. +* `engine_versions` - The list of engine versions.