Skip to content

Commit 042e4f1

Browse files
committed
all of it
1 parent 3890c2d commit 042e4f1

18 files changed

+382
-145
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package codersdkvalidator
2+
3+
import (
4+
"context"
5+
6+
"github.com/coder/coder/v2/codersdk"
7+
"github.com/hashicorp/terraform-plugin-framework-validators/helpers/validatordiag"
8+
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
9+
)
10+
11+
type displayNameValidator struct {
12+
err error
13+
}
14+
15+
func DisplayName() validator.String {
16+
return displayNameValidator{}
17+
}
18+
19+
var _ validator.String = displayNameValidator{}
20+
21+
func (v displayNameValidator) ValidateString(ctx context.Context, req validator.StringRequest, resp *validator.StringResponse) {
22+
if req.ConfigValue.IsNull() || req.ConfigValue.IsUnknown() {
23+
return
24+
}
25+
26+
name := req.ConfigValue.ValueString()
27+
if v.err = codersdk.DisplayNameValid(name); v.err != nil {
28+
resp.Diagnostics.Append(validatordiag.InvalidAttributeValueDiagnostic(
29+
req.Path,
30+
v.Description(ctx),
31+
name,
32+
))
33+
}
34+
}
35+
36+
var _ validator.Describer = displayNameValidator{}
37+
38+
func (v displayNameValidator) Description(_ context.Context) string {
39+
if v.err != nil {
40+
return v.err.Error()
41+
}
42+
return "value must be a valid display name"
43+
}
44+
45+
func (v displayNameValidator) MarkdownDescription(ctx context.Context) string {
46+
return v.Description(ctx)
47+
}

internal/codersdkvalidator/name.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package codersdkvalidator
2+
3+
import (
4+
"context"
5+
6+
"github.com/coder/coder/v2/codersdk"
7+
"github.com/hashicorp/terraform-plugin-framework-validators/helpers/validatordiag"
8+
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
9+
)
10+
11+
type nameValidator struct {
12+
err error
13+
}
14+
15+
func Name() validator.String {
16+
return nameValidator{}
17+
}
18+
19+
var _ validator.String = nameValidator{}
20+
21+
func (v nameValidator) ValidateString(ctx context.Context, req validator.StringRequest, resp *validator.StringResponse) {
22+
if req.ConfigValue.IsNull() || req.ConfigValue.IsUnknown() {
23+
return
24+
}
25+
26+
name := req.ConfigValue.ValueString()
27+
if v.err = codersdk.NameValid(name); v.err != nil {
28+
resp.Diagnostics.Append(validatordiag.InvalidAttributeValueDiagnostic(
29+
req.Path,
30+
v.Description(ctx),
31+
name,
32+
))
33+
}
34+
}
35+
36+
var _ validator.Describer = nameValidator{}
37+
38+
func (v nameValidator) Description(_ context.Context) string {
39+
if v.err != nil {
40+
return v.err.Error()
41+
}
42+
return "value must be a valid name"
43+
}
44+
45+
func (v nameValidator) MarkdownDescription(ctx context.Context) string {
46+
return v.Description(ctx)
47+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package codersdkvalidator
2+
3+
import (
4+
"context"
5+
6+
"github.com/coder/coder/v2/codersdk"
7+
"github.com/hashicorp/terraform-plugin-framework-validators/helpers/validatordiag"
8+
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
9+
)
10+
11+
type templateVersionNameValidator struct {
12+
err error
13+
}
14+
15+
func TemplateVersionName() validator.String {
16+
return templateVersionNameValidator{}
17+
}
18+
19+
var _ validator.String = templateVersionNameValidator{}
20+
21+
func (v templateVersionNameValidator) ValidateString(ctx context.Context, req validator.StringRequest, resp *validator.StringResponse) {
22+
if req.ConfigValue.IsNull() || req.ConfigValue.IsUnknown() {
23+
return
24+
}
25+
26+
name := req.ConfigValue.ValueString()
27+
if v.err = codersdk.TemplateVersionNameValid(name); v.err != nil {
28+
resp.Diagnostics.Append(validatordiag.InvalidAttributeValueDiagnostic(
29+
req.Path,
30+
v.Description(ctx),
31+
name,
32+
))
33+
}
34+
}
35+
36+
var _ validator.Describer = templateVersionNameValidator{}
37+
38+
func (v templateVersionNameValidator) Description(_ context.Context) string {
39+
if v.err != nil {
40+
return v.err.Error()
41+
}
42+
return "value must be a valid template version name"
43+
}
44+
45+
func (v templateVersionNameValidator) MarkdownDescription(ctx context.Context) string {
46+
return v.Description(ctx)
47+
}

internal/provider/logger.go renamed to internal/logger.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package provider
1+
package internal
22

33
import (
44
"context"

internal/provider/group_data_source.go

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66

77
"github.com/coder/coder/v2/codersdk"
8+
"github.com/coder/terraform-provider-coderd/internal"
89
"github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
910
"github.com/hashicorp/terraform-plugin-framework/datasource"
1011
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
@@ -28,9 +29,9 @@ type GroupDataSource struct {
2829
// GroupDataSourceModel describes the data source data model.
2930
type GroupDataSourceModel struct {
3031
// ID or name and organization ID must be set
31-
ID UUID `tfsdk:"id"`
32-
Name types.String `tfsdk:"name"`
33-
OrganizationID UUID `tfsdk:"organization_id"`
32+
ID internal.UUID `tfsdk:"id"`
33+
Name types.String `tfsdk:"name"`
34+
OrganizationID internal.UUID `tfsdk:"organization_id"`
3435

3536
DisplayName types.String `tfsdk:"display_name"`
3637
AvatarURL types.String `tfsdk:"avatar_url"`
@@ -40,14 +41,14 @@ type GroupDataSourceModel struct {
4041
}
4142

4243
type Member struct {
43-
ID UUID `tfsdk:"id"`
44-
Username types.String `tfsdk:"username"`
45-
Email types.String `tfsdk:"email"`
46-
CreatedAt types.Int64 `tfsdk:"created_at"`
47-
LastSeenAt types.Int64 `tfsdk:"last_seen_at"`
48-
Status types.String `tfsdk:"status"`
49-
LoginType types.String `tfsdk:"login_type"`
50-
ThemePreference types.String `tfsdk:"theme_preference"`
44+
ID internal.UUID `tfsdk:"id"`
45+
Username types.String `tfsdk:"username"`
46+
Email types.String `tfsdk:"email"`
47+
CreatedAt types.Int64 `tfsdk:"created_at"`
48+
LastSeenAt types.Int64 `tfsdk:"last_seen_at"`
49+
Status types.String `tfsdk:"status"`
50+
LoginType types.String `tfsdk:"login_type"`
51+
ThemePreference types.String `tfsdk:"theme_preference"`
5152
}
5253

5354
func (d *GroupDataSource) Metadata(ctx context.Context, req datasource.MetadataRequest, resp *datasource.MetadataResponse) {
@@ -63,7 +64,7 @@ func (d *GroupDataSource) Schema(ctx context.Context, req datasource.SchemaReque
6364
MarkdownDescription: "The ID of the group to retrieve. This field will be populated if a name and organization ID is supplied.",
6465
Optional: true,
6566
Computed: true,
66-
CustomType: UUIDType,
67+
CustomType: internal.UUIDType,
6768
Validators: []validator.String{
6869
stringvalidator.AtLeastOneOf(path.Expressions{
6970
path.MatchRoot("name"),
@@ -78,7 +79,7 @@ func (d *GroupDataSource) Schema(ctx context.Context, req datasource.SchemaReque
7879
},
7980
"organization_id": schema.StringAttribute{
8081
MarkdownDescription: "The organization ID that the group belongs to. This field will be populated if an ID is supplied. Defaults to the provider default organization ID.",
81-
CustomType: UUIDType,
82+
CustomType: internal.UUIDType,
8283
Optional: true,
8384
Computed: true,
8485
},
@@ -102,7 +103,7 @@ func (d *GroupDataSource) Schema(ctx context.Context, req datasource.SchemaReque
102103
NestedObject: schema.NestedAttributeObject{
103104
Attributes: map[string]schema.Attribute{
104105
"id": schema.StringAttribute{
105-
CustomType: UUIDType,
106+
CustomType: internal.UUIDType,
106107
Computed: true,
107108
},
108109
"username": schema.StringAttribute{
@@ -176,7 +177,7 @@ func (d *GroupDataSource) Read(ctx context.Context, req datasource.ReadRequest,
176177
client := d.data.Client
177178

178179
if data.OrganizationID.IsNull() {
179-
data.OrganizationID = UUIDValue(d.data.DefaultOrganizationID)
180+
data.OrganizationID = internal.UUIDValue(d.data.DefaultOrganizationID)
180181
}
181182

182183
var (
@@ -187,7 +188,7 @@ func (d *GroupDataSource) Read(ctx context.Context, req datasource.ReadRequest,
187188
groupID := data.ID.ValueUUID()
188189
group, err = client.Group(ctx, groupID)
189190
if err != nil {
190-
if isNotFound(err) {
191+
if internal.IsNotFound(err) {
191192
resp.Diagnostics.AddWarning("Client Warning", fmt.Sprintf("Group with ID %s not found. Marking as deleted.", groupID.String()))
192193
resp.State.RemoveResource(ctx)
193194
return
@@ -196,19 +197,19 @@ func (d *GroupDataSource) Read(ctx context.Context, req datasource.ReadRequest,
196197
return
197198
}
198199
data.Name = types.StringValue(group.Name)
199-
data.OrganizationID = UUIDValue(group.OrganizationID)
200+
data.OrganizationID = internal.UUIDValue(group.OrganizationID)
200201
} else {
201202
group, err = client.GroupByOrgAndName(ctx, data.OrganizationID.ValueUUID(), data.Name.ValueString())
202203
if err != nil {
203-
if isNotFound(err) {
204+
if internal.IsNotFound(err) {
204205
resp.Diagnostics.AddWarning("Client Warning", fmt.Sprintf("Group with name %s not found in organization with ID %s. Marking as deleted.", data.Name.ValueString(), data.OrganizationID.ValueString()))
205206
resp.State.RemoveResource(ctx)
206207
return
207208
}
208209
resp.Diagnostics.AddError("Failed to get group by name and org ID", err.Error())
209210
return
210211
}
211-
data.ID = UUIDValue(group.ID)
212+
data.ID = internal.UUIDValue(group.ID)
212213
}
213214

214215
data.DisplayName = types.StringValue(group.DisplayName)
@@ -217,7 +218,7 @@ func (d *GroupDataSource) Read(ctx context.Context, req datasource.ReadRequest,
217218
members := make([]Member, 0, len(group.Members))
218219
for _, member := range group.Members {
219220
members = append(members, Member{
220-
ID: UUIDValue(member.ID),
221+
ID: internal.UUIDValue(member.ID),
221222
Username: types.StringValue(member.Username),
222223
Email: types.StringValue(member.Email),
223224
CreatedAt: types.Int64Value(member.CreatedAt.Unix()),

internal/provider/group_data_source_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/coder/coder/v2/coderd/util/ptr"
1212
"github.com/coder/coder/v2/codersdk"
1313
"github.com/coder/terraform-provider-coderd/integration"
14+
"github.com/coder/terraform-provider-coderd/internal"
1415
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
1516
"github.com/stretchr/testify/require"
1617
)
@@ -188,7 +189,7 @@ data "coderd_group" "test" {
188189
`
189190

190191
funcMap := template.FuncMap{
191-
"orNull": printOrNull,
192+
"orNull": internal.PrintOrNull,
192193
}
193194

194195
buf := strings.Builder{}

0 commit comments

Comments
 (0)