diff --git a/bin/ansible b/bin/ansible new file mode 100755 index 00000000000..537a60e78a3 --- /dev/null +++ b/bin/ansible @@ -0,0 +1,56 @@ +#!/usr/bin/python + +from optparse import OptionParser +import json +import os +import ansible + +DEFAULT_HOST_LIST = '~/.ansible_hosts' +DEFAULT_MODULE_PATH = '~/ansible' +DEFAULT_MODULE_NAME = 'ping' +DEFAULT_PATTERN = '*' +DEFAULT_FORKS = 3 +DEFAULT_MODULE_ARGS = '' + +class Cli(object): + + def __init__(self): + pass + + def runner(self): + parser = OptionParser() + parser.add_option("-H", "--host-list", dest="host_list", + help="path to hosts list", default=DEFAULT_HOST_LIST) + parser.add_option("-L", "--library", dest="module_path", + help="path to module library", default=DEFAULT_MODULE_PATH) + parser.add_option("-F", "--forks", dest="forks", + help="level of parallelism", default=DEFAULT_FORKS) + parser.add_option("-n", "--name", dest="module_name", + help="module name to execute", default=DEFAULT_MODULE_NAME) + parser.add_option("-a", "--args", dest="module_args", + help="module arguments", default=DEFAULT_MODULE_ARGS) + parser.add_option("-p", "--pattern", dest="pattern", + help="hostname pattern", default=DEFAULT_PATTERN) + + options, args = parser.parse_args() + host_list = self._host_list(options.host_list) + + return ansible.Runner( + module_name=options.module_name, + module_path=options.module_path, + module_args=options.module_args, + host_list=host_list, + forks=options.forks, + pattern=options.pattern, + ) + + def _host_list(self, host_list): + host_list = os.path.expanduser(host_list) + return file(host_list).read().split("\n") + +if __name__ == '__main__': + + result = Cli().runner().run() + print json.dumps(result, sort_keys=True, indent=4) + + diff --git a/lib/ansible/__init__.py b/lib/ansible/__init__.py old mode 100644 new mode 100755 index d32d04cd1e3..26f3af508bc --- a/lib/ansible/__init__.py +++ b/lib/ansible/__init__.py @@ -1,5 +1,3 @@ -# core -from optparse import OptionParser import fnmatch from multiprocessing import Process, Pipe from itertools import izip @@ -9,6 +7,9 @@ import json # non-core import paramiko +# TODO -- library should have defaults, not just CLI +# update Runner constructor below to use + DEFAULT_HOST_LIST = '~/.ansible_hosts' DEFAULT_MODULE_PATH = '~/ansible' DEFAULT_MODULE_NAME = 'ping' @@ -35,43 +36,6 @@ class Pooler(object): [p.join() for p in proc] return [p.recv() for (p,c) in pipe] -class Cli(object): - - def __init__(self): - pass - - def runner(self): - parser = OptionParser() - parser.add_option("-H", "--host-list", dest="host_list", - help="path to hosts list", default=DEFAULT_HOST_LIST) - parser.add_option("-L", "--library", dest="module_path", - help="path to module library", default=DEFAULT_MODULE_PATH) - parser.add_option("-F", "--forks", dest="forks", - help="level of parallelism", default=DEFAULT_FORKS) - parser.add_option("-n", "--name", dest="module_name", - help="module name to execute", default=DEFAULT_MODULE_NAME) - parser.add_option("-a", "--args", dest="module_args", - help="module arguments", default=DEFAULT_MODULE_ARGS) - parser.add_option("-p", "--pattern", dest="pattern", - help="hostname pattern", default=DEFAULT_PATTERN) - - options, args = parser.parse_args() - host_list = self._host_list(options.host_list) - - return Runner( - module_name=options.module_name, - module_path=options.module_path, - module_args=options.module_args, - host_list=host_list, - forks=options.forks, - pattern=options.pattern, - ) - - def _host_list(self, host_list): - host_list = os.path.expanduser(host_list) - return file(host_list).read().split("\n") - - class Runner(object): def __init__(self, host_list=[], module_path=None, @@ -144,22 +108,18 @@ class Runner(object): if __name__ == '__main__': - # comamnd line usage example: - - result = Cli().runner().run() - print json.dumps(result, sort_keys=True, indent=4) - - # API usage example: - - #r = Runner( - # host_list = [ '127.0.0.1' ], - # module_path='~/.ansible', - # module_name='ping', - # module_args='', - # pattern='*', - # forks=3 - #) - #print r.run() + + # TODO: if host list is string load from file + + r = Runner( + host_list = [ '127.0.0.1' ], + module_path='~/ansible', + module_name='ping', + module_args='', + pattern='*', + forks=3 + ) + print r.run()