override with v2 version

This commit is contained in:
doteast 2016-02-25 22:12:15 +00:00
parent b904e77026
commit 2ed3b026b9
2 changed files with 83 additions and 99 deletions

View file

@ -1,92 +1,48 @@
#!/usr/bin/env python
# (c) 2012, Red Hat, Inc
# Seth Vidal <skvidal at fedoraproject.org>
#
#
########################################################
#list to stdout vms on each virthost/libvirt-running box
#list to stderr hosts you could not contact
####
#!/usr/bin/python -tt
# Author: Toshio Kuratomi <toshio@fedoraproject.org>
# Copyright: December, 2015
# License: LGPLv3+
import sys
import copy
import itertools
import ansible.runner
import ansible.constants as C
from ansible import utils
from ansible import callbacks
import logging
logging.basicConfig()
from ansible import plugins
from ansible.errors import AnsibleOptionsError
from ansible.plugins.callback import CallbackBase
from ansible.plugins.callback import default
from ansible.cli.adhoc import AdHocCLI
########################################################
class ResultAccumulator(CallbackBase):
def __init__(self, *args, **kwargs):
super(ResultAccumulator, self).__init__(*args, **kwargs)
self.unreachable = set()
self.host_status = {}
def main(args):
def v2_runner_on_unreachable(self, result):
self.unreachable.add(result._host.get_name())
# simple parser
parser = utils.base_parser(constants=C, runas_opts=True, async_opts=False,
output_opts=True, connect_opts=True, usage='list-vms-per-host [options]')
parser.add_option('--host', dest='hostlist', action='append',
help="hosts to contact, defaults to all in your inventory", default=[])
options, args = parser.parse_args(args)
options.module_name = 'virt'
options.module_args = 'command=info'
# no hosts specified? Run against all of them
if not options.hostlist:
options.pattern = 'all'
else:
options.pattern = ';'.join(options.hostlist)
# setup the cli call back so we can use the simple output handling
# our callbacks for easy terminal formatting
mycallback = callbacks.DefaultRunnerCallbacks()
mycallback.options = options
# if options.connection == 'paramiko':
# logging.basicConfig()
runner = ansible.runner.Runner(
module_name=options.module_name, module_path=options.module_path,
module_args=options.module_args,
remote_user=options.remote_user,
host_list=options.inventory, timeout=options.timeout,
forks=options.forks,
pattern=options.pattern,
callbacks=mycallback,
transport=options.connection
)
res = runner.run()
for hn in sorted(res['contacted']):
if 'failed' in res['contacted'][hn] and res['contacted'][hn]['failed']:
continue
for vm in sorted(res['contacted'][hn]):
info = res['contacted'][hn][vm]
if vm == 'Domain-0':
continue
elif type(info) != dict:
continue
elif 'maxMem' not in info:
continue
autostart = '?'
if 'autostart' in info:
autostart = info['autostart']
print '%s:%s:%s:%s' % (hn, vm, info['state'], autostart)
for hn in sorted(res['dark']):
print >> sys.stderr, hn
def v2_runner_on_ok(self, result, *args, **kwargs):
for vm in (vm for vm in result._result.keys() if vm not in ('invocation', 'changed', '_ansible_no_log')):
self.host_status[(result._host.get_name(), vm)] = (result._result[vm]['state'], str(result._result[vm]['autostart']))
if __name__ == '__main__':
args = copy.copy(sys.argv)
args.extend(['-m', 'virt', '-a', 'command=info'])
cb = ResultAccumulator()
cli = AdHocCLI(copy.copy(args), callback=cb)
try:
main(sys.argv)
except Exception, e:
# Generic handler for ansible specific errors
print "ERROR: %s" % str(e)
sys.exit(1)
cli.parse()
except AnsibleOptionsError:
if len(cli.args) != 1:
cli.args = copy.copy(args)
cli.args.append('virtservers')
cli.parse()
cli.run()
for host in cb.unreachable:
sys.stderr.write('unreachable: %s\n' % host)
for host, status in sorted(cb.host_status.items()):
print(':'.join(itertools.chain(host, status)))