summaryrefslogtreecommitdiff
path: root/examples/scripts
diff options
context:
space:
mode:
authorb4ldr <github@johnbond.org>2016-02-17 18:21:12 +0000
committerb4ldr <github@johnbond.org>2016-02-17 18:34:12 +0000
commit439baf004e372e9ed818b15e0a191333dc11705f (patch)
tree765759a9aec167fe14bfe2f370615f16af314e9e /examples/scripts
parent91f3558c64e64c56ac37f284ae3fc0ab7e261cc5 (diff)
downloadansible-439baf004e372e9ed818b15e0a191333dc11705f.tar.gz
update uptime script to use version 2.0 of the api
Diffstat (limited to 'examples/scripts')
-rwxr-xr-xexamples/scripts/uptime.py103
1 files changed, 80 insertions, 23 deletions
diff --git a/examples/scripts/uptime.py b/examples/scripts/uptime.py
index 167dedcede..cf3c604f81 100755
--- a/examples/scripts/uptime.py
+++ b/examples/scripts/uptime.py
@@ -1,31 +1,88 @@
#!/usr/bin/python
-# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
-# example of getting the uptime of all hosts, 10 at a time
+from collections import namedtuple
+from ansible.parsing.dataloader import DataLoader
+from ansible.vars import VariableManager
+from ansible.inventory import Inventory
+from ansible.playbook.play import Play
+from ansible.executor.task_queue_manager import TaskQueueManager
+from ansible.plugins.callback import CallbackBase
-import ansible.runner
-import sys
+# Creat a callback object so we can capture the output
+class ResultsCollector(CallbackBase):
-# construct the ansible runner and execute on all hosts
-results = ansible.runner.Runner(
- pattern='*', forks=10,
- module_name='command', module_args='/usr/bin/uptime',
-).run()
+ def __init__(self, *args, **kwargs):
+ super(ResultsCollector, self).__init__(*args, **kwargs)
+ self.host_ok = {}
+ self.host_unreachable = {}
+ self.host_failed = {}
-if results is None:
- print "No hosts found"
- sys.exit(1)
+ def v2_runner_on_unreachable(self, result):
+ self.host_unreachable[result._host.get_name()] = result
-print "UP ***********"
-for (hostname, result) in results['contacted'].items():
- if not 'failed' in result:
- print "%s >>> %s" % (hostname, result['stdout'])
+ def v2_runner_on_ok(self, result, *args, **kwargs):
+ self.host_ok[result._host.get_name()] = result
-print "FAILED *******"
-for (hostname, result) in results['contacted'].items():
- if 'failed' in result:
- print "%s >>> %s" % (hostname, result['msg'])
+ def v2_runner_on_failed(self, result, *args, **kwargs):
+ self.host_failed[result._host.get_name()] = result
-print "DOWN *********"
-for (hostname, result) in results['dark'].items():
- print "%s >>> %s" % (hostname, result)
+def main():
+ host_list = ['localhost', 'www.example.com', 'www.google.com']
+ Options = namedtuple('Options', ['connection','module_path', 'forks', 'remote_user',
+ 'private_key_file', 'ssh_common_args', 'ssh_extra_args', 'sftp_extra_args',
+ 'scp_extra_args', 'become', 'become_method', 'become_user', 'verbosity', 'check'])
+
+ # initialize needed objects
+ variable_manager = VariableManager()
+ loader = DataLoader()
+ options = Options(connection='smart', module_path='/usr/share/ansible', forks=100,
+ remote_user=None, private_key_file=None, ssh_common_args=None, ssh_extra_args=None,
+ sftp_extra_args=None, scp_extra_args=None, become=None, become_method=None,
+ become_user=None, verbosity=None, check=False)
+
+ passwords = dict()
+
+ # create inventory and pass to var manager
+ inventory = Inventory(loader=loader, variable_manager=variable_manager, host_list=host_list)
+ variable_manager.set_inventory(inventory)
+
+ # create play with tasks
+ play_source = dict(
+ name = "Ansible Play",
+ hosts = host_list,
+ gather_facts = 'no',
+ tasks = [ dict(action=dict(module='command', args=dict(cmd='/usr/bin/uptime'))) ]
+ )
+ play = Play().load(play_source, variable_manager=variable_manager, loader=loader)
+
+ # actually run it
+ tqm = None
+ callback = ResultsCollector()
+ try:
+ tqm = TaskQueueManager(
+ inventory=inventory,
+ variable_manager=variable_manager,
+ loader=loader,
+ options=options,
+ passwords=passwords,
+ )
+ tqm._stdout_callback = callback
+ result = tqm.run(play)
+ finally:
+ if tqm is not None:
+ tqm.cleanup()
+
+ print "UP ***********"
+ for host, result in callback.host_ok.items():
+ print '{} >>> {}'.format(host, result._result['stdout'])
+
+ print "FAILED *******"
+ for host, result in callback.host_failed.items():
+ print '{} >>> {}'.format(host, result._result['msg'])
+
+ print "DOWN *********"
+ for host, result in callback.host_unreachable.items():
+ print '{} >>> {}'.format(host, result._result['msg'])
+
+if __name__ == '__main__':
+ main()