Execute overstate functions
Watch Salt's event bus and block until the given tag is matched
New in version 2014.7.0.
This is useful for utilizing Salt's event bus from shell scripts or for taking simple actions directly from the CLI.
Enable debug logging to see ignored events.
Parameters: |
|
---|
CLI Examples:
# Reboot a minion and run highstate when it comes back online
salt 'jerry' system.reboot && \\
salt-run state.event 'salt/minion/jerry/start' count=1 quiet=True && \\
salt 'jerry' state.highstate
# Reboot multiple minions and run highstate when all are back online
salt -L 'kevin,stewart,dave' system.reboot && \\
salt-run state.event 'salt/minion/*/start' count=3 quiet=True && \\
salt -L 'kevin,stewart,dave' state.highstate
# Watch the event bus forever in a shell while-loop.
salt-run state.event | while read -r tag data; do
echo $tag
echo $data | jq -colour-output .
done
The following example monitors Salt's event bus in a background process watching for returns for a given job. Requires a POSIX environment and jq <http://stedolan.github.io/jq/>.
#!/bin/sh
# Usage: ./eventlisten.sh '*' test.sleep 10
# Mimic fnmatch from the Python stdlib.
fnmatch () { case "$2" in $1) return 0 ;; *) return 1 ;; esac ; }
listen() {
events='events'
mkfifo $events
exec 3<>$events # Hold the fd open.
# Start listening to events before starting the command to avoid race
# conditions.
salt-run state.event count=-1 >&3 &
events_pid=$!
trap '
excode=$?; trap - EXIT;
exec 3>&-
kill '"${events_pid}"'
rm '"${events}"'
exit
echo $excode
' INT TERM EXIT
# Run the command and get the JID.
jid=$(salt --async "$@")
jid="${jid#*: }" # Remove leading text up to the colon.
# Create the event tags to listen for.
start_tag="salt/job/${jid}/new"
ret_tag="salt/job/${jid}/ret/*"
printf 'Waiting for tag %s\n' "$ret_tag"
while read -r tag data; do
if fnmatch "$start_tag" "$tag"; then
minions=$(printf '%s\n' "${data}" | jq -r '.["minions"][]')
printf 'Waiting for minions: %s\n' "${minions}" | xargs
continue
fi
if fnmatch "$ret_tag" "$tag"; then
mid="${tag##*/}"
printf 'Got return for %s.\n' "$mid"
printf 'Pretty-printing event: %s\n' "$tag"
printf '%s\n' "$data" | jq .
minions="$(printf '%s\n' "$minions" | sed -e '/'"$mid"'/d')"
if (( ${#minions} )); then
printf 'Remaining minions: %s\n' "$minions" | xargs
else
break
fi
else
printf 'Skipping tag: %s\n' "$tag"
continue
fi
done <&3
}
listen "$@"
New in version 0.17.0.
Execute a state run from the master, used as a powerful orchestration system.
CLI Examples:
salt-run state.orchestrate webserver
salt-run state.orchestrate webserver saltenv=dev test=True
Changed in version 2014.1.1: Runner renamed from state.sls to state.orchestrate
Changed in version 2014.7.0: Runner uses the pillar variable
New in version 0.11.0.
Execute an overstate sequence to orchestrate the executing of states over a group of systems
CLI Examples:
salt-run state.over base /path/to/myoverstate.sls
New in version 0.11.0.
Display the OverState's stage data
CLI Examples:
salt-run state.show_stages
salt-run state.show_stages saltenv=dev /root/overstate.sls
Docs for previous releases are available on salt.rtfd.org.
Latest Salt release: 2014.1.13
Try the shiny new release candidate of Salt, v2014.7.0rc6! More info here.
22.25.1.15. salt.runners.search
22.25.1.17. salt.runners.survey
Upcoming SaltStack events, webinars and local meet ups and user groups.