Skip to content

Commit e14d3fc

Browse files
committed
provider common data type
1 parent 224ef67 commit e14d3fc

File tree

2 files changed

+33
-18
lines changed

2 files changed

+33
-18
lines changed

internal/provider/provider.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ type CoderdProvider struct {
3333
version string
3434
}
3535

36+
type CoderdProviderData struct {
37+
Client *codersdk.Client
38+
}
39+
3640
// CoderdProviderModel describes the provider data model.
3741
type CoderdProviderModel struct {
3842
URL types.String `tfsdk:"url"`
@@ -93,8 +97,11 @@ func (p *CoderdProvider) Configure(ctx context.Context, req provider.ConfigureRe
9397
client := codersdk.New(url)
9498
client.SetLogger(slog.Make(tfslog{}).Leveled(slog.LevelDebug))
9599
client.SetSessionToken(data.Token.ValueString())
96-
resp.DataSourceData = client
97-
resp.ResourceData = client
100+
providerData := &CoderdProviderData{
101+
Client: client,
102+
}
103+
resp.DataSourceData = providerData
104+
resp.ResourceData = providerData
98105
}
99106

100107
func (p *CoderdProvider) Resources(ctx context.Context) []func() resource.Resource {

internal/provider/user_resource.go

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func NewUserResource() resource.Resource {
3737

3838
// UserResource defines the resource implementation.
3939
type UserResource struct {
40-
client *codersdk.Client
40+
data *CoderdProviderData
4141
}
4242

4343
// UserResourceModel describes the resource data model.
@@ -130,7 +130,7 @@ func (r *UserResource) Configure(ctx context.Context, req resource.ConfigureRequ
130130
return
131131
}
132132

133-
client, ok := req.ProviderData.(*codersdk.Client)
133+
client, ok := req.ProviderData.(*CoderdProviderData)
134134

135135
if !ok {
136136
resp.Diagnostics.AddError(
@@ -141,7 +141,7 @@ func (r *UserResource) Configure(ctx context.Context, req resource.ConfigureRequ
141141
return
142142
}
143143

144-
r.client = client
144+
r.data = client
145145
}
146146

147147
func (r *UserResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
@@ -153,7 +153,9 @@ func (r *UserResource) Create(ctx context.Context, req resource.CreateRequest, r
153153
return
154154
}
155155

156-
me, err := r.client.User(ctx, codersdk.Me)
156+
client := r.data.Client
157+
158+
me, err := client.User(ctx, codersdk.Me)
157159
if err != nil {
158160
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Unable to get current user, got error: %s", err))
159161
return
@@ -168,7 +170,7 @@ func (r *UserResource) Create(ctx context.Context, req resource.CreateRequest, r
168170
if data.LoginType.ValueString() != "" {
169171
loginType = codersdk.LoginType(data.LoginType.ValueString())
170172
}
171-
user, err := r.client.CreateUser(ctx, codersdk.CreateUserRequest{
173+
user, err := client.CreateUser(ctx, codersdk.CreateUserRequest{
172174
Email: data.Email.ValueString(),
173175
Username: data.Username.ValueString(),
174176
Password: data.Password.ValueString(),
@@ -189,7 +191,7 @@ func (r *UserResource) Create(ctx context.Context, req resource.CreateRequest, r
189191
if data.Name.ValueString() != "" {
190192
name = data.Name.ValueString()
191193
}
192-
user, err = r.client.UpdateUserProfile(ctx, user.ID.String(), codersdk.UpdateUserProfileRequest{
194+
user, err = client.UpdateUserProfile(ctx, user.ID.String(), codersdk.UpdateUserProfileRequest{
193195
Username: data.Username.ValueString(),
194196
Name: name,
195197
})
@@ -206,7 +208,7 @@ func (r *UserResource) Create(ctx context.Context, req resource.CreateRequest, r
206208
tflog.Trace(ctx, "updating user roles", map[string]any{
207209
"new_roles": roles,
208210
})
209-
user, err = r.client.UpdateUserRoles(ctx, user.ID.String(), codersdk.UpdateRoles{
211+
user, err = client.UpdateUserRoles(ctx, user.ID.String(), codersdk.UpdateRoles{
210212
Roles: roles,
211213
})
212214
if err != nil {
@@ -216,7 +218,7 @@ func (r *UserResource) Create(ctx context.Context, req resource.CreateRequest, r
216218
tflog.Trace(ctx, "successfully updated user roles")
217219

218220
if data.Suspended.ValueBool() {
219-
_, err = r.client.UpdateUserStatus(ctx, data.ID.ValueString(), codersdk.UserStatus("suspended"))
221+
_, err = client.UpdateUserStatus(ctx, data.ID.ValueString(), codersdk.UserStatus("suspended"))
220222
}
221223
if err != nil {
222224
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Unable to update user status, got error: %s", err))
@@ -236,7 +238,9 @@ func (r *UserResource) Read(ctx context.Context, req resource.ReadRequest, resp
236238
return
237239
}
238240

239-
user, err := r.client.User(ctx, data.ID.ValueString())
241+
client := r.data.Client
242+
243+
user, err := client.User(ctx, data.ID.ValueString())
240244
if err != nil {
241245
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Unable to get current user, got error: %s", err))
242246
return
@@ -271,7 +275,9 @@ func (r *UserResource) Update(ctx context.Context, req resource.UpdateRequest, r
271275
return
272276
}
273277

274-
user, err := r.client.User(ctx, data.ID.ValueString())
278+
client := r.data.Client
279+
280+
user, err := client.User(ctx, data.ID.ValueString())
275281
if err != nil {
276282
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Unable to get current user, got error: %s", err))
277283
return
@@ -285,7 +291,7 @@ func (r *UserResource) Update(ctx context.Context, req resource.UpdateRequest, r
285291
"new_username": data.Username.ValueString(),
286292
"new_name": data.Name.ValueString(),
287293
})
288-
_, err = r.client.UpdateUserProfile(ctx, user.ID.String(), codersdk.UpdateUserProfileRequest{
294+
_, err = client.UpdateUserProfile(ctx, user.ID.String(), codersdk.UpdateUserProfileRequest{
289295
Username: data.Username.ValueString(),
290296
Name: data.Name.ValueString(),
291297
})
@@ -302,7 +308,7 @@ func (r *UserResource) Update(ctx context.Context, req resource.UpdateRequest, r
302308
tflog.Trace(ctx, "updating user roles", map[string]any{
303309
"new_roles": roles,
304310
})
305-
_, err = r.client.UpdateUserRoles(ctx, user.ID.String(), codersdk.UpdateRoles{
311+
_, err = client.UpdateUserRoles(ctx, user.ID.String(), codersdk.UpdateRoles{
306312
Roles: roles,
307313
})
308314
if err != nil {
@@ -312,7 +318,7 @@ func (r *UserResource) Update(ctx context.Context, req resource.UpdateRequest, r
312318
tflog.Trace(ctx, "successfully updated user roles")
313319

314320
tflog.Trace(ctx, "updating password")
315-
err = r.client.UpdateUserPassword(ctx, user.ID.String(), codersdk.UpdateUserPasswordRequest{
321+
err = client.UpdateUserPassword(ctx, user.ID.String(), codersdk.UpdateUserPasswordRequest{
316322
Password: data.Password.ValueString(),
317323
})
318324
if err != nil && !strings.Contains(err.Error(), "New password cannot match old password.") {
@@ -323,10 +329,10 @@ func (r *UserResource) Update(ctx context.Context, req resource.UpdateRequest, r
323329

324330
var statusErr error
325331
if data.Suspended.ValueBool() {
326-
_, statusErr = r.client.UpdateUserStatus(ctx, data.ID.ValueString(), codersdk.UserStatus("suspended"))
332+
_, statusErr = client.UpdateUserStatus(ctx, data.ID.ValueString(), codersdk.UserStatus("suspended"))
327333
}
328334
if !data.Suspended.ValueBool() && user.Status == codersdk.UserStatusSuspended {
329-
_, statusErr = r.client.UpdateUserStatus(ctx, data.ID.ValueString(), codersdk.UserStatus("active"))
335+
_, statusErr = client.UpdateUserStatus(ctx, data.ID.ValueString(), codersdk.UserStatus("active"))
330336
}
331337
if statusErr != nil {
332338
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Unable to update user status, got error: %s", err))
@@ -347,13 +353,15 @@ func (r *UserResource) Delete(ctx context.Context, req resource.DeleteRequest, r
347353
return
348354
}
349355

356+
client := r.data.Client
357+
350358
id, err := uuid.Parse(data.ID.ValueString())
351359
if err != nil {
352360
resp.Diagnostics.AddError("Data Error", fmt.Sprintf("Unable to parse user ID, got error: %s", err))
353361
return
354362
}
355363
tflog.Trace(ctx, "deleting user")
356-
err = r.client.DeleteUser(ctx, id)
364+
err = client.DeleteUser(ctx, id)
357365
if err != nil {
358366
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Unable to delete user, got error: %s", err))
359367
return

0 commit comments

Comments
 (0)