B
    `                 @   s   d Z ddlmZmZmZ eZddlZddlZddl	Z	ddl
Z
ddlZddlZddlmZ ddlmZmZ ddlmZmZmZmZ ddlmZ dd	lmZ de
_de
_d
dddddddddddZdd Zdd Z dS )zaPayload management for sending Ansible files and test content to other systems (VMs, containers).    )absolute_importdivisionprint_functionN   )types)IntegrationConfigShellConfig)displayANSIBLE_SOURCE_ROOTremove_tree	is_subdir)data_context)CommonConfigz.../lib/ansible/cli/scripts/ansible_cli_stub.pyansiblez9../lib/ansible/cli/scripts/ansible_connection_cli_stub.pyz;../test/lib/ansible_test/_data/cli/ansible_test_cli_stub.py)r   zansible-configzansible-connectionzansible-consolezansible-doczansible-galaxyzansible-inventoryzansible-playbookzansible-pullzansible-testzansible-vaultc          	      s  | j r
dS tt j}i }dd tsT|t|  |tfddt	
 D  t jjsdd |D }t| ttfsdd |D }t  }g }g }x`|D ]N  t jkr| fd	dt j D  q| fd
d  D  qW n|}g }xt jD ]}|| qW dd |D }t jjrP|dd |D  || tt|}tjdt| dd t }tjj|ddtjdF}	x>|D ]6\}
}tjd|
|f dd |	j|
|||d qW W dQ R X t | }t j!"|}tjd|t||f dd dS )z Create a payload for delegation.Nc             S   s    |  j tjtjB tjB O  _ | S )zMake the given file executable.)modestatS_IXUSRS_IXOTHS_IXGRP)Ztar_info r   M/home/dcms/DCMS/lib/python3.7/site-packages/ansible_test/_internal/payload.pymake_executable?   s    z'create_payload.<locals>.make_executablec             3   s2   | ]*}| d rtjd|dd  fV  qdS )z../r      N)
startswithospathjoin).0r   )r   r   r   	<genexpr>G   s    z!create_payload.<locals>.<genexpr>c             S   s:   g | ]2}t |d  ds2t |d  ds2t |d  dr|qS )r   zbin/zlib/ansible/ztest/lib/ansible_test/)r   )r   fr   r   r   
<listcomp>K   s    z"create_payload.<locals>.<listcomp>c             S   s*   g | ]"}t |d  dr"|d  dkr|qS )r   zlib/ansible/modules/zlib/ansible/modules/__init__.py)r   )r   r   r   r   r   r    R   s    c             3   s"   | ]}t j j||fV  qd S )N)r   r   r   root)r   r   )layoutr   r   r   \   s    c             3   s0   | ](}t j j|t j jj|fV  qd S )N)r   r   r   r!   
collection	directory)r   r   )r"   r   r   r   _   s    c             S   s"   g | ]\}}|t jd |fqS )r   )r   r   r   )r   srcdstr   r   r   r    l   s    c             s   s,   | ]$\}}|t jt jjj|fV  qd S )N)r   r   r   r   contentr#   r$   )r   r%   r&   r   r   r   r   p   s    z1Creating a payload archive containing %d files...r   )	verbosityzw:gz   )r   compresslevelformatz%s -> %s)filterzDCreated a %d byte payload archive containing %d files in %d seconds.)#explainlistr   Zansible_sourcer
   extendcreate_temporary_bin_filesupdatedictANSIBLE_BIN_SYMLINK_MAPvaluesr'   Z
is_ansible
isinstancer   r   Zcreate_collection_layouts	all_filesZpayload_callbacksr#   sortedsetr	   infolentimetarfileTarFileopen
GNU_FORMATaddgetr   r   getsize)argsZdst_pathfilesfiltersZcollection_layoutsZcontent_filesZextra_filescallbackstarttarr%   r&   durationZpayload_size_bytesr   )r"   r   r   create_payload7   sJ     


""
&rJ   c                sp   | j rd nJtjddd tt  x.t D ]"\}}tj	
 |}t|| q0W t fddttD S )zICreate a temporary ansible bin directory populated using the symlink map.z/tmp/ansible-tmp-binr   bin)prefixsuffixc             3   s*   | ]"}t j |t jd |fV  qdS )rK   N)r   r   r   )r   name)	temp_pathr   r   r      s    z-create_temporary_bin_files.<locals>.<genexpr>)r-   tempfilemkdtempatexitregisterr   r3   itemsr   r   r   symlinktupler7   )rC   rN   destr   r   )rO   r   r0      s    r0   )!__doc__
__future__r   r   r   type__metaclass__rR   r   r   r<   rP   r;    r   tconfigr   r   utilr	   r
   r   r   datar   Zutil_commonr   pwdgrpr3   rJ   r0   r   r   r   r   <module>   s8   O