-
Notifications
You must be signed in to change notification settings - Fork 9.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
d/aws_connect_quick_connect (#22527)
* feat(connect): quick connect datasrc schema * feat(connect): quick connect datasrc reads uses either quick_connect_id or name DescribeQuickConnectWithContext api ListQuickConnectsPagesWithContext api * feat(connect): aws_connect_quick_connect provider * test(connect): id for quick connect datasrc * test(connect): name for quick connect datasrc * docs(connect): data source for quick connect * ci(connect): changelog quick connect datasrc
- Loading branch information
Showing
6 changed files
with
398 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
```release-note:new-data-source | ||
aws_connect_quick_connect | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,195 @@ | ||
package connect | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
|
||
"github.com/aws/aws-sdk-go/aws" | ||
"github.com/aws/aws-sdk-go/service/connect" | ||
"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" | ||
tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" | ||
) | ||
|
||
func DataSourceQuickConnect() *schema.Resource { | ||
return &schema.Resource{ | ||
ReadContext: dataSourceQuickConnectRead, | ||
Schema: map[string]*schema.Schema{ | ||
"arn": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"description": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"instance_id": { | ||
Type: schema.TypeString, | ||
Required: true, | ||
ValidateFunc: validation.StringLenBetween(1, 100), | ||
}, | ||
"name": { | ||
Type: schema.TypeString, | ||
Optional: true, | ||
Computed: true, | ||
ExactlyOneOf: []string{"name", "quick_connect_id"}, | ||
}, | ||
"quick_connect_config": { | ||
Type: schema.TypeList, | ||
Computed: true, | ||
Elem: &schema.Resource{ | ||
Schema: map[string]*schema.Schema{ | ||
"phone_config": { | ||
Type: schema.TypeList, | ||
Computed: true, | ||
Elem: &schema.Resource{ | ||
Schema: map[string]*schema.Schema{ | ||
"phone_number": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
}, | ||
}, | ||
}, | ||
"queue_config": { | ||
Type: schema.TypeList, | ||
Computed: true, | ||
Elem: &schema.Resource{ | ||
Schema: map[string]*schema.Schema{ | ||
"contact_flow_id": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"queue_id": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
}, | ||
}, | ||
}, | ||
"quick_connect_type": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"user_config": { | ||
Type: schema.TypeList, | ||
Computed: true, | ||
Elem: &schema.Resource{ | ||
Schema: map[string]*schema.Schema{ | ||
"contact_flow_id": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
"user_id": { | ||
Type: schema.TypeString, | ||
Computed: true, | ||
}, | ||
}, | ||
}, | ||
}, | ||
}, | ||
}, | ||
}, | ||
"quick_connect_id": { | ||
Type: schema.TypeString, | ||
Optional: true, | ||
Computed: true, | ||
ExactlyOneOf: []string{"quick_connect_id", "name"}, | ||
}, | ||
"tags": tftags.TagsSchemaComputed(), | ||
}, | ||
} | ||
} | ||
|
||
func dataSourceQuickConnectRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { | ||
conn := meta.(*conns.AWSClient).ConnectConn | ||
ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig | ||
|
||
instanceID := d.Get("instance_id").(string) | ||
|
||
input := &connect.DescribeQuickConnectInput{ | ||
InstanceId: aws.String(instanceID), | ||
} | ||
|
||
if v, ok := d.GetOk("quick_connect_id"); ok { | ||
input.QuickConnectId = aws.String(v.(string)) | ||
} else if v, ok := d.GetOk("name"); ok { | ||
name := v.(string) | ||
quickConnectSummary, err := dataSourceGetConnectQuickConnectSummaryByName(ctx, conn, instanceID, name) | ||
|
||
if err != nil { | ||
return diag.FromErr(fmt.Errorf("error finding Connect Quick Connect Summary by name (%s): %w", name, err)) | ||
} | ||
|
||
if quickConnectSummary == nil { | ||
return diag.FromErr(fmt.Errorf("error finding Connect Quick Connect Summary by name (%s): not found", name)) | ||
} | ||
|
||
input.QuickConnectId = quickConnectSummary.Id | ||
} | ||
|
||
resp, err := conn.DescribeQuickConnectWithContext(ctx, input) | ||
|
||
if err != nil { | ||
return diag.FromErr(fmt.Errorf("error getting Connect Quick Connect: %w", err)) | ||
} | ||
|
||
if resp == nil || resp.QuickConnect == nil { | ||
return diag.FromErr(fmt.Errorf("error getting Connect Quick Connect: empty response")) | ||
} | ||
|
||
quickConnect := resp.QuickConnect | ||
|
||
d.Set("arn", quickConnect.QuickConnectARN) | ||
d.Set("description", quickConnect.Description) | ||
d.Set("name", quickConnect.Name) | ||
d.Set("quick_connect_id", quickConnect.QuickConnectId) | ||
|
||
if err := d.Set("quick_connect_config", flattenQuickConnectConfig(quickConnect.QuickConnectConfig)); err != nil { | ||
return diag.FromErr(fmt.Errorf("error setting quick_connect_config: %s", err)) | ||
} | ||
|
||
if err := d.Set("tags", KeyValueTags(quickConnect.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig).Map()); err != nil { | ||
return diag.FromErr(fmt.Errorf("error setting tags: %s", err)) | ||
} | ||
|
||
d.SetId(fmt.Sprintf("%s:%s", instanceID, aws.StringValue(quickConnect.QuickConnectId))) | ||
|
||
return nil | ||
} | ||
|
||
func dataSourceGetConnectQuickConnectSummaryByName(ctx context.Context, conn *connect.Connect, instanceID, name string) (*connect.QuickConnectSummary, error) { | ||
var result *connect.QuickConnectSummary | ||
|
||
input := &connect.ListQuickConnectsInput{ | ||
InstanceId: aws.String(instanceID), | ||
MaxResults: aws.Int64(ListQuickConnectsMaxResults), | ||
} | ||
|
||
err := conn.ListQuickConnectsPagesWithContext(ctx, input, func(page *connect.ListQuickConnectsOutput, lastPage bool) bool { | ||
if page == nil { | ||
return !lastPage | ||
} | ||
|
||
for _, cf := range page.QuickConnectSummaryList { | ||
if cf == nil { | ||
continue | ||
} | ||
|
||
if aws.StringValue(cf.Name) == name { | ||
result = cf | ||
return false | ||
} | ||
} | ||
|
||
return !lastPage | ||
}) | ||
|
||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
return result, nil | ||
} |
123 changes: 123 additions & 0 deletions
123
internal/service/connect/quick_connect_data_source_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
package connect_test | ||
|
||
import ( | ||
"fmt" | ||
"testing" | ||
|
||
"github.com/aws/aws-sdk-go/service/connect" | ||
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 TestAccConnectQuickConnectDataSource_QuickConnectID(t *testing.T) { | ||
rName := sdkacctest.RandomWithPrefix("resource-test-terraform") | ||
resourceName := "aws_connect_quick_connect.test" | ||
datasourceName := "data.aws_connect_quick_connect.test" | ||
phoneNumber := "+12345678912" | ||
|
||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { acctest.PreCheck(t) }, | ||
ErrorCheck: acctest.ErrorCheck(t, connect.EndpointsID), | ||
Providers: acctest.Providers, | ||
Steps: []resource.TestStep{ | ||
{ | ||
Config: testAccQuickConnectDataSourceConfig_QuickConnectID(rName, resourceName, phoneNumber), | ||
Check: resource.ComposeAggregateTestCheckFunc( | ||
resource.TestCheckResourceAttrPair(datasourceName, "arn", resourceName, "arn"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "description", resourceName, "description"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "instance_id", resourceName, "instance_id"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "name", resourceName, "name"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "quick_connect_config.#", resourceName, "quick_connect_config.#"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "quick_connect_config.0.quick_connect_type", resourceName, "quick_connect_config.0.quick_connect_type"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "quick_connect_config.0.phone_config.#", resourceName, "quick_connect_config.0.phone_config.#"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "quick_connect_config.0.phone_config.0.phone_number", resourceName, "quick_connect_config.0.phone_config.0.phone_number"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "quick_connect_id", resourceName, "quick_connect_id"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "tags.%", resourceName, "tags.%"), | ||
), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func TestAccConnectQuickConnectDataSource_name(t *testing.T) { | ||
rName := sdkacctest.RandomWithPrefix("resource-test-terraform") | ||
rName2 := sdkacctest.RandomWithPrefix("resource-test-terraform") | ||
resourceName := "aws_connect_quick_connect.test" | ||
datasourceName := "data.aws_connect_quick_connect.test" | ||
phoneNumber := "+12345678912" | ||
|
||
resource.Test(t, resource.TestCase{ | ||
PreCheck: func() { acctest.PreCheck(t) }, | ||
ErrorCheck: acctest.ErrorCheck(t, connect.EndpointsID), | ||
Providers: acctest.Providers, | ||
Steps: []resource.TestStep{ | ||
{ | ||
Config: testAccQuickConnectDataSourceConfig_Name(rName, rName2, phoneNumber), | ||
Check: resource.ComposeAggregateTestCheckFunc( | ||
resource.TestCheckResourceAttrPair(datasourceName, "arn", resourceName, "arn"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "description", resourceName, "description"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "instance_id", resourceName, "instance_id"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "name", resourceName, "name"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "quick_connect_config.#", resourceName, "quick_connect_config.#"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "quick_connect_config.0.quick_connect_type", resourceName, "quick_connect_config.0.quick_connect_type"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "quick_connect_config.0.phone_config.#", resourceName, "quick_connect_config.0.phone_config.#"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "quick_connect_config.0.phone_config.0.phone_number", resourceName, "quick_connect_config.0.phone_config.0.phone_number"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "quick_connect_id", resourceName, "quick_connect_id"), | ||
resource.TestCheckResourceAttrPair(datasourceName, "tags.%", resourceName, "tags.%"), | ||
), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
func testAccQuickConnectBaseDataSourceConfig(rName, rName2, phoneNumber string) string { | ||
return fmt.Sprintf(` | ||
resource "aws_connect_instance" "test" { | ||
identity_management_type = "CONNECT_MANAGED" | ||
inbound_calls_enabled = true | ||
instance_alias = %[1]q | ||
outbound_calls_enabled = true | ||
} | ||
resource "aws_connect_quick_connect" "test" { | ||
instance_id = aws_connect_instance.test.id | ||
name = %[2]q | ||
description = "Test Quick Connect Description" | ||
quick_connect_config { | ||
quick_connect_type = "PHONE_NUMBER" | ||
phone_config { | ||
phone_number = %[3]q | ||
} | ||
} | ||
tags = { | ||
"Name" = "Test Quick Connect" | ||
} | ||
} | ||
`, rName, rName2, phoneNumber) | ||
} | ||
|
||
func testAccQuickConnectDataSourceConfig_QuickConnectID(rName, rName2, phoneNumber string) string { | ||
return acctest.ConfigCompose( | ||
testAccQuickConnectBaseDataSourceConfig(rName, rName2, phoneNumber), | ||
` | ||
data "aws_connect_quick_connect" "test" { | ||
instance_id = aws_connect_instance.test.id | ||
quick_connect_id = aws_connect_quick_connect.test.quick_connect_id | ||
} | ||
`) | ||
} | ||
|
||
func testAccQuickConnectDataSourceConfig_Name(rName, rName2, phoneNumber string) string { | ||
return acctest.ConfigCompose( | ||
testAccQuickConnectBaseDataSourceConfig(rName, rName2, phoneNumber), | ||
` | ||
data "aws_connect_quick_connect" "test" { | ||
instance_id = aws_connect_instance.test.id | ||
name = aws_connect_quick_connect.test.name | ||
} | ||
`) | ||
} |
Oops, something went wrong.