
    Vh                         d dl mZmZmZ eZdZdZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZ ddZ!d Z"d Z#e$dk(  r e#        yy)    )absolute_importdivisionprint_functionaT  
---
module: mount
short_description: Control active and configured mount points
description:
  - This module controls active and configured mount points in C(/etc/fstab).
author:
  - Ansible Core Team
  - Seth Vidal (@skvidal)
version_added: "1.0.0"
options:
  path:
    description:
      - Path to the mount point (e.g. C(/mnt/files)).
      - Before Ansible 2.3 this option was only usable as O(ignore:dest), O(ignore:destfile), and O(name).
    type: path
    required: true
    aliases: [ name ]
  src:
    description:
      - Device (or NFS volume, or something else) to be mounted on I(path).
      - Required when O(state) set to V(present), V(mounted), or V(ephemeral).
      - Ignored when O(state) set to V(absent) or V(unmounted).
    type: path
  fstype:
    description:
      - Filesystem type.
      - Required when O(state) is V(present), V(mounted), or V(ephemeral).
    type: str
  opts:
    description:
      - Mount options (see fstab(5), or vfstab(4) on Solaris).
    type: str
  opts_no_log:
    description:
      - Do not log opts.
    type: bool
    default: false
  dump:
    description:
      - Dump (see fstab(5)).
      - Note that if set to C(null) and O(state=present),
        it will cease to work and duplicate entries will be made
        with subsequent runs.
      - Has no effect on Solaris systems or when used with O(state=ephemeral).
    type: str
    default: '0'
  passno:
    description:
      - Passno (see fstab(5)).
      - Note that if set to C(null) and O(state=present),
        it will cease to work and duplicate entries will be made
        with subsequent runs.
      - Deprecated on Solaris systems. Has no effect when used with O(state=ephemeral).
    type: str
    default: '0'
  state:
    description:
      - If V(mounted), the device will be actively mounted and appropriately
        configured in I(fstab). If the mount point is not present, the mount
        point will be created.
      - If V(unmounted), the device will be unmounted without changing I(fstab).
      - V(present) only specifies that the device is to be configured in
        I(fstab) and does not trigger or require a mount.
      - V(ephemeral) only specifies that the device is to be mounted, without changing
        I(fstab). If it is already mounted, a remount will be triggered.
        This will always return RV(ignore:changed=true). If the mount point O(path)
        has already a device mounted on, and its source is different than O(src),
        the module will fail to avoid unexpected unmount or mount point override.
        If the mount point is not present, the mount point will be created.
        The I(fstab) is completely ignored. This option is added in version 1.5.0.
      - V(absent) specifies that the mount point entry O(path) will be removed
        from I(fstab) and will also unmount the mounted device and remove the
        mount point. A mounted device will be unmounted regardless of O(src) or its
        real source. V(absent) does not unmount recursively, and the module will
        fail if multiple devices are mounted on the same mount point. Using
        V(absent) with a mount point that is not registered in the I(fstab) has
        no effect, use V(unmounted) instead.
      - V(remounted) specifies that the device will be remounted for when you
        want to force a refresh on the mount itself (added in 2.9). This will
        always return RV(ignore:changed=true). If O(opts) is set, the options will be
        applied to the remount, but will not change I(fstab).  Additionally,
        if O(opts) is set, and the remount command fails, the module will
        error to prevent unexpected mount changes.  Try using V(mounted)
        instead to work around this issue.  V(remounted) expects the mount point
        to be present in the I(fstab). To remount a mount point not registered
        in I(fstab), use V(ephemeral) instead, especially with BSD nodes.
      - V(absent_from_fstab) specifies that the device mount's entry will be
        removed from I(fstab). This option does not unmount it or delete the
        mountpoint.
    type: str
    required: true
    choices: [ absent, absent_from_fstab, mounted, present, unmounted, remounted, ephemeral ]
  fstab:
    description:
      - File to use instead of C(/etc/fstab).
      - You should not use this option unless you really know what you are doing.
      - This might be useful if you need to configure mountpoints in a chroot environment.
      - OpenBSD does not allow specifying alternate fstab files with mount so do not
        use this on OpenBSD with any state that operates on the live filesystem.
      - This parameter defaults to C(/etc/fstab) or C(/etc/vfstab) on Solaris.
      - This parameter is ignored when O(state=ephemeral).
    type: str
  boot:
    description:
      - Determines if the filesystem should be mounted on boot.
      - Only applies to Solaris and Linux systems.
      - For Solaris systems, C(true) will set C(yes) as the value of mount at boot
        in C(/etc/vfstab).
      - For Linux, FreeBSD, NetBSD and OpenBSD systems, C(false) will add C(noauto)
        to mount options in C(/etc/fstab).
      - To avoid mount option conflicts, if C(noauto) specified in O(opts),
        mount module will ignore O(boot).
      - This parameter is ignored when O(state=ephemeral).
    type: bool
    default: true
  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: false
notes:
  - As of Ansible 2.3, the O(name) option has been changed to O(path) as
    default, but O(name) still works as well.
  - Using O(state=remounted) with O(opts) set may create unexpected results based on
    the existing options already defined on mount, so care should be taken to
    ensure that conflicting options are not present before hand.
aw  
# Before 2.3, option 'name' was used instead of 'path'
- name: Mount DVD read-only
  ansible.posix.mount:
    path: /mnt/dvd
    src: /dev/sr0
    fstype: iso9660
    opts: ro,noauto
    state: present

- name: Mount up device by label
  ansible.posix.mount:
    path: /srv/disk
    src: LABEL=SOME_LABEL
    fstype: ext4
    state: present

- name: Mount up device by UUID
  ansible.posix.mount:
    path: /home
    src: UUID=b3e48f45-f933-4c8e-a700-22a159ec9077
    fstype: xfs
    opts: noatime
    state: present

- name: Unmount a mounted volume
  ansible.posix.mount:
    path: /tmp/mnt-pnt
    state: unmounted

- name: Remount a mounted volume
  ansible.posix.mount:
    path: /tmp/mnt-pnt
    state: remounted

# The following will not save changes to fstab, and only be temporary until
# a reboot, or until calling "state: unmounted" followed by "state: mounted"
# on the same "path"
- name: Remount a mounted volume and append exec to the existing options
  ansible.posix.mount:
    path: /tmp
    state: remounted
    opts: exec

- name: Mount and bind a volume
  ansible.posix.mount:
    path: /system/new_volume/boot
    src: /boot
    opts: bind
    state: mounted
    fstype: none

- name: Mount an NFS volume
  ansible.posix.mount:
    src: 192.168.1.100:/nfs/ssd/shared_data
    path: /mnt/shared_data
    opts: rw,sync,hard
    state: mounted
    fstype: nfs

- name: Mount NFS volumes with noauto according to boot option
  ansible.posix.mount:
    src: 192.168.1.100:/nfs/ssd/shared_data
    path: /mnt/shared_data
    opts: rw,sync,hard
    boot: false
    state: mounted
    fstype: nfs

- name: Mount ephemeral SMB volume
  ansible.posix.mount:
    src: //192.168.1.200/share
    path: /mnt/smb_share
    opts: "rw,vers=3,file_mode=0600,dir_mode=0700,dom={{ ad_domain }},username={{ ad_username }},password={{ ad_password }}"
    opts_no_log: true
    fstype: cifs
    state: ephemeral
N)AnsibleModule)ismount)	iteritems)to_bytes	to_native)booleanc                     | j                   d   r| j                  |      }nd}t        |d      }|D ]  }|j                  |        |j	                          |j                          |S )Nbackup w)paramsbackup_localopenwriteflushclose)modulelinespathbackup_filefs_wls         g/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/ansible/posix/plugins/modules/mount.pywrite_fstabr      sb    }}X))$/c?D 

1 	JJLJJL    c                     t        | t              r| S | j                  dd      j                  dd      j                  dd      S )zhEscape invalid characters in fstab fields.

    space (040)
    ampersand (046)
    backslash (134)
    \z\134 z\040&z\046)
isinstanceintreplace)vs    r   _escape_fstabr'      sA     !S GD'"GC!GC!		#r   c                 *    t        | |      \  }}}||fS )z+Set/change a mount point location in fstab.)_set_mount_save_old)r   argsnamebackup_lineschangeds        r   	set_mountr.     s    "5fd"CD,=r   c           
         g }g }d}d}t        t        |      D cg c]  \  }}|dk7  s|t        |      f c}}      }d}	t        j                         dk(  rd}	t        |d   d      j                         D ]  }
|
j                  d      s|
dz  }
|j                  |
       |
j                         s|j                  |
       M|
j                         j                  d	      r|j                  |
       ~|
j                         }t        j                         dk(  rt        |      d
k7  sHt        j                         dk(  rt        |      dvs$t        j                         dvr!t        |      dk7  r|j                  |
       i }t        j                         dk(  r|\  |d<   }|d<   |d<   |d<   |d<   |d<   n)g d}d|d<   d|d<   t        |      D ]  \  }}||||   <    |d   |d   k7  sd|v r.|d   dk(  r&|d   dk(  r|d   |d   k7  r|j                  |
       d}d}t        j                         dk(  rd}|D ]  }||   ||   k7  s||   ||<   d} |r|j                  |	|z         |j                  |
        |s|j                  |	|z         d}|r| j                  st        | ||d         |d<   |d   ||fS c c}}w )zHSet/change a mount point location in fstab. Save the old fstab contents.Fwarningsz9%(src)s %(name)s %(fstype)s %(opts)s %(dump)s %(passno)s
SunOSz;%(src)s - %(name)s %(fstype)s %(passno)s %(boot)s %(opts)s
fstabr
#   Linux)         )r1   r7   r:   srcr+   fstypepassnobootopts)r;   r+   r<   r?   dumpr=   r   r@   noneswapT)r;   r<   r?   r@   r=   )r;   r<   r=   r>   r?   r   )dictr   r'   platformsystemr   	readlinesendswithappendstrip
startswithsplitlen	enumerate
check_moder   )r   r*   to_write	old_linesexistsr-   kr&   escaped_argsnew_linelinefieldslddashfields_labelsifieldargs_to_checkts                      r   r)   r)     s    HIFG9T?^41aaS]o!]1-.^_LKHG#J 	 T']C(224 P"}}T"DLDzz|OOD!::<""3'OOD!
 !W,V1A!W,VI1M!);;Fq@POOD!??' 5	6
886
6
 PM BvJBxL &f- -5',=#$-
 6
l622TMvJ&(xLF*uIe,OOD! C??'GM 	A!uQ'$Q1	
 OOHrM*OOD!aP"d </0v(()&(DMJ]L)W--A _s
   K

K

c           
         g }d}t        |d         }t        |d   d      j                         D ]w  }|j                         s|j	                  |       &|j                         j                  d      r|j	                  |       Wt        j                         dk(  rt        |j                               dk7  s3t        j                         dk7  r.t        |j                               dk7  r|j	                  |       i }t        j                         dk(  r+|j                         \  |d	<   }|d<   |d
<   |d<   |d<   |d<   n)|j                         \  |d	<   |d<   |d
<   |d<   |d<   |d<   |d   |k7  sd	|v r.|d   dk(  r&|d
   dk(  r|d	   |d	   k7  r|j	                  |       vd}z |r| j                  st        | ||d          |d   |fS )z Remove a mount point from fstab.Fr+   r2   r3   r5   r1   r6   r:   r;   r<   r=   r>   r?   r@   rA   rB   T)r'   r   rF   rI   rH   rJ   rD   rE   rL   rK   rN   r   )r   r*   rO   r-   escaped_namerU   rW   rX   s           r   unset_mountr`   }  s    HG f.LT']C(224 5zz|OOD!::<""3'OOD! !W,TZZ\1Ba1G!W,TZZ\1Ba1GOOD!??' 

5	6
886
6
 

5	6
86
6
8 6
l*TMvJ&(xLF*uIe,OOD! k5n v((FHd7m4L'""r   c                 ,   g }| r| dk7  rt        j                         j                         dk7  ret        j                         j                         j                  d      r|j	                  d       n|j	                  d       |j	                  |        |S )N
/etc/fstabsunosbsd-Fz-T)rD   rE   lowerrG   rH   )
fstab_fileresults     r   _set_fstab_argsri     ss    F ,&OO##%0??""$--e4MM$MM$j!Mr   c                    g }t        j                         j                         dk(  r|j                  d       n|j                  d       |j                  | d          | d   dk7  r
|d| d   gz  }|j                  | d          |S )	Nrc   re   z-tr<   r?   defaults-or;   )rD   rE   rf   rH   )r*   rh   s     r   _set_ephemeral_argsrm     s}    F G+dd
MM$x.! F|z!4f&&
MM$u+Mr   c                    | j                  dd      }|d   }|g}t        j                         j                         dk(  r"| j                  d   6| j                  d       n#| j                  d	   d
k7  r|t        |d         z  }| j                  d	   d
k(  r|t        |      z  }||gz  }| j                  |      \  }}}|dk(  ry|||z   fS )z%Mount up a path or remount if needed.mountTrequiredr+   openbsdr2   dOpenBSD does not support alternate fstab files. Do not specify the fstab parameter for OpenBSD hostsmsgstate	ephemeralr   r   r   )	get_bin_pathrD   rE   rf   r   	fail_jsonri   rm   run_command)r   r*   	mount_binr+   cmdrcouterrs           r   ro   ro     s     ##Gd#;I<D+C I- ==!-D  F
 ==![0?4=11C}}W,"4((D6MC%%c*LBS	Qw39}r   c                 t    | j                  dd      }||g}| j                  |      \  }}}|dk(  ry|||z   fS )zUnmount a path.umountTrp   r   rx   )ry   r{   )r   r   
umount_binr}   r~   r   r   s          r   r   r     sQ     $$X$=Jt
C%%c*LBS	Qw39}r   c                    | j                  dd      }|g}t        j                         j                         j	                  d      r-| j
                  d   dk(  r|d   dk7  r|d	d
|d   gz  }n6|d	gz  }n/| j
                  d   dk(  r|d   dk7  r|d
d|d   z   gz  }n|d
dgz  }t        j                         j                         dk(  r"| j
                  d   6| j                  d       n#| j
                  d   dk7  r|t        |d         z  }| j
                  d   dk(  r|t        |      z  }||d   gz  }dx}}	 | j
                  d   dk7  r4t        j                         j                         j	                  d      rd}n| j                  |      \  }}}d}|dk7  rW||z   }| j
                  d   dk(  r|d   dk7  r| j                  d       t        | |d         \  }}|dk(  rt        | |      \  }}||fS # t        $ r d}Y ow xY w)zCTry to use 'remount' first and fallback to (u)mount if unsupported.ro   Trp   rd   rv   	remountedr?   rk   z-url   zremount,remountrr   r2   rs   rt   rw   r+   r      r   a   Options were specified with remounted, but the remount command failed. Failing in order to prevent an unexpected mount result. Try replacing this command with a "state: unmounted" followed by a "state: mounted" using the full desired mount options instead.)ry   rD   rE   rf   rG   r   rz   ri   rm   r{   	Exceptionr   ro   )r   r*   r|   r}   r   r   r~   ru   s           r   r   r     sJ   ##Gd#;I+C  ))%0==![0T&\Z5OD$V--CD6MC==![0T&\Z5OD*tF|344CD)$$C I- ==!-D  F
 ==![0?4=11C}}W,"4((DL>CNC#==![0X__5F5L5L5N5W5WX]5^ B!--c2LBS C	QwCi==![0T&\Z5OD  F f.C7FD)GBs7N-  s   <AG9 9HHc                    d}t        j                         dk(  r||||v rd}|S ||v r||   d   |k(  }|S | j                  dd      }d|z  }| j                  |      \  }}	}
g }t	        |	      r(t        |	      j                         j                  d      }|D ]5  }|j                         }|d	   |k(  s||d
   |k(  r|d   |k(  s|d}|s4 |S  |S )a  Return whether the dest is bind mounted

    :arg module: The AnsibleModule (used for helper functions)
    :arg dest: The directory to be mounted under. This is the primary means
        of identifying whether the destination is mounted.
    :kwarg src: The source directory. If specified, this is used to help
        ensure that we are detecting that the correct source is mounted there.
    :kwarg fstype: The filesystem type. If specified this is also used to
        help ensure that we are detecting the right mount.
    :kwarg linux_mounts: Cached list of mounts for Linux.
    :returns: True if the dest is mounted with src otherwise False.
    Fr7   Tr;   ro   rp   z%s -lr4   r      r8   )rD   rE   ry   r{   rL   r
   rI   rK   )r   linux_mountsdestr;   r<   
is_mountedbin_pathr}   r~   r   r   mountsmnt	argumentss                 r   is_bind_mountedr   ^  s    JG#(@;|#!
4 1 |#)$/6#=
. ) &&w&> ))#.Cs8s^))+11$7F 
	C		I q\S(CKaLD(q\V+v~!

	 r   c           	         	 t        |      }t        t        j                  |j                               }	 |j                          i }|D ]K  }|j                         }t        |d         t        |d         |d   |d   |d   |d	   |d
   d}|||d   <   M i }|j                         D ]  }	|	d   dk7  rn|	d   |v rg||	d      }
t        |
d         dkD  r1|	d   j                  d|
d   z        r|	d   t        |
d         d |	d<   |
d   dk7  r|
d   |	d   |	d<   |	d   }n|	d   }|	d   ||	d   |	d   d}|||	d   <    |S # t        $ r Y yw xY w# t        $ r | j                  d|z         Y .w xY w)zGather mount informationNzCannot close file %srt   r   r      r8   r9   )id	parent_idrootdstr?   fsr;   r   r   r   z%s/r   /r;   r?   r   )r   r;   r?   r   )r   IOErrormapstrrI   rF   r   rz   rK   r$   valuesrL   rJ   )r   mntinfo_filefr   mntinforU   rV   recordr   r   mr;   s               r   get_linux_mountsr     s    		1;;=)ED		 G ' fQi.VAY1I!91I*":
 !'t' F~~ !${q S%5%@K()A&	NQ&K**51V9+<= "&k#ai./:F x3()%#f+>Ff+Ce*C u:Kd)	
 $s5zC!$F MA    D3lBCDs"   E E 	EEE54E5c                    t        |      st        | ||      syt        j                         dk(  r|t        | |||      ryd| j	                  dd      z  }| j                  |      \  }}}g }t        |      r)t        |      j                         j                  d      }n| j                  d|z  	       |D ])  }	|	j                         }
|
d
   }|
d   }||k(  s#||k(  s) y y)zwReturn True if the mounted fs on mountpoint is the same source than src. Return False if mountpoint is not a mountpointFr7   Tz%s -vro   rp   r4   z/Unable to retrieve mount info with command '%s'rt   r   r   )r   r   rD   rE   ry   r{   rL   r
   rI   rK   rz   )r   r;   
mountpointr   r}   r~   r   r   r   r   rV   mp_srcmp_dsts                r   _is_same_mount_srcr     s     
#jA G#(@ 6<SA
 F''$'?
?C%%c*LBSF
3x3%%'--d3NQTTU S=Vz1 r   c                     t        t        t        dd      t        dd      t        d      t        d      t        dddg	      t        d      t        dd
      t        dd
d      t        d      t        dd
      t        ddg d            dddddggddddggddddggf      } | j                  d   r(| j                  j	                  | j                  d          t        j                         j                         dk(  rGt        | j                  d   dd| j                  d   | j                  d   rdndg       }|d   Xd|d<   nRt        | j                  d   d dd| j                  d   dg !      }|d   d"|d<   t        j                         d#k(  rd$|d<   d%|d&<   g }t        j                         d'k(  r!t        |       }||d(   j                  d)       d*D ]$  }| j                  |   | j                  |   ||<   & t        j                         j                         d+k(  s1t        j                         j                         j                  d,      ru|d   j                  d-      }| j                  d   rd.|v r|d(   j                  d/       n9| j                  d   s*d|d<   |j                  d.       d-j                  |      |d<   | j                  d   dk7  rt        j                  j                  |d         st        j                  j                  t        j                  j!                  |d               s5t        j"                  t        j                  j!                  |d                	 t%        |d   d0      j'                          | j                  d   }| j                  d   }d
}|d5k(  rt1        | |      \  }}nl|d6k(  rt1        | |      \  }}|rU| j2                  sHt5        |      st7        | ||      r)t9        | |      \  }	}
|	r| j+                  d7|d8|
2       t        j                  j                  |      r	 t        j:                  |       n|d:k(  rRt5        |      st7        | ||      r| j2                  s)t9        | |      \  }	}
|	r| j+                  d7|d8|
2       d}nx|dk(  s|dk(  r	g }t        j                  j                  |      s| j2                  s	 d%}|jA                  d;      j                  d;      D ]  }d;j                  ||g      }t        j                  jC                  |      s|jE                  d;      }tG        |d<=      }t        j                  j                  |      rs	 t        jH                  |       |j                  |        	 |dk7  rtQ        | |      \  }}}n	|d   g d
}}}d?}	t5        |      st7        | |||d   |d         ri|r| j2                  stS        | |      \  }	}
d}|dk(  rbtU        | |d   |d   |      rd}| j2                  s@tS        | |      \  }	}
n0| j+                  d@2       nd}| j2                  stW        | |      \  }	}
|	r	 |dk7  rtY        | ||d          	 |d d dA   D ]  }t        j:                  |        	 | j+                  dB|d8
2       nd|dk(  rt[        | |      \  }}nO|dCk(  r8| j2                  s)tS        | |      \  }	}
|	r| j+                  dD|d8|
2       d}n| j+                  dE2       t        j                         j                         dk(  rt]        |d         |d<    | j^                  dGdF|i| y # t(        $ r#}| j+                  d1|d   z  2       Y d }~d }~wt,        $ r/}| j+                  d3|d   d4t/        |      2       Y d }~Jd }~ww xY w# t<        t>        f$ r+}| j+                  d9|d8t/        |      2       Y d }~d }~ww xY w# t<        $ rH}|jJ                  tJ        jL                  k(  rt        j                  jO                  |      s Y d }~Vd }~ww xY w# t<        t>        f$ r,}| j+                  d>|d8t/        |      2       Y d }~d }~ww xY w# t,        $ r Y ,w xY w# t,        $ r Y w xY w)HNboolT)typedefaultr   0)r   r   r+   )r   rq   aliasesF)r   no_logr   )absentabsent_from_fstabmountedpresent	unmountedr   rw   )r   rq   choices)r>   r@   r2   r<   r   r?   opts_no_logr=   r;   r   rv   rv   r   r;   r<   r   rw   )argument_specsupports_check_moderequired_ifr   r?   rc   -r2   r>   yesno)r+   r?   r=   r2   r>   r0   z/etc/vfstabrk   )r+   r?   r@   r=   r2   r>   r0   rb   FreeBSDrwr   r   r7   r0   zKCannot open file /proc/self/mountinfo. Bind mounts might be misinterpreted.)r;   r<   r=   r?   r@   r2   linuxrd   ,noautoz2Ignore the 'boot' due to 'opts' contains 'noauto'.az)Failed to open %s due to permission issuert   zFailed to open z due to r   r   zError unmounting z: zError rmdir r   r   surrogate_or_strict)errorszError making dir r   a  Ephemeral mount point is already mounted with a different source than the specified one. Failing in order to prevent an unwanted unmount or override operation. Try replacing this command with a "state: unmounted" followed by a "state: ephemeral", or use a different destination path.zError mounting r   zError remounting zUnexpected position reachedr-    )0r   rC   r   no_log_valuesaddrD   rE   rf   r   rH   rG   rK   joinosr   rQ   dirnamemakedirsr   r   PermissionErrorrz   r   r
   r`   rN   r   r   r   rmdirOSErrorr   rI   isabslstripr	   mkdirerrnoEEXISTisdirr)   r   r   ro   r   r.   r   	exit_json)r   r*   r   keyr?   erv   r+   r-   resru   dirs_createdcurpathr   	b_curpathexr,   s                    r   mainr      s{   6405#.E"U#6D6(C5!&%8U5#>&!VU3ED  ;W  X
 !i%!23i%!23kE8#45
F, }}]#  v!67  G+v&--( --/T
 = )DMv&--(
 = (DM ??	)DLDL G#'/## %L M D +==)c*DI+  G+x/@/F/F/H/Q/QRW/X F|!!#&== X%5##$XYv&DLKK!88D>DL
 }}W,ww~~d7m,77>>"''//$w-"@ABGGOODM:;dT']C(..0$ MM'"E== DG###FD1g	(	#FD1g6,,t}d K!&$/S$$9=sC % E ww~~d#VHHTN 
+	4=OFL$G$$!&$/S$$9=sC % E G	)	u3ww~~d#F,=,=J #zz#44S9 &G!hh'9:G77==.").."5 (9N OI77>>)4&HHY/(//	:&, K*=fd*K'D,*.v,E,D L$UT(^Mv00"640S # &fd5k4<V"G!,,#*64#8S$$< % > G$$ .S
K'd7mD+DbD1 &GHHW%&
 D#!FG	)	!&$/g	+	  vt,HC  $%L M:;  G+tF|,VF-W--o # b  %PSWX_S`%` aa d  d7mU^_`Ua%b ccdF  ) V$$yQR|)T$UUV<  ' & %'HH$<yAY % BZ& W% J  599Q<H ! J JJf    s   ^ _0 Bb &`-=b 
b?  "c 	_-^22_->$_((_-0`*?!`%%`*-	a>6=a93b 9a>>b b<!b77b<?	cc	cc__main__)NN)z/proc/self/mountinfo)%
__future__r   r   r   r   __metaclass__DOCUMENTATIONEXAMPLESr   r   rD   ansible.module_utils.basicr   <ansible_collections.ansible.posix.plugins.module_utils.mountr   ansible.module_utils.sixr   ansible.module_utils._textr	   r
   )ansible.module_utils.parsing.convert_boolr   r   r'   r.   r)   r`   ri   rm   ro   r   r   r   r   r   r   __name__r   r   r   <module>r      s    A @@DM^  	  4 P . : =$#$g.TA#H"$@EX.bEP&Rx.v zF r   