Skip to main content
← Back to list
01Issue
BugShippedSwamp CLI
Assigneesstack72

#358 CEL and vault expressions not evaluated inside nested globalArguments fields

Opened by stack72 · 5/15/2026· Shipped 5/19/2026

Description

CEL expressions (${{ data.latest(...) }}) and vault expressions (${{ vault.get(...) }}) are not evaluated when they appear inside nested object fields within globalArguments. They are sent as literal strings to the extension method.

Steps to Reproduce

  1. Create a @swamp/digitalocean/droplet-autoscale model with CEL expressions in nested fields:
globalArguments:
  name: my-pool
  droplet_template:
    ssh_keys:
      - ${{ data.latest("my-key", "state").attributes.fingerprint }}
    user_data: |
      RESERVED_IP="${{ data.latest("my-ip", "state").attributes.ip }}"
      DB_URI="${{ vault.get(my-vault, DB_URI) }}"
  1. Run swamp model evaluate my-pool --json
  2. Observe that the expressions in ssh_keys array and user_data string are NOT resolved — they appear verbatim in the evaluated output.

Expected Behavior

Expressions at any depth within globalArguments should be evaluated. The ssh_keys array should contain the resolved fingerprint string, and the user_data should contain the resolved IP and vault secret.

Actual Behavior

Expressions inside nested objects (arrays, strings within objects) are passed through as literal ${{ ... }} strings. Only top-level globalArguments fields appear to be evaluated.

This forces users to hardcode values (including secrets like database URIs) into model YAML, defeating the purpose of CEL data wiring and vault expressions.

Impact

  • Cannot use data.latest() to wire models together through nested fields
  • Cannot use vault.get() for secrets in nested fields (e.g., cloud-init scripts)
  • Forces hardcoding of infrastructure identifiers and credentials

Environment

  • swamp version: 20260515.175436.0-sha.2f8e98af
  • Extension: @swamp/digitalocean 2026.05.15.1
  • Model type: @swamp/digitalocean/droplet-autoscale
02Bog Flow
OPENTRIAGEDIN PROGRESSSHIPPED+ 1 MOREASSIGNED+ 7 MOREREVIEW+ 3 MOREPR_MERGEDSHIPPED

Shipped

5/19/2026, 9:07:59 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
stack72 assigned stack725/19/2026, 6:37:14 PM

Sign in to post a ripple.