Execute overstate functions
salt.runners.state.
event
(tagmatch='*', count=-1, quiet=False, sock_dir=None, pretty=False)¶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 ; }
count() { printf '%s\n' "$#" ; }
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=$!
(
timeout=$(( 60 * 60 ))
sleep $timeout
kill -s USR2 $$
) &
timeout_pid=$!
# Give the runner a few to connect to the event bus.
printf 'Subscribing to the Salt event bus...\n'
sleep 4
trap '
excode=$?; trap - EXIT;
exec 3>&-
kill '"${timeout_pid}"'
kill '"${events_pid}"'
rm '"${events}"'
exit
echo $excode
' INT TERM EXIT
trap '
printf '\''Timeout reached; exiting.\n'\''
exit 4
' USR2
# 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/*"
# ``read`` will block when no events are going through the bus.
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"][]')
num_minions=$(count $minions)
printf 'Waiting for %s minions.\n' "$num_minions"
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')"
num_minions=$(count $minions)
if [ $((num_minions)) -eq 0 ]; then
printf 'All minions returned.\n'
break
else
printf 'Remaining minions: %s\n' "$num_minions"
fi
else
printf 'Skipping tag: %s\n' "$tag"
continue
fi
done <&3
}
listen "$@"
salt.runners.state.
orchestrate
(mods, saltenv='base', test=None, exclude=None, pillar=None)¶New in version 0.17.0.
Execute a state run from the master, used as a powerful orchestration system.
See also
More Orchestrate documentation
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
salt.runners.state.
orchestrate_high
(data, test=None, queue=False, pillar=None, **kwargs)¶Execute a single state orchestration routine
New in version 2015.5.0.
CLI Example:
salt-run state.orchestrate_high '{
stage_one:
{salt.state: [{tgt: "db*"}, {sls: postgres_setup}]},
stage_two:
{salt.state: [{tgt: "web*"}, {sls: apache_setup}, {
require: [{salt: stage_one}],
}]},
}'
salt.runners.state.
orchestrate_single
(fun, name, test=None, queue=False, pillar=None, **kwargs)¶Execute a single state orchestration routine
New in version 2015.5.0.
CLI Example:
salt-run state.orchestrate_single fun=salt.wheel name=key.list_all
salt.runners.state.
over
(saltenv='base', os_fn=None)¶New in version 0.11.0.
Warning
state.over
is deprecated in favor of state.orchestrate
, and
will be removed in the Salt feature release codenamed Boron.
(Three feature releases after the 2014.7.0 release, which is codenamed
Helium)
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
salt.runners.state.
show_stages
(saltenv='base', os_fn=None)¶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