관리-도구
편집 파일: assemble.cpython-39.pyc
a �����)g#����������������������@���s����d�dl�mZmZmZ�eZdZdZdZd�dl Z d�dl Z d�dlZd�dlZd�dl mZ�d�dlmZmZ�d�dlmZ�dd d�Zddd �Zdd��Zedkr�e���dS�)�����)�absolute_import�division�print_functiona\�� --- module: assemble short_description: Assemble configuration files from fragments description: - Assembles a configuration file from fragments. - Often a particular program will take a single configuration file and does not support a C(conf.d) style structure where it is easy to build up the configuration from multiple sources. C(assemble) will take a directory of files that can be local or have already been transferred to the system, and concatenate them together to produce a destination file. - Files are assembled in string sorting order. - Puppet calls this idea I(fragments). version_added: '0.5' options: src: description: - An already existing directory full of source files. type: path required: true dest: description: - A file to create using the concatenation of all of the source files. type: path required: true backup: description: - Create a backup file (if C(true)), including the timestamp information so you can get the original file back if you somehow clobbered it incorrectly. type: bool default: no delimiter: description: - A delimiter to separate the file contents. type: str version_added: '1.4' remote_src: description: - If C(false), it will search for src at originating/master machine. - If C(true), it will go to the remote/target machine for the src. type: bool default: yes version_added: '1.4' regexp: description: - Assemble files only if C(regex) matches the filename. - If not set, all files are assembled. - Every C(\) (backslash) must be escaped as C(\\) to comply to YAML syntax. - Uses L(Python regular expressions,https://docs.python.org/3/library/re.html). type: str ignore_hidden: description: - A boolean that controls if files that start with a '.' will be included or not. type: bool default: no version_added: '2.0' validate: description: - The validation command to run before copying into place. - The path to the file to validate is passed in via '%s' which must be present as in the sshd example below. - The command is passed securely so shell features like expansion and pipes won't work. type: str version_added: '2.0' attributes: action: support: full async: support: none bypass_host_loop: support: none check_mode: support: none diff_mode: support: full platform: platforms: posix safe_file_operations: support: full vault: support: full version_added: '2.2' seealso: - module: ansible.builtin.copy - module: ansible.builtin.template - module: ansible.windows.win_copy author: - Stephen Fromm (@sfromm) extends_documentation_fragment: - action_common_attributes - action_common_attributes.flow - action_common_attributes.files - decrypt - files a(�� - name: Assemble from fragments from a directory ansible.builtin.assemble: src: /etc/someapp/fragments dest: /etc/someapp/someapp.conf - name: Insert the provided delimiter between fragments ansible.builtin.assemble: src: /etc/someapp/fragments dest: /etc/someapp/someapp.conf delimiter: '### START FRAGMENT ###' - name: Assemble a new "sshd_config" file into place, after passing validation with sshd ansible.builtin.assemble: src: /etc/ssh/conf.d/ dest: /etc/ssh/sshd_config validate: /usr/sbin/sshd -t -f %s �#N)� AnsibleModule)�b� indexbytes)� to_nativeFc�������������� ���C���s.��t�j|d�\}}t�|d�}d}d} tt�|���D�]�} |rF|�| �sFq2tj�|�| �}tj� |�r2|rxtj� |��d�rxq2t|d��}|� ��} W�d����n1�s�0����Y��| r�|�td���|r�|r�t�|�d�}|�|��t|d �d kr�|�td���|�| ��d}| �td���rd} q2d} q2|����|S�)z/ assemble a file from a directory of fragments )�dir�wbF�.�rbN� r������� ���T)�tempfileZmkstemp�os�fdopen�sorted�listdir�search�path�join�isfile�basename� startswith�open�read�writer����codecs� escape_decoder����endswith�close)Zsrc_path� delimiter�compiled_regexp� ignore_hidden�tmpdirZtmpfdZ temp_path�tmpZ delimit_meZadd_newline�f�fragmentZfragment_fhZfragment_content��r*����</usr/lib/python3.9/site-packages/ansible/modules/assemble.py�assemble_from_fragments����s6����"& r,���c�������������� ���C���sf���t�j�|��rbzt��|���W�nF�ttfy`�}�z*|d�urLd|�t|�f�g|d<�W�Y�d�}~n d�}~0�0�d�S�)Nz#Unable to remove temp file (%s): %s�warnings)r���r����exists�remove�IOError�OSErrorr ���)r����result�er*���r*���r+����cleanup����s����r4���c������������������C���s���t�ttddd�tdd�tddd�tddd�tddd�tdd�tddd�tdd�d �dd �}�d}d�}d�}|�jd�}|�jd�}|�jd �}|�jd�}|�jd�}d�} |�jd�} |�j�dd��}t||d�}tj�|�s�|�jd|�d��tj�|�s�|�jd|�d��|d�u�rRzt � |�} W�n@�t j�yP�} �z$|�jdt| �|f�d��W�Y�d�} ~ n d�} ~ 0�0�|�rrd|v�rr|�jd|�d��t ||| | |�j�}|��|�}||d<�z|��|�}W�n�t�y����d�}Y�n0�||d<�tj�|��r�|��|�}||k�rr|�r:|��||��\}}}t|||d�|d<�|dk�r:t|��|�jd||f�d��|�rX|d�u�rX|��|�|d<�|�j|||�jd �d!��d}t||��|��|�j�}|��||�|d"<�d#|d$<�|�jf�i�|���d�S�)%Nr���T)�type�required�str)r5����boolF)r5����default)�srcr#����dest�backupZ remote_src�regexpr%����validate)Z argument_specZadd_file_common_argsr:���r;���r<���r#���r=���r%���r>���)r:���r;���zSource (%s) does not exist)�msgzSource (%s) is not a directoryzInvalid Regexp (%s) in "%s"z%szvalidate must contain %%s: %sZchecksumZmd5sum)�rc�stdout�stderrZ validationr���z"failed to validate: rc:%s error:%sZbackup_file� unsafe_writes)rC����changedZOKr?���)r����dict�params�getr���r���r.���Z fail_json�isdir�re�compile�errorr ���r,���r&���Zsha1Zmd5� ValueErrorZrun_commandr4���Zbackup_localZatomic_moveZload_file_common_argumentsZset_fs_attributes_if_differentZ exit_json)�modulerD���Z path_hashZ dest_hashr:���r;���r<���r#���r=���r$���r%���r>���r2���r3���r���Zpathmd5r@����out�errZ file_argsr*���r*���r+����main����s|���� � � . rP����__main__)NNFN)N)Z __future__r���r���r���r5���Z __metaclass__Z DOCUMENTATIONZEXAMPLESZRETURNr���r���rI���r���Zansible.module_utils.basicr���Zansible.module_utils.sixr���r���Zansible.module_utils._textr ���r,���r4���rP����__name__r*���r*���r*���r+����<module>���s ���` . S