@@ -2,6 +2,8 @@ package provider
22
33import (
44 "context"
5+
6+ "github.com/hashicorp/go-version"
57 "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
68 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
79 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
@@ -47,6 +49,10 @@ func resourceKeycloakOpenidClientAuthorizationRolePolicy() *schema.Resource {
4749 Type : schema .TypeString ,
4850 Optional : true ,
4951 },
52+ "fetch_roles" : {
53+ Type : schema .TypeBool ,
54+ Optional : true ,
55+ },
5056 "role" : {
5157 Type : schema .TypeSet ,
5258 Required : true ,
@@ -68,7 +74,7 @@ func resourceKeycloakOpenidClientAuthorizationRolePolicy() *schema.Resource {
6874 }
6975}
7076
71- func getOpenidClientAuthorizationRolePolicyResourceFromData (data * schema.ResourceData ) * keycloak.OpenidClientAuthorizationRolePolicy {
77+ func getOpenidClientAuthorizationRolePolicyResourceFromData (data * schema.ResourceData , keycloakVersion * version. Version ) * keycloak.OpenidClientAuthorizationRolePolicy {
7278 var rolesList []keycloak.OpenidClientAuthorizationRole
7379 if v , ok := data .Get ("role" ).(* schema.Set ); ok {
7480 for _ , role := range v .List () {
@@ -93,10 +99,16 @@ func getOpenidClientAuthorizationRolePolicyResourceFromData(data *schema.Resourc
9399 Description : data .Get ("description" ).(string ),
94100 }
95101
102+ if keycloakVersion .GreaterThanOrEqual (keycloak .Version_25 .AsVersion ()) {
103+ if v , ok := data .GetOk ("fetch_roles" ); ok {
104+ resource .FetchRoles = v .(bool )
105+ }
106+ }
107+
96108 return & resource
97109}
98110
99- func setOpenidClientAuthorizationRolePolicyResourceData (data * schema.ResourceData , policy * keycloak.OpenidClientAuthorizationRolePolicy ) {
111+ func setOpenidClientAuthorizationRolePolicyResourceData (data * schema.ResourceData , policy * keycloak.OpenidClientAuthorizationRolePolicy , keycloakVersion * version. Version ) {
100112 data .SetId (policy .Id )
101113
102114 data .Set ("resource_server_id" , policy .ResourceServerId )
@@ -107,6 +119,10 @@ func setOpenidClientAuthorizationRolePolicyResourceData(data *schema.ResourceDat
107119 data .Set ("type" , policy .Type )
108120 data .Set ("description" , policy .Description )
109121
122+ if keycloakVersion .GreaterThanOrEqual (keycloak .Version_25 .AsVersion ()) {
123+ data .Set ("fetch_roles" , policy .FetchRoles )
124+ }
125+
110126 var roles []interface {}
111127 for _ , r := range policy .Roles {
112128 role := map [string ]interface {}{
@@ -122,21 +138,29 @@ func setOpenidClientAuthorizationRolePolicyResourceData(data *schema.ResourceDat
122138
123139func resourceKeycloakOpenidClientAuthorizationRolePolicyCreate (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
124140 keycloakClient := meta .(* keycloak.KeycloakClient )
141+ keycloakVersion , err := keycloakClient .Version (ctx )
142+ if err != nil {
143+ return diag .FromErr (err )
144+ }
125145
126- resource := getOpenidClientAuthorizationRolePolicyResourceFromData (data )
146+ resource := getOpenidClientAuthorizationRolePolicyResourceFromData (data , keycloakVersion )
127147
128- err : = keycloakClient .NewOpenidClientAuthorizationRolePolicy (ctx , resource )
148+ err = keycloakClient .NewOpenidClientAuthorizationRolePolicy (ctx , resource )
129149 if err != nil {
130150 return diag .FromErr (err )
131151 }
132152
133- setOpenidClientAuthorizationRolePolicyResourceData (data , resource )
153+ setOpenidClientAuthorizationRolePolicyResourceData (data , resource , keycloakVersion )
134154
135155 return resourceKeycloakOpenidClientAuthorizationRolePolicyRead (ctx , data , meta )
136156}
137157
138158func resourceKeycloakOpenidClientAuthorizationRolePolicyRead (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
139159 keycloakClient := meta .(* keycloak.KeycloakClient )
160+ keycloakVersion , err := keycloakClient .Version (ctx )
161+ if err != nil {
162+ return diag .FromErr (err )
163+ }
140164
141165 realmId := data .Get ("realm_id" ).(string )
142166 resourceServerId := data .Get ("resource_server_id" ).(string )
@@ -147,22 +171,26 @@ func resourceKeycloakOpenidClientAuthorizationRolePolicyRead(ctx context.Context
147171 return handleNotFoundError (ctx , err , data )
148172 }
149173
150- setOpenidClientAuthorizationRolePolicyResourceData (data , resource )
174+ setOpenidClientAuthorizationRolePolicyResourceData (data , resource , keycloakVersion )
151175
152176 return nil
153177}
154178
155179func resourceKeycloakOpenidClientAuthorizationRolePolicyUpdate (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
156180 keycloakClient := meta .(* keycloak.KeycloakClient )
181+ keycloakVersion , err := keycloakClient .Version (ctx )
182+ if err != nil {
183+ return diag .FromErr (err )
184+ }
157185
158- resource := getOpenidClientAuthorizationRolePolicyResourceFromData (data )
186+ resource := getOpenidClientAuthorizationRolePolicyResourceFromData (data , keycloakVersion )
159187
160- err : = keycloakClient .UpdateOpenidClientAuthorizationRolePolicy (ctx , resource )
188+ err = keycloakClient .UpdateOpenidClientAuthorizationRolePolicy (ctx , resource )
161189 if err != nil {
162190 return diag .FromErr (err )
163191 }
164192
165- setOpenidClientAuthorizationRolePolicyResourceData (data , resource )
193+ setOpenidClientAuthorizationRolePolicyResourceData (data , resource , keycloakVersion )
166194
167195 return nil
168196}
0 commit comments