summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xscripts/fetch-ssh-keys66
-rwxr-xr-xscripts/list-vms-per-host118
2 files changed, 84 insertions, 100 deletions
diff --git a/scripts/fetch-ssh-keys b/scripts/fetch-ssh-keys
index ec1a2cc2e..4b8280af4 100755
--- a/scripts/fetch-ssh-keys
+++ b/scripts/fetch-ssh-keys
@@ -25,37 +25,51 @@ SOFTWARE."""
:contact: opensource@till.name
:license: MIT
"""
+""" :changes: Ali AlKhalidi
+ :contact: doteast@fedoraproject.org
+"""
import os
-
+import sys
+import copy
+import itertools
+
+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
ALIAS_PATH = '/srv/web/infra/hosts/{hostname}/host_aliases'
-os.environ['ANSIBLE_HOST_KEY_CHECKING'] = 'False'
-import ansible.runner
-if __name__ == "__main__":
- runner = ansible.runner.Runner(module_name="setup")
- results = runner.run()
+class ResultAccumulator(CallbackBase):
+ def __init__(self, *args, **kwargs):
+ super(ResultAccumulator, self).__init__(*args, **kwargs)
+ self.unreachable = set()
+ self.host_status = {}
+ self.sshhostkeys = {}
+
+ def v2_runner_on_unreachable(self, result):
+ self.unreachable.add(result._host.get_name())
- sshhostkeys = {}
- for (hostname, result) in results['contacted'].items():
- facts = result["ansible_facts"]
- key = "ssh-rsa {0}".format(facts["ansible_ssh_host_key_rsa_public"])
+ def v2_runner_on_ok(self, result, *args, **kwargs):
+ facts = result._result['ansible_facts']
+ key = "ssh-rsa {0}".format(facts['ansible_ssh_host_key_rsa_public'])
- names = [hostname]
- ansible_fqdn = facts["ansible_fqdn"]
+ names = [result._host.get_name()]
+ ansible_fqdn = facts['ansible_fqdn']
if ansible_fqdn not in names:
names.append(ansible_fqdn)
- ansible_hostname = facts["ansible_hostname"]
+ ansible_hostname = facts['ansible_hostname']
if ansible_hostname not in names:
- if ansible_fqdn.find('.stg.') != -1 or hostname.find('.stg.') != -1:
+ if ansible_fqdn.find('.stg.') != -1 or result._host.get_name().find('.stg.') != -1:
names.append(ansible_hostname+".stg")
else:
names.append(ansible_hostname)
try:
- with open(ALIAS_PATH.format(hostname=hostname),
+ with open(ALIAS_PATH.format(hostname=result._host.get_name()),
"rb") as alias_file:
aliases = [a.strip() for a in alias_file.readlines()]
for alias in aliases:
@@ -78,9 +92,23 @@ if __name__ == "__main__":
tunnel_addresses=facts["ansible_tun0"]
names.append(tunnel_addresses['ipv4']['address'])
- sshhostkeys[hostname] = {"key": key,
+ self.sshhostkeys[result._host.get_name()] = {"key": key,
"names": ",".join(names)}
- for host in sorted(sshhostkeys.keys()):
- print "{names} {key} {comment}".format(comment=host,
- **sshhostkeys[host])
+if __name__ == '__main__':
+ args = copy.copy(sys.argv)
+ args.extend(['-m', 'setup'])
+ cb = ResultAccumulator()
+ cli = AdHocCLI(copy.copy(args), callback=cb)
+ try:
+ cli.parse()
+ except AnsibleOptionsError:
+ if len(cli.args) != 1:
+ cli.args = copy.copy(args)
+ cli.args.append('all')
+ cli.parse()
+
+ cli.run()
+
+ for host in sorted(cb.sshhostkeys.items()):
+ print "{names} {key} {comment}".format(comment=host[0],**host[1])
diff --git a/scripts/list-vms-per-host b/scripts/list-vms-per-host
index 0142263dc..a689a2bed 100755
--- a/scripts/list-vms-per-host
+++ b/scripts/list-vms-per-host
@@ -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
-########################################################
-def main(args):
+class ResultAccumulator(CallbackBase):
+ def __init__(self, *args, **kwargs):
+ super(ResultAccumulator, self).__init__(*args, **kwargs)
+ self.unreachable = set()
+ self.host_status = {}
- # 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)
+ def v2_runner_on_unreachable(self, result):
+ self.unreachable.add(result._host.get_name())
- 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)))