Skip to main content
← Back to list
01Issue
BugClosedSwamp Club
AssigneesNone

Workflow inputs not resolved - modelIdOrName receives literal expression string

Opened by swampadmin · 2/6/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

  1. Install the @john/tailscale extension: swamp extension pull @john/tailscale
  2. Create the required models (ts-device, ts-user, ts-dns, ts-acl, ts-settings)
  3. Run the tailnet-overview workflow with inputs:
swamp workflow run tailnet-overview --input '{"deviceModel":"ts-device","userModel":"ts-user","dnsModel":"ts-dns","aclModel":"ts-acl","settingsModel":"ts-settings"}' --json

Expected 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: list

Workaround

Running each model method individually works fine:

swamp model method run ts-device list --json

Environment

  • 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.

02Bog Flow
OPENTRIAGEDIN PROGRESSCLOSED

Closed

No activity in this phase yet.

03Sludge Pulse

Sign in to post a ripple.