Skip to content

Commit 9d1f3ba

Browse files
making resource groups and perm groups sets
1 parent e9b71f6 commit 9d1f3ba

File tree

3 files changed

+55
-9
lines changed

3 files changed

+55
-9
lines changed

internal/services/account_member/model.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ func (m AccountMemberModel) MarshalJSONForUpdate(state AccountMemberModel) (data
3131
}
3232

3333
type AccountMemberPoliciesModel struct {
34-
Access types.String `tfsdk:"access" json:"access,required"`
35-
PermissionGroups *[]*AccountMemberPoliciesPermissionGroupsModel `tfsdk:"permission_groups" json:"permission_groups,required"`
36-
ResourceGroups *[]*AccountMemberPoliciesResourceGroupsModel `tfsdk:"resource_groups" json:"resource_groups,required"`
34+
Access types.String `tfsdk:"access" json:"access,required"`
35+
PermissionGroups customfield.NestedObjectSet[AccountMemberPoliciesPermissionGroupsModel] `tfsdk:"permission_groups" json:"permission_groups,required"`
36+
ResourceGroups customfield.NestedObjectSet[AccountMemberPoliciesResourceGroupsModel] `tfsdk:"resource_groups" json:"resource_groups,required"`
3737
}
3838

3939
type AccountMemberPoliciesPermissionGroupsModel struct {

internal/services/account_member/resource_test.go

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,11 @@ func TestAccCloudflareAccountMember_PoliciesAddResourceGroup(t *testing.T) {
391391
domainGroupID1 := createDomainGroup(t, rnd, accountID, zones[0].ID)
392392
domainGroupID2 := createDomainGroup(t, rnd, accountID, zones[1].ID)
393393

394+
t.Cleanup(func() {
395+
deleteDomainGroup(accountID, domainGroupID1)
396+
deleteDomainGroup(accountID, domainGroupID2)
397+
})
398+
394399
resource.Test(t, resource.TestCase{
395400
PreCheck: func() {
396401
acctest.TestAccPreCheck_AccountID(t)
@@ -412,7 +417,46 @@ func TestAccCloudflareAccountMember_PoliciesAddResourceGroup(t *testing.T) {
412417
},
413418
},
414419
{
420+
// Another apply should not cause any changes (stable state)
421+
Config: acctest.LoadTestCase("cloudflare_account_member-add-resource-group1.tf", accountID, email, permissionGroupID, domainGroupID1),
422+
ConfigPlanChecks: resource.ConfigPlanChecks{
423+
PreApply: []plancheck.PlanCheck{
424+
plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionNoop),
425+
},
426+
},
427+
ConfigStateChecks: []statecheck.StateCheck{
428+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New(consts.AccountIDSchemaKey), knownvalue.StringExact(accountID)),
429+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("email"), knownvalue.StringExact(email)),
430+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("policies"), knownvalue.ListSizeExact(1)),
431+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("policies").AtSliceIndex(0).AtMapKey("access"), knownvalue.StringExact("allow")),
432+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("policies").AtSliceIndex(0).AtMapKey("permission_groups"), knownvalue.ListSizeExact(1)),
433+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("policies").AtSliceIndex(0).AtMapKey("permission_groups").AtSliceIndex(0).AtMapKey("id"), knownvalue.StringExact(permissionGroupID)),
434+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("policies").AtSliceIndex(0).AtMapKey("resource_groups"), knownvalue.ListSizeExact(1)),
435+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("policies").AtSliceIndex(0).AtMapKey("resource_groups").AtSliceIndex(0).AtMapKey("id"), knownvalue.StringExact(domainGroupID1)),
436+
},
437+
},
438+
{
439+
Config: acctest.LoadTestCase("cloudflare_account_member-add-resource-group2.tf", accountID, email, permissionGroupID, domainGroupID1, domainGroupID2),
440+
ConfigStateChecks: []statecheck.StateCheck{
441+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New(consts.AccountIDSchemaKey), knownvalue.StringExact(accountID)),
442+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("email"), knownvalue.StringExact(email)),
443+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("policies"), knownvalue.ListSizeExact(1)),
444+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("policies").AtSliceIndex(0).AtMapKey("access"), knownvalue.StringExact("allow")),
445+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("policies").AtSliceIndex(0).AtMapKey("permission_groups"), knownvalue.ListSizeExact(1)),
446+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("policies").AtSliceIndex(0).AtMapKey("permission_groups").AtSliceIndex(0).AtMapKey("id"), knownvalue.StringExact(permissionGroupID)),
447+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("policies").AtSliceIndex(0).AtMapKey("resource_groups"), knownvalue.ListSizeExact(2)),
448+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("policies").AtSliceIndex(0).AtMapKey("resource_groups").AtSliceIndex(0).AtMapKey("id"), knownvalue.StringExact(domainGroupID1)),
449+
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("policies").AtSliceIndex(0).AtMapKey("resource_groups").AtSliceIndex(1).AtMapKey("id"), knownvalue.StringExact(domainGroupID2)),
450+
},
451+
},
452+
{
453+
// Another apply should not cause any changes (stable state)
415454
Config: acctest.LoadTestCase("cloudflare_account_member-add-resource-group2.tf", accountID, email, permissionGroupID, domainGroupID1, domainGroupID2),
455+
ConfigPlanChecks: resource.ConfigPlanChecks{
456+
PreApply: []plancheck.PlanCheck{
457+
plancheck.ExpectResourceAction(resourceName, plancheck.ResourceActionNoop),
458+
},
459+
},
416460
ConfigStateChecks: []statecheck.StateCheck{
417461
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New(consts.AccountIDSchemaKey), knownvalue.StringExact(accountID)),
418462
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("email"), knownvalue.StringExact(email)),
@@ -425,12 +469,14 @@ func TestAccCloudflareAccountMember_PoliciesAddResourceGroup(t *testing.T) {
425469
statecheck.ExpectKnownValue(resourceName, tfjsonpath.New("policies").AtSliceIndex(0).AtMapKey("resource_groups").AtSliceIndex(1).AtMapKey("id"), knownvalue.StringExact(domainGroupID2)),
426470
},
427471
},
472+
{
473+
ResourceName: resourceName,
474+
ImportState: true,
475+
ImportStateVerify: true,
476+
ImportStateIdPrefix: fmt.Sprintf("%s/", accountID),
477+
},
428478
},
429479
})
430-
431-
//cleanup
432-
deleteDomainGroup(accountID, domainGroupID1)
433-
deleteDomainGroup(accountID, domainGroupID2)
434480
}
435481

436482
func testCloudflareAccountMemberPoliciesConfig(accountID, emailAddress, permgroupId string) string {

internal/services/account_member/schema.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func ResourceSchema(ctx context.Context) schema.Schema {
6666
stringvalidator.OneOfCaseInsensitive("allow", "deny"),
6767
},
6868
},
69-
"permission_groups": schema.ListNestedAttribute{
69+
"permission_groups": schema.SetNestedAttribute{
7070
Description: "A set of permission groups that are specified to the policy.",
7171
Required: true,
7272
NestedObject: schema.NestedAttributeObject{
@@ -78,7 +78,7 @@ func ResourceSchema(ctx context.Context) schema.Schema {
7878
},
7979
},
8080
},
81-
"resource_groups": schema.ListNestedAttribute{
81+
"resource_groups": schema.SetNestedAttribute{
8282
Description: "A list of resource groups that the policy applies to.",
8383
Required: true,
8484
NestedObject: schema.NestedAttributeObject{

0 commit comments

Comments
 (0)