Skip to content

Commit 0135fa2

Browse files
authored
Updates logic to remove existing binding instead of deleting the binding (#2458)
1 parent 133d41f commit 0135fa2

1 file changed

Lines changed: 31 additions & 22 deletions

File tree

okta/services/idaas/resource_okta_admin_role_custom_assignments.go

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import (
44
"context"
55
"errors"
66
"fmt"
7-
87
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
98
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
"github.com/okta/okta-sdk-golang/v5/okta"
1010
"github.com/okta/terraform-provider-okta/okta/utils"
1111
"github.com/okta/terraform-provider-okta/sdk"
1212
"github.com/okta/terraform-provider-okta/sdk/query"
@@ -51,7 +51,8 @@ func resourceAdminRoleCustomAssignmentsCreate(ctx context.Context, d *schema.Res
5151
if err != nil {
5252
return diag.Errorf("failed to create custom admin role assignment: %v", err)
5353
}
54-
_, err = getAPISupplementFromMetadata(meta).CreateResourceSetBinding(ctx, d.Get("resource_set_id").(string), *cr)
54+
client := getOktaV5ClientFromMetadata(meta)
55+
_, _, err = client.ResourceSetAPI.CreateResourceSetBinding(ctx, d.Get("resource_set_id").(string)).Instance(*cr).Execute()
5556
if err != nil {
5657
return diag.Errorf("failed to create custom admin role assignment: %v", err)
5758
}
@@ -60,15 +61,17 @@ func resourceAdminRoleCustomAssignmentsCreate(ctx context.Context, d *schema.Res
6061
}
6162

6263
func resourceAdminRoleCustomAssignmentsRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
63-
members, resp, err := listResourceSetBindingMembers(ctx, getAPISupplementFromMetadata(meta), d.Get("resource_set_id").(string), d.Get("custom_role_id").(string))
64-
if err := utils.SuppressErrorOn404(resp, err); err != nil {
65-
return diag.Errorf("failed to list members assigned to the custom role: %v", err)
64+
client := getOktaV5ClientFromMetadata(meta)
65+
members, _, err := client.ResourceSetAPI.ListMembersOfBinding(ctx, d.Get("resource_set_id").(string), d.Get("custom_role_id").(string)).Execute()
66+
if err != nil {
67+
return diag.Errorf("failed to list custom admin role assignment: %v", err)
6668
}
6769
if members == nil {
6870
d.SetId("")
6971
return nil
7072
}
71-
_ = d.Set("members", flattenAdminRoleCustomAssignments(members))
73+
74+
_ = d.Set("members", flattenAdminRoleCustomAssignments(members.Members))
7275
return nil
7376
}
7477

@@ -94,16 +97,27 @@ func resourceAdminRoleCustomAssignmentsUpdate(ctx context.Context, d *schema.Res
9497
}
9598

9699
func resourceAdminRoleCustomAssignmentsDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
97-
resp, err := getAPISupplementFromMetadata(meta).DeleteResourceSetBinding(ctx, d.Get("resource_set_id").(string), d.Get("custom_role_id").(string))
98-
if err := utils.SuppressErrorOn404(resp, err); err != nil {
99-
return diag.Errorf("failed to delete admin custom role assignment: %v", err)
100+
client := getOktaV5ClientFromMetadata(meta)
101+
members, _, _ := client.ResourceSetAPI.ListMembersOfBinding(ctx, d.Get("resource_set_id").(string), d.Get("custom_role_id").(string)).Execute()
102+
existingMembers := d.Get("members").(*schema.Set).List()
103+
for _, member := range members.Members {
104+
mem := member.Links.Self.GetHref()
105+
for _, v := range existingMembers {
106+
if mem == v {
107+
_, err := client.ResourceSetAPI.UnassignMemberFromBinding(ctx, d.Get("resource_set_id").(string), d.Get("custom_role_id").(string), member.GetId()).Execute()
108+
if err != nil {
109+
return diag.Errorf("failed to unassign member with id %s from binding with error: %v", member.GetId(), err)
110+
}
111+
}
112+
}
100113
}
101114
return nil
102115
}
103116

104-
func buildAdminRoleCustomAssignment(d *schema.ResourceData) (*sdk.CreateCustomRoleBindingRequest, error) {
105-
rb := &sdk.CreateCustomRoleBindingRequest{
106-
Role: d.Get("custom_role_id").(string),
117+
func buildAdminRoleCustomAssignment(d *schema.ResourceData) (*okta.ResourceSetBindingCreateRequest, error) {
118+
customRoleId := d.Get("custom_role_id").(string)
119+
rb := &okta.ResourceSetBindingCreateRequest{
120+
Role: &customRoleId,
107121
Members: utils.ConvertInterfaceToStringSetNullable(d.Get("members")),
108122
}
109123
if len(rb.Members) == 0 {
@@ -112,19 +126,14 @@ func buildAdminRoleCustomAssignment(d *schema.ResourceData) (*sdk.CreateCustomRo
112126
return rb, nil
113127
}
114128

115-
func flattenAdminRoleCustomAssignments(members []*sdk.CustomRoleBindingMember) *schema.Set {
129+
func flattenAdminRoleCustomAssignments(members []okta.ResourceSetBindingMember) *schema.Set {
116130
var arr []interface{}
117131
for _, member := range members {
118-
links := member.Links.(map[string]interface{})
119-
var url string
120-
for _, v := range links {
121-
for _, link := range v.(map[string]interface{}) {
122-
url = link.(string)
123-
break
124-
}
125-
}
126-
arr = append(arr, url)
132+
// Extract the URL from the links structure
133+
link := member.Links.Self.GetHref()
134+
arr = append(arr, link)
127135
}
136+
128137
return schema.NewSet(schema.HashString, arr)
129138
}
130139

0 commit comments

Comments
 (0)