mirror of
https://github.com/saltstack/salt.git
synced 2025-04-16 17:50:20 +00:00
77 lines
1.8 KiB
Python
77 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
# pylint: disable=resource-leakage
|
|
|
|
# Import Python libs
|
|
from __future__ import absolute_import, print_function
|
|
|
|
import hashlib
|
|
import optparse
|
|
import pprint
|
|
import subprocess
|
|
|
|
# Import Salt libs
|
|
import salt.utils.color
|
|
import salt.utils.files
|
|
import salt.utils.yaml
|
|
|
|
# Import 3rd-party libs
|
|
from salt.ext import six
|
|
|
|
colors = salt.utils.color.get_colors()
|
|
|
|
|
|
def parse():
|
|
"""
|
|
Parse command line options
|
|
"""
|
|
parser = optparse.OptionParser()
|
|
parser.add_option(
|
|
"-r",
|
|
"--runs",
|
|
dest="runs",
|
|
default=10,
|
|
type=int,
|
|
help="Specify the number of times to run the consistency check",
|
|
)
|
|
parser.add_option(
|
|
"-c",
|
|
"--command",
|
|
dest="command",
|
|
default="state.show_highstate",
|
|
help="The command to execute",
|
|
)
|
|
|
|
options, args = parser.parse_args()
|
|
return options.__dict__
|
|
|
|
|
|
def run(command):
|
|
"""
|
|
Execute a single command and check the returns
|
|
"""
|
|
cmd = r"salt \* {0} --yaml-out -t 500 > high".format(command)
|
|
subprocess.call(cmd, shell=True)
|
|
with salt.utils.files.fopen("high") as fp_:
|
|
data = salt.utils.yaml.safe_load(fp_)
|
|
hashes = set()
|
|
for key, val in six.iteritems(data):
|
|
has = hashlib.md5(str(val)).hexdigest()
|
|
if has not in hashes:
|
|
print("{0}:".format(has))
|
|
pprint.pprint(val)
|
|
hashes.add(has)
|
|
if len(hashes) > 1:
|
|
print(
|
|
"{0}Command: {1} gave inconsistent returns{2}".format(
|
|
colors["LIGHT_RED"], command, colors["ENDC"]
|
|
)
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
opts = parse()
|
|
for _ in opts["runs"]:
|
|
for command in opts["command"].split(","):
|
|
print("-" * 30)
|
|
print("Running command {0}".format(command))
|
|
run(command)
|