123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- # -*- coding: utf-8 -*-
- # pylint: disable=resource-leakage
- # Import Python libs
- from __future__ import absolute_import, print_function
- import subprocess
- import hashlib
- import pprint
- import optparse
- # 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)
|