Sometimes you only want to see what has changed, and that is OK.
Create a file like this:
filter.py
#!/usr/bin/python
from json import loads
from json import dumps
import fileinput
stdin_lines = [line for line in fileinput.input()]
ret = loads(''.join(stdin_lines))
for minion_id, data in ret.items():
print(minion_id)
print('='*len(minion_id))
for key, value in ret[minion_id].items():
if value['changes'] or value['result'] == False:
print('')
print(dumps(value, indent=4))
print('')
Make the file executable:
chmod 755 filter.py
Execute your remote execution like this:
sudo salt-call --out=json state.highstate | ./filter.pysudo salt '*' --out=json --timeout=60 --static state.highstate | ./filter.pyThe flags --timeout=60 and --static will cause the Salt command to block until the specified seconds for each minion to return results. We then pipe the returned JSON into our filter.py script to filter out only the changes and failures!
Profit!
Change the conditional depending on what you want. For example, for just failures do this:
if value['result'] == False:
Example output:
# sudo salt 'graphite.foxhop.net' --out=json --static --timeout=60 state.highstate | ./filter.py
graphite.foxhop.net
===================
{
"comment": "File /tmp/taco updated",
"__run_num__": 15,
"changes": {
"diff": "New file",
"mode": "0640"
},
"name": "/tmp/taco",
"result": true
}