Skip to content

Commit a0e4dfa

Browse files
authored
Merge pull request #42534 from badmintoncryer/f-iot-authentication-type
[Enhancement] aws_iot_domain_configuration: support for application protocol and authentication type
2 parents d532496 + 8a5eaa2 commit a0e4dfa

File tree

4 files changed

+59
-14
lines changed

4 files changed

+59
-14
lines changed

.changelog/42534.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/aws_iot_domain_configuration: Add `application_protocol` and `authentication_type` arguments
3+
```

internal/service/iot/domain_configuration.go

+42-10
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ func resourceDomainConfiguration() *schema.Resource {
4343
Type: schema.TypeString,
4444
Computed: true,
4545
},
46+
"application_protocol": {
47+
Type: schema.TypeString,
48+
Optional: true,
49+
Computed: true,
50+
ValidateDiagFunc: enum.Validate[awstypes.ApplicationProtocol](),
51+
},
52+
"authentication_type": {
53+
Type: schema.TypeString,
54+
Optional: true,
55+
Computed: true,
56+
ValidateDiagFunc: enum.Validate[awstypes.AuthenticationType](),
57+
},
4658
"authorizer_config": {
4759
Type: schema.TypeList,
4860
Optional: true,
@@ -129,11 +141,19 @@ func resourceDomainConfigurationCreate(ctx context.Context, d *schema.ResourceDa
129141
conn := meta.(*conns.AWSClient).IoTClient(ctx)
130142

131143
name := d.Get(names.AttrName).(string)
132-
input := &iot.CreateDomainConfigurationInput{
144+
input := iot.CreateDomainConfigurationInput{
133145
DomainConfigurationName: aws.String(name),
134146
Tags: getTagsIn(ctx),
135147
}
136148

149+
if v, ok := d.GetOk("application_protocol"); ok {
150+
input.ApplicationProtocol = awstypes.ApplicationProtocol(v.(string))
151+
}
152+
153+
if v, ok := d.GetOk("authentication_type"); ok {
154+
input.AuthenticationType = awstypes.AuthenticationType(v.(string))
155+
}
156+
137157
if v, ok := d.GetOk("authorizer_config"); ok && len(v.([]any)) > 0 && v.([]any)[0] != nil {
138158
input.AuthorizerConfig = expandAuthorizerConfig(v.([]any)[0].(map[string]any))
139159
}
@@ -158,7 +178,7 @@ func resourceDomainConfigurationCreate(ctx context.Context, d *schema.ResourceDa
158178
input.ValidationCertificateArn = aws.String(v.(string))
159179
}
160180

161-
output, err := conn.CreateDomainConfiguration(ctx, input)
181+
output, err := conn.CreateDomainConfiguration(ctx, &input)
162182

163183
if err != nil {
164184
return sdkdiag.AppendErrorf(diags, "creating IoT Domain Configuration (%s): %s", name, err)
@@ -185,7 +205,9 @@ func resourceDomainConfigurationRead(ctx context.Context, d *schema.ResourceData
185205
return sdkdiag.AppendErrorf(diags, "reading IoT Domain Configuration (%s): %s", d.Id(), err)
186206
}
187207

208+
d.Set("application_protocol", output.ApplicationProtocol)
188209
d.Set(names.AttrARN, output.DomainConfigurationArn)
210+
d.Set("authentication_type", output.AuthenticationType)
189211
if output.AuthorizerConfig != nil {
190212
if err := d.Set("authorizer_config", []any{flattenAuthorizerConfig(output.AuthorizerConfig)}); err != nil {
191213
return sdkdiag.AppendErrorf(diags, "setting authorizer_config: %s", err)
@@ -218,10 +240,18 @@ func resourceDomainConfigurationUpdate(ctx context.Context, d *schema.ResourceDa
218240
conn := meta.(*conns.AWSClient).IoTClient(ctx)
219241

220242
if d.HasChangesExcept(names.AttrTags, names.AttrTagsAll) {
221-
input := &iot.UpdateDomainConfigurationInput{
243+
input := iot.UpdateDomainConfigurationInput{
222244
DomainConfigurationName: aws.String(d.Id()),
223245
}
224246

247+
if d.HasChange("application_protocol") {
248+
input.ApplicationProtocol = awstypes.ApplicationProtocol(d.Get("application_protocol").(string))
249+
}
250+
251+
if d.HasChange("authentication_type") {
252+
input.AuthenticationType = awstypes.AuthenticationType(d.Get("authentication_type").(string))
253+
}
254+
225255
if d.HasChange("authorizer_config") {
226256
if v, ok := d.GetOk("authorizer_config"); ok && len(v.([]any)) > 0 && v.([]any)[0] != nil {
227257
input.AuthorizerConfig = expandAuthorizerConfig(v.([]any)[0].(map[string]any))
@@ -240,7 +270,7 @@ func resourceDomainConfigurationUpdate(ctx context.Context, d *schema.ResourceDa
240270
}
241271
}
242272

243-
_, err := conn.UpdateDomainConfiguration(ctx, input)
273+
_, err := conn.UpdateDomainConfiguration(ctx, &input)
244274

245275
if err != nil {
246276
return sdkdiag.AppendErrorf(diags, "updating IoT Domain Configuration (%s): %s", d.Id(), err)
@@ -255,10 +285,11 @@ func resourceDomainConfigurationDelete(ctx context.Context, d *schema.ResourceDa
255285
conn := meta.(*conns.AWSClient).IoTClient(ctx)
256286

257287
if d.Get(names.AttrStatus).(string) == string(awstypes.DomainConfigurationStatusEnabled) {
258-
_, err := conn.UpdateDomainConfiguration(ctx, &iot.UpdateDomainConfigurationInput{
288+
input := iot.UpdateDomainConfigurationInput{
259289
DomainConfigurationName: aws.String(d.Id()),
260290
DomainConfigurationStatus: awstypes.DomainConfigurationStatusDisabled,
261-
})
291+
}
292+
_, err := conn.UpdateDomainConfiguration(ctx, &input)
262293

263294
if errs.IsA[*awstypes.ResourceNotFoundException](err) {
264295
return diags
@@ -270,9 +301,10 @@ func resourceDomainConfigurationDelete(ctx context.Context, d *schema.ResourceDa
270301
}
271302

272303
log.Printf("[DEBUG] Deleting IoT Domain Configuration: %s", d.Id())
273-
_, err := conn.DeleteDomainConfiguration(ctx, &iot.DeleteDomainConfigurationInput{
304+
input := iot.DeleteDomainConfigurationInput{
274305
DomainConfigurationName: aws.String(d.Id()),
275-
})
306+
}
307+
_, err := conn.DeleteDomainConfiguration(ctx, &input)
276308

277309
if errs.IsA[*awstypes.ResourceNotFoundException](err) {
278310
return diags
@@ -286,11 +318,11 @@ func resourceDomainConfigurationDelete(ctx context.Context, d *schema.ResourceDa
286318
}
287319

288320
func findDomainConfigurationByName(ctx context.Context, conn *iot.Client, name string) (*iot.DescribeDomainConfigurationOutput, error) {
289-
input := &iot.DescribeDomainConfigurationInput{
321+
input := iot.DescribeDomainConfigurationInput{
290322
DomainConfigurationName: aws.String(name),
291323
}
292324

293-
output, err := conn.DescribeDomainConfiguration(ctx, input)
325+
output, err := conn.DescribeDomainConfiguration(ctx, &input)
294326

295327
if errs.IsA[*awstypes.ResourceNotFoundException](err) {
296328
return nil, &retry.NotFoundError{

internal/service/iot/domain_configuration_test.go

+12-4
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ func TestAccIoTDomainConfiguration_basic(t *testing.T) {
3737
Check: resource.ComposeAggregateTestCheckFunc(
3838
testAccCheckDomainConfigurationExists(ctx, resourceName),
3939
acctest.MatchResourceAttrRegionalARN(ctx, resourceName, names.AttrARN, "iot", regexache.MustCompile(`domainconfiguration/`+rName+`/[a-z0-9]+$`)),
40+
resource.TestCheckResourceAttr(resourceName, "authentication_type", "DEFAULT"),
4041
resource.TestCheckResourceAttr(resourceName, "authorizer_config.#", "0"),
4142
resource.TestCheckResourceAttr(resourceName, names.AttrDomainName, domain),
4243
resource.TestCheckResourceAttr(resourceName, "domain_type", "CUSTOMER_MANAGED"),
@@ -147,9 +148,11 @@ func TestAccIoTDomainConfiguration_update(t *testing.T) {
147148
CheckDestroy: testAccCheckDomainConfigurationDestroy(ctx),
148149
Steps: []resource.TestStep{
149150
{
150-
Config: testAccDomainConfigurationConfig_securityPolicy(rName, rootDomain, domain, "IoTSecurityPolicy_TLS13_1_3_2022_10", true),
151+
Config: testAccDomainConfigurationConfig_securityPolicy(rName, rootDomain, domain, "IoTSecurityPolicy_TLS13_1_3_2022_10", true, "CUSTOM_AUTH", "MQTT_WSS"),
151152
Check: resource.ComposeTestCheckFunc(
152153
testAccCheckDomainConfigurationExists(ctx, resourceName),
154+
resource.TestCheckResourceAttr(resourceName, "application_protocol", "MQTT_WSS"),
155+
resource.TestCheckResourceAttr(resourceName, "authentication_type", "CUSTOM_AUTH"),
153156
resource.TestCheckResourceAttr(resourceName, "authorizer_config.#", "1"),
154157
resource.TestCheckResourceAttr(resourceName, "authorizer_config.0.allow_authorizer_override", acctest.CtTrue),
155158
resource.TestCheckResourceAttr(resourceName, "tls_config.#", "1"),
@@ -162,9 +165,11 @@ func TestAccIoTDomainConfiguration_update(t *testing.T) {
162165
ImportStateVerify: true,
163166
},
164167
{
165-
Config: testAccDomainConfigurationConfig_securityPolicy(rName, rootDomain, domain, "IoTSecurityPolicy_TLS13_1_2_2022_10", false),
168+
Config: testAccDomainConfigurationConfig_securityPolicy(rName, rootDomain, domain, "IoTSecurityPolicy_TLS13_1_2_2022_10", false, "CUSTOM_AUTH_X509", "HTTPS"),
166169
Check: resource.ComposeTestCheckFunc(
167170
testAccCheckDomainConfigurationExists(ctx, resourceName),
171+
resource.TestCheckResourceAttr(resourceName, "application_protocol", "HTTPS"),
172+
resource.TestCheckResourceAttr(resourceName, "authentication_type", "CUSTOM_AUTH_X509"),
168173
resource.TestCheckResourceAttr(resourceName, "authorizer_config.#", "1"),
169174
resource.TestCheckResourceAttr(resourceName, "authorizer_config.0.allow_authorizer_override", acctest.CtFalse),
170175
resource.TestCheckResourceAttr(resourceName, "tls_config.#", "1"),
@@ -325,11 +330,14 @@ resource "aws_iot_domain_configuration" "test" {
325330
`, rName, domain, tagKey1, tagValue1, tagKey2, tagValue2))
326331
}
327332

328-
func testAccDomainConfigurationConfig_securityPolicy(rName, rootDomain, domain, securityPolicy string, allowAuthorizerOverride bool) string {
333+
func testAccDomainConfigurationConfig_securityPolicy(rName, rootDomain, domain, securityPolicy string, allowAuthorizerOverride bool, authenticationType, applicationProtocol string) string {
329334
return acctest.ConfigCompose(testAccAuthorizerConfig_basic(rName), testAccDomainConfigurationConfig_base(rootDomain, domain), fmt.Sprintf(`
330335
resource "aws_iot_domain_configuration" "test" {
331336
depends_on = [aws_acm_certificate_validation.test]
332337
338+
authentication_type = %[5]q
339+
application_protocol = %[6]q
340+
333341
authorizer_config {
334342
allow_authorizer_override = %[4]t
335343
default_authorizer_name = aws_iot_authorizer.test.name
@@ -343,7 +351,7 @@ resource "aws_iot_domain_configuration" "test" {
343351
security_policy = %[3]q
344352
}
345353
}
346-
`, rName, domain, securityPolicy, allowAuthorizerOverride))
354+
`, rName, domain, securityPolicy, allowAuthorizerOverride, authenticationType, applicationProtocol))
347355
}
348356

349357
func testAccDomainConfigurationConfig_awsManaged(rName string) string { // nosemgrep:ci.aws-in-func-name

website/docs/r/iot_domain_configuration.html.markdown

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ resource "aws_iot_domain_configuration" "iot" {
2828

2929
This resource supports the following arguments:
3030

31+
* `application_protocol` - (Optional) An enumerated string that specifies the application-layer protocol. Valid values are `SECURE_MQTT`, `MQTT_WSS`, `HTTPS` or `DEFAULT`.
32+
* `authentication_type` - (Optional) An enumerated string that specifies the authentication type. Valid values are `CUSTOM_AUTH_X509`, `CUSTOM_AUTH`, `AWS_X509`, `AWS_SIGV4` or `DEFAULT`.
3133
* `authorizer_config` - (Optional) An object that specifies the authorization service for a domain. See the [`authorizer_config` Block](#authorizer_config-block) below for details.
3234
* `domain_name` - (Optional) Fully-qualified domain name.
3335
* `name` - (Required) The name of the domain configuration. This value must be unique to a region.

0 commit comments

Comments
 (0)