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
6263func 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
9699func 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