o nnh @sddlmZddlmZddlmZddlmZddlm Z ddl m Z m Z mZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZeZGdddeZdddZe dkrkedSdS)) annotations)CLI) constants)context)option_helpers) AnsibleErrorAnsibleOptionsErrorAnsibleParserError)TaskQueueManager)to_text)parse_kv) from_yaml)Playbook)Play)DisplaycsDeZdZdZdZfddZfddZddZfd d ZZ S) AdHocCLIz is an extra-simple tool/framework/API for doing 'remote things'. this command allows you to define and run a single task 'playbook' against a set of hosts ansiblecstt|jddddt|jt|jt|jt|jt |jt |jt |jt |jt |jt|jt|jt|j|jjddddtjd |jjd d d d tjtjd |jjdddddS)z* create an options parser for bin/ansible z%prog [options]z>Define and run a single task 'playbook' against a set of hostsz=Some actions do not make sense in Ad-Hoc (include, meta, etc))usagedescepilogz-az--args module_argszThe action's options in space separated k=v format: -a 'opt1=val1 opt2=val2' or a json string: -a '{"opt1": "val1", "opt2": "val2"}')desthelpdefaultz-mz --module-name module_namez*Name of the action to execute (default=%s)argspatternz host pattern)metavarrN)superr init_parseropt_helpadd_runas_optionsparseradd_inventory_optionsadd_async_optionsadd_output_optionsadd_connect_optionsadd_check_optionsadd_runtask_optionsadd_vault_optionsadd_fork_optionsadd_module_optionsadd_basedir_optionsadd_tasknoplay_options add_argumentCDEFAULT_MODULE_ARGSDEFAULT_MODULE_NAME)self __class__szAdHocCLI.post_process_argscCstjdtjv}tjd}d}|r/|dr/|dr/z t|dd}Wn ty.Ynw|s7t ||d}tjd|dtjd d }tjdtj vr]t t ||fr]||d <||d <t d |d|gdS)Nrr{}T) json_only) check_raw)moduler task_timeout)actiontimeout async_valpollzAnsible Ad-Hocno)namehosts gather_factstasks)rCLIARGSr/MODULE_REQUIRE_ARGS startswithendswithr stripr r _ACTION_ALL_INCLUDE_ROLE_TASKSany frozensetdict)r2rrFrGrAmodule_args_rawrmytaskr5r5r6_play_dsHs.    zAdHocCLI._play_dsc stt|ttjddd}d}d}|\}}||d}|\}}}z ||tjd|}Wnt yHtjdr?g}t dYnwtjdret d t ||D] } t d | qYd Stjd t jvrtjd sdtjd } |dr| d} t| tjd t jvrtdtjd ||tjdtjd} tj| ||d} t|} | j| d| _|jr|j}ntjdrd}nt jrt jdkrt j}nd}d}tjdrt jdtjdt _d}d|_z?t|||||t j|tjdd|_|j |j!d| |j| }|j!d |jj"W|jr&|j#|r-|$|S|jr8|j#|r@|$ww)!z- create and execute the single task playbook rsurrogate_or_strict)errorsN) conn_pass become_passsubsetzNo hosts matched, nothing to do listhostsz hosts (%d):z %srrrzNo argument passed to %s modulez.ymlz( (did you mean to run ansible-playbook?)z.'%s' is not a valid action for ad-hoc commandsseconds poll_interval)variable_managerloader__adhoc_playbook__one_lineonelinerminimalFtreeTforks) inventoryrarb passwordsstdout_callbackrun_additional_callbacksrun_treerhv2_playbook_on_startv2_playbook_on_stats)%rrrunr rrM ask_passwords _play_prereqs get_host_listrr;warninglenr/rNrPr_ACTION_IMPORT_PLAYBOOKrXrloadr_entriesappend _file_namecallbackDEFAULT_LOAD_CALLBACK_PLUGINSDEFAULT_STDOUT_CALLBACKCALLBACKS_ENABLEDTREE_DIR_tqmr load_callbacks send_callback_statscleanupcleanup_all_tmp_files)r2rsshpass becomepassrjrbrirarJhosterrplay_dsplayplaybookcbrmresultr3r5r6rpds                z AdHocCLI.run) __name__ __module__ __qualname____doc__rIrr9rXrp __classcell__r5r5r3r6rs   rNcCst|dSN)r cli_executor)rr5r5r6mainsr__main__r)! __future__r ansible.clirrrr/ransible.cli.argumentsrr ansible.errorsrrr #ansible.executor.task_queue_managerr +ansible.module_utils.common.text.convertersr ansible.parsing.splitterr ansible.parsing.utils.yamlr ansible.playbookransible.playbook.playransible.utils.displayrr;rrrr5r5r5r6s(             0