mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: cli: add support for supplying ephemeral parameters at workspace creation (#26012)
Resolves the issue of `--prompt-ephemeral-parameters` and `--ephemeral-parameter` not being available for use in the `coder create` workspace creation command (they are only available in `coder start` command). Back when they were [added originally](https://github.com/coder/coder/pull/15030) it seems to have been an oversight that they were left out. The problem this solves: ``` coder create --parameter my_ephemeral_parameter=foo error: prepare build: ephemeral parameter "my_ephemeral_parameter" can be used only with --prompt-ephemeral-parameters or --ephemeral-parameter flag ``` ``` coder create my-test-ws -t general --ephemeral-parameter my_ephemeral_parameter=foo parsing flags ([create my-test-ws -t general --ephemeral-parameter my_ephemeral_parameter=foo]) for "coder create": unknown flag: --ephemeral-parameter ``` Tested on a template with the following: ``` data "coder_parameter" "my_ephemeral_parameter" { name = "my_ephemeral_parameter" type = "bool" description = "true or false?" mutable = true default = false ephemeral = true } resource "coder_env" "debug_ephemeral" { agent_id = coder_agent.main.id name = "EPHEMERAL_TEST" value = data.coder_parameter.my_ephemeral_parameter.value } ``` By running: ``` ➜ coder git:(rowan/coder-create-5495) ✗ go run cmd/coder/main.go create --ephemeral-parameter my_ephemeral_parameter=true > Specify a name for your workspace: ws4 Select a template below to preview the provisioned infrastructure: ? kasmvnc-ubuntu-coder-dev used by 1 active developer Select a preset below: ? Small (2 CPU / 4 GB) .... ... The ws4 workspace has been created at Jun 3 12:36:38! ➜ coder git:(rowan/coder-create-5495) ✗ coder ssh ws4 workspace-ws4-5d6994756f-qlwnl% echo $EPHEMERAL_TEST true workspace-ws4-5d6994756f-qlwnl% exit ```
This commit is contained in:
+10
-3
@@ -271,6 +271,11 @@ func (r *RootCmd) Create(opts CreateOptions) *serpent.Command {
|
||||
return xerrors.Errorf("can't parse given parameter defaults: %w", err)
|
||||
}
|
||||
|
||||
cliEphemeralParameters, err := asWorkspaceBuildParameters(parameterFlags.ephemeralParameters)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("can't parse given ephemeral parameter values: %w", err)
|
||||
}
|
||||
|
||||
var sourceWorkspaceParameters []codersdk.WorkspaceBuildParameter
|
||||
if copyParametersFrom != "" {
|
||||
sourceWorkspaceParameters, err = client.WorkspaceBuildParameters(inv.Context(), sourceWorkspace.LatestBuild.ID)
|
||||
@@ -330,6 +335,9 @@ func (r *RootCmd) Create(opts CreateOptions) *serpent.Command {
|
||||
RichParameters: cliBuildParameters,
|
||||
RichParameterDefaults: cliBuildParameterDefaults,
|
||||
|
||||
PromptEphemeralParameters: parameterFlags.promptEphemeralParameters,
|
||||
EphemeralParameters: cliEphemeralParameters,
|
||||
|
||||
SourceWorkspaceParameters: sourceWorkspaceParameters,
|
||||
|
||||
UseParameterDefaults: parameterFlags.useParameterDefaults,
|
||||
@@ -455,9 +463,8 @@ func (r *RootCmd) Create(opts CreateOptions) *serpent.Command {
|
||||
},
|
||||
cliui.SkipPromptOption(),
|
||||
)
|
||||
cmd.Options = append(cmd.Options, parameterFlags.cliParameters()...)
|
||||
cmd.Options = append(cmd.Options, parameterFlags.cliParameterDefaults()...)
|
||||
cmd.Options = append(cmd.Options, parameterFlags.useParameterDefaultsOption())
|
||||
cmd.Options = append(cmd.Options, parameterFlags.allOptions()...)
|
||||
|
||||
orgContext.AttachOptions(cmd)
|
||||
return cmd
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user