Skip to content

Commit d3f00d9

Browse files
feat: add validation for timezone
1 parent deeea0e commit d3f00d9

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

provider/workspace_preset.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"strings"
7+
"time"
78

89
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
910
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -143,6 +144,16 @@ func workspacePresetDataSource() *schema.Resource {
143144
"timezone": {
144145
Type: schema.TypeString,
145146
Required: true,
147+
ValidateFunc: func(val interface{}, key string) ([]string, []error) {
148+
timezone := val.(string)
149+
150+
_, err := time.LoadLocation(timezone)
151+
if err != nil {
152+
return nil, []error{fmt.Errorf("failed to load location: %w", err)}
153+
}
154+
155+
return nil, nil
156+
},
146157
},
147158
"schedule": {
148159
Type: schema.TypeList,

provider/workspace_preset_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,52 @@ func TestWorkspacePreset(t *testing.T) {
462462
}`,
463463
ExpectError: regexp.MustCompile(`failed to parse cron spec: end of range \(26\) above maximum \(23\): 25-26`),
464464
},
465+
{
466+
Name: "Prebuilds is set with a valid autoscaling.timezone field",
467+
Config: `
468+
data "coder_workspace_preset" "preset_1" {
469+
name = "preset_1"
470+
prebuilds {
471+
instances = 1
472+
autoscaling {
473+
timezone = "America/Los_Angeles"
474+
schedule {
475+
cron = "* 8-18 * * 1-5"
476+
instances = 3
477+
}
478+
}
479+
}
480+
}`,
481+
ExpectError: nil,
482+
Check: func(state *terraform.State) error {
483+
require.Len(t, state.Modules, 1)
484+
require.Len(t, state.Modules[0].Resources, 1)
485+
resource := state.Modules[0].Resources["data.coder_workspace_preset.preset_1"]
486+
require.NotNil(t, resource)
487+
attrs := resource.Primary.Attributes
488+
require.Equal(t, attrs["name"], "preset_1")
489+
require.Equal(t, attrs["prebuilds.0.autoscaling.0.timezone"], "America/Los_Angeles")
490+
return nil
491+
},
492+
},
493+
{
494+
Name: "Prebuilds is set with an invalid autoscaling.timezone field",
495+
Config: `
496+
data "coder_workspace_preset" "preset_1" {
497+
name = "preset_1"
498+
prebuilds {
499+
instances = 1
500+
autoscaling {
501+
timezone = "InvalidLocation"
502+
schedule {
503+
cron = "* 8-18 * * 1-5"
504+
instances = 3
505+
}
506+
}
507+
}
508+
}`,
509+
ExpectError: regexp.MustCompile(`failed to load location: unknown time zone InvalidLocation`),
510+
},
465511
}
466512

467513
for _, testcase := range testcases {

0 commit comments

Comments
 (0)