Execute Automation in Any Language
Break free from DSL hell. Dimensigon orchestrations speak your language: Shell, Python, HTTP/REST, or nested workflows. One engine. Every language.
Real-World Use Case: Multi-Environment Deployment Pipeline
A financial services company needs to deploy applications across dev, staging, and production environments with language-agnostic workflows.
1. Hybrid Shell & Python Workflows
{
"name": "deploy-financial-app",
"steps": [
{
"name": "validate-deployment",
"action_type": "SHELL",
"code": "docker pull myapp:latest && docker inspect myapp:latest | jq '.RepoTags'",
"target": "prod-servers",
"expected_rc": 0,
"id": "1",
"undo": false,
"parent_step_ids": []
},
{
"name": "check-compliance",
"action_type": "SHELL",
"code": "python3.9 - '{{input.binary_path}}' '{{input.expected_hash}}' <<'PY'\nimport hashlib\nimport sys\nwith open(sys.argv[1], 'rb') as binary:\n digest = hashlib.sha256(binary.read()).hexdigest()\nassert digest == sys.argv[2], 'Binary mismatch!'\nprint('Binary verified')\nPY",
"system_kwargs": {
"timeout": 30
},
"expected_rc": 0,
"id": "2",
"undo": false,
"target": "all",
"parent_step_ids": [
"1"
],
"schema": {
"input": {
"binary_path": {
"type": "string",
"pattern": "^/[A-Za-z0-9_./-]+$"
},
"expected_hash": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"binary_path",
"expected_hash"
]
}
},
{
"name": "notify-audit",
"action_type": "REQUEST",
"code": "{\"method\": \"POST\", \"url\": \"https://audit.internal/api/v1/deployments\", \"headers\": {\"Authorization\": \"Bearer {{vault.audit_token}}\"}, \"json\": {\"environment\": \"production\", \"version\": \"{{vault.app_version}}\", \"timestamp\": \"2025-02-20T06:00:00Z\"}}",
"expected_rc": 200,
"id": "3",
"undo": false,
"target": "all",
"parent_step_ids": [
"2"
]
}
]
}
Why This Works
- Step 1 - Native shell for Docker validation with real-time image inspection
- Step 2 - Python via SHELL for cryptographic compliance checking against declared binary_path and expected_hash inputs
- Step 3 - HTTP for external audit logging with Bearer token from vault
Dimensigon 0.3.5 uses SHELL to launch Python; native PYTHON has no execution factory. Provision Python 3.9 on each selected lab node, supply the declared inputs, and review Docker, API and credential dependencies before use. Python here is not sandboxed.
2. Nested Orchestrations for Reusable Workflows
Building Blocks Approach
Define base orchestrations, then compose them into complex workflows without duplication:
health-check.json- Generic health check across any servicedeploy-service.json- Deploy + health check + rollbackfull-pipeline.json- Multi-service orchestration calling the above
Orchestra 10 services with 3 nested calls instead of 100 steps.
[
{
"name": "health-check",
"steps": [
{
"code": "curl -sf {{service_url}}/health",
"action_type": "SHELL",
"expected_rc": 0,
"id": "1",
"undo": false,
"target": "all",
"parent_step_ids": []
}
]
},
{
"name": "deploy-all",
"steps": [
{
"name": "deploy-web",
"action_type": "ORCHESTRATION",
"schema": {
"input": {
"orchestration": {
"type": "string"
},
"hosts": {
"type": [
"string",
"array",
"object"
]
},
"service": {
"type": "string"
}
},
"required": [
"orchestration",
"hosts"
]
},
"code": "{}",
"expected_rc": 0,
"id": "1",
"undo": false,
"target": "all",
"parent_step_ids": []
},
{
"name": "deploy-worker",
"action_type": "ORCHESTRATION",
"schema": {
"input": {
"orchestration": {
"type": "string"
},
"hosts": {
"type": [
"string",
"array",
"object"
]
},
"service": {
"type": "string"
}
},
"required": [
"orchestration",
"hosts"
]
},
"code": "{}",
"expected_rc": 0,
"id": "2",
"undo": false,
"target": "all",
"parent_step_ids": [
"1"
]
}
]
}
]
3. Data Processing with Multiple Languages
{
"name": "etl-pipeline",
"steps": [
{
"name": "extract-data",
"action_type": "SHELL",
"code": "aws s3 sync s3://data-lake /tmp/data --profile prod",
"expected_rc": 0,
"id": "1",
"undo": false,
"target": "all",
"parent_step_ids": []
},
{
"name": "transform",
"action_type": "SHELL",
"code": "python3.9 - <<'PY'\nimport pandas as pd\ndf = pd.read_csv('/tmp/data/raw.csv')\ndf['timestamp'] = pd.to_datetime(df['timestamp'])\ndf.to_parquet('/tmp/data/transformed.parquet')\nPY",
"expected_rc": 0,
"id": "2",
"undo": false,
"target": "all",
"parent_step_ids": [
"1"
]
},
{
"name": "load",
"action_type": "SHELL",
"code": "python3.9 - <<'PY'\nimport requests\nwith open('/tmp/data/transformed.parquet', 'rb') as incoming:\n response = requests.post('https://dw.internal/api/ingest', files={'data': incoming}, timeout=10)\n response.raise_for_status()\nPY",
"expected_rc": 0,
"id": "3",
"undo": false,
"target": "all",
"parent_step_ids": [
"2"
]
}
]
}
ETL at Scale
- Extract - Bash for S3 operations and cloud CLI tools
- Transform - Python for data manipulation with libraries like Pandas, NumPy, Polars
- Load - HTTP to push data to data warehouse APIs
Provision aws, Python 3.9, pandas==1.5.3, pyarrow==20.0.0, numpy==1.24.4 and requests==2.25.1 in the selected nodeβs lab environment. Use a disposable /tmp/data directory and an operator-approved test endpoint; these steps launch Python through SHELL.
Additional Capabilities
π Cross-Language State Sharing
On the same lab node, Shell writes a file and a Python subprocess reads it. Use a per-run directory for concurrent workflows. The final HTTP request uses a separately supplied endpoint and vault.state value; file output does not automatically populate the vault.
{
"steps": [
{
"action_type": "SHELL",
"code": "echo 'processed_count=42' > /tmp/state.txt",
"expected_rc": 0,
"id": "1",
"undo": false,
"target": "all",
"parent_step_ids": []
},
{
"action_type": "SHELL",
"code": "python3.9 - <<'PY'\nstate = open('/tmp/state.txt').read(); print(f'Processed: {state}')\nPY",
"expected_rc": 0,
"id": "2",
"undo": false,
"target": "all",
"parent_step_ids": [
"1"
]
},
{
"action_type": "REQUEST",
"code": "{\"method\": \"GET\", \"url\": \"{{input.endpoint}}\", \"json\": {\"metric\": \"{{vault.state}}\"}}",
"expected_rc": 200,
"schema": {
"input": {
"endpoint": {
"type": "string"
}
},
"required": [
"endpoint"
]
},
"id": "3",
"undo": false,
"target": "all",
"parent_step_ids": [
"2"
]
}
],
"name": "documentation-4-1"
}
β‘ Parallel Language Execution
Run a Shell script and an explicit Python script in parallel on selected lab nodes. Install backup-database.sh and validate-integrity.py on those nodes first; each subprocess uses the nodeβs privileges.
{
"steps": [
{
"action_type": "SHELL",
"target": "nodes-1-5",
"code": "backup-database.sh",
"parent_step_ids": [],
"expected_rc": 0,
"id": "1",
"undo": false
},
{
"action_type": "SHELL",
"target": "nodes-6-10",
"code": "python3.9 validate-integrity.py",
"parent_step_ids": [],
"expected_rc": 0,
"id": "2",
"undo": false
}
],
"name": "documentation-5-1"
}
πͺ Conditional Language Switching
Evaluate a declared usage_percent input in a Python subprocess. The named stdout capture supplies proceed to the next shell step, which runs the operator-provided scale-up-cluster.sh only when the threshold is exceeded.
{
"steps": [
{
"action_type": "SHELL",
"name": "check-quota",
"code": "python3.9 - '{{input.usage_percent}}' <<'PY'\nimport sys\nprint('true' if float(sys.argv[1]) > 80 else 'false')\nPY",
"expected_rc": 0,
"id": "1",
"undo": false,
"target": "all",
"parent_step_ids": [],
"expected_stdout": "^(?P<proceed>true|false)\\n$",
"schema": {
"input": {
"usage_percent": {
"type": "string",
"pattern": "^(100|[0-9]{1,2})(\\.[0-9]+)?$"
}
},
"required": [
"usage_percent"
]
}
},
{
"action_type": "SHELL",
"code": "if [ \"{{input.proceed}}\" = \"true\" ]; then scale-up-cluster.sh; fi",
"schema": {
"input": {
"proceed": {
"type": "string",
"enum": [
"true",
"false"
]
}
},
"required": [
"proceed"
]
},
"expected_rc": 0,
"id": "2",
"undo": false,
"target": "all",
"parent_step_ids": [
"1"
]
}
],
"name": "documentation-6-1"
}
π Multi-Cloud Language Distribution
Route installed cloud CLIs to selected lab nodes and HTTP requests to configured APIs. kubectl is a SHELL command; provision aws and kubectl plus operator-approved test endpoints and identities before using this example.
{
"steps": [
{
"action_type": "SHELL",
"target": "aws-ec2",
"code": "aws elbv2 describe-load-balancers",
"expected_rc": 0,
"id": "1",
"undo": false,
"parent_step_ids": []
},
{
"action_type": "SHELL",
"target": "gcp-k8s",
"code": "kubectl get nodes -o json",
"expected_rc": 0,
"id": "2",
"undo": false,
"parent_step_ids": [
"1"
]
},
{
"action_type": "REQUEST",
"code": "{\"url\": \"https://api.azure.com/subscriptions/...\", \"method\": \"GET\"}",
"expected_rc": 200,
"id": "3",
"undo": false,
"target": "all",
"parent_step_ids": [
"2"
]
}
],
"name": "documentation-7-1"
}
Use the Right Tool
Shell for sysadmin, Python for data, HTTP for APIs. No compromises.
Composable
Build libraries of reusable orchestrations. Compose them at scale.
No Learning Curve
Teams use languages they already know. No DSL to master.
Vault Integration
All languages get secret injection and variable substitution automatically.