mirror of
https://github.com/coder/coder.git
synced 2025-07-03 16:13:58 +00:00
fix: template: enforce bounds of template max_ttl (#3662)
This PR makes the following changes: - enforces lower and upper limits on template `max_ttl_ms` - adds a migration to enforce 7-day cap on `max_ttl` - allows setting template `max_ttl` to 0 - updates template edit CLI help to be clearer
This commit is contained in:
@ -191,6 +191,26 @@ func TestPostWorkspacesByOrganization(t *testing.T) {
|
||||
_ = coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID)
|
||||
})
|
||||
|
||||
t.Run("TemplateNoTTL", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerD: true})
|
||||
user := coderdtest.CreateFirstUser(t, client)
|
||||
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
|
||||
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) {
|
||||
ctr.MaxTTLMillis = ptr.Ref(int64(0))
|
||||
})
|
||||
// Given: the template has no max TTL set
|
||||
require.Zero(t, template.MaxTTLMillis)
|
||||
coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
|
||||
|
||||
// When: we create a workspace with autostop not enabled
|
||||
workspace := coderdtest.CreateWorkspace(t, client, user.OrganizationID, template.ID, func(cwr *codersdk.CreateWorkspaceRequest) {
|
||||
cwr.TTLMillis = ptr.Ref(int64(0))
|
||||
})
|
||||
// Then: No TTL should be set by the template
|
||||
require.Nil(t, workspace.TTLMillis)
|
||||
})
|
||||
|
||||
t.Run("TemplateCustomTTL", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerD: true})
|
||||
@ -1051,6 +1071,17 @@ func TestWorkspaceUpdateTTL(t *testing.T) {
|
||||
expectedError: "ttl_ms: time until shutdown must be below template maximum 8h0m0s",
|
||||
modifyTemplate: func(ctr *codersdk.CreateTemplateRequest) { ctr.MaxTTLMillis = ptr.Ref((8 * time.Hour).Milliseconds()) },
|
||||
},
|
||||
{
|
||||
name: "no template maximum ttl",
|
||||
ttlMillis: ptr.Ref((7 * 24 * time.Hour).Milliseconds()),
|
||||
modifyTemplate: func(ctr *codersdk.CreateTemplateRequest) { ctr.MaxTTLMillis = ptr.Ref(int64(0)) },
|
||||
},
|
||||
{
|
||||
name: "above maximum ttl even with no template max",
|
||||
ttlMillis: ptr.Ref((365 * 24 * time.Hour).Milliseconds()),
|
||||
expectedError: "ttl_ms: time until shutdown must be less than 7 days",
|
||||
modifyTemplate: func(ctr *codersdk.CreateTemplateRequest) { ctr.MaxTTLMillis = ptr.Ref(int64(0)) },
|
||||
},
|
||||
}
|
||||
|
||||
for _, testCase := range testCases {
|
||||
|
Reference in New Issue
Block a user