Skip to content

Commit d3f6e2c

Browse files
committed
do the reads
1 parent 8f3e1b9 commit d3f6e2c

File tree

1 file changed

+84
-4
lines changed

1 file changed

+84
-4
lines changed

internal/provider/organization_resource.go

Lines changed: 84 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/coder/terraform-provider-coderd/internal/codersdkvalidator"
1010
"github.com/google/uuid"
1111
"github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
12+
"github.com/hashicorp/terraform-plugin-framework/attr"
1213
"github.com/hashicorp/terraform-plugin-framework/diag"
1314
"github.com/hashicorp/terraform-plugin-framework/path"
1415
"github.com/hashicorp/terraform-plugin-framework/resource"
@@ -50,11 +51,39 @@ type GroupSyncModel struct {
5051
Mapping types.Map `tfsdk:"mapping"`
5152
}
5253

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+
5370
type RoleSyncModel struct {
5471
Field types.String `tfsdk:"field"`
5572
Mapping types.Map `tfsdk:"mapping"`
5673
}
5774

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+
5887
func NewOrganizationResource() resource.Resource {
5988
return &OrganizationResource{}
6089
}
@@ -206,23 +235,74 @@ func (r *OrganizationResource) Read(ctx context.Context, req resource.ReadReques
206235
}
207236

208237
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())
210239
if err != nil {
211240
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("unable to get organization group sync settings, got error: %s", err))
212241
return
213242
}
214243

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()
216277
}
217278

218279
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())
220281
if err != nil {
221282
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("unable to get organization role sync settings, got error: %s", err))
222283
return
223284
}
224285

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()
226306
}
227307

228308
// We've fetched the organization ID from state, and the latest values for

0 commit comments

Comments
 (0)