fedora-ansible/scripts/selinux-info

85 lines
1.9 KiB
Python
Executable File

#!/usr/bin/python -tt
__doc__ = doc = """
print out the selinux status of hosts
by ralph
gplv2+
derived from vhost-info by skvidal
""".strip()
import pprint
import sys
import ansible.runner
import os
from argparse import ArgumentParser
def parse_args(args):
parser = ArgumentParser(doc)
parser.add_argument('--host', default=[], action='append',
help="hosts to act on, defaults to ALL")
parser.add_argument('--timeout', default=30, type=int,
help='set the wait timeout for func commands')
parser.add_argument('--hosts-from-file', default=None, dest="hostfile",
help="read list of hosts from this file, if '-' read from stdin")
args = parser.parse_args(args)
if args.hostfile:
hosts = []
if args.hostfile == '-':
hosts = sys.stdin.readlines()
else:
hosts = open(args.hostfile, 'r').readlines()
for hn in hosts:
hn = hn.strip()
if hn.startswith('#'):
continue
hn = hn.replace('\n', '')
args.host.append(hn)
if not args.host:
args.host = ["all"]
return args, parser
args, parser = parse_args(sys.argv[1:])
hosts ='*'
if args.host:
hosts = ';'.join(args.host)
if os.geteuid() == 0:
login = 'root'
else:
login = os.getlogin()
results, errors = {}, []
ansible_args = dict(
pattern=hosts,
module_name='command',
module_args='getenforce',
forks=25,
transport='paramiko',
timeout=10,
remote_user=login,
)
ans = ansible.runner.Runner(**ansible_args)
res = ans.run()
for hn in sorted(res['contacted']):
if 'failed' in res['contacted'][hn] and res['contacted'][hn]['failed']:
errors.append(hn)
continue
status = res['contacted'][hn]['stdout']
results[status] = results.get(status, []) + [hn]
pprint.pprint(results)
if errors:
print "ERRORED:", pprint.pformat(errors)