
    Vh                         d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z
 d dlmZmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ  e       Z G d de      ZddZe dk(  r e        yy)    )annotations)CLI)	constants)context)option_helpers)AnsibleErrorAnsibleOptionsErrorAnsibleParserError)TaskQueueManager)to_text)parse_kv)	from_yaml)Playbook)Play)Displayc                  @     e Zd ZdZdZ fdZ fdZd Z fdZ xZ	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
    ansiblec                0   t         t        |   ddd       t        j                  | j
                         t        j                  | j
                         t        j                  | j
                         t        j                  | j
                         t        j                  | j
                         t        j                  | j
                         t        j                  | j
                         t        j                  | j
                         t        j                  | j
                         t        j                  | j
                         t        j                  | j
                         t        j                   | j
                         | j
                  j#                  ddddt$        j&                  	       | j
                  j#                  d
dddt$        j(                  z  t$        j(                  	       | j
                  j#                  ddd       y)z* create an options parser for bin/ansible z%prog <host-pattern> [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))usagedescepilogz-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"}')desthelpdefaultz-mz--module-namemodule_namez*Name of the action to execute (default=%s)argspatternzhost pattern)metavarr   N)superr   init_parseropt_helpadd_runas_optionsparseradd_inventory_optionsadd_async_optionsadd_output_optionsadd_connect_optionsadd_check_optionsadd_runtask_optionsadd_vault_optionsadd_fork_optionsadd_module_optionsadd_basedir_optionsadd_tasknoplay_optionsadd_argumentCDEFAULT_MODULE_ARGSDEFAULT_MODULE_NAME)self	__class__s    A/home/dcms/DCMS/lib/python3.12/site-packages/ansible/cli/adhoc.pyr"   zAdHocCLI.init_parser!   s}   h)0P/o1p 	* 	r 	""4;;/&&t{{3""4;;/##DKK0$$T[[1""4;;/$$T[[1""4;;/!!$++.##DKK0$$T[[1''4 	  xm'h)*)>)> 	! 	@ 	  ]&RUVUjUj&j)*)>)> 	! 	@ 	   P    c                    t         t        |   |      }|j                  t        _        | j                  |dd       |S )z2Post process and validate options for bin/ansible T)
runas_opts	fork_opts)r!   r   post_process_args	verbositydisplayvalidate_conflicts)r5   optionsr6   s     r7   r<   zAdHocCLI.post_process_args>   s>     $9'B#--DDIr8   c                (   t         j                  d   t        j                  v }t         j                  d   }d }|r>|j	                  d      r-|j                  d      r	 t        |j                         d      }|st        ||      }t         j                  d   |dt         j                  d	   d
}t         j                  d   t        j                  vr t        t        ||f            r
||d<   ||d<   t        d|d|g      S # t        $ r Y w xY w)Nr   r   {}T)	json_only)	check_raw)moduler   task_timeout)actiontimeout	async_valpollzAnsible Ad-Hocno)namehostsgather_factstasks)r   CLIARGSr2   MODULE_REQUIRE_ARGS
startswithendswithr   stripr
   r   _ACTION_ALL_INCLUDE_ROLE_TASKSany	frozensetdict)r5   r   rJ   rK   rE   module_args_rawr   mytasks           r7   _play_dszAdHocCLI._play_dsH   s   OOM2a6K6KK	!//-899#>?C[C[\_C`'(=(=(?4P "?iHK'.}'E{[$__^<> ??=)1Q1QQVYZcenptduZvVw"+F;!F6N!(	 	 & s   D 	DDc                d   t         t        |           t        t        j
                  d   d      }d}d}| j                         \  }}||d}| j                         \  }}}	 | j                  |t        j
                  d   |      }t        j
                  d   rAt        j                  d	t        |      z         |D ]  }	t        j                  d
|	z          yt        j
                  d   t        j                  v rJt        j
                  d   s7dt        j
                  d   z  }
|j                  d      r|
dz   }
t!        |
      t        j
                  d   t        j"                  v rt!        dt        j
                  d   z        | j%                  |t        j
                  d   t        j
                  d         }t'               j)                  |||      }t+        |      }|j,                  j/                  |       d|_        | j2                  r| j2                  }nLt        j
                  d   rd}n6t        j4                  r$t        j6                  dk7  rt        j6                  }nd}d}t        j
                  d   r=t        j8                  j/                  d       t        j
                  d   t        _        d}d| _        	 t?        |||||t        j4                  |t        j
                  d         | _        | j<                  jA                          | j<                  jC                  d|       | j<                  j                  |      }| j<                  jC                  d | j<                  jD                         | j<                  r| j<                  jG                          |r|jI                          |S # t        $ r/ t        j
                  d   r g }t        j                  d       Y iw xY w# | j<                  r| j<                  jG                          |r|jI                          w w xY w)!z- create and execute the single task playbook r   surrogate_or_strict)errorsN)	conn_passbecome_passsubsetzNo hosts matched, nothing to do	listhostsz  hosts (%d):z    %sr   r   r   zNo argument passed to %s modulez.ymlz( (did you mean to run ansible-playbook?)z.'%s' is not a valid action for ad-hoc commandssecondspoll_interval)variable_managerloader__adhoc_playbook__one_lineoneliner   minimalFtreeTforks)	inventoryrf   rg   	passwordsstdout_callbackrun_additional_callbacksrun_treerm   v2_playbook_on_startv2_playbook_on_stats)%r!   r   runr   r   rQ   ask_passwords_play_prereqsget_host_listr   r>   warninglenr2   rR   rT   r	   _ACTION_IMPORT_PLAYBOOKr\   r   loadr   _entriesappend
_file_namecallbackDEFAULT_LOAD_CALLBACK_PLUGINSDEFAULT_STDOUT_CALLBACKCALLBACKS_ENABLEDTREE_DIR_tqmr   load_callbackssend_callback_statscleanupcleanup_all_tmp_files)r5   r   sshpass
becomepassro   rg   rn   rf   rN   hosterrplay_dsplayplaybookcbrr   resultr6   s                    r7   ru   zAdHocCLI.rund   s{    	h!# '//&1:OP 
 $ 2 2 4*")*E	 /3.@.@.B+	+	C&&y'//(2KWUE ??;'OOOc%j89 1401 ??=)Q-B-BB7??[hKi3goom6TTC'FF%c** ??=)Q-F-FF%&V(/(F'G H H --)CW__UdEefv{{75Ef{U F#  &2==B__Z(B,,1J1Ji1W**BB??6"&&v. 0AJH 		/(#!1# ")*)H)H!oog.	DI II$$&II##$:HEYY]]4(FII##$:DII<L<LMyy		!!#,,.[  	Cx( AB	CP yy		!!#,,. s   #$N9 B8O4 94O10O14;P/)
__name__
__module____qualname____doc__rM   r"   r<   r\   ru   __classcell__)r6   s   @r7   r   r      s+     DQ:8b br8   r   Nc                .    t         j                  |        y N)r   cli_executor)r   s    r7   mainr      s    $r8   __main__r   )!
__future__r   ansible.clir   r   r   r2   r   ansible.cli.argumentsr   r#   ansible.errorsr   r	   r
   #ansible.executor.task_queue_managerr   +ansible.module_utils.common.text.convertersr   ansible.parsing.splitterr   ansible.parsing.utils.yamlr   ansible.playbookr   ansible.playbook.playr   ansible.utils.displayr   r>   r   r   r    r8   r7   <module>r      sb    #  "  < P P @ ? - 0 % & )
)ls l^  zF r8   