Workflow inputs not resolved - modelIdOrName receives literal expression string
Opened by swampadmin · 2/27/2025
Description
When running a workflow that uses ${{ inputs.<name> }} expressions in task.modelIdOrName fields, the expressions are not resolved. Instead, the literal string ${{ inputs.deviceModel }} is passed as the model name, causing "Model not found" errors.
Steps to Reproduce
- Install the
@john/tailscaleextension:swamp extension pull @john/tailscale - Create the required models (ts-device, ts-user, ts-dns, ts-acl, ts-settings)
- Run the
tailnet-overviewworkflow with inputs:
swamp workflow run tailnet-overview --input '{"deviceModel":"ts-device","userModel":"ts-user","dnsModel":"ts-dns","aclModel":"ts-acl","settingsModel":"ts-settings"}' --jsonExpected Behavior
The ${{ inputs.deviceModel }} expression in the workflow YAML should resolve to ts-device, and the workflow should execute the list method on the ts-device model.
Actual Behavior
Every step fails with errors like:
"error": "Model not found: ${{ inputs.deviceModel }}"The expression is passed through literally without evaluation.
Workflow Definition
The tailnet-overview.yaml workflow uses this pattern:
steps:
- name: list-devices
task:
type: model_method
modelIdOrName: ${{ inputs.deviceModel }}
methodName: listWorkaround
Running each model method individually works fine:
swamp model method run ts-device list --jsonEnvironment
- swamp version: 20260227.033008.0-sha.c637ddd9
- OS: macOS Darwin 25.3.0
Summary
This bug affects the workflow execution engine's input expression resolution. The fix would involve ensuring that ${{ inputs.<name> }} expressions in workflow step task fields (specifically modelIdOrName) are evaluated before the step attempts to resolve the model.
Closed
No activity in this phase yet.
Sign in to post a ripple.