Workflows

Dynatrace Automation workflows let you orchestrate multi-step processes — from scheduled health checks to incident remediation. dtctl gives you full lifecycle management: list, inspect, create, execute, and monitor workflows from your terminal.

Listing and Viewing Workflows

# List all workflows (compact table)
dtctl get workflows

# Wide output with additional columns (owner, trigger type, last run)
dtctl get workflows -o wide

# Output as JSON or YAML for scripting
dtctl get workflows -o json
dtctl get workflows -o yaml

To inspect a single workflow in detail:

# By name (interactive disambiguation if multiple match)
dtctl describe workflow "My Workflow"

# By ID (exact match)
dtctl describe workflow workflow-123

Editing a Workflow

Open a workflow in your $EDITOR, make changes, and save to update it in place:

dtctl edit workflow workflow-123

dtctl downloads the current definition, opens it in your editor, and applies the diff on save — similar to kubectl edit.

Creating and Applying Workflows

Create a workflow from a YAML file:

# Create (fails if the workflow already exists)
dtctl create workflow -f my-workflow.yaml

# Apply (creates if new, updates if existing — idempotent)
dtctl apply -f my-workflow.yaml

Example Workflow YAML

title: Daily Health Check
description: Runs a health check every morning and posts results to Slack
owner: Operations
trigger:
  schedule:
    rule: "0 8 * * *"   # Every day at 08:00 UTC
    timezone: UTC
    isActive: true
tasks:
  check_health:
    name: check_health
    action: dynatrace.automations:run-javascript
    description: Run health check script
    input:
      script: |
        import { execution } from '@dynatrace-sdk/automation-utils';
        export default async function ({ executionId }) {
          const exe = await execution(executionId);
          const params = exe.params;
          console.log(`Running health check for env: ${params.env || 'default'}`);
          return { status: 'healthy', checkedAt: new Date().toISOString() };
        }
    position:
      x: 0
      y: 1
  notify_slack:
    name: notify_slack
    action: dynatrace.slack:slack-send-message
    description: Post results to Slack
    input:
      channel: "#ops-alerts"
      message: "Health check completed: "
    conditions:
      states:
        check_health: OK
    position:
      x: 0
      y: 2

Executing Workflows

Trigger a workflow execution on demand:

# Fire and forget
dtctl exec workflow workflow-123

# Pass parameters and wait for completion
dtctl exec workflow workflow-123 --params env=prod --wait

# Wait and display task results when finished
dtctl exec workflow workflow-123 --wait --show-results

The --wait flag polls the execution until it reaches a terminal state (success, error, or cancelled). --show-results prints the output of each task.

Viewing Executions

# List recent workflow executions
dtctl get workflow-executions

# Short alias
dtctl get wfe

# Describe a specific execution (status, timing, task breakdown)
dtctl describe wfe exec-456

# Stream execution logs in real time
dtctl logs wfe exec-456 --follow

Task Results

Retrieve the output of a specific task within an execution:

dtctl get wfe-task-result exec-456 --task my_task

# JSON output for programmatic consumption
dtctl get wfe-task-result exec-456 --task my_task -o json

Watch Mode

Monitor workflows in real time. dtctl highlights additions, modifications, and deletions as they happen:

dtctl get workflows --watch

Press Ctrl+C to stop watching.

Version History

View and restore previous versions of a workflow:

# List version history
dtctl history workflow workflow-123

# Restore version 5
dtctl restore workflow workflow-123 5

Deleting Workflows

# Delete by ID
dtctl delete workflow workflow-123

# Delete by name
dtctl delete workflow "Daily Health Check"

Deletion is permanent. dtctl prompts for confirmation in interactive mode; use --plain to skip the prompt (e.g., in CI pipelines).