
    Vhj}                        d dl mZ dZdZd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Zd dlZd dlZd dlZd dlmZmZ d dlmZ  G d d	e      Zd
 Zd Zd Zd Zd Zd Zd Zedk(  r e        yy)    )annotationsa  
---
module: copy
version_added: historical
short_description: Copy files to remote locations
description:
    - The M(ansible.builtin.copy) module copies a file or a directory structure from the local or remote machine to a location on the remote machine.
      File system meta-information (permissions, ownership, etc.) may be set, even when the file or directory already exists on the target system.
      Some meta-information may be copied on request.
    - Get meta-information with the M(ansible.builtin.stat) module.
    - Set meta-information with the M(ansible.builtin.file) module.
    - Use the M(ansible.builtin.fetch) module to copy files from remote locations to the local box.
    - If you need variable interpolation in copied files, use the M(ansible.builtin.template) module.
      Using a variable with the O(content) parameter produces unpredictable results.
    - For Windows targets, use the M(ansible.windows.win_copy) module instead.
options:
  src:
    description:
    - Local path to a file to copy to the remote server.
    - This can be absolute or relative.
    - If path is a directory, it is copied recursively. In this case, if path ends
      with C(/), only inside contents of that directory are copied to destination.
      Otherwise, if it does not end with C(/), the directory itself with all contents
      is copied. This behavior is similar to the C(rsync) command line tool.
    type: path
  content:
    description:
    - When used instead of O(src), sets the contents of a file directly to the specified value.
    - Works only when O(dest) is a file. Creates the file if it does not exist.
    - For advanced formatting or if O(content) contains a variable, use the
      M(ansible.builtin.template) module.
    type: str
    version_added: '1.1'
  dest:
    description:
    - Remote absolute path where the file should be copied to.
    - If O(src) is a directory, this must be a directory too.
    - If O(dest) is a non-existent path and if either O(dest) ends with C(/) or O(src) is a directory, O(dest) is created.
    - If O(dest) is a relative path, the starting directory is determined by the remote host.
    - If O(src) and O(dest) are files, the parent directory of O(dest) is not created and the task fails if it does not already exist.
    type: path
    required: yes
  backup:
    description:
    - Create a backup file including the timestamp information so you can get the original file back if you somehow clobbered it incorrectly.
    type: bool
    default: no
    version_added: '0.7'
  force:
    description:
    - Influence whether the remote file must always be replaced.
    - If V(true), the remote file will be replaced when contents are different than the source.
    - If V(false), the file will only be transferred if the destination does not exist.
    type: bool
    default: yes
    version_added: '1.1'
  mode:
    description:
    - The permissions of the destination file or directory.
    - For those used to C(/usr/bin/chmod) remember that modes are actually octal numbers.
      You must either add a leading zero so that Ansible's YAML parser knows it is an octal number
      (like V(0644) or V(01777)) or quote it (like V('644') or V('1777')) so Ansible receives a string
      and can do its own conversion from string into number. Giving Ansible a number without following
      one of these rules will end up with a decimal number which will have unexpected results.
    - As of Ansible 1.8, the mode may be specified as a symbolic mode (for example, V(u+rwx) or V(u=rw,g=r,o=r)).
    - As of Ansible 2.3, the mode may also be the special string V(preserve).
    - V(preserve) means that the file will be given the same permissions as the source file.
    - When doing a recursive copy, see also O(directory_mode).
    - If O(mode) is not specified and the destination file B(does not) exist, the default C(umask) on the system will be used
      when setting the mode for the newly created file.
    - If O(mode) is not specified and the destination file B(does) exist, the mode of the existing file will be used.
    - Specifying O(mode) is the best way to ensure files are created with the correct permissions.
      See CVE-2020-1736 for further details.
  directory_mode:
    description:
    - Set the access permissions of newly created directories to the given mode.
      Permissions on existing directories do not change.
    - See O(mode) for the syntax of accepted values.
    - The target system's defaults determine permissions when this parameter is not set.
    type: raw
    version_added: '1.5'
  remote_src:
    description:
    - Influence whether O(src) needs to be transferred or already is present remotely.
    - If V(false), it will search for O(src) on the controller node.
    - If V(true), it will search for O(src) on the managed (remote) node.
    - O(remote_src) supports recursive copying as of version 2.8.
    - O(remote_src) only works with O(mode=preserve) as of version 2.6.
    - Auto-decryption of files does not work when O(remote_src=yes).
    type: bool
    default: no
    version_added: '2.0'
  follow:
    description:
    - This flag indicates that filesystem links in the destination, if they exist, should be followed.
    type: bool
    default: no
    version_added: '1.8'
  local_follow:
    description:
    - This flag indicates that filesystem links in the source tree, if they exist, should be followed.
    type: bool
    default: yes
    version_added: '2.4'
  checksum:
    description:
    - SHA1 checksum of the file being transferred.
    - Used to validate that the copy of the file was successful.
    - If this is not provided, ansible will use the local calculated checksum of the src file.
    type: str
    version_added: '2.5'
extends_documentation_fragment:
    - decrypt
    - files
    - validate
    - action_common_attributes
    - action_common_attributes.files
    - action_common_attributes.flow
notes:
    - The M(ansible.builtin.copy) module recursively copy facility does not scale to lots (>hundreds) of files.
seealso:
    - module: ansible.builtin.assemble
    - module: ansible.builtin.fetch
    - module: ansible.builtin.file
    - module: ansible.builtin.template
    - module: ansible.posix.synchronize
    - module: ansible.windows.win_copy
author:
    - Ansible Core Team
    - Michael DeHaan
attributes:
  action:
    support: full
  async:
    support: none
  bypass_host_loop:
    support: none
  check_mode:
    support: full
  diff_mode:
    support: full
  platform:
    platforms: posix
  safe_file_operations:
      support: full
  vault:
    support: full
    version_added: '2.2'
a  
- name: Copy file with owner and permissions
  ansible.builtin.copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: '0644'

- name: Copy file with owner and permission, using symbolic representation
  ansible.builtin.copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: u=rw,g=r,o=r

- name: Another symbolic mode example, adding some permissions and removing others
  ansible.builtin.copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: u+rw,g-wx,o-rwx

- name: Copy a new "ntp.conf" file into place, backing up the original if it differs from the copied version
  ansible.builtin.copy:
    src: /mine/ntp.conf
    dest: /etc/ntp.conf
    owner: root
    group: root
    mode: '0644'
    backup: yes

- name: Copy a new "sudoers" file into place, after passing validation with visudo
  ansible.builtin.copy:
    src: /mine/sudoers
    dest: /etc/sudoers
    validate: /usr/sbin/visudo -csf %s

- name: Copy a "sudoers" file on the remote machine for editing
  ansible.builtin.copy:
    src: /etc/sudoers
    dest: /etc/sudoers.edit
    remote_src: yes
    validate: /usr/sbin/visudo -csf %s

- name: Copy using inline content
  ansible.builtin.copy:
    content: '# This file was moved to /etc/other.conf'
    dest: /etc/mine.conf

- name: If follow=yes, /path/to/file will be overwritten by contents of foo.conf
  ansible.builtin.copy:
    src: /etc/foo.conf
    dest: /path/to/link  # link to /path/to/file
    follow: yes

- name: If follow=no, /path/to/link will become a file and be overwritten by contents of foo.conf
  ansible.builtin.copy:
    src: /etc/foo.conf
    dest: /path/to/link  # link to /path/to/file
    follow: no
a;  
dest:
    description: Destination file/path.
    returned: success
    type: str
    sample: /path/to/file.txt
src:
    description: Source file used for the copy on the target machine.
    returned: changed
    type: str
    sample: /home/httpd/.ansible/tmp/ansible-tmp-1423796390.97-147729857856000/source
md5sum:
    description: MD5 checksum of the file after running copy.
    returned: when supported
    type: str
    sample: 2a5aeecc61dc98c4d780b14b330e3282
checksum:
    description: SHA1 checksum of the file after running copy.
    returned: success
    type: str
    sample: 6e642bb8dd5c2e027bf21dd923337cbb4214f827
backup_file:
    description: Name of backup file created.
    returned: changed and if backup=yes
    type: str
    sample: /path/to/file.txt.2015-02-12@22:09~
gid:
    description: Group id of the file, after execution.
    returned: success
    type: int
    sample: 100
group:
    description: Group of the file, after execution.
    returned: success
    type: str
    sample: httpd
owner:
    description: Owner of the file, after execution.
    returned: success
    type: str
    sample: httpd
uid:
    description: Owner id of the file, after execution.
    returned: success
    type: int
    sample: 100
mode:
    description: Permissions of the target, after execution.
    returned: success
    type: str
    sample: '0644'
size:
    description: Size of the target, after execution.
    returned: success
    type: int
    sample: 1220
state:
    description: State of the target, after execution.
    returned: success
    type: str
    sample: file
N)to_bytes	to_native)AnsibleModulec                      e Zd Zd Zy)AnsibleModuleErrorc                    || _         y )Nresults)selfr   s     D/home/dcms/DCMS/lib/python3.12/site-packages/ansible/modules/copy.py__init__zAnsibleModuleError.__init__0  s	        N)__name__
__module____qualname__r    r   r   r   r   /  s    r   r   c                *   t         j                  j                  |       \  }}t        |d      }|dk(  rd|gfS t         j                  j	                  |      s"|dk(  rt        ddi      t        |      \  }}n||gfS |j                  |       ||fS )	zi
    Return the first pre-existing directory and a list of the new directories that will be created.
    surrogate_or_stricterrors ./msgz0The '/' directory doesn't exist on this machine.r
   )ospathsplitr   existsr   split_pre_existing_dirappend)dirnameheadtailb_headpre_existing_dirnew_directory_lists         r   r    r    4  s     w'JD$d#89FrzdV}77>>&!3;$e5g-hii1G1M.	-tf~d#011r   c                    |rUt         j                  j                  | |j                  d            }||d<   |j	                  ||      }t        |||||      }|S )z]
    Walk the new directories list and make sure that permissions are as we would expect
    r   r   )r   r   joinpopset_fs_attributes_if_different&adjust_recursive_directory_permissions)r&   r'   moduledirectory_argschangedworking_dirs         r   r,   r,   F  s_    
 ggll#35G5K5KA5NO!,v77P8FXZ`bpryzNr   c                   d}|j                   d   }|j                   d   }||j                  st        j                  |       D ]  \  }}}|j	                  ||d      }|du r|}|D 	cg c]"  }	t        j
                  j                  ||	      $ c}	D ]  }
|j	                  |
|d      }|du s|} |D cg c]"  }t        j
                  j                  ||      $ c}D ]  }|j	                  ||d      }|du s|}  nt        j                  |      j                  }t        j                  |       D ]  \  }}}t        j                  |      j                  |k7  }|du r|}|D 	cg c]"  }	t        j
                  j                  ||	      $ c}	D ]+  }
t        j                  |
      j                  |k7  }|du s*|}- |D cg c]"  }t        j
                  j                  ||      $ c}D ]+  }t        j                  |      j                  |k7  }|du s*|}-  ||j                  st        j                  |       D ]  \  }}}|j                  ||d      }|du r|}|D 	cg c]"  }	t        j
                  j                  ||	      $ c}	D ]  }
|j                  |
|d      }|du s|} |D cg c]"  }t        j
                  j                  ||      $ c}D ]  }|j                  ||d      }|du s|}  |S t        j                  |      j                  }t        j                  |       D ]  \  }}}t        j                  |      j                   |k7  }|du r|}|D 	cg c]"  }	t        j
                  j                  ||	      $ c}	D ]+  }
t        j                  |
      j                   |k7  }|du s*|}- |D cg c]"  }t        j
                  j                  ||      $ c}D ]+  }t        j                  |      j                   |k7  }|du s*|}-  |S c c}	w c c}w c c}	w c c}w c c}	w c c}w c c}	w c c}w )NFownergroupT)params
check_moder   walkset_owner_if_differentr   r)   pwdgetpwnampw_uidstatst_uidset_group_if_differentgrpgetgrnamgr_gidst_gid)r   r-   r/   r2   r3   dirpathdirnames	filenamesowner_changedddirffileuidgroup_changedgids                   r   chown_recursiverM   S  s$   GMM'"EMM'"E  02 0,9 & = =gue T D(+G>FGBGGLL!4G 0C$*$A$A#ue$TM$,"/0 @II!RWW\\'15I 0D$*$A$A$u$UM$,"/00 ,,u%,,C02 0,9!#!1!8!8C!? D(+G>FGBGGLL!4G 0C%'WWS\%8%8C%?M$,"/0 @II!RWW\\'15I 0D%'WWT]%9%9S%@M$,"/00   02 0,9 & = =gue T D(+G>FGBGGLL!4G 0C$*$A$A#ue$TM$,"/0 @II!RWW\\'15I 0D$*$A$A$u$UM$,"/006 N ,,u%,,C02 0,9!#!1!8!8C!? D(+G>FGBGGLL!4G 0C%'WWS\%8%8C%?M$,"/0 @II!RWW\\'15I 0D%'WWT]%9%9S%@M$,"/00 Ng H J H J H J H Js0   )'P!6'P&*'P+'P0('P55'P:)'P?'Qc                   d}|j                   d   }|j                   d   }|j                   d   }t        j                  | |      j                  }t	        |      rd}|j
                  s
|D ]  }t        j                  j                  | |      }	t        j                  j                  ||      }
t        |	d      }t        |
d      }t        j                  j                  |      r0|du r,t        j                  |      }t        j                  ||       n,t        j                  ||       t        j                  ||       ||j!                  ||d       ||j#                  ||d       d} |S )zKCopy files that are different between `src` directory and `dest` directory.Fr2   r3   local_followTr   r   )r4   filecmpdircmp
diff_fileslenr5   r   r   r)   r   islinkreadlinksymlinkshutilcopyfilecopymoder7   r=   )srcdestr-   r/   r2   r3   rO   rR   itemsrc_item_pathdest_item_pathb_src_item_pathb_dest_item_pathlinktos                 r   copy_diff_filesrb     s@    GMM'"EMM'"E==0LT*55J
: 	DGGLLd3MWW\\$5N&}=RSO'?TUww~~o.<53H_5

6#341AB1AB --.>uM --.>uMG!	" Nr   c                   d}|j                   d   }|j                   d   }|j                   d   }t        j                  | |      j                  }t	        |      rd}|j
                  s|D ]  }t        j                  j                  | |      }	t        j                  j                  ||      }
t        |	d      }t        |
d      }t        j                  j                  |      rHt        j                  j                  |      r)|du r%t        j                  |||        t        ||       t        j                  j                  |      rNt        j                  j                  |      r/|du r+t        j                  |      }t        j                   ||       t        j                  j                  |      rct        j                  j#                  |      rD|du r@t        j$                  ||       ||j'                  ||d       ||j)                  ||d       t        j                  j                  |      rNt        j                  j#                  |      r/|du r+t        j                  |      }t        j                   ||       t        j                  j                  |      sut        j                  j#                  |      rVt        j$                  ||       t        j*                  ||       ||j'                  ||d       ||j)                  ||d       t        j                  j                  |      sDt        j                  j                  |      r%t        j                  |||        t        ||       d} |S )	zFCopy files that exist in `src` directory only to the `dest` directory.Fr2   r3   rO   Tr   r   symlinks)r4   rP   rQ   	left_onlyrS   r5   r   r   r)   r   rT   isdirrW   copytreerM   rU   rV   isfilerX   r7   r=   rY   )rZ   r[   r-   r/   r2   r3   rO   rf   r\   r]   r^   r_   r`   ra   s                 r   copy_left_onlyrj     s    GMM'"EMM'"E==0LsD)33I
9~ &	DGGLLd3MWW\\$5N&}=RSO'?TUww~~o.277==3QVbfjVj1AP\L\] 0&9ww~~o.277==3QVbfkVk_5

6#34ww~~o.277>>/3RWcgkWk1AB$112BE5Q$112BE5Qww~~o.277>>/3RWcglWl_5

6#3477>>/2rww~~o7V1AB1AB$112BE5Q$112BE5Q77>>/2rww}}_7U1AP\L\] 0&9GM&	N Nr   c                   d}t        j                  | |      j                  }|D ]  }t        j                  j                  | |      }t        j                  j                  ||      }t        |d      }t        |d      }	t        ||	|      }
t        ||	|      }|
s|rd}t        t        j                  j                  | |      t        j                  j                  ||      |      xs |} |S )NFr   r   T)
rP   rQ   common_dirsr   r   r)   r   rb   rj   copy_common_dirs)rZ   r[   r-   r/   rl   r\   r]   r^   r_   r`   diff_files_changedleft_only_changeds               r   rm   rm     s    G..d+77K iS$/dD1"=9NO#N;PQ,_>NPVW*?<LfU!2G #277<<T#:BGGLLt<TV\]hahi Nr   c                     t        t        t        d      t        d      t        dd      t        dd      t        dd	      t        dd	      t        d      t        d
      t        d      t        d      t        d      t        dd	            dd      } | j                  d   }t        |d      }| j                  d   }t        j
                  j                  |vr*dj                  t        j
                  j                  |      }t        |d      }| j                  d   }| j                  d   }| j                  j                  dd       }| j                  j                  dd       }| j                  d   }	| j                  d   }
| j                  d   }| j                  d   }| j                  d   }| j                  d   }| j                  d   }t        j
                  j                  |      s| j                  d|z         t	        j                  |t        j                        s| j                  d|z         | j                  d   d k(  rBd!t        j                  t	        j                  |      j                        z  | j                  d<   | j                  d   }d}d }d }d }t        j
                  j!                  |      r%	 | j#                  |      }	 | j-                  |      }n>|r<t        j
                  j1                  |      s| j                  d#t+        |      z         |r||k7  r| j                  d$||%       |j3                  t        j                        r	|r t        j
                  j5                  ||      }t        |d      }t        j
                  j7                  |      }t        |d      }t        j
                  j                  |      s	 t9        |      \  }}| j@                  r| jC                  d(|z  d|)       t	        jD                  |       d}| jG                  | j                        }| j                  d*   }|||d<   nd |d<   tI        | ||       t        j
                  j1                  |      rPt        j
                  jK                  |      }|r|}t        j
                  j5                  ||      }t        |d      }t        j
                  j                  |      rt        j
                  jM                  |      r.|	r,t        j
                  jO                  |      }t+        |d      }|s| jC                  d+||d,       t	        j                  |t        j                        rt        j
                  j!                  |      r| j#                  |      }nt        j
                  j                  t        j
                  j7                  |            se	 t	        j                  t        j
                  j7                  |             | j                  d/t        j
                  j7                  |      z         t	        j                  t        j
                  j7                  |      t        jR                        sA| j                  d0   s2| j                  d1t        j
                  j7                  |      z         d }||k7  s t        j
                  jM                  |      r| j@                  s	 |r0t        j
                  j                  |      r| jU                  |      }t        j
                  jM                  |      r/t	        jV                  |       tY        |d2      j[                          |r|| j]                  ||d       || j_                  ||d       || ja                  ||d       d3|vr| j                  d4|z         | jc                  ||z        \  }}}|d5k7  r| j                  d6|||7       |} |rt        j
                  j!                  |      rcte        jf                  t        j
                  j7                  |      8      \  }!} ti        jj                  ||        	 ti        jl                  ||        | js                  | || j                  d0   | :       d}|`|]|rZt        j
                  j1                  | j                  d         r-t        | j                  d   d      }t        | j                  d   d      }|j3                  t        j
                  j                        rit        j
                  j1                  | j                  d         r=ty        |||       }"t{        |||       }#t}        |||       }$t        ||       }%|"s|#s|$s|%rd}|j3                  t        j
                  j                        rt        j
                  j                  | j                  d         st        t        j
                  jK                  |      d      }&t        t        j
                  j5                  ||&      d      }t        t        j
                  j5                  | j                  d   d>      d      }| j@                  sti        j                  |||
 ?       t        ||        d}|j3                  t        j
                  j                        st        j
                  j1                  | j                  d         rht        t        j
                  jK                  |      d      }&t        t        j
                  j5                  ||&      d      }t        t        j
                  j5                  | j                  d   d>      d      }| j@                  sFt        j
                  j                  |      s'ti        j                  |||
 ?       d}t        ||        | j@                  r!t        j
                  j                  |      sd}t        j
                  j                  |      r=ty        |||       }"t{        |||       }#t}        |||       }$t        ||       }%|"s|#s|$s|%rd}|j3                  t        j
                  j                        sit        j
                  j                  | j                  d         s<t        t        j
                  jK                  | j                  d         d      }&t        t        j
                  j5                  ||&      d      }| j@                  st        j
                  j                  |      st	        jD                  |       d}t        t        j
                  j5                  | j                  d   d>      d      }ty        |||       }"t{        |||       }#t}        |||       }$t        ||       }%| j@                  r!t        j
                  j                  |      sd}t        |||||@      }'|r||'dA<   | jG                  | j                  |B      }(| j                  |(|'dC         |'dC<    | jB                  dDi |' y # t$        t&        f$ r(}| j)                  d"t+        |      z         Y d }~d }~ww xY w# t.        $ r Y w xY w# t:        $ rM}|j<                  d&xx   d'j                  |      z  cc<    | j                  dDi |j>                   Y d }~3d }~ww xY w# t$        $ rX}d-t+        |      jQ                         v r2| j                  d.t        j
                  j7                  |      z         Y d }~	ad }~ww xY w# t$        $ rX}|jn                  tn        jp                  k(  r/|d k(  r*| j)                  d9j                  t+        |                   n Y d }~Jd }~ww xY w# t&        t$        f$ r/ | j                  d;|d<|tu        jv                         =       Y lw xY w)ENr   )typestrT)rq   no_log)rq   requiredboolF)rq   defaultraw)rZ   _original_basenamecontentr[   backupforcevalidatedirectory_mode
remote_srcrO   checksumfollow)argument_specadd_file_common_argssupports_check_moderZ   r   r   r[   z.{0}{1}rz   r{   rx   r|   r   rO   moder2   r3   r~   r   zSource %s not found)r   zSource %s not readablepreservez0%03oz5Unable to calculate src checksum, assuming change: %sz+Cannot copy invalid source '%s': not a filezBCopied file does not match the expected checksum. Transfer failed.)r   r   expected_checksumr   z Could not copy to {0}z"dest directory %s would be created)r   r/   rZ   r}   zfile already exists)r   rZ   r[   r/   zpermission deniedz*Destination directory %s is not accessiblez'Destination directory %s does not existunsafe_writeszDestination %s not writablewz%szvalidate must contain %%s: %sr   zfailed to validate)r   exit_statusstdoutstderr)rG   zUnable to copy stats {0})r   keep_dest_attrszfailed to copy: z to )r   	tracebackr   rd   )r[   rZ   md5sumr   r/   backup_file)r   r/   r   )Br   dictr4   r   r   r   sepformatgetr   	fail_jsonaccessR_OKr;   S_IMODEst_moderi   sha1OSErrorIOErrorwarnr   md5
ValueErrorrg   endswithr)   r"   r    r   resultr   r5   	exit_jsonmakedirsload_file_common_argumentsr,   basenamerT   realpathlowerW_OKbackup_localunlinkopencloseset_mode_if_differentr7   r=   run_commandtempfilemkstemprW   rX   copystaterrnoENOSYSatomic_mover   
format_excrb   rj   rm   rM   rh   r+   ))r-   rZ   b_srcr[   b_destrz   r{   rx   r|   r   rO   r   r2   r3   r~   r   r/   checksum_destchecksum_src
md5sum_srcer"   	b_dirnamer&   r'   r.   r}   r   r   rcouterrb_mysrcdummyrn   ro   common_dirs_changedowner_group_changed
b_basenameres_args	file_argss)                                            r   mainr     s   &!#/eD16D1VU3FD1u%U+(6*u%VU3
 " #F( --
CS!67E== D	ww{{$T2d#89F]]8$FMM'"E**+?F}}  T2H]]8$F==0L== DMM'"EMM'"E|,J}}Z(H77>>% 2c:;99UBGG$5=> }}V
* '$,,rwwu~7M7M*N Nf== DGMLJ	ww~~c	`!;;s+L	CJ 
BGGMM#.FSVWXLH,T!& 	 	
 }}RVV77<<&89D$'<=''//$'W-BC	ww~~i(.9OPW9X6!#5
     %IG%S]agj kKK	"G#>>v}}MN#]]+;<N))7v&)-v&23CEWY_aoqxy	ww}}V77##C()Hww||D(+$'<=	ww~~f77>>&!fWW%%f-FV,ABD!6CdTYZ99VRWW%"''..*@"KK-Mww~~bggoof56q
 /0 !Jbggoo^bNc!de99RWW__V,bgg6v}}_?]:bggood>STUK}$v(>  )qww~~f-&,&9&9$&?77>>&)IIf%%++- '44S$F(55c5%H(55c5%H8+((-LPX-Y(Z%+%7%73%GNRcQw((-ArZ]fi(j"''.."7%-%5%5"''//&:Q%RNE7OOE73"w7 ""7Do@^t~p~"   5"''--e(<=V]]51:OPEfmmF3<QRF||BGGKK(RWW]]6==;P-Q%4UFF%K"$25&&$I!&6uff&M#&5ff&E#%):>QUh"G||BGGKK(f@U1V%bgg&6&6s&;DYZ
!"'',,vz"BK`a fmmE.BB!GPef((OOE6<LMf-<<,v}}V?T1U%bgg&6&6s&;DYZ
!"'',,vz"BK`a fmmE.BB!GPef((1GOOE6<LM"G#D&1$$RWW^^F-C"G77>>&))8)O&(6uff(M%*:5&&*Q'*9&&*I')->BUYl"&<<,RWW^^FMMRXDY5Z%bgg&6&6v}}U7K&LUjk
!"'',,vz"BK`a((1GKK'"G$RWW\\&--2F%KTijE)8)O&(6uff(M%*:5&&*Q'*9&&*I'$$RWW^^F-C"Gs:gH "-11&--d1KI ??	8T]K^_HYF x u ! 	`KKOR[\]R^^__	`
  		, & .#;#B#B4#HH   -199--.N  q&)A,*<*<*>>$$)UY[Y`Y`YhYhimYn)o$pqV # "9949K"KK(B(I(I)TYJZ([\! ]" W% q  3%MYbYmYmYo pqs   z ({ .{  2|7 E;? ~ -#? {#{{	{{	|4'A|//|47	~ A~~	<$A71? 7<<? ?:A@=@<A@=__main__)
__future__r   DOCUMENTATIONEXAMPLESRETURNr   rP   r>   r   os.pathr8   rW   r;   r   r   +ansible.module_utils.common.text.convertersr   r   ansible.module_utils.basicr   	Exceptionr   r    r,   rM   rb   rj   rm   r   r   r   r   r   <module>r      s    #Tl?B=
~   
 	  
     K 4 
2$
>B>2j$w!t zF r   