Overview
Action nodes are the workhorses of your workflows. They execute tasks on target systems via agents and connections — from SSH commands and Kubernetes operations to Slack messages and Jira tickets.SSH
Remote commands and scripts
Kubernetes
Deployments, pods, and logs
HTTP
API requests to any endpoint
Slack
Messages and reactions
Jira
Issues, comments, transitions
Script
Bash, PowerShell, Python
OS Service
Start, stop, restart services
SMTP email notifications
Every action node has two output handles: Success (bottom-left) and Error (bottom-right). Connect an Error Handler to the error output for automated failure handling.
SSH
Remote command execution and script deployment on Linux/Unix servers via SSH.ssh.executeCommand
ssh.executeCommand
Execute a single command on the remote server.
Output variables:
Example: Restart a service after an incident
| Parameter | Description | Example |
|---|---|---|
| Command | Shell command to execute | sudo systemctl restart nginx |
| Timeout | Max execution time (seconds) | 60 |
| Variable | Description |
|---|---|
{{nodes.<id>.output.stdout}} | Standard output |
{{nodes.<id>.output.stderr}} | Standard error |
{{nodes.<id>.exitCode}} | Exit code (0 = success) |
ssh.executeScript
ssh.executeScript
Upload and execute a multi-line script on the remote server.
Example: Collect diagnostic info
| Parameter | Description | Example |
|---|---|---|
| Script | Multi-line script content | (see example) |
| Interpreter | Script interpreter | /bin/bash |
| Timeout | Max execution time (seconds) | 120 |
Script
Execute scripts locally on the agent machine. No remote connection needed.- Bash
- PowerShell
- Python
Action type:
script.bash| Parameter | Description |
|---|---|
| Script | Bash script content |
| Timeout | Max execution time (seconds) |
stdout, stderr, exitCode (same as SSH)
HTTP
Make HTTP/HTTPS requests to any API endpoint. Useful for interacting with REST APIs, triggering webhooks, and checking service health. Action type:http.request
| Parameter | Description | Example |
|---|---|---|
| Method | HTTP method | GET, POST, PUT, DELETE, PATCH |
| URL | Full URL (supports template variables) | https://api.example.com/deploy |
| Headers | Key-value pairs | Content-Type: application/json |
| Body | Request body (for POST/PUT/PATCH) | {"version": "{{webhook.version}}"} |
| Auth Type | Authentication method | none, basic, bearer, apiKey |
| Timeout | Request timeout in seconds | 30 |
| Variable | Description |
|---|---|
{{nodes.<id>.output.statusCode}} | HTTP status code |
{{nodes.<id>.output.body}} | Response body (raw string) |
{{nodes.<id>.output.bodyParsed}} | Response body (parsed JSON, if applicable) |
{{nodes.<id>.output.headers}} | Response headers |
By default, the HTTP executor blocks requests to private IP ranges (127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) to prevent SSRF attacks. To allow private network access, set
ALLOW_PRIVATE_NETWORK=true on the agent.Kubernetes
Manage Kubernetes deployments, pods, and logs directly from your workflow.kubernetes.restartDeployment
kubernetes.restartDeployment
Restart a deployment by performing a rolling restart.
Output:
| Parameter | Description | Example |
|---|---|---|
| Deployment | Deployment name | payment-api |
| Namespace | Kubernetes namespace (overrides connection default) | production |
stdout with rollout statuskubernetes.scaleDeployment
kubernetes.scaleDeployment
Scale a deployment to a specific replica count.
Output:
| Parameter | Description | Example |
|---|---|---|
| Deployment | Deployment name | web-frontend |
| Replicas | Target replica count (0–10,000) | 5 |
| Namespace | Kubernetes namespace | production |
stdout with scale confirmationkubernetes.deletePod
kubernetes.deletePod
Delete one or more pods (useful for forcing recreation).
Output:
| Parameter | Description | Example |
|---|---|---|
| Pod Selector | Pod name or label selector | app=payment-api |
| Namespace | Kubernetes namespace | production |
stdout, pods (list of deleted pod names)kubernetes.rollbackDeployment
kubernetes.rollbackDeployment
Roll back a deployment to the previous revision.
Output:
| Parameter | Description | Example |
|---|---|---|
| Deployment | Deployment name | payment-api |
| Namespace | Kubernetes namespace | production |
stdout with rollback statuskubernetes.getLogs
kubernetes.getLogs
Retrieve logs from one or more pods.
Output:
| Parameter | Description | Example |
|---|---|---|
| Pod Selector | Pod name or label selector | app=payment-api |
| Namespace | Kubernetes namespace | production |
| Lines | Number of log lines to retrieve | 100 |
| Since | Duration to look back | 5m |
stdout (logs), pods (pod list), matchedCount (pods matched)OS Service
Manage operating system services on the agent host usingsystemctl (Linux) or sc.exe (Windows).
| Action Type | Description | Platform |
|---|---|---|
os.restartService | Restart a system service | Linux / Windows |
os.stopService | Stop a system service | Linux / Windows |
os.startService | Start a system service | Linux / Windows |
os.restartOS | Restart the operating system | Linux / Windows |
| Parameter | Description | Example |
|---|---|---|
| Service Name | Name of the system service | nginx, postgresql |
Slack
Send messages and reactions to Slack channels via the Slack Bot API.- Send Message
- Update Message
- Add Reaction
Action type:
Output:
slack.sendMessage| Parameter | Description | Example |
|---|---|---|
| Channel | Channel ID (starts with C) | C01234ABCDE |
| Message | Message text (supports template variables and Slack mrkdwn) | See example below |
channel, ts (message timestamp), messagexoxb-..., default channel)
Jira
Create and manage Jira issues directly from your workflows.jira.createIssue
jira.createIssue
Create a new Jira issue.
Output:
| Parameter | Description | Example |
|---|---|---|
| Project Key | Jira project key | OPS |
| Issue Type | Issue type name | Bug, Task, Story |
| Summary | Issue title | Post-incident: {{incident.title}} |
| Description | Issue description | Incident details with template variables |
| Priority | Priority name | High, Medium, Low |
issueId, issueKey (e.g., OPS-123), urljira.updateIssue
jira.updateIssue
Update fields on an existing issue.
| Parameter | Description | Example |
|---|---|---|
| Issue Key | Issue to update | OPS-123 or {{nodes.createJira.output.issueKey}} |
| Fields | Fields to update (JSON) | {"summary": "Updated title"} |
jira.addComment
jira.addComment
Add a comment to an existing issue.
| Parameter | Description | Example |
|---|---|---|
| Issue Key | Issue to comment on | OPS-123 |
| Body | Comment text | Incident resolved. Root cause: {{incident.description}} |
jira.transitionIssue
jira.transitionIssue
Transition an issue to a different status (e.g., Open → In Progress → Done).
| Parameter | Description | Example |
|---|---|---|
| Issue Key | Issue to transition | OPS-123 |
| Transition ID | Target transition ID | 31 (Done) |
email.sendEmail
| Parameter | Description | Example |
|---|---|---|
| To | Recipient email addresses (comma-separated) | team@company.com |
| Subject | Email subject | Incident {{incident.id}}: {{incident.title}} |
| Body | Email body (HTML or plain text) | Incident details |
Teams
Send messages to Microsoft Teams channels.| Action Type | Description |
|---|---|
teams.sendMessage | Send a plain text message to a channel |
teams.sendAdaptiveCard | Send a structured Adaptive Card with rich formatting |
| Parameter | Description | Example |
|---|---|---|
| Message | Message text or Adaptive Card JSON | Incident notification text |
Database
Execute SQL queries against connected databases. Action type:database.executeQuery
| Parameter | Description | Example |
|---|---|---|
| Query | SQL query to execute | SELECT count(*) FROM orders WHERE status = 'failed' |
| Timeout | Query timeout in seconds | 30 |
| Variable | Description |
|---|---|
{{nodes.<id>.output.columns}} | Column names |
{{nodes.<id>.output.rows}} | Result rows |
{{nodes.<id>.output.rowCount}} | Number of rows returned |
{{nodes.<id>.output.rowsAffected}} | Rows affected (for INSERT/UPDATE/DELETE) |
WinRM
Execute commands and scripts on Windows servers via WinRM (Windows Remote Management).| Action Type | Description |
|---|---|
winrm.executeCommand | Execute a PowerShell command remotely |
winrm.executeScript | Upload and execute a PowerShell script remotely |
| Parameter | Description | Example |
|---|---|---|
| Command / Script | PowerShell command or script content | Restart-Service -Name "IIS" |
| Timeout | Max execution time (seconds) | 60 |
stdout, stderr, exitCode (same as SSH)
Connection required: WinRM (host, port, SSL, auth method, credentials)
Notification
Send notifications through EasyAlert’s built-in notification channels without requiring an agent connection. Action type:notification.sendNotification
| Parameter | Description | Example |
|---|---|---|
| Channel | Notification channel type | email, sms, webhook |
| Recipient | Target recipient | Email address, phone number, or webhook URL |
| Message | Notification content | {{incident.title}} has been auto-remediated |
Notification actions are routed through the SaaS notification service, not through the agent. This means they work even if all agents are offline.
Using Variables in Actions
Template variables ({{variable.path}}) can be used in any action parameter — commands, URLs, message bodies, query strings, and more.
Shell Escaping
When template variables are used in SSH commands or scripts, EasyAlert automatically appliesshlex.quote() escaping to prevent command injection. For example:
Chaining Node Outputs
Reference outputs from previous nodes to build data pipelines:Quick Reference
| Action Type | Category | Connection | Key Parameters |
|---|---|---|---|
ssh.executeCommand | SSH | Yes | command |
ssh.executeScript | SSH | Yes | script, interpreter |
script.bash | Script | No | script |
script.powershell | Script | No | script |
script.python | Script | No | script |
http.request | HTTP | Yes | method, url, headers, body |
kubernetes.restartDeployment | Kubernetes | Yes | deployment, namespace |
kubernetes.scaleDeployment | Kubernetes | Yes | deployment, replicas, namespace |
kubernetes.deletePod | Kubernetes | Yes | podSelector, namespace |
kubernetes.rollbackDeployment | Kubernetes | Yes | deployment, namespace |
kubernetes.getLogs | Kubernetes | Yes | podSelector, namespace, lines |
os.restartService | OS | No | serviceName |
os.stopService | OS | No | serviceName |
os.startService | OS | No | serviceName |
os.restartOS | OS | No | (requires ALLOW_OS_RESTART) |
slack.sendMessage | Slack | Yes | channel, message |
slack.updateMessage | Slack | Yes | channel, timestamp, message |
slack.addReaction | Slack | Yes | channel, timestamp, emoji |
jira.createIssue | Jira | Yes | projectKey, issueType, summary |
jira.updateIssue | Jira | Yes | issueKey, fields |
jira.addComment | Jira | Yes | issueKey, body |
jira.transitionIssue | Jira | Yes | issueKey, transitionId |
email.sendEmail | Yes | to, subject, body | |
teams.sendMessage | Teams | Yes | message |
teams.sendAdaptiveCard | Teams | Yes | card (JSON) |
database.executeQuery | Database | Yes | query |
winrm.executeCommand | WinRM | Yes | command |
winrm.executeScript | WinRM | Yes | script |
notification.sendNotification | Notification | No | channel, recipient, message |

