#!/usr/bin/python # (c) 2012, Michael DeHaan # # This file is part of Ansible # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ansible is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . from optparse import OptionParser import json import os import getpass import shlex import ansible.runner import ansible.playbook import ansible.constants as C class Cli(object): def __init__(self): pass def runner(self): parser = OptionParser() parser.add_option("-P", "--askpass", default=False, action="store_true", help="ask the user to input the ssh password for connecting") parser.add_option("-H", "--host-list", dest="host_list", help="path to hosts list", default=C.DEFAULT_HOST_LIST) parser.add_option("-L", "--library", dest="module_path", help="path to module library", default=C.DEFAULT_MODULE_PATH) parser.add_option("-f", "--forks", dest="forks", type="int", help="level of parallelism", default=C.DEFAULT_FORKS) parser.add_option("-n", "--name", dest="module_name", help="module name to execute", default=C.DEFAULT_MODULE_NAME) parser.add_option("-a", "--args", dest="module_args", help="module arguments", default=C.DEFAULT_MODULE_ARGS) parser.add_option("-p", "--pattern", dest="pattern", help="hostname pattern", default=C.DEFAULT_PATTERN) parser.add_option("-u", "--remote-user", dest="remote_user", help="remote username", default=C.DEFAULT_REMOTE_USER) parser.add_option("-r", "--run-playbook", dest="playbook", help="playbook file, instead of -n and -a", default=None) options, args = parser.parse_args() # TODO: more shell like splitting on module_args would # be a good idea sshpass = None if options.askpass: sshpass = getpass.getpass(prompt="SSH password: ") if options.playbook is None: return ansible.runner.Runner( module_name=options.module_name, module_path=options.module_path, module_args=shlex.split(options.module_args), remote_user=options.remote_user, remote_pass=sshpass, host_list=options.host_list, forks=options.forks, pattern=options.pattern, verbose=True, ) else: return ansible.playbook.PlayBook( playbook=options.playbook, module_path=options.module_path, remote_user=options.remote_user, remote_pass=sshpass, host_list=options.host_list, forks=options.forks, verbose=True ) if __name__ == '__main__': result = Cli().runner().run() print json.dumps(result, sort_keys=True, indent=4)