diff --git a/internal/service/mq/broker.go b/internal/service/mq/broker.go index 04b2c2d71370..b043735c9245 100644 --- a/internal/service/mq/broker.go +++ b/internal/service/mq/broker.go @@ -15,6 +15,7 @@ import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/mq" "github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -31,10 +32,10 @@ import ( func ResourceBroker() *schema.Resource { return &schema.Resource{ - Create: resourceBrokerCreate, - Read: resourceBrokerRead, - Update: resourceBrokerUpdate, - Delete: resourceBrokerDelete, + CreateWithoutTimeout: resourceBrokerCreate, + ReadWithoutTimeout: resourceBrokerRead, + UpdateWithoutTimeout: resourceBrokerUpdate, + DeleteWithoutTimeout: resourceBrokerDelete, Importer: &schema.ResourceImporter{ State: schema.ImportStatePassthrough, @@ -96,8 +97,8 @@ func ResourceBroker() *schema.Resource { "deployment_mode": { Type: schema.TypeString, Optional: true, - Default: mq.DeploymentModeSingleInstance, ForceNew: true, + Default: mq.DeploymentModeSingleInstance, ValidateFunc: validation.StringInSlice(mq.DeploymentMode_Values(), true), }, "encryption_options": { @@ -216,16 +217,10 @@ func ResourceBroker() *schema.Resource { }, }, "logs": { - Type: schema.TypeList, - Optional: true, - MaxItems: 1, - // Ignore missing configuration block - DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool { - if old == "1" && new == "0" { - return true - } - return false - }, + Type: schema.TypeList, + Optional: true, + MaxItems: 1, + DiffSuppressFunc: verify.SuppressMissingOptionalConfigurationBlock, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "audit": { @@ -243,9 +238,9 @@ func ResourceBroker() *schema.Resource { }, "maintenance_window_start_time": { Type: schema.TypeList, - MaxItems: 1, Optional: true, Computed: true, + MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "day_of_week": { @@ -267,14 +262,14 @@ func ResourceBroker() *schema.Resource { "publicly_accessible": { Type: schema.TypeBool, Optional: true, - Default: false, ForceNew: true, + Default: false, }, "security_groups": { Type: schema.TypeSet, - Elem: &schema.Schema{Type: schema.TypeString}, Optional: true, MaxItems: 5, + Elem: &schema.Schema{Type: schema.TypeString}, }, "storage_type": { Type: schema.TypeString, @@ -314,12 +309,12 @@ func ResourceBroker() *schema.Resource { }, "groups": { Type: schema.TypeSet, + Optional: true, MaxItems: 20, Elem: &schema.Schema{ Type: schema.TypeString, ValidateFunc: validation.StringLenBetween(2, 100), }, - Optional: true, }, "password": { Type: schema.TypeString, @@ -354,14 +349,14 @@ func ResourceBroker() *schema.Resource { } } -func resourceBrokerCreate(d *schema.ResourceData, meta interface{}) error { +func resourceBrokerCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { conn := meta.(*conns.AWSClient).MQConn defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig tags := defaultTagsConfig.MergeTags(tftags.New(d.Get("tags").(map[string]interface{}))) name := d.Get("broker_name").(string) engineType := d.Get("engine_type").(string) - input := mq.CreateBrokerRequest{ + input := &mq.CreateBrokerRequest{ AutoMinorVersionUpgrade: aws.Bool(d.Get("auto_minor_version_upgrade").(bool)), BrokerName: aws.String(name), CreatorRequestId: aws.String(resource.PrefixedUniqueId(fmt.Sprintf("tf-%s", name))), @@ -384,12 +379,12 @@ func resourceBrokerCreate(d *schema.ResourceData, meta interface{}) error { if v, ok := d.GetOk("encryption_options"); ok && len(v.([]interface{})) > 0 && v.([]interface{})[0] != nil { input.EncryptionOptions = expandEncryptionOptions(d.Get("encryption_options").([]interface{})) } - if v, ok := d.GetOk("logs"); ok && len(v.([]interface{})) > 0 && v.([]interface{})[0] != nil { - input.Logs = expandLogs(engineType, v.([]interface{})) - } if v, ok := d.GetOk("ldap_server_metadata"); ok && len(v.([]interface{})) > 0 && v.([]interface{})[0] != nil { input.LdapServerMetadata = expandLDAPServerMetadata(v.([]interface{})) } + if v, ok := d.GetOk("logs"); ok && len(v.([]interface{})) > 0 && v.([]interface{})[0] != nil { + input.Logs = expandLogs(engineType, v.([]interface{})) + } if v, ok := d.GetOk("maintenance_window_start_time"); ok && len(v.([]interface{})) > 0 && v.([]interface{})[0] != nil { input.MaintenanceWindowStartTime = expandWeeklyStartTime(v.([]interface{})) } @@ -406,28 +401,28 @@ func resourceBrokerCreate(d *schema.ResourceData, meta interface{}) error { input.Tags = Tags(tags.IgnoreAWS()) } - out, err := conn.CreateBroker(&input) + out, err := conn.CreateBrokerWithContext(ctx, input) if err != nil { - return fmt.Errorf("creating MQ Broker (%s): %w", name, err) + return diag.Errorf("creating MQ Broker (%s): %s", name, err) } d.SetId(aws.StringValue(out.BrokerId)) d.Set("arn", out.BrokerArn) - if _, err := waitBrokerCreated(conn, d.Id(), d.Timeout(schema.TimeoutCreate)); err != nil { - return fmt.Errorf("error waiting for MQ Broker (%s) creation: %w", d.Id(), err) + if _, err := waitBrokerCreated(ctx, conn, d.Id(), d.Timeout(schema.TimeoutCreate)); err != nil { + return diag.Errorf("waiting for MQ Broker (%s) create: %s", d.Id(), err) } - return resourceBrokerRead(d, meta) + return resourceBrokerRead(ctx, d, meta) } -func resourceBrokerRead(d *schema.ResourceData, meta interface{}) error { +func resourceBrokerRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { conn := meta.(*conns.AWSClient).MQConn defaultTagsConfig := meta.(*conns.AWSClient).DefaultTagsConfig ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig - output, err := FindBrokerByID(conn, d.Id()) + output, err := FindBrokerByID(ctx, conn, d.Id()) if !d.IsNewResource() && (tfresource.NotFound(err) || tfawserr.ErrCodeEquals(err, mq.ErrCodeForbiddenException)) { log.Printf("[WARN] MQ Broker (%s) not found, removing from state", d.Id()) @@ -436,7 +431,7 @@ func resourceBrokerRead(d *schema.ResourceData, meta interface{}) error { } if err != nil { - return fmt.Errorf("reading MQ Broker (%s): %w", d.Id(), err) + return diag.Errorf("reading MQ Broker (%s): %s", d.Id(), err) } d.Set("arn", output.BrokerArn) @@ -454,11 +449,11 @@ func resourceBrokerRead(d *schema.ResourceData, meta interface{}) error { d.Set("subnet_ids", aws.StringValueSlice(output.SubnetIds)) if err := d.Set("configuration", flattenConfiguration(output.Configurations)); err != nil { - return fmt.Errorf("error setting configuration: %w", err) + return diag.Errorf("setting configuration: %s", err) } if err := d.Set("encryption_options", flattenEncryptionOptions(output.EncryptionOptions)); err != nil { - return fmt.Errorf("error setting encryption_options: %w", err) + return diag.Errorf("setting encryption_options: %s", err) } var password string @@ -467,67 +462,69 @@ func resourceBrokerRead(d *schema.ResourceData, meta interface{}) error { } if err := d.Set("ldap_server_metadata", flattenLDAPServerMetadata(output.LdapServerMetadata, password)); err != nil { - return fmt.Errorf("error setting ldap_server_metadata: %w", err) + return diag.Errorf("setting ldap_server_metadata: %s", err) } if err := d.Set("logs", flattenLogs(output.Logs)); err != nil { - return fmt.Errorf("error setting logs: %w", err) + return diag.Errorf("setting logs: %s", err) } if err := d.Set("maintenance_window_start_time", flattenWeeklyStartTime(output.MaintenanceWindowStartTime)); err != nil { - return fmt.Errorf("error setting maintenance_window_start_time: %w", err) + return diag.Errorf("setting maintenance_window_start_time: %s", err) } - rawUsers, err := expandUsersForBroker(conn, d.Id(), output.Users) + rawUsers, err := expandUsersForBroker(ctx, conn, d.Id(), output.Users) if err != nil { - return fmt.Errorf("error retrieving user info for MQ broker (%s): %w", d.Id(), err) + return diag.Errorf("reading MQ Broker (%s) users: %s", d.Id(), err) } if err := d.Set("user", flattenUsers(rawUsers, d.Get("user").(*schema.Set).List())); err != nil { - return fmt.Errorf("error setting user: %w", err) + return diag.Errorf("setting user: %s", err) } tags := KeyValueTags(output.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig) //lintignore:AWSR002 if err := d.Set("tags", tags.RemoveDefaultConfig(defaultTagsConfig).Map()); err != nil { - return fmt.Errorf("error setting tags: %w", err) + return diag.Errorf("setting tags: %s", err) } if err := d.Set("tags_all", tags.Map()); err != nil { - return fmt.Errorf("error setting tags_all: %w", err) + return diag.Errorf("setting tags_all: %s", err) } return nil } -func resourceBrokerUpdate(d *schema.ResourceData, meta interface{}) error { +func resourceBrokerUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { conn := meta.(*conns.AWSClient).MQConn requiresReboot := false if d.HasChange("security_groups") { - _, err := conn.UpdateBroker(&mq.UpdateBrokerRequest{ + _, err := conn.UpdateBrokerWithContext(ctx, &mq.UpdateBrokerRequest{ BrokerId: aws.String(d.Id()), SecurityGroups: flex.ExpandStringSet(d.Get("security_groups").(*schema.Set)), }) + if err != nil { - return fmt.Errorf("error updating MQ Broker (%s) security groups: %w", d.Id(), err) + return diag.Errorf("updating MQ Broker (%s) security groups: %s", d.Id(), err) } } if d.HasChanges("configuration", "logs", "engine_version") { - engineType := d.Get("engine_type").(string) - _, err := conn.UpdateBroker(&mq.UpdateBrokerRequest{ + _, err := conn.UpdateBrokerWithContext(ctx, &mq.UpdateBrokerRequest{ BrokerId: aws.String(d.Id()), Configuration: expandConfigurationId(d.Get("configuration").([]interface{})), - Logs: expandLogs(engineType, d.Get("logs").([]interface{})), EngineVersion: aws.String(d.Get("engine_version").(string)), + Logs: expandLogs(d.Get("engine_type").(string), d.Get("logs").([]interface{})), }) + if err != nil { - return fmt.Errorf("error updating MQ Broker (%s) configuration: %w", d.Id(), err) + return diag.Errorf("updating MQ Broker (%s) configuration: %s", d.Id(), err) } + requiresReboot = true } @@ -537,10 +534,10 @@ func resourceBrokerUpdate(d *schema.ResourceData, meta interface{}) error { // d.HasChange("user") always reports a change when running resourceBrokerUpdate // updateBrokerUsers needs to be called to know if changes to user are actually made var usersUpdated bool - usersUpdated, err = updateBrokerUsers(conn, d.Id(), - o.(*schema.Set).List(), n.(*schema.Set).List()) + usersUpdated, err = updateBrokerUsers(ctx, conn, d.Id(), o.(*schema.Set).List(), n.(*schema.Set).List()) + if err != nil { - return fmt.Errorf("error updating MQ Broker (%s) user: %w", d.Id(), err) + return diag.Errorf("updating MQ Broker (%s) users: %s", d.Id(), err) } if usersUpdated { @@ -549,92 +546,98 @@ func resourceBrokerUpdate(d *schema.ResourceData, meta interface{}) error { } if d.HasChange("host_instance_type") { - _, err := conn.UpdateBroker(&mq.UpdateBrokerRequest{ + _, err := conn.UpdateBrokerWithContext(ctx, &mq.UpdateBrokerRequest{ BrokerId: aws.String(d.Id()), HostInstanceType: aws.String(d.Get("host_instance_type").(string)), }) if err != nil { - return fmt.Errorf("error updating MQ Broker (%s) host instance type: %w", d.Id(), err) + return diag.Errorf("updating MQ Broker (%s) host instance type: %s", d.Id(), err) } requiresReboot = true } if d.HasChange("auto_minor_version_upgrade") { - _, err := conn.UpdateBroker(&mq.UpdateBrokerRequest{ + _, err := conn.UpdateBrokerWithContext(ctx, &mq.UpdateBrokerRequest{ BrokerId: aws.String(d.Id()), AutoMinorVersionUpgrade: aws.Bool(d.Get("auto_minor_version_upgrade").(bool)), }) if err != nil { - return fmt.Errorf("error updating MQ Broker (%s) auto minor version upgrade: %w", d.Id(), err) + return diag.Errorf("updating MQ Broker (%s) auto minor version upgrade: %s", d.Id(), err) } requiresReboot = true } if d.HasChange("maintenance_window_start_time") { - _, err := conn.UpdateBroker(&mq.UpdateBrokerRequest{ + _, err := conn.UpdateBrokerWithContext(ctx, &mq.UpdateBrokerRequest{ BrokerId: aws.String(d.Id()), MaintenanceWindowStartTime: expandWeeklyStartTime(d.Get("maintenance_window_start_time").([]interface{})), }) if err != nil { - return fmt.Errorf("error updating MQ Broker (%s) maintenance window start time: %w", d.Id(), err) + return diag.Errorf("updating MQ Broker (%s) maintenance window start time: %s", d.Id(), err) } requiresReboot = true } if d.Get("apply_immediately").(bool) && requiresReboot { - _, err := conn.RebootBroker(&mq.RebootBrokerInput{ + _, err := conn.RebootBrokerWithContext(ctx, &mq.RebootBrokerInput{ BrokerId: aws.String(d.Id()), }) + if err != nil { - return fmt.Errorf("error rebooting MQ Broker (%s): %w", d.Id(), err) + return diag.Errorf("rebooting MQ Broker (%s): %s", d.Id(), err) } - if _, err := waitBrokerRebooted(conn, d.Id(), d.Timeout(schema.TimeoutUpdate)); err != nil { - return fmt.Errorf("error waiting for MQ Broker (%s) reboot: %w", d.Id(), err) + if _, err := waitBrokerRebooted(ctx, conn, d.Id(), d.Timeout(schema.TimeoutUpdate)); err != nil { + return diag.Errorf("waiting for MQ Broker (%s) reboot: %s", d.Id(), err) } } if d.HasChange("tags_all") { o, n := d.GetChange("tags_all") - if err := UpdateTags(conn, d.Get("arn").(string), o, n); err != nil { - return fmt.Errorf("error updating MQ Broker (%s) tags: %w", d.Get("arn").(string), err) + if err := UpdateTagsWithContext(ctx, conn, d.Get("arn").(string), o, n); err != nil { + return diag.Errorf("updating MQ Broker (%s) tags: %s", d.Get("arn").(string), err) } } return nil } -func resourceBrokerDelete(d *schema.ResourceData, meta interface{}) error { +func resourceBrokerDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { conn := meta.(*conns.AWSClient).MQConn log.Printf("[INFO] Deleting MQ Broker: %s", d.Id()) - _, err := conn.DeleteBroker(&mq.DeleteBrokerInput{ + _, err := conn.DeleteBrokerWithContext(ctx, &mq.DeleteBrokerInput{ BrokerId: aws.String(d.Id()), }) + + if tfawserr.ErrCodeEquals(err, mq.ErrCodeNotFoundException) { + return nil + } + if err != nil { - return err + return diag.Errorf("deleting MQ Broker (%s): %s", d.Id(), err) } - if _, err := waitBrokerDeleted(conn, d.Id(), d.Timeout(schema.TimeoutDelete)); err != nil { - return fmt.Errorf("error waiting for MQ Broker (%s) deletion: %w", d.Id(), err) + if _, err := waitBrokerDeleted(ctx, conn, d.Id(), d.Timeout(schema.TimeoutDelete)); err != nil { + return diag.Errorf("waiting for MQ Broker (%s) delete: %s", d.Id(), err) } return nil } -func FindBrokerByID(conn *mq.MQ, id string) (*mq.DescribeBrokerResponse, error) { +func FindBrokerByID(ctx context.Context, conn *mq.MQ, id string) (*mq.DescribeBrokerResponse, error) { input := &mq.DescribeBrokerInput{ BrokerId: aws.String(id), } - output, err := conn.DescribeBroker(input) + output, err := conn.DescribeBrokerWithContext(ctx, input) if tfawserr.ErrCodeEquals(err, mq.ErrCodeNotFoundException) { return nil, &resource.NotFoundError{ @@ -654,9 +657,9 @@ func FindBrokerByID(conn *mq.MQ, id string) (*mq.DescribeBrokerResponse, error) return output, nil } -func statusBrokerState(conn *mq.MQ, id string) resource.StateRefreshFunc { +func statusBrokerState(ctx context.Context, conn *mq.MQ, id string) resource.StateRefreshFunc { return func() (interface{}, string, error) { - output, err := FindBrokerByID(conn, id) + output, err := FindBrokerByID(ctx, conn, id) if tfresource.NotFound(err) { return nil, "", nil @@ -670,14 +673,14 @@ func statusBrokerState(conn *mq.MQ, id string) resource.StateRefreshFunc { } } -func waitBrokerCreated(conn *mq.MQ, id string, timeout time.Duration) (*mq.DescribeBrokerResponse, error) { +func waitBrokerCreated(ctx context.Context, conn *mq.MQ, id string, timeout time.Duration) (*mq.DescribeBrokerResponse, error) { stateConf := resource.StateChangeConf{ Pending: []string{mq.BrokerStateCreationInProgress, mq.BrokerStateRebootInProgress}, Target: []string{mq.BrokerStateRunning}, Timeout: timeout, - Refresh: statusBrokerState(conn, id), + Refresh: statusBrokerState(ctx, conn, id), } - outputRaw, err := stateConf.WaitForState() + outputRaw, err := stateConf.WaitForStateContext(ctx) if output, ok := outputRaw.(*mq.DescribeBrokerResponse); ok { return output, err @@ -686,7 +689,7 @@ func waitBrokerCreated(conn *mq.MQ, id string, timeout time.Duration) (*mq.Descr return nil, err } -func waitBrokerDeleted(conn *mq.MQ, id string, timeout time.Duration) (*mq.DescribeBrokerResponse, error) { +func waitBrokerDeleted(ctx context.Context, conn *mq.MQ, id string, timeout time.Duration) (*mq.DescribeBrokerResponse, error) { stateConf := resource.StateChangeConf{ Pending: []string{ mq.BrokerStateCreationFailed, @@ -696,9 +699,9 @@ func waitBrokerDeleted(conn *mq.MQ, id string, timeout time.Duration) (*mq.Descr }, Target: []string{}, Timeout: timeout, - Refresh: statusBrokerState(conn, id), + Refresh: statusBrokerState(ctx, conn, id), } - outputRaw, err := stateConf.WaitForState() + outputRaw, err := stateConf.WaitForStateContext(ctx) if output, ok := outputRaw.(*mq.DescribeBrokerResponse); ok { return output, err @@ -707,14 +710,14 @@ func waitBrokerDeleted(conn *mq.MQ, id string, timeout time.Duration) (*mq.Descr return nil, err } -func waitBrokerRebooted(conn *mq.MQ, id string, timeout time.Duration) (*mq.DescribeBrokerResponse, error) { +func waitBrokerRebooted(ctx context.Context, conn *mq.MQ, id string, timeout time.Duration) (*mq.DescribeBrokerResponse, error) { stateConf := resource.StateChangeConf{ Pending: []string{mq.BrokerStateRebootInProgress}, Target: []string{mq.BrokerStateRunning}, Timeout: timeout, - Refresh: statusBrokerState(conn, id), + Refresh: statusBrokerState(ctx, conn, id), } - outputRaw, err := stateConf.WaitForState() + outputRaw, err := stateConf.WaitForStateContext(ctx) if output, ok := outputRaw.(*mq.DescribeBrokerResponse); ok { return output, err @@ -743,7 +746,7 @@ func resourceUserHash(v interface{}) int { return create.StringHashcode(buf.String()) } -func updateBrokerUsers(conn *mq.MQ, bId string, oldUsers, newUsers []interface{}) (bool, error) { +func updateBrokerUsers(ctx context.Context, conn *mq.MQ, bId string, oldUsers, newUsers []interface{}) (bool, error) { // If there are any user creates/deletes/updates, updatedUsers will be set to true updatedUsers := false @@ -753,21 +756,21 @@ func updateBrokerUsers(conn *mq.MQ, bId string, oldUsers, newUsers []interface{} } for _, c := range createL { - _, err := conn.CreateUser(c) + _, err := conn.CreateUserWithContext(ctx, c) updatedUsers = true if err != nil { return updatedUsers, err } } for _, d := range deleteL { - _, err := conn.DeleteUser(d) + _, err := conn.DeleteUserWithContext(ctx, d) updatedUsers = true if err != nil { return updatedUsers, err } } for _, u := range updateL { - _, err := conn.UpdateUser(u) + _, err := conn.UpdateUserWithContext(ctx, u) updatedUsers = true if err != nil { return updatedUsers, err @@ -928,7 +931,7 @@ func expandUsers(cfg []interface{}) []*mq.User { return users } -func expandUsersForBroker(conn *mq.MQ, brokerId string, input []*mq.UserSummary) ([]*mq.User, error) { +func expandUsersForBroker(ctx context.Context, conn *mq.MQ, brokerId string, input []*mq.UserSummary) ([]*mq.User, error) { var rawUsers []*mq.User for _, u := range input { @@ -936,7 +939,7 @@ func expandUsersForBroker(conn *mq.MQ, brokerId string, input []*mq.UserSummary) continue } - uOut, err := conn.DescribeUser(&mq.DescribeUserInput{ + uOut, err := conn.DescribeUserWithContext(ctx, &mq.DescribeUserInput{ BrokerId: aws.String(brokerId), Username: u.Username, }) diff --git a/internal/service/mq/broker_data_source.go b/internal/service/mq/broker_data_source.go index 38868f7f29a5..129c1b28235e 100644 --- a/internal/service/mq/broker_data_source.go +++ b/internal/service/mq/broker_data_source.go @@ -1,10 +1,11 @@ package mq import ( - "fmt" + "context" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/mq" + "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" "github.com/hashicorp/terraform-provider-aws/internal/experimental/nullable" @@ -13,7 +14,7 @@ import ( func DataSourceBroker() *schema.Resource { return &schema.Resource{ - Read: dataSourceBrokerRead, + ReadWithoutTimeout: dataSourceBrokerRead, Schema: map[string]*schema.Schema{ "arn": { @@ -167,14 +168,14 @@ func DataSourceBroker() *schema.Resource { Computed: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ - "general": { - Type: schema.TypeBool, - Computed: true, - }, "audit": { Type: nullable.TypeNullableBool, Computed: true, }, + "general": { + Type: schema.TypeBool, + Computed: true, + }, }, }, }, @@ -230,7 +231,6 @@ func DataSourceBroker() *schema.Resource { "groups": { Type: schema.TypeSet, Elem: &schema.Schema{Type: schema.TypeString}, - Set: schema.HashString, Computed: true, }, "username": { @@ -244,66 +244,59 @@ func DataSourceBroker() *schema.Resource { } } -func dataSourceBrokerRead(d *schema.ResourceData, meta interface{}) error { +func dataSourceBrokerRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { conn := meta.(*conns.AWSClient).MQConn ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig input := &mq.ListBrokersInput{} + var brokers []*mq.BrokerSummary - var results []*mq.BrokerSummary - - err := conn.ListBrokersPages(input, func(page *mq.ListBrokersResponse, lastPage bool) bool { + err := conn.ListBrokersPagesWithContext(ctx, input, func(page *mq.ListBrokersResponse, lastPage bool) bool { if page == nil { return !lastPage } - for _, brokerSummary := range page.BrokerSummaries { - if brokerSummary == nil { + for _, broker := range page.BrokerSummaries { + if broker == nil { continue } - if v, ok := d.GetOk("broker_id"); ok && v.(string) != aws.StringValue(brokerSummary.BrokerId) { + if v, ok := d.GetOk("broker_id"); ok && v.(string) != aws.StringValue(broker.BrokerId) { continue } - if v, ok := d.GetOk("broker_name"); ok && v.(string) != aws.StringValue(brokerSummary.BrokerName) { + if v, ok := d.GetOk("broker_name"); ok && v.(string) != aws.StringValue(broker.BrokerName) { continue } - results = append(results, brokerSummary) + brokers = append(brokers, broker) } return !lastPage }) if err != nil { - return fmt.Errorf("error listing MQ Brokers: %w", err) + return diag.Errorf("reading MQ Brokers: %s", err) } - if len(results) != 1 { - return fmt.Errorf("Search returned %d results, please revise so only one is returned", len(results)) + if n := len(brokers); n == 0 { + return diag.Errorf("no MQ Brokers matched") + } else if n > 1 { + return diag.Errorf("%d MQ Brokers matched; use additional constraints to reduce matches to a single Broker", n) } - brokerId := aws.StringValue(results[0].BrokerId) - - output, err := conn.DescribeBroker(&mq.DescribeBrokerInput{ - BrokerId: aws.String(brokerId), - }) + brokerID := aws.StringValue(brokers[0].BrokerId) + output, err := FindBrokerByID(ctx, conn, brokerID) if err != nil { - return fmt.Errorf("error reading MQ broker (%s): %w", brokerId, err) + return diag.Errorf("reading MQ Broker (%s): %s", brokerID, err) } - if output == nil { - return fmt.Errorf("empty response while reading MQ broker (%s)", brokerId) - } - - d.SetId(brokerId) - + d.SetId(brokerID) d.Set("arn", output.BrokerArn) d.Set("authentication_strategy", output.AuthenticationStrategy) d.Set("auto_minor_version_upgrade", output.AutoMinorVersionUpgrade) - d.Set("broker_id", brokerId) + d.Set("broker_id", brokerID) d.Set("broker_name", output.BrokerName) d.Set("deployment_mode", output.DeploymentMode) d.Set("engine_type", output.EngineType) @@ -316,11 +309,11 @@ func dataSourceBrokerRead(d *schema.ResourceData, meta interface{}) error { d.Set("subnet_ids", aws.StringValueSlice(output.SubnetIds)) if err := d.Set("configuration", flattenConfiguration(output.Configurations)); err != nil { - return fmt.Errorf("error setting configuration: %w", err) + return diag.Errorf("setting configuration: %s", err) } if err := d.Set("encryption_options", flattenEncryptionOptions(output.EncryptionOptions)); err != nil { - return fmt.Errorf("error setting encryption_options: %w", err) + return diag.Errorf("setting encryption_options: %s", err) } var password string @@ -329,29 +322,29 @@ func dataSourceBrokerRead(d *schema.ResourceData, meta interface{}) error { } if err := d.Set("ldap_server_metadata", flattenLDAPServerMetadata(output.LdapServerMetadata, password)); err != nil { - return fmt.Errorf("error setting ldap_server_metadata: %w", err) + return diag.Errorf("setting ldap_server_metadata: %s", err) } if err := d.Set("logs", flattenLogs(output.Logs)); err != nil { - return fmt.Errorf("error setting logs: %w", err) + return diag.Errorf("setting logs: %s", err) } if err := d.Set("maintenance_window_start_time", flattenWeeklyStartTime(output.MaintenanceWindowStartTime)); err != nil { - return fmt.Errorf("error setting maintenance_window_start_time: %w", err) + return diag.Errorf("setting maintenance_window_start_time: %s", err) } - rawUsers, err := expandUsersForBroker(conn, brokerId, output.Users) + rawUsers, err := expandUsersForBroker(ctx, conn, brokerID, output.Users) if err != nil { - return fmt.Errorf("error retrieving user info for MQ broker (%s): %w", brokerId, err) + return diag.Errorf("reading MQ Broker (%s) users: %s", brokerID, err) } if err := d.Set("user", flattenUsers(rawUsers, d.Get("user").(*schema.Set).List())); err != nil { - return fmt.Errorf("error setting user: %w", err) + return diag.Errorf("setting user: %s", err) } if err := d.Set("tags", KeyValueTags(output.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig).Map()); err != nil { - return fmt.Errorf("error setting tags: %w", err) + return diag.Errorf("setting tags: %s", err) } return nil diff --git a/internal/service/mq/broker_test.go b/internal/service/mq/broker_test.go index 60be780f0156..1e958e64d3e5 100644 --- a/internal/service/mq/broker_test.go +++ b/internal/service/mq/broker_test.go @@ -1,6 +1,7 @@ package mq_test import ( + "context" "fmt" "regexp" "strings" @@ -1292,7 +1293,7 @@ func testAccCheckBrokerDestroy(s *terraform.State) error { continue } - _, err := tfmq.FindBrokerByID(conn, rs.Primary.ID) + _, err := tfmq.FindBrokerByID(context.Background(), conn, rs.Primary.ID) if tfresource.NotFound(err) { continue @@ -1321,7 +1322,7 @@ func testAccCheckBrokerExists(n string, v *mq.DescribeBrokerResponse) resource.T conn := acctest.Provider.Meta().(*conns.AWSClient).MQConn - output, err := tfmq.FindBrokerByID(conn, rs.Primary.ID) + output, err := tfmq.FindBrokerByID(context.Background(), conn, rs.Primary.ID) if err != nil { return err