|
9 | 9 | "github.com/coder/terraform-provider-coderd/internal/codersdkvalidator"
|
10 | 10 | "github.com/google/uuid"
|
11 | 11 | "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
|
| 12 | + "github.com/hashicorp/terraform-plugin-framework/attr" |
12 | 13 | "github.com/hashicorp/terraform-plugin-framework/diag"
|
13 | 14 | "github.com/hashicorp/terraform-plugin-framework/path"
|
14 | 15 | "github.com/hashicorp/terraform-plugin-framework/resource"
|
@@ -50,11 +51,39 @@ type GroupSyncModel struct {
|
50 | 51 | Mapping types.Map `tfsdk:"mapping"`
|
51 | 52 | }
|
52 | 53 |
|
| 54 | +var groupSyncAttrTypes = map[string]attr.Type{ |
| 55 | + "field": types.StringType, |
| 56 | + "regex_filter": types.StringType, |
| 57 | + "auto_create_missing": types.BoolType, |
| 58 | + "mapping": types.MapType{ElemType: types.ListType{ElemType: UUIDType}}, |
| 59 | +} |
| 60 | + |
| 61 | +func (m GroupSyncModel) ValueObject() types.Object { |
| 62 | + return types.ObjectValueMust(groupSyncAttrTypes, map[string]attr.Value{ |
| 63 | + "field": m.Field, |
| 64 | + "regex_filter": m.RegexFilter, |
| 65 | + "auto_create_missing": m.AutoCreateMissing, |
| 66 | + "mapping": m.Mapping, |
| 67 | + }) |
| 68 | +} |
| 69 | + |
53 | 70 | type RoleSyncModel struct {
|
54 | 71 | Field types.String `tfsdk:"field"`
|
55 | 72 | Mapping types.Map `tfsdk:"mapping"`
|
56 | 73 | }
|
57 | 74 |
|
| 75 | +var roleSyncAttrTypes = map[string]attr.Type{ |
| 76 | + "field": types.StringType, |
| 77 | + "mapping": types.MapType{ElemType: types.ListType{ElemType: types.StringType}}, |
| 78 | +} |
| 79 | + |
| 80 | +func (m RoleSyncModel) ValueObject() types.Object { |
| 81 | + return types.ObjectValueMust(roleSyncAttrTypes, map[string]attr.Value{ |
| 82 | + "field": m.Field, |
| 83 | + "mapping": m.Mapping, |
| 84 | + }) |
| 85 | +} |
| 86 | + |
58 | 87 | func NewOrganizationResource() resource.Resource {
|
59 | 88 | return &OrganizationResource{}
|
60 | 89 | }
|
@@ -206,23 +235,74 @@ func (r *OrganizationResource) Read(ctx context.Context, req resource.ReadReques
|
206 | 235 | }
|
207 | 236 |
|
208 | 237 | if !data.GroupSync.IsNull() {
|
209 |
| - _, err := r.Client.GroupIDPSyncSettings(ctx, data.ID.ValueUUID().String()) |
| 238 | + groupSync, err := r.Client.GroupIDPSyncSettings(ctx, data.ID.ValueUUID().String()) |
210 | 239 | if err != nil {
|
211 | 240 | resp.Diagnostics.AddError("Client Error", fmt.Sprintf("unable to get organization group sync settings, got error: %s", err))
|
212 | 241 | return
|
213 | 242 | }
|
214 | 243 |
|
215 |
| - // data.GroupSync = ??? |
| 244 | + // Read values from Terraform |
| 245 | + var groupSyncData GroupSyncModel |
| 246 | + resp.Diagnostics.Append(data.GroupSync.As(ctx, &groupSyncData, basetypes.ObjectAsOptions{})...) |
| 247 | + if resp.Diagnostics.HasError() { |
| 248 | + return |
| 249 | + } |
| 250 | + |
| 251 | + if !groupSyncData.Field.IsNull() { |
| 252 | + groupSyncData.Field = types.StringValue(groupSync.Field) |
| 253 | + } |
| 254 | + if !groupSyncData.RegexFilter.IsNull() { |
| 255 | + groupSyncData.RegexFilter = types.StringValue(groupSync.RegexFilter.String()) |
| 256 | + } |
| 257 | + if !groupSyncData.AutoCreateMissing.IsNull() { |
| 258 | + groupSyncData.AutoCreateMissing = types.BoolValue(groupSync.AutoCreateMissing) |
| 259 | + } |
| 260 | + if !groupSyncData.Mapping.IsNull() { |
| 261 | + elements := make(map[string][]string) |
| 262 | + for key, ids := range groupSync.Mapping { |
| 263 | + for _, id := range ids { |
| 264 | + elements[key] = append(elements[key], id.String()) |
| 265 | + } |
| 266 | + } |
| 267 | + |
| 268 | + mapping, diags := types.MapValueFrom(ctx, types.ListType{ElemType: UUIDType}, elements) |
| 269 | + resp.Diagnostics.Append(diags...) |
| 270 | + if resp.Diagnostics.HasError() { |
| 271 | + return |
| 272 | + } |
| 273 | + groupSyncData.Mapping = mapping |
| 274 | + } |
| 275 | + |
| 276 | + data.GroupSync = groupSyncData.ValueObject() |
216 | 277 | }
|
217 | 278 |
|
218 | 279 | if !data.RoleSync.IsNull() {
|
219 |
| - _, err := r.Client.RoleIDPSyncSettings(ctx, data.ID.ValueUUID().String()) |
| 280 | + roleSync, err := r.Client.RoleIDPSyncSettings(ctx, data.ID.ValueUUID().String()) |
220 | 281 | if err != nil {
|
221 | 282 | resp.Diagnostics.AddError("Client Error", fmt.Sprintf("unable to get organization role sync settings, got error: %s", err))
|
222 | 283 | return
|
223 | 284 | }
|
224 | 285 |
|
225 |
| - // data.RoleSync = ??? |
| 286 | + // Read values from Terraform |
| 287 | + var roleSyncData RoleSyncModel |
| 288 | + resp.Diagnostics.Append(data.RoleSync.As(ctx, &roleSyncData, basetypes.ObjectAsOptions{})...) |
| 289 | + if resp.Diagnostics.HasError() { |
| 290 | + return |
| 291 | + } |
| 292 | + |
| 293 | + if !roleSyncData.Field.IsNull() { |
| 294 | + roleSyncData.Field = types.StringValue(roleSync.Field) |
| 295 | + } |
| 296 | + if !roleSyncData.Mapping.IsNull() { |
| 297 | + mapping, diags := types.MapValueFrom(ctx, types.ListType{ElemType: types.StringType}, roleSync.Mapping) |
| 298 | + resp.Diagnostics.Append(diags...) |
| 299 | + if resp.Diagnostics.HasError() { |
| 300 | + return |
| 301 | + } |
| 302 | + roleSyncData.Mapping = mapping |
| 303 | + } |
| 304 | + |
| 305 | + data.RoleSync = roleSyncData.ValueObject() |
226 | 306 | }
|
227 | 307 |
|
228 | 308 | // We've fetched the organization ID from state, and the latest values for
|
|
0 commit comments