Skip to content

fix: update workspace cleanup flag names for template cmds #10805

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Nov 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 27 additions & 18 deletions cli/templatecreate.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,11 @@ func (r *RootCmd) templateCreate() *clibase.Cmd {
disableEveryone bool
requireActiveVersion bool

defaultTTL time.Duration
failureTTL time.Duration
inactivityTTL time.Duration
maxTTL time.Duration
defaultTTL time.Duration
failureTTL time.Duration
dormancyThreshold time.Duration
dormancyAutoDeletion time.Duration
maxTTL time.Duration

uploadFlags templateUploadFlags
)
Expand All @@ -47,18 +48,18 @@ func (r *RootCmd) templateCreate() *clibase.Cmd {
r.InitClient(client),
),
Handler: func(inv *clibase.Invocation) error {
isTemplateSchedulingOptionsSet := failureTTL != 0 || inactivityTTL != 0 || maxTTL != 0
isTemplateSchedulingOptionsSet := failureTTL != 0 || dormancyThreshold != 0 || dormancyAutoDeletion != 0 || maxTTL != 0

if isTemplateSchedulingOptionsSet || requireActiveVersion {
if failureTTL != 0 || inactivityTTL != 0 {
if failureTTL != 0 || dormancyThreshold != 0 || dormancyAutoDeletion != 0 {
// This call can be removed when workspace_actions is no longer experimental
experiments, exErr := client.Experiments(inv.Context())
if exErr != nil {
return xerrors.Errorf("get experiments: %w", exErr)
}

if !experiments.Enabled(codersdk.ExperimentWorkspaceActions) {
return xerrors.Errorf("--failure-ttl and --inactivity-ttl are experimental features. Use the workspace_actions CODER_EXPERIMENTS flag to set these configuration values.")
return xerrors.Errorf("--failure-ttl, --dormancy-threshold, and --dormancy-auto-deletion are experimental features. Use the workspace_actions CODER_EXPERIMENTS flag to set these configuration values.")
}
}

Expand Down Expand Up @@ -153,14 +154,15 @@ func (r *RootCmd) templateCreate() *clibase.Cmd {
}

createReq := codersdk.CreateTemplateRequest{
Name: templateName,
VersionID: job.ID,
DefaultTTLMillis: ptr.Ref(defaultTTL.Milliseconds()),
FailureTTLMillis: ptr.Ref(failureTTL.Milliseconds()),
MaxTTLMillis: ptr.Ref(maxTTL.Milliseconds()),
TimeTilDormantMillis: ptr.Ref(inactivityTTL.Milliseconds()),
DisableEveryoneGroupAccess: disableEveryone,
RequireActiveVersion: requireActiveVersion,
Name: templateName,
VersionID: job.ID,
DefaultTTLMillis: ptr.Ref(defaultTTL.Milliseconds()),
FailureTTLMillis: ptr.Ref(failureTTL.Milliseconds()),
MaxTTLMillis: ptr.Ref(maxTTL.Milliseconds()),
TimeTilDormantMillis: ptr.Ref(dormancyThreshold.Milliseconds()),
TimeTilDormantAutoDeleteMillis: ptr.Ref(dormancyAutoDeletion.Milliseconds()),
DisableEveryoneGroupAccess: disableEveryone,
RequireActiveVersion: requireActiveVersion,
}

_, err = client.CreateTemplate(inv.Context(), organization.ID, createReq)
Expand Down Expand Up @@ -220,11 +222,18 @@ func (r *RootCmd) templateCreate() *clibase.Cmd {
Value: clibase.DurationOf(&failureTTL),
},
{
Flag: "inactivity-ttl",
Description: "Specify an inactivity TTL for workspaces created from this template. It is the amount of time the workspace is not used before it is be stopped and auto-locked. This includes across multiple builds (e.g. auto-starts and stops). This licensed feature's default is 0h (off). Maps to \"Dormancy threshold\" in the UI.",
Flag: "dormancy-threshold",
Description: "Specify a duration workspaces may be inactive prior to being moved to the dormant state. This licensed feature's default is 0h (off). Maps to \"Dormancy threshold\" in the UI.",
Default: "0h",
Value: clibase.DurationOf(&inactivityTTL),
Value: clibase.DurationOf(&dormancyThreshold),
},
{
Flag: "dormancy-auto-deletion",
Description: "Specify a duration workspaces may be in the dormant state prior to being deleted. This licensed feature's default is 0h (off). Maps to \"Dormancy Auto-Deletion\" in the UI.",
Default: "0h",
Value: clibase.DurationOf(&dormancyAutoDeletion),
},

{
Flag: "max-ttl",
Description: "Edit the template maximum time before shutdown - workspaces created from this template must shutdown within the given duration after starting. This is an enterprise-only feature.",
Expand Down
47 changes: 32 additions & 15 deletions cli/templateedit.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ func (r *RootCmd) templateEdit() *clibase.Cmd {
autostopRequirementWeeks int64
autostartRequirementDaysOfWeek []string
failureTTL time.Duration
inactivityTTL time.Duration
dormancyThreshold time.Duration
dormancyAutoDeletion time.Duration
allowUserCancelWorkspaceJobs bool
allowUserAutostart bool
allowUserAutostop bool
Expand All @@ -46,14 +47,14 @@ func (r *RootCmd) templateEdit() *clibase.Cmd {
Short: "Edit the metadata of a template by name.",
Handler: func(inv *clibase.Invocation) error {
// This clause can be removed when workspace_actions is no longer experimental
if failureTTL != 0 || inactivityTTL != 0 {
if failureTTL != 0 || dormancyThreshold != 0 || dormancyAutoDeletion != 0 {
experiments, exErr := client.Experiments(inv.Context())
if exErr != nil {
return xerrors.Errorf("get experiments: %w", exErr)
}

if !experiments.Enabled(codersdk.ExperimentWorkspaceActions) {
return xerrors.Errorf("--failure-ttl and --inactivity-ttl are experimental features. Use the workspace_actions CODER_EXPERIMENTS flag to set these configuration values.")
return xerrors.Errorf("--failure-ttl, --dormancy-threshold, and --dormancy-auto-deletion are experimental features. Use the workspace_actions CODER_EXPERIMENTS flag to set these configuration values.")
}
}

Expand All @@ -64,7 +65,8 @@ func (r *RootCmd) templateEdit() *clibase.Cmd {
!allowUserAutostop ||
maxTTL != 0 ||
failureTTL != 0 ||
inactivityTTL != 0 ||
dormancyThreshold != 0 ||
dormancyAutoDeletion != 0 ||
len(autostartRequirementDaysOfWeek) > 0

requiresEntitlement := requiresScheduling || requireActiveVersion
Expand Down Expand Up @@ -119,6 +121,15 @@ func (r *RootCmd) templateEdit() *clibase.Cmd {
if unsetAutostopRequirementDaysOfWeek {
autostopRequirementDaysOfWeek = []string{}
}
if failureTTL == 0 {
failureTTL = time.Duration(template.FailureTTLMillis) * time.Millisecond
}
if dormancyThreshold == 0 {
dormancyThreshold = time.Duration(template.TimeTilDormantMillis) * time.Millisecond
}
if dormancyAutoDeletion == 0 {
dormancyAutoDeletion = time.Duration(template.TimeTilDormantAutoDeleteMillis) * time.Millisecond
}

// Only pass explicitly set deprecated values since the empty string
// removes the deprecated message. By default if we pass a nil,
Expand All @@ -129,7 +140,6 @@ func (r *RootCmd) templateEdit() *clibase.Cmd {
deprecated = &deprecationMessage
}

// NOTE: coderd will ignore empty fields.
req := codersdk.UpdateTemplateMeta{
Name: name,
DisplayName: displayName,
Expand All @@ -144,13 +154,14 @@ func (r *RootCmd) templateEdit() *clibase.Cmd {
AutostartRequirement: &codersdk.TemplateAutostartRequirement{
DaysOfWeek: autostartRequirementDaysOfWeek,
},
FailureTTLMillis: failureTTL.Milliseconds(),
TimeTilDormantMillis: inactivityTTL.Milliseconds(),
AllowUserCancelWorkspaceJobs: allowUserCancelWorkspaceJobs,
AllowUserAutostart: allowUserAutostart,
AllowUserAutostop: allowUserAutostop,
RequireActiveVersion: requireActiveVersion,
DeprecationMessage: deprecated,
FailureTTLMillis: failureTTL.Milliseconds(),
TimeTilDormantMillis: dormancyThreshold.Milliseconds(),
TimeTilDormantAutoDeleteMillis: dormancyAutoDeletion.Milliseconds(),
AllowUserCancelWorkspaceJobs: allowUserCancelWorkspaceJobs,
AllowUserAutostart: allowUserAutostart,
AllowUserAutostop: allowUserAutostop,
RequireActiveVersion: requireActiveVersion,
DeprecationMessage: deprecated,
}

_, err = client.UpdateTemplateMeta(inv.Context(), template.ID, req)
Expand Down Expand Up @@ -246,10 +257,16 @@ func (r *RootCmd) templateEdit() *clibase.Cmd {
Value: clibase.DurationOf(&failureTTL),
},
{
Flag: "inactivity-ttl",
Description: "Specify an inactivity TTL for workspaces created from this template. It is the amount of time the workspace is not used before it is be stopped and auto-locked. This includes across multiple builds (e.g. auto-starts and stops). This licensed feature's default is 0h (off). Maps to \"Dormancy threshold\" in the UI.",
Flag: "dormancy-threshold",
Description: "Specify a duration workspaces may be inactive prior to being moved to the dormant state. This licensed feature's default is 0h (off). Maps to \"Dormancy threshold\" in the UI.",
Default: "0h",
Value: clibase.DurationOf(&dormancyThreshold),
},
{
Flag: "dormancy-auto-deletion",
Description: "Specify a duration workspaces may be in the dormant state prior to being deleted. This licensed feature's default is 0h (off). Maps to \"Dormancy Auto-Deletion\" in the UI.",
Default: "0h",
Value: clibase.DurationOf(&inactivityTTL),
Value: clibase.DurationOf(&dormancyAutoDeletion),
},
{
Flag: "allow-user-cancel-workspace-jobs",
Expand Down
17 changes: 10 additions & 7 deletions cli/testdata/coder_templates_create_--help.golden
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,16 @@ OPTIONS:
-d, --directory string (default: .)
Specify the directory to create from, use '-' to read tar from stdin.

--dormancy-auto-deletion duration (default: 0h)
Specify a duration workspaces may be in the dormant state prior to
being deleted. This licensed feature's default is 0h (off). Maps to
"Dormancy Auto-Deletion" in the UI.

--dormancy-threshold duration (default: 0h)
Specify a duration workspaces may be inactive prior to being moved to
the dormant state. This licensed feature's default is 0h (off). Maps
to "Dormancy threshold" in the UI.

--failure-ttl duration (default: 0h)
Specify a failure TTL for workspaces created from this template. It is
the amount of time after a failed "start" build before coder
Expand All @@ -24,13 +34,6 @@ OPTIONS:
Ignore warnings about not having a .terraform.lock.hcl file present in
the template.

--inactivity-ttl duration (default: 0h)
Specify an inactivity TTL for workspaces created from this template.
It is the amount of time the workspace is not used before it is be
stopped and auto-locked. This includes across multiple builds (e.g.
auto-starts and stops). This licensed feature's default is 0h (off).
Maps to "Dormancy threshold" in the UI.

--max-ttl duration
Edit the template maximum time before shutdown - workspaces created
from this template must shutdown within the given duration after
Expand Down
17 changes: 10 additions & 7 deletions cli/testdata/coder_templates_edit_--help.golden
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,16 @@ OPTIONS:
--display-name string
Edit the template display name.

--dormancy-auto-deletion duration (default: 0h)
Specify a duration workspaces may be in the dormant state prior to
being deleted. This licensed feature's default is 0h (off). Maps to
"Dormancy Auto-Deletion" in the UI.

--dormancy-threshold duration (default: 0h)
Specify a duration workspaces may be inactive prior to being moved to
the dormant state. This licensed feature's default is 0h (off). Maps
to "Dormancy threshold" in the UI.

--failure-ttl duration (default: 0h)
Specify a failure TTL for workspaces created from this template. It is
the amount of time after a failed "start" build before coder
Expand All @@ -47,13 +57,6 @@ OPTIONS:
--icon string
Edit the template icon path.

--inactivity-ttl duration (default: 0h)
Specify an inactivity TTL for workspaces created from this template.
It is the amount of time the workspace is not used before it is be
stopped and auto-locked. This includes across multiple builds (e.g.
auto-starts and stops). This licensed feature's default is 0h (off).
Maps to "Dormancy threshold" in the UI.

--max-ttl duration
Edit the template maximum time before shutdown - workspaces created
from this template must shutdown within the given duration after
Expand Down
27 changes: 18 additions & 9 deletions docs/cli/templates_create.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 18 additions & 9 deletions docs/cli/templates_edit.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading