mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
02b123518c
## Problem
The CLI does not honor `default` values on template parameters in two
ways:
1. **`--use-parameter-defaults` rejects empty-string defaults.** The
check `parameterValue != ""` means `default = ""` in Terraform falls
through to an interactive prompt. In CI this causes an EOF error.
2. **`--use-parameter-defaults` only exists on `coder create`.** The
`start`, `update`, and `restart` commands never wire it through. SSH
auto-start passes empty `workspaceParameterFlags{}`, so users SSH-ing
into a stopped workspace with new template parameters get stuck in an
interactive prompt they cannot complete.
## Fix
### 1. Fix empty-string default detection and expose flag on all
commands
Replace `parameterValue != ""` with a check based on `!tvp.Required`. A
parameter with `Required==false` always has a valid default in
Terraform, even if that default is `""`. Also respect CLI defaults
provided via `--parameter-default`.
Move `--use-parameter-defaults` from a standalone option on `create`
into the shared `workspaceParameterFlags` struct. This exposes the flag
(and `CODER_WORKSPACE_USE_PARAMETER_DEFAULTS`) on `start`, `update`, and
`restart` via `allOptions()`. Wire it through
`buildWorkspaceStartRequest` so the resolver receives it.
### 2. SSH auto-start always uses defaults
Set `useParameterDefaults: true` on both `startWorkspace` calls in the
SSH auto-start path (initial start and the forbidden/upgrade fallback).
SSH is non-interactive and should never prompt.
Fixes https://linear.app/codercom/issue/DEVEX-180
Fixes https://github.com/coder/coder/issues/22272
<details><summary>Implementation notes</summary>
### Scoping decisions
- **`--yes` does not imply `--use-parameter-defaults`**: Making `--yes`
auto-accept defaults exposes a validation gap in the dynamic parameter
path (client-side validation happens during prompting, and skipping
prompts bypasses it). This is deferred to a follow-up that also
addresses `codersdk.ValidateWorkspaceBuildParameter` integration in the
resolver. Tracked in PLAT-114.
- **Explicit overrides always win**: `--parameter`,
`--rich-parameter-file`, and `--preset` are resolved in stages 1-5 of
the resolver, before `resolveWithInput` runs. No change needed for
precedence.
- **`!tvp.Required` vs `parameterValue != ""`**: The `Required` field is
set by the Terraform provider based on whether a `default` is present.
This is the canonical signal for "has a default," not the string value
itself.
</details>
> Generated with [Coder Agents](https://coder.com/agents)
52 lines
1.8 KiB
Plaintext
52 lines
1.8 KiB
Plaintext
coder v0.0.0-devel
|
|
|
|
USAGE:
|
|
coder start [flags] <workspace>
|
|
|
|
Start a workspace
|
|
|
|
OPTIONS:
|
|
--always-prompt bool
|
|
Always prompt all parameters. Does not pull parameter values from
|
|
existing workspace.
|
|
|
|
--build-option string-array, $CODER_BUILD_OPTION
|
|
Build option value in the format "name=value".
|
|
DEPRECATED: Use --ephemeral-parameter instead.
|
|
|
|
--build-options bool
|
|
Prompt for one-time build options defined with ephemeral parameters.
|
|
DEPRECATED: Use --prompt-ephemeral-parameters instead.
|
|
|
|
--ephemeral-parameter string-array, $CODER_EPHEMERAL_PARAMETER
|
|
Set the value of ephemeral parameters defined in the template. The
|
|
format is "name=value".
|
|
|
|
--no-wait bool
|
|
Return immediately after starting the workspace.
|
|
|
|
--parameter string-array, $CODER_RICH_PARAMETER
|
|
Rich parameter value in the format "name=value".
|
|
|
|
--parameter-default string-array, $CODER_RICH_PARAMETER_DEFAULT
|
|
Rich parameter default values in the format "name=value".
|
|
|
|
--prompt-ephemeral-parameters bool, $CODER_PROMPT_EPHEMERAL_PARAMETERS
|
|
Prompt to set values of ephemeral parameters defined in the template.
|
|
If a value has been set via --ephemeral-parameter, it will not be
|
|
prompted for.
|
|
|
|
--rich-parameter-file string, $CODER_RICH_PARAMETER_FILE
|
|
Specify a file path with values for rich parameters defined in the
|
|
template. The file should be in YAML format, containing key-value
|
|
pairs for the parameters.
|
|
|
|
--use-parameter-defaults bool, $CODER_WORKSPACE_USE_PARAMETER_DEFAULTS
|
|
Automatically accept parameter defaults when no value is provided.
|
|
|
|
-y, --yes bool
|
|
Bypass confirmation prompts.
|
|
|
|
———
|
|
Run `coder --help` for a list of global options.
|