Skip to content

Commit e27af0d

Browse files
committed
r/iam: fix refreshing permission_boundary state on users and roles
Closes hashicorp#16534
1 parent c1efdd2 commit e27af0d

File tree

5 files changed

+53
-0
lines changed

5 files changed

+53
-0
lines changed

.changelog/33963.txt

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:bug
2+
resource/aws_iam_role: Fix refreshing `permission_boundary` when deleted outside of Terraform
3+
```
4+
5+
```release-note:bug
6+
resource/aws_iam_user: Fix refreshing `permission_boundary` when deleted outside of Terraform
7+
```

internal/service/iam/role.go

+2
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,8 @@ func resourceRoleRead(ctx context.Context, d *schema.ResourceData, meta interfac
292292
d.Set("path", role.Path)
293293
if role.PermissionsBoundary != nil {
294294
d.Set("permissions_boundary", role.PermissionsBoundary.PermissionsBoundaryArn)
295+
} else {
296+
d.Set("permissions_boundary", nil)
295297
}
296298
d.Set("unique_id", role.RoleId)
297299

internal/service/iam/role_test.go

+21
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,27 @@ func TestAccIAMRole_permissionsBoundary(t *testing.T) {
551551
testAccCheckRolePermissionsBoundary(&role, permissionsBoundary1),
552552
),
553553
},
554+
// Test drift detection
555+
{
556+
PreConfig: func() {
557+
// delete the boundary manually
558+
conn := acctest.Provider.Meta().(*conns.AWSClient).IAMConn(ctx)
559+
input := &iam.DeleteRolePermissionsBoundaryInput{
560+
RoleName: role.RoleName,
561+
}
562+
_, err := conn.DeleteRolePermissionsBoundaryWithContext(ctx, input)
563+
if err != nil {
564+
t.Fatalf("Failed to delete permission_boundary from role (%s): %s", aws.StringValue(role.RoleName), err)
565+
}
566+
},
567+
Config: testAccRoleConfig_permissionsBoundary(rName, permissionsBoundary1),
568+
// check the boundary was restored
569+
Check: resource.ComposeTestCheckFunc(
570+
testAccCheckRoleExists(ctx, resourceName, &role),
571+
resource.TestCheckResourceAttr(resourceName, "permissions_boundary", permissionsBoundary1),
572+
testAccCheckRolePermissionsBoundary(&role, permissionsBoundary1),
573+
),
574+
},
554575
// Test empty value
555576
{
556577
Config: testAccRoleConfig_permissionsBoundary(rName, ""),

internal/service/iam/user.go

+2
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,8 @@ func resourceUserRead(ctx context.Context, d *schema.ResourceData, meta interfac
161161
d.Set("path", user.Path)
162162
if user.PermissionsBoundary != nil {
163163
d.Set("permissions_boundary", user.PermissionsBoundary.PermissionsBoundaryArn)
164+
} else {
165+
d.Set("permissions_boundary", nil)
164166
}
165167
d.Set("unique_id", user.UserId)
166168

internal/service/iam/user_test.go

+21
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,27 @@ func TestAccIAMUser_permissionsBoundary(t *testing.T) {
413413
testAccCheckUserPermissionsBoundary(&user, permissionsBoundary1),
414414
),
415415
},
416+
// Test drift detection
417+
{
418+
PreConfig: func() {
419+
// delete the boundary manually
420+
conn := acctest.Provider.Meta().(*conns.AWSClient).IAMConn(ctx)
421+
input := &iam.DeleteUserPermissionsBoundaryInput{
422+
UserName: user.UserName,
423+
}
424+
_, err := conn.DeleteUserPermissionsBoundaryWithContext(ctx, input)
425+
if err != nil {
426+
t.Fatalf("Failed to delete permission_boundary from user (%s): %s", aws.StringValue(user.UserName), err)
427+
}
428+
},
429+
Config: testAccUserConfig_permissionsBoundary(rName, permissionsBoundary1),
430+
// check the boundary was restored
431+
Check: resource.ComposeTestCheckFunc(
432+
testAccCheckUserExists(ctx, resourceName, &user),
433+
resource.TestCheckResourceAttr(resourceName, "permissions_boundary", permissionsBoundary1),
434+
testAccCheckUserPermissionsBoundary(&user, permissionsBoundary1),
435+
),
436+
},
416437
// Test empty value
417438
{
418439
Config: testAccUserConfig_permissionsBoundary(rName, ""),

0 commit comments

Comments
 (0)