22.25.1.16. salt.runners.state

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:
  • tagmatch -- the event is written to stdout for each tag that matches this pattern; uses the same matching semantics as Salt's Reactor.
  • count -- this number is decremented for each event that matches the tagmatch parameter; pass -1 to listen forever.
  • quiet -- do not print to stdout; just block
  • sock_dir -- path to the Salt master's event socket file.
  • pretty -- Output the JSON all on a single line if False (useful for shell tools); pretty-print the JSON output if True.

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 "$@"
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.

CLI Examples:

salt-run state.orchestrate webserver
salt-run state.orchestrate webserver saltenv=dev test=True

Changed in version 2014.1.1.

Changed in version 2014.7.0.

salt.runners.state.over(saltenv='base', os_fn=None)

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
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

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.

Previous topic

22.25.1.15. salt.runners.search

Next topic

22.25.1.17. salt.runners.survey

SaltStack News

Upcoming SaltStack events, webinars and local meet ups and user groups.