def __call__(self, argv, help): inject_ansible_paths() import ansible.constants as C from ansible.runner import Runner from ansible import errors from ansible import callbacks from ploy_ansible.inventory import Inventory from ansible import utils parser = utils.base_parser( constants=C, runas_opts=True, subset_opts=True, output_opts=True, check_opts=True, diff_opts=False, usage='%s ansible <host-pattern> [options]' % self.ctrl.progname ) parser.remove_option('-i') parser.remove_option('-k') parser.add_option( '-a', '--args', dest='module_args', help="module arguments", default=C.DEFAULT_MODULE_ARGS) parser.add_option( '-m', '--module-name', dest='module_name', help="module name to execute (default=%s)" % C.DEFAULT_MODULE_NAME, default=C.DEFAULT_MODULE_NAME) options, args = parser.parse_args(argv) if len(args) == 0 or len(args) > 1: parser.print_help() sys.exit(1) # su and sudo command line arguments need to be mutually exclusive if (hasattr(options, 'su') and (options.su or options.su_user or options.ask_su_pass) and (options.sudo or options.sudo_user or options.ask_sudo_pass)): parser.error("Sudo arguments ('--sudo', '--sudo-user', and '--ask-sudo-pass') " "and su arguments ('-su', '--su-user', and '--ask-su-pass') are " "mutually exclusive") if hasattr(options, 'ask_vault_pass') and (options.ask_vault_pass and options.vault_password_file): parser.error("--ask-vault-pass and --vault-password-file are mutually exclusive") cbs = callbacks.CliRunnerCallbacks() cbs.options = options pattern = args[0] patch_connect(self.ctrl) inventory_manager = Inventory(self.ctrl) if options.subset: inventory_manager.subset(options.subset) sudopass = None su_pass = None vault_pass = None kw = {} options.ask_sudo_pass = options.ask_sudo_pass or C.DEFAULT_ASK_SUDO_PASS kw['ask_sudo_pass'] = options.ask_sudo_pass if hasattr(options, 'ask_su_pass'): options.ask_su_pass = options.ask_su_pass or C.DEFAULT_ASK_SU_PASS kw['ask_su_pass'] = options.ask_sudo_pass if hasattr(options, 'ask_vault_pass'): options.ask_vault_pass = options.ask_vault_pass or C.DEFAULT_ASK_VAULT_PASS kw['ask_vault_pass'] = options.ask_vault_pass passwds = utils.ask_passwords(**kw) if len(passwds) == 2: (sshpass, sudopass) = passwds elif len(passwds) == 3: (sshpass, sudopass, su_pass) = passwds else: (sshpass, sudopass, su_pass, vault_pass) = passwds if getattr(options, 'vault_password_file', None): this_path = os.path.expanduser(options.vault_password_file) try: f = open(this_path, "rb") tmp_vault_pass = f.read().strip() f.close() except (OSError, IOError), e: raise errors.AnsibleError("Could not read %s: %s" % (this_path, e)) if not options.ask_vault_pass: vault_pass = tmp_vault_pass