Skip to main content

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

Email

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.
Execute a single command on the remote server.
ParameterDescriptionExample
CommandShell command to executesudo systemctl restart nginx
TimeoutMax execution time (seconds)60
Output variables:
VariableDescription
{{nodes.<id>.output.stdout}}Standard output
{{nodes.<id>.output.stderr}}Standard error
{{nodes.<id>.exitCode}}Exit code (0 = success)
Example: Restart a service after an incident
sudo systemctl restart {{incident.service}}
Upload and execute a multi-line script on the remote server.
ParameterDescriptionExample
ScriptMulti-line script content(see example)
InterpreterScript interpreter/bin/bash
TimeoutMax execution time (seconds)120
Example: Collect diagnostic info
#!/bin/bash
echo "=== Service Status ==="
systemctl status {{incident.service}}
echo "=== Recent Logs ==="
journalctl -u {{incident.service}} --since "5 minutes ago" --no-pager
echo "=== Disk Usage ==="
df -h
Connection required: SSH (host, port, username, key/password)

Script

Execute scripts locally on the agent machine. No remote connection needed.
Action type: script.bash
ParameterDescription
ScriptBash script content
TimeoutMax execution time (seconds)
#!/bin/bash
# Check disk space and alert if over 90%
usage=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$usage" -gt 90 ]; then
  echo "CRITICAL: Disk usage at ${usage}%"
  exit 1
fi
echo "OK: Disk usage at ${usage}%"
Output: 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
ParameterDescriptionExample
MethodHTTP methodGET, POST, PUT, DELETE, PATCH
URLFull URL (supports template variables)https://api.example.com/deploy
HeadersKey-value pairsContent-Type: application/json
BodyRequest body (for POST/PUT/PATCH){"version": "{{webhook.version}}"}
Auth TypeAuthentication methodnone, basic, bearer, apiKey
TimeoutRequest timeout in seconds30
Output variables:
VariableDescription
{{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.
Restart a deployment by performing a rolling restart.
ParameterDescriptionExample
DeploymentDeployment namepayment-api
NamespaceKubernetes namespace (overrides connection default)production
Output: stdout with rollout status
Scale a deployment to a specific replica count.
ParameterDescriptionExample
DeploymentDeployment nameweb-frontend
ReplicasTarget replica count (0–10,000)5
NamespaceKubernetes namespaceproduction
Output: stdout with scale confirmation
Delete one or more pods (useful for forcing recreation).
ParameterDescriptionExample
Pod SelectorPod name or label selectorapp=payment-api
NamespaceKubernetes namespaceproduction
Output: stdout, pods (list of deleted pod names)
Roll back a deployment to the previous revision.
ParameterDescriptionExample
DeploymentDeployment namepayment-api
NamespaceKubernetes namespaceproduction
Output: stdout with rollback status
Retrieve logs from one or more pods.
ParameterDescriptionExample
Pod SelectorPod name or label selectorapp=payment-api
NamespaceKubernetes namespaceproduction
LinesNumber of log lines to retrieve100
SinceDuration to look back5m
Output: stdout (logs), pods (pod list), matchedCount (pods matched)
Connection required: Kubernetes (context, namespace, kubeconfig path)

OS Service

Manage operating system services on the agent host using systemctl (Linux) or sc.exe (Windows).
Action TypeDescriptionPlatform
os.restartServiceRestart a system serviceLinux / Windows
os.stopServiceStop a system serviceLinux / Windows
os.startServiceStart a system serviceLinux / Windows
os.restartOSRestart the operating systemLinux / Windows
Parameters:
ParameterDescriptionExample
Service NameName of the system servicenginx, postgresql
os.restartOS requires ALLOW_OS_RESTART=true in the agent configuration. This is disabled by default to prevent accidental system reboots.

Slack

Send messages and reactions to Slack channels via the Slack Bot API.
Action type: slack.sendMessage
ParameterDescriptionExample
ChannelChannel ID (starts with C)C01234ABCDE
MessageMessage text (supports template variables and Slack mrkdwn)See example below
:rotating_light: *Incident Auto-Remediated*

*Title:* {{incident.title}}
*Severity:* {{incident.severity}}
*Service:* {{incident.service}}
*Action Taken:* Service restarted on {{incident.host}}
Output: channel, ts (message timestamp), message
Connection required: Slack (bot token xoxb-..., default channel)
Use the channel ID (starts with C), not the channel name. Find it in Slack by right-clicking a channel and selecting “View channel details” — the ID is at the bottom.

Jira

Create and manage Jira issues directly from your workflows.
Create a new Jira issue.
ParameterDescriptionExample
Project KeyJira project keyOPS
Issue TypeIssue type nameBug, Task, Story
SummaryIssue titlePost-incident: {{incident.title}}
DescriptionIssue descriptionIncident details with template variables
PriorityPriority nameHigh, Medium, Low
Output: issueId, issueKey (e.g., OPS-123), url
Update fields on an existing issue.
ParameterDescriptionExample
Issue KeyIssue to updateOPS-123 or {{nodes.createJira.output.issueKey}}
FieldsFields to update (JSON){"summary": "Updated title"}
Add a comment to an existing issue.
ParameterDescriptionExample
Issue KeyIssue to comment onOPS-123
BodyComment textIncident resolved. Root cause: {{incident.description}}
Transition an issue to a different status (e.g., Open → In Progress → Done).
ParameterDescriptionExample
Issue KeyIssue to transitionOPS-123
Transition IDTarget transition ID31 (Done)
Connection required: Jira (server URL, email, API token)

Email

Send emails via SMTP. Action type: email.sendEmail
ParameterDescriptionExample
ToRecipient email addresses (comma-separated)team@company.com
SubjectEmail subjectIncident {{incident.id}}: {{incident.title}}
BodyEmail body (HTML or plain text)Incident details
Connection required: Email (SMTP host, port, TLS, from address, credentials)

Teams

Send messages to Microsoft Teams channels.
Action TypeDescription
teams.sendMessageSend a plain text message to a channel
teams.sendAdaptiveCardSend a structured Adaptive Card with rich formatting
Parameters:
ParameterDescriptionExample
MessageMessage text or Adaptive Card JSONIncident notification text
Connection required: Teams (incoming webhook URL)

Database

Execute SQL queries against connected databases. Action type: database.executeQuery
ParameterDescriptionExample
QuerySQL query to executeSELECT count(*) FROM orders WHERE status = 'failed'
TimeoutQuery timeout in seconds30
Output variables:
VariableDescription
{{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)
Connection required: Database (host, port, database, driver, credentials)
Be careful with template variables in SQL queries. While EasyAlert escapes shell commands, SQL queries should use parameterized queries when possible to prevent SQL injection.

WinRM

Execute commands and scripts on Windows servers via WinRM (Windows Remote Management).
Action TypeDescription
winrm.executeCommandExecute a PowerShell command remotely
winrm.executeScriptUpload and execute a PowerShell script remotely
Parameters:
ParameterDescriptionExample
Command / ScriptPowerShell command or script contentRestart-Service -Name "IIS"
TimeoutMax execution time (seconds)60
Output: 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
ParameterDescriptionExample
ChannelNotification channel typeemail, sms, webhook
RecipientTarget recipientEmail address, phone number, or webhook URL
MessageNotification 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 applies shlex.quote() escaping to prevent command injection. For example:
# Template:
echo "Incident: {{incident.title}}"

# If incident.title = "Server Down; rm -rf /"
# Rendered (with escaping):
echo "Incident: 'Server Down; rm -rf /'"
The semicolon and subsequent command are safely quoted as a literal string.

Chaining Node Outputs

Reference outputs from previous nodes to build data pipelines:
# Step 1: HTTP action gets deploy info
GET https://api.example.com/deploys/latest

# Step 2: Slack message uses the response
Latest deploy: {{nodes.getDeployInfo.output.bodyParsed.version}}
Deployed by: {{nodes.getDeployInfo.output.bodyParsed.author}}
Template variables resolve at execution time. If the referenced node hasn’t executed yet (e.g., it’s in a different branch), the variable resolves to an empty string. Always ensure the data source node is upstream in the execution path.

Quick Reference

Action TypeCategoryConnectionKey Parameters
ssh.executeCommandSSHYescommand
ssh.executeScriptSSHYesscript, interpreter
script.bashScriptNoscript
script.powershellScriptNoscript
script.pythonScriptNoscript
http.requestHTTPYesmethod, url, headers, body
kubernetes.restartDeploymentKubernetesYesdeployment, namespace
kubernetes.scaleDeploymentKubernetesYesdeployment, replicas, namespace
kubernetes.deletePodKubernetesYespodSelector, namespace
kubernetes.rollbackDeploymentKubernetesYesdeployment, namespace
kubernetes.getLogsKubernetesYespodSelector, namespace, lines
os.restartServiceOSNoserviceName
os.stopServiceOSNoserviceName
os.startServiceOSNoserviceName
os.restartOSOSNo(requires ALLOW_OS_RESTART)
slack.sendMessageSlackYeschannel, message
slack.updateMessageSlackYeschannel, timestamp, message
slack.addReactionSlackYeschannel, timestamp, emoji
jira.createIssueJiraYesprojectKey, issueType, summary
jira.updateIssueJiraYesissueKey, fields
jira.addCommentJiraYesissueKey, body
jira.transitionIssueJiraYesissueKey, transitionId
email.sendEmailEmailYesto, subject, body
teams.sendMessageTeamsYesmessage
teams.sendAdaptiveCardTeamsYescard (JSON)
database.executeQueryDatabaseYesquery
winrm.executeCommandWinRMYescommand
winrm.executeScriptWinRMYesscript
notification.sendNotificationNotificationNochannel, recipient, message