You signed in with another tab or window.Reload to refresh your session.You signed out in another tab or window.Reload to refresh your session.You switched accounts on another tab or window.Reload to refresh your session.Dismiss alert
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
In this pull request we're adding support in the CLI for prompting the user for any missing required template variables in thecoder templates push command and automatically retrying the template build once a user has provided any missing variable values.
In the following recording I created a simple template terraform file that used different variable types (string, number, boolean, and sensitive) and prompted the user to enter a value for each variable.
See example template terraform file
...# Required variables for testing interactive promptingvariable"docker_image" {description="Docker image to use for the workspace"type=string}variable"workspace_name" {description="Name of the workspace"type=string}variable"cpu_limit" {description="CPU limit for the container (number of cores)"type=number}variable"enable_gpu" {description="Enable GPU access for the container"type=bool}variable"api_key" {description="API key for external services (sensitive)"type=stringsensitive=true}# Optional variable with defaultvariable"docker_socket" {default="/var/run/docker.sock"description="Docker socket path"type=string}...
Once the user entered a valid value for each variable, the template build would be retried.
prompt-template-variables.movSee output from recording
$ ./scripts/coder-dev.sh templates push test-required-params -d examples/templates/test-required-params/INFO: Overriding codersdk.SessionTokenCookie as we are developing inside a Coder workspace./home/coder/coder/build/coder-slim_2.26.0-devel+a68122ca3_linux_amd64Provisioner tags:<none>WARN: No .terraform.lock.hcl file found| When provisioning, Coder will be unable to cache providers without a lockfile and must download them from the internet each time.| Create one by running terraform initin your template directory.> Upload"examples/templates/test-required-params"? (yes/no) yes=== ✔ Queued [0ms]==> ⧗ Running==> ⧗ Running=== ✔ Running [4ms]==> ⧗ Setting up=== ✔ Setting up [0ms]==> ⧗ Parsing template parameters=== ✔ Parsing template parameters [8ms]==> ⧗ Cleaning Up=== ✘ Cleaning Up [4ms]=== ✘ Cleaning Up [8ms]Found 5 missing required variables: - docker_image (string): Docker image to usefor the workspace - workspace_name (string): Name of the workspace - cpu_limit (number): CPU limitfor the container (number of cores) - enable_gpu (bool): Enable GPU accessfor the container - api_key (string): API keyfor external services (sensitive)The template requires valuesfor the following variables:var.docker_image (required) Description: Docker image to usefor the workspace Type: string Current value:<empty>> Enter value: image-namevar.workspace_name (required) Description: Name of the workspace Type: string Current value:<empty>> Enter value: workspace-namevar.cpu_limit (required) Description: CPU limitfor the container (number of cores) Type: number Current value:<empty>> Enter value: 1var.enable_gpu (required) Description: Enable GPU accessfor the container Type: bool Current value:<empty>? Select value:falsevar.api_key (required), sensitive Description: API keyfor external services (sensitive) Type: string Current value:<empty>> Enter value: (*redacted*)******Retrying template build with provided variables...=== ✔ Queued [0ms]==> ⧗ Running==> ⧗ Running=== ✔ Running [2ms]==> ⧗ Setting up=== ✔ Setting up [0ms]==> ⧗ Parsing template parameters=== ✔ Parsing template parameters [7ms]==> ⧗ Detecting persistent resources2025-09-25 22:34:14.731Z Terraform 1.13.02025-09-25 22:34:15.140Z data.coder_provisioner.me: Refreshing...2025-09-25 22:34:15.140Z data.coder_workspace.me: Refreshing...2025-09-25 22:34:15.140Z data.coder_workspace_owner.me: Refreshing...2025-09-25 22:34:15.141Z data.coder_provisioner.me: Refreshcomplete after 0s [id=2bd73098-d127-4362-b3a5-628e5bce6998]2025-09-25 22:34:15.141Z data.coder_workspace_owner.me: Refreshcomplete after 0s [id=c2006933-4f3e-4c45-9e04-79612c3a5eca]2025-09-25 22:34:15.141Z data.coder_workspace.me: Refreshcomplete after 0s [id=36f2dc6f-0bf2-43bd-bc4d-b29768334e02]2025-09-25 22:34:15.186Z coder_agent.main: Plan to create2025-09-25 22:34:15.186Z module.code-server[0].coder_app.code-server: Plan to create2025-09-25 22:34:15.186Z docker_volume.home_volume: Plan to create2025-09-25 22:34:15.186Z module.code-server[0].coder_script.code-server: Plan to create2025-09-25 22:34:15.187Z docker_container.workspace[0]: Plan to create2025-09-25 22:34:15.187Z Plan: 5 to add, 0 to change, 0 to destroy.=== ✔ Detecting persistent resources [3104ms]==> ⧗ Detecting ephemeral resources2025-09-25 22:34:16.033Z Terraform 1.13.02025-09-25 22:34:16.428Z data.coder_workspace.me: Refreshing...2025-09-25 22:34:16.428Z data.coder_provisioner.me: Refreshing...2025-09-25 22:34:16.429Z data.coder_workspace_owner.me: Refreshing...2025-09-25 22:34:16.429Z data.coder_provisioner.me: Refreshcomplete after 0s [id=2d2f7083-88e6-425c-9df3-856a3bf4cc73]2025-09-25 22:34:16.429Z data.coder_workspace.me: Refreshcomplete after 0s [id=c723575e-c7d3-43d7-bf54-0e34d0959dc3]2025-09-25 22:34:16.431Z data.coder_workspace_owner.me: Refreshcomplete after 0s [id=d43470c2-236e-4ae9-a977-6b53688c2cb1]2025-09-25 22:34:16.453Z coder_agent.main: Plan to create2025-09-25 22:34:16.453Z docker_volume.home_volume: Plan to create2025-09-25 22:34:16.454Z Plan: 2 to add, 0 to change, 0 to destroy.=== ✔ Detecting ephemeral resources [1278ms]==> ⧗ Cleaning Up=== ✔ Cleaning Up [6ms]┌──────────────────────────────────┐│ Template Preview │├──────────────────────────────────┤│ RESOURCE │├──────────────────────────────────┤│ docker_container.workspace ││ └─ main (linux, amd64) │├──────────────────────────────────┤│ docker_volume.home_volume │└──────────────────────────────────┘The test-required-params template has been created at Sep 2522:34:16! Developers can provision a workspace with this template using:Updated version at Sep 25 22:34:16!
Changes
Added a new function to check if the provisioner failed due to a template missing required variables
Added a handler function that is called when a provisioner fails due to the "missing required variables" error. The handler function will:
Check for provided template variables and identify any missing variables
Prompt the user for any missing variables (prompt is adapted based on the variable type)
Validate user input for missing variables
Retry the template build when all variables have been provided by the user
Testing
Added tests for the following scenarios:
Ensure validation based on variable type
Ensure users are not prompted for variables with a default value
Ensure variables provided via a variables files (--variables-file) or a variable flag (--variable) take precedence over a template
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
In this pull request we're adding support in the CLI for prompting the user for any missing required template variables in the
coder templates push
command and automatically retrying the template build once a user has provided any missing variable values.Closes:#19782
Demo
In the following recording I created a simple template terraform file that used different variable types (string, number, boolean, and sensitive) and prompted the user to enter a value for each variable.
See example template terraform file
Once the user entered a valid value for each variable, the template build would be retried.
prompt-template-variables.mov
See output from recording
Changes
Testing
Added tests for the following scenarios:
--variables-file
) or a variable flag (--variable
) take precedence over a template