mirror of
https://github.com/coder/coder.git
synced 2026-06-03 04:58:23 +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)
147 lines
4.6 KiB
Markdown
Generated
147 lines
4.6 KiB
Markdown
Generated
<!-- DO NOT EDIT | GENERATED CONTENT -->
|
|
# create
|
|
|
|
Create a workspace
|
|
|
|
## Usage
|
|
|
|
```console
|
|
coder create [flags] [workspace]
|
|
```
|
|
|
|
## Description
|
|
|
|
```console
|
|
- Create a workspace for another user (if you have permission):
|
|
|
|
$ coder create <username>/<workspace_name>
|
|
```
|
|
|
|
## Options
|
|
|
|
### -t, --template
|
|
|
|
| | |
|
|
|-------------|-----------------------------------|
|
|
| Type | <code>string</code> |
|
|
| Environment | <code>$CODER_TEMPLATE_NAME</code> |
|
|
|
|
Specify a template name.
|
|
|
|
### --template-version
|
|
|
|
| | |
|
|
|-------------|--------------------------------------|
|
|
| Type | <code>string</code> |
|
|
| Environment | <code>$CODER_TEMPLATE_VERSION</code> |
|
|
|
|
Specify a template version name.
|
|
|
|
### --preset
|
|
|
|
| | |
|
|
|-------------|---------------------------------|
|
|
| Type | <code>string</code> |
|
|
| Environment | <code>$CODER_PRESET_NAME</code> |
|
|
|
|
Specify the name of a template version preset. Use 'none' to explicitly indicate that no preset should be used.
|
|
|
|
### --start-at
|
|
|
|
| | |
|
|
|-------------|----------------------------------------|
|
|
| Type | <code>string</code> |
|
|
| Environment | <code>$CODER_WORKSPACE_START_AT</code> |
|
|
|
|
Specify the workspace autostart schedule. Check coder schedule start --help for the syntax.
|
|
|
|
### --stop-after
|
|
|
|
| | |
|
|
|-------------|------------------------------------------|
|
|
| Type | <code>duration</code> |
|
|
| Environment | <code>$CODER_WORKSPACE_STOP_AFTER</code> |
|
|
|
|
Specify a duration after which the workspace should shut down (e.g. 8h).
|
|
|
|
### --automatic-updates
|
|
|
|
| | |
|
|
|-------------|-------------------------------------------------|
|
|
| Type | <code>string</code> |
|
|
| Environment | <code>$CODER_WORKSPACE_AUTOMATIC_UPDATES</code> |
|
|
| Default | <code>never</code> |
|
|
|
|
Specify automatic updates setting for the workspace (accepts 'always' or 'never').
|
|
|
|
### --copy-parameters-from
|
|
|
|
| | |
|
|
|-------------|----------------------------------------------------|
|
|
| Type | <code>string</code> |
|
|
| Environment | <code>$CODER_WORKSPACE_COPY_PARAMETERS_FROM</code> |
|
|
|
|
Specify the source workspace name to copy parameters from.
|
|
|
|
### --no-wait
|
|
|
|
| | |
|
|
|-------------|------------------------------------|
|
|
| Type | <code>bool</code> |
|
|
| Environment | <code>$CODER_CREATE_NO_WAIT</code> |
|
|
|
|
Return immediately after creating the workspace. The build will run in the background.
|
|
|
|
### -y, --yes
|
|
|
|
| | |
|
|
|------|-------------------|
|
|
| Type | <code>bool</code> |
|
|
|
|
Bypass confirmation prompts.
|
|
|
|
### --parameter
|
|
|
|
| | |
|
|
|-------------|------------------------------------|
|
|
| Type | <code>string-array</code> |
|
|
| Environment | <code>$CODER_RICH_PARAMETER</code> |
|
|
|
|
Rich parameter value in the format "name=value".
|
|
|
|
### --rich-parameter-file
|
|
|
|
| | |
|
|
|-------------|-----------------------------------------|
|
|
| Type | <code>string</code> |
|
|
| Environment | <code>$CODER_RICH_PARAMETER_FILE</code> |
|
|
|
|
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.
|
|
|
|
### --parameter-default
|
|
|
|
| | |
|
|
|-------------|--------------------------------------------|
|
|
| Type | <code>string-array</code> |
|
|
| Environment | <code>$CODER_RICH_PARAMETER_DEFAULT</code> |
|
|
|
|
Rich parameter default values in the format "name=value".
|
|
|
|
### --use-parameter-defaults
|
|
|
|
| | |
|
|
|-------------|------------------------------------------------------|
|
|
| Type | <code>bool</code> |
|
|
| Environment | <code>$CODER_WORKSPACE_USE_PARAMETER_DEFAULTS</code> |
|
|
|
|
Automatically accept parameter defaults when no value is provided.
|
|
|
|
### -O, --org
|
|
|
|
| | |
|
|
|-------------|----------------------------------|
|
|
| Type | <code>string</code> |
|
|
| Environment | <code>$CODER_ORGANIZATION</code> |
|
|
|
|
Select which organization (uuid or name) to use.
|