HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/__pycache__/mount.cpython-310.pyc
o

�N�g��@s,dZddlZddlZddlZddlZddlZddlZddlZddl	Zddl
ZddlZddlm
Z
mZddlmZe�e�ZdZdd�Zdd	�Zd
d�Zdd
�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdadd�ZGdd�d�Z Gdd �d �Z!Gd!d"�d"�Z"dbd$d%�Z#dcd'd(�Z$dbd)d*�Z%dcd+d,�Z&	-			#		.	ddd/d0�Z'	1	1	1	2	&		.	ded3d4�Z(dfd6d7�Z)	8	5		dgd9d:�Z*dfd;d<�Z+	dhd=d�Z,did>d?�Z-djd@dA�Z.dBdC�Z/dDdE�Z0dkdFdG�Z1dHdI�Z2dJdK�Z3dLdM�Z4dNdO�Z5dPdQ�Z6dldTdU�Z7dmdVdW�Z8	1	X	R		.	dndYdZ�Z9dmd[d\�Z:d]d^�Z;d_d`�Z<dS)oz6
Salt module to manage Unix mounts and the fstab file
�N)�CommandExecutionError�CommandNotFoundError)�OrderedDict�mountcCstjj��rdSdS)z)
    Only load on POSIX-like systems
    )Fz;The mount module cannot be loaded: not a POSIX-like system.T)�salt�utils�platformZ
is_windows�r	r	�F/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/mount.py�__virtual__srcCsli}tddvrtdd�}ntdd�}|�d�D]}t�dd|���}t|�d	kr3|d
||d<q|S)N�os��MacOS�Darwin�cmd.run_stdoutrzmount -l�
�\s+� �r�)�
__grains__�__salt__�split�re�sub�len)�ret�mounts�line�compsr	r	r
�_list_mounts$s�r c
Csnt�}d}t�|tj�sd}t|�|���dtvr td�td<td}tj	j
�|���}|D]v}tj	j�
|���}|d�d�}|�d�}	||	d}
d}d}|
ri|�|
i��d�}|o_|��}|�|
i��d�}|d	|d
|d	|d
|dt|d�d
��||	d
|
�dd�|�|dd�t||	d�d
��||d�||d<q.Wd�|S1s�wY|S)Nz/proc/self/mountinfo�File not readable {0}z
disk.blkidr�:�-ZUUIDZLABELr�r��,�\040�\ �)ZmountidZparentid�major�minor�root�opts�fstype�device�
alt_deviceZ	superopts�device_uuid�device_label)r r�access�R_OKr�format�__context__rrr�files�fopen�stringutils�
to_unicoder�index�get�lower�_resolve_user_group_names�replace)
r�_list�filename�msgZ
blkid_info�ifilerrr/Z_sepZdevice_namer1r2r	r	r
�_active_mountinfo2sL


��
��rDc	Cs�t�}d}t�|tj�sd}t|�|���tjj�	|��3}|D]'}tjj
�|���}|d|�
|dd�|dt|d�d��d	�||d<qWd�|S1sRwY|S)
z-
    List active mounts on Linux systems
    z/proc/self/mountsr!rr$Nrrr&)r/r0r.r-)r rr3r4rr5rrr7r8r9r:rr<r>)rr@rArBrCrrr	r	r
�_active_mounts_s$��
�	�	rEcCs tdd��d�D]�}t�dd|���}|r�|ddks"|ddkr#q	t|�}|�d	�rZd
|kr9t|d�d��ng}|rL|d|d
|d�||d<q	|d|d
d�||d<q	d|krgt|d
�d��ng}|r}|d|d|d|d�||d
<q	|d|d|dd�||d
<q	|S)z+
    List active mounts on AIX systems
    r�mount -prrrr�nodez--------)r�	��r&r�r/r.r-r$)r/r.�r)rGr/r.r-)rGr/r.)rrrrr�
startswithr>)rrrZ	comps_lenZ	curr_optsr	r	r
�_active_mounts_aixusB
��������rNcC�Xtdd��d�D] }t�dd|���}|d|dt|d�d	��d
�||d<q	|S)z/
    List active mounts on FreeBSD systems
    rrFrrrrrrr&rKr$�rrrrr>�rrrr	r	r
�_active_mounts_freebsd���rRcCrO)z/
    List active mounts on Solaris systems
    r�mount -vrrrrr)r%�/rKrrPrQr	r	r
�_active_mounts_solaris�rSrVcCs�tdd��d�D]i}t�dd|���}t�d|tj�}t|�dkr]tdd|d	���}d�|����d�}|d	|d
t|d�d��t	|d�
d
��t	|d
�|d	d�||d<q	|d	|dt|d	�d��d�||d<q	|S)z/
    List active mounts on OpenBSD systems
    rrTrrr�	\((.*?)\)r$zls -l rr%�, r)r&)r/r.r-r*r+r1rrKr)rrrr�findall�DOTALLr�joinr>�str�strip)rrr�parensZnodr	r	r
�_active_mounts_openbsd�s$
�
�r_cCsptdd��d�D],}t�dd|���}t�d|tj�d�d�}|d|dt|d	d
��d�||d<q	|S)
z.
    List active mounts on Mac OS systems
    rrrrrrWrrXr$NrKr)rrrrrYrZr>)rrrr^r	r	r
�_active_mounts_darwin�s�r`cCs�ddd�}t|�D]I\}}|�d�d|vrH|�d�d}|�d�d}|}t�d|�s>t|||�}|r>||vr>||}|dt|�||<||�dd	�||<q	|S)
z6
    Resolve user and group names in related opts
    z	user.infoz
group.info)�uid�gid�=rr$z[0-9]+$r'r()�	enumeraterr�matchrr\r?)r-Zname_id_optsZind�optZ_givenidZ_paramZ_id�_infor	r	r
r>�s
r>FcCs�i}tddkrt|�|Sdtdvrt|�|Stddkr&t|�|Stddkr2t|�|Stddvr>t|�|S|rVzt|�W|StyUt|�Y|Swt|�|S)zl
    List the active mounts.

    CLI Example:

    .. code-block:: bash

        salt '*' mount.active
    rZFreeBSD�AIX�kernel�SunOS�OpenBSDr
)	rrRrNrVr_r`rDrrE)�extendedrr	r	r
�active�s4
��
��	�
�
�rmc@s�eZdZdZGdd�de�ZdZdZdZe	efdd��Z
e	d	d
��Ze	dd��Zd
d�Z
dd�Zdd�Zdd�Zedd��Zdd�ZdS)�_fstab_entrya
    Utility class for manipulating fstab entries. Primarily we're parsing,
    formatting, and comparing lines. Parsing emits dicts expected from
    fstab() or raises a ValueError.

    Note: We'll probably want to use os.normpath and os.normcase on 'name'
    c@�eZdZdZdS)z_fstab_entry.ParseError�K
        Error raised when a line isn't parsible as an fstab entry
        N��__name__�
__module__�__qualname__�__doc__r	r	r	r
�
ParseError%�rv)r/�namer.r-�dump�pass_num)r/rxr.r-ry�passz3{device}		{name}	{fstype}	{opts}	{dump} {pass_num}
cCs�t|�dkr
td|����|�d�r|�d��|��}t|�dks't|�dkr,|�d��|�dgt|�t|��tt||��S)NrJzInvalid key array: �#�Comment!r)�Invalid Entry!�0)r�
ValueErrorrMrvr�extend�dict�zip)�clsr�keysrr	r	r
�dict_from_line1s


z_fstab_entry.dict_from_linecO�|di|j|i|����S�Nr	�r��r��args�kwargsr	r	r
�	from_line@�z_fstab_entry.from_linecC�|jjdi|��Sr�)�fstab_formatr5�r��entryr	r	r
�dict_to_lineD�z_fstab_entry.dict_to_linecC�|�|j�S�z8
        String value, only works for full repr
        �r��criteria��selfr	r	r
�__str__H�z_fstab_entry.__str__cC�
t|j�S�z
        Always works
        ��reprr�r�r	r	r
�__repr__N�
z_fstab_entry.__repr__c�"�fdd�|D�}�jdi|��S)�:
        Returns an instance with just those keys
        c�i|]}|�j|�qSr	�r���.0�keyr�r	r
�
<dictcomp>X�z%_fstab_entry.pick.<locals>.<dictcomp>Nr	��	__class__�r�r�Zsubsetr	r�r
�pickT�z_fstab_entry.pickcK�.dd�|��D�}dd�|D�}t|�|_dS)�C
        Store non-empty, non-null values to use as filter
        cS�g|]
}|ddur|�qS�r$Nr	�r��	key_valuer	r	r
�
<listcomp>_�z)_fstab_entry.__init__.<locals>.<listcomp>cS� g|]}|dt|d�f�qS�rr$�r\�r�Z
key_value1r	r	r
r�b� N��itemsr�r��r�r�r�r	r	r
�__init__[�
�z_fstab_entry.__init__cC�tj�tj�|��S�z7
        Resolve equivalent paths equivalently
        �r�path�normcase�normpath�r�r	r	r
�	norm_pathe�z_fstab_entry.norm_pathcC�p|�|�}|j��D]+\}}|dkr,t|�|d��d��}t|�d��}||kr+dSq
|||kr5dSq
dS�zC
        Compare potentially partial criteria against line
        r-�r&FT�r�r�r��sortedr<r�r�rr�r��value�ex_opts�cr_optsr	r	r
rel�
��z_fstab_entry.matchN)rrrsrtrur�rv�
fstab_keys�compatibility_keysr��classmethodr�r�r�r�r�r�r��staticmethodr�rer	r	r	r
rns&



rnc@s�eZdZdZGdd�de�ZdZdZedd��Z	edd	��Z
ed
d��Zdd
�Zdd�Z
dd�Zdd�Zedd��Zdd�ZdS)�
_vfstab_entrya
    Utility class for manipulating vfstab entries. Primarily we're parsing,
    formatting, and comparing lines. Parsing emits dicts expected from
    fstab() or raises a ValueError.

    Note: We'll probably want to use os.normpath and os.normcase on 'name'
    Note: This parses vfstab entries on Solaris like systems

    #device     device      mount       FS  fsck    mount   mount
    #to mount   to fsck     point       type    pass    at boot options
    #
    /devices    -   /devices            devfs    -   no     -
    c@ro)z_vfstab_entry.ParseErrorz9Error raised when a line isn't parsible as an fstab entryNrqr	r	r	r
rv�rwrv)r/�device_fsckrxr.�	pass_fsck�
mount_at_bootr-z^{device:<11} {device_fsck:<3} {name:<19} {fstype:<8} {pass_fsck:<3} {mount_at_boot:<6} {opts}
cCsB|�d�r
|�d��|��}t|�dkr|�d��tt|j|��S)Nr|r}rIr~)rMrvrrr�r��vfstab_keys)r�rrr	r	r
r��s


z_vfstab_entry.dict_from_linecOr�r�r�r�r	r	r
r��r�z_vfstab_entry.from_linecCr�r�)�
vfstab_formatr5r�r	r	r
r��r�z_vfstab_entry.dict_to_linecCr�r�r�r�r	r	r
r��r�z_vfstab_entry.__str__cCr�r�r�r�r	r	r
r��r�z_vfstab_entry.__repr__cr�)r�cr�r	r�r�r�r	r
r��r�z&_vfstab_entry.pick.<locals>.<dictcomp>Nr	r�r�r	r�r
r��r�z_vfstab_entry.pickcKr�)r�cSr�r�r	r�r	r	r
r��r�z*_vfstab_entry.__init__.<locals>.<listcomp>cSr�r�r�r�r	r	r
r��r�Nr�r�r	r	r
r��r�z_vfstab_entry.__init__cCr�r�r�r�r	r	r
r��r�z_vfstab_entry.norm_pathcCr�r�r�r�r	r	r
re�r�z_vfstab_entry.matchN)rrrsrtrur�rvr�r�r�r�r�r�r�r�r�r�r�r�rer	r	r	r
r�|s&�





r�c@s�eZdZdZGdd�de�ZdZdZeefdd��Z	edd	��Z
ed
d��Zedd
��Zedd��Z
dd�Zdd�Zdd�Zdd�Zdd�Zedd��Zdd�Zdd�Zd S)!�_FileSystemsEntrya
    Utility class for manipulating filesystem entries. Primarily we're parsing,
    formatting, and comparing lines. Parsing emits dicts expected from
    fstab() or raises a ValueError.

    Note: We'll probably want to use os.normpath and os.normcase on 'name'
    c@ro)z_FileSystemsEntry.ParseErrorrpNrqr	r	r	r
rv�rwrv)r/rxr.�vfstyper-r)�devr�rxr.r�r-r�typeZvfsZaccountZboot�check�free�nodenameZquota�sizeZvol�logcCs�t|�dkr
td|����|stj}n
t|�dkr td|����|}t�}|d�d�d��|d<|�d�|D]5}|�d�rE|�	d	��|�d
�}t|�dkrU|�	d��|d��}||vrh|d��||<q9td
|����|S)NrzInvalid number of lines: rJzInvalid key name array: rr"rxr|r}z= r~r$z%Invalid name for use in filesystems: )
rr�r��filesystems_keysrrr]�poprMrv)r��linesr�Z	blk_linesZorddictrrZkey_namer	r	r
�dict_from_lines
s*




z!_FileSystemsEntry.dict_from_linescCs<|}|r|��D]\}}|�d�rq|tjvr|||<q|S)N�__)r�rMr�r�)r�Zipargsr�Z
cmdln_dictr�r�r	r	r
�dict_from_cmd_line(s

�z$_FileSystemsEntry.dict_from_cmd_linecOr�r�)r�r�r	r	r
r�5r�z_FileSystemsEntry.from_linecCs\|}|ddtj}|��D]\}}d|vr$|d|�d|��tj7}q|tj7}t|�S�Nrxr"rHz		= )r�linesepr�r\)r��fsys_dict_entryr�Zstrg_out�k�vr	r	r
�
dict_to_lines9s�
z_FileSystemsEntry.dict_to_linescCsr|}g}|�t|ddtj��|��D]\}}d|vr.|�td|�d|��tj��q|�ttj��|Sr�)�appendr\rr�r�)r�r�r�Zlist_outr�r�r	r	r
�dict_to_list_linesCs �z$_FileSystemsEntry.dict_to_list_linescCst�}|j||jd<|S)Nrx)rr�)r�rr	r	r
�dict_from_entryNsz!_FileSystemsEntry.dict_from_entrycCr�r�)r�r�r�r	r	r
r�Sr�z_FileSystemsEntry.__str__cCr�r�r�r�r	r	r
r�Yr�z_FileSystemsEntry.__repr__cr�)r�cr�r	r�r�r�r	r
r�cr�z*_FileSystemsEntry.pick.<locals>.<dictcomp>Nr	r�r�r	r�r
r�_r�z_FileSystemsEntry.pickcKr�)r�cSr�r�r	r�r	r	r
r�jr�z._FileSystemsEntry.__init__.<locals>.<listcomp>cSr�r�r�r�r	r	r
r�mr�N)r�rr�r�r	r	r
r�fr�z_FileSystemsEntry.__init__cCr�r�r�r�r	r	r
r�pr�z_FileSystemsEntry.norm_pathcCs||d}|j��D]2\}}||vr9|dkr/t|�|d��d��}t|�d��}||kr.dSq	|||kr8dSq	dSdS)za
        Compare potentially partial criteria against built filesystems entry dictionary
        r$r-r�r&FT)r�r�r�r<r)r��	fsys_viewZevalue_dictr�r�r�r�r	r	r
rews��z_FileSystemsEntry.matchcCs
|j|S)z,
        Return value for input key
        r�)r�r�r	r	r
�__getitem__�r�z_FileSystemsEntry.__getitem__N)rrrsrtrur�rvr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rer�r	r	r	r
r��s0


	



r��
/etc/fstabc
Csi}tj�|�s
|Stjj�|��i}|D]]}tjj�|�}zAt	ddkr2|ddkr,Wqt
�|�}nt�|tj
�}|d�d�|d<|d|vrV|dd7<|d|vsH|||�d�<WqtjyhYqt
jyqYqwWd	�|S1s}wY|S)
z�
    .. versionchanged:: 2016.3.2

    List the contents of the fstab

    CLI Example:

    .. code-block:: bash

        salt '*' mount.fstab
    rirjrr|r-r&rx�_N)rr��isfilerrr7r8r9r:rr�r�rnr�rr�rv)�configrrCrr�r	r	r
�fstab�s:����
��r��/etc/vfstabcCst|�S)z�
    .. versionadded:: 2016.3.2

    List the contents of the vfstab

    CLI Example:

    .. code-block:: bash

        salt '*' mount.vfstab
    )r�)r�r	r	r
�vfstab�s
rc
Cs�d}tddkrt||d�}nt||d�}g}zRtjj�|d��@}|D]5}tjj�|�}z|�	|�r5d}n|�
|�Wq#tjyJ|�
|�Yq#tjyX|�
|�Yq#wWd�n1scwYWnty}z
d}	t
|	�||���d}~ww|r�z'tjj�|d	��}
|
�tjj�|��Wd�WdS1s�wYWdSty�}z
d
}	t
|	�||���d}~wwdS)z�
    .. versionchanged:: 2016.3.2

    Remove the mount point from the fstab

    CLI Example:

    .. code-block:: bash

        salt '*' mount.rm_fstab /mnt/foo /dev/sdg
    Frirj)rxr/�rTN�Couldn't read from {0}: {1}�wb�Couldn't write to {0}: {1})rr�rnrrr7r8r9r:rer�rv�OSErrorrr5�
writelines�data�encode)rxr/r��modifiedr�r�rCr�excrB�ofiler	r	r
�rm_fstab�sR

������������rcCst|||�S)z�
    .. versionadded:: 2016.3.2

    Remove the mount point from the vfstab

    CLI Example:

    .. code-block:: bash

        salt '*' mount.rm_vfstab /mnt/foo /device/c0t0d0p0
    )r)rxr/r�r	r	r
�	rm_vfstab�s
r
�defaults�autoc

Ks�t|t�r
d�|�}||�dd�||�dd�||d�}g}d}
t|t�r%n$t|t�s0d}t|��|dkrFtgd��}||vrBd	g}nd
g}n|g}tdi|��}z|�|�}Wnt	yqdd�}t
||�}d
|�d�}t|��wtj�
|�s�td|�d���zZtjj�|d��H}|D]=}tjj�|�}z%|�|�r�d}
|�|�s�|	r�|�|�nd}
|�t|��n|�|�Wq�tjy�|�|�Yq�wWd�n1s�wYWnty�}z
d}t|�||���d}~ww|
dur�|�t|��d}
|
dk�rJtjjjdd|i|
���sJz(tjj�|d��}|�tjj�|��Wd�W|
S1�s1wYW|
St�yId}t|�|���w|
S)ae
    Verify that this mount is represented in the fstab, change the mount
    to match the data passed, or add the mount if it is not present.

    If the entry is found via `match_on` and `not_change` is True, the
    current line will be preserved.

    CLI Example:

    .. code-block:: bash

        salt '*' mount.set_fstab /mnt/foo /dev/sdz1 ext4
    r&r(r')rxr/r.r-ryrzN�,match_on must be a string or list of stringsr)
�none�tmpfs�sysfs�proc�fusectl�debugfs�
securityfs�devtmpfs�cgroup�nfs�nfs4Z	glusterfs�btrfsrxr/cS�
|tjvS�N)rnr��r�r	r	r
�filterFnc�
zset_fstab.<locals>.filterFn� Unrecognized keys in match_on: "�"�Bad config file "r�present�changer�new�testr�File not writable {0}r	)�
isinstance�listr[r?r\r�	frozensetrnr��KeyError�filterrr�r�rrr7r8r9r:rer�rvrr5r��	test_moderrr)rxr/r.r-ryrzr�r(�match_on�
not_changer��
entry_argsr�rrB�specialFSesr�r�r �invalid_keysrCrr
rr	r	r
�	set_fstabs�



�	

�
�

�������
����r5r#�yesc
Ks�t|t�r
d�|�}|dkrd}|||||||d�}g}
d}t|	t�r$n$t|	t�s/d}t|��|	dkrEtgd��}||vrAd	g}	nd
g}	n|	g}	tdi|��}z|�|	�}Wntypdd�}t	||	�}d
|�d�}t|��wt
j�|�std|�d���zZt
jj�|d��H}|D]=}t
jj�|�}z%|�|�r�d}|�|�s�|
r�|
�|�nd}|
�t|��n|
�|�Wq�tjy�|
�|�Yq�wWd�n1s�wYWnty�}z
d}t|�||���d}~ww|dur�|
�t|��d}|dk�rIt
jjjdd|i|���sIz(t
jj�|d��}|�t
jj�|
��Wd�W|S1�s0wYW|St�yHd}t|�|���w|S)a�
    .. versionadded:: 2016.3.2

    Verify that this mount is represented in the fstab, change the mount
    to match the data passed, or add the mount if it is not present.

    If the entry is found via `match_on` and `not_change` is True, the
    current line will be preserved.

    CLI Example:

    .. code-block:: bash

        salt '*' mount.set_vfstab /mnt/foo /device/c0t0d0p0 ufs
    r&r6�no)rxr/r.r-r�r�r�Nrr)ZdevfsrZctfsZobjfsZsharefs�fsrrxr/cSrr)r�r�rr	r	r
r �r!zset_vfstab.<locals>.filterFnr"r#r$rr%r&rr'r(rr)r	)r*r+r[r\rr,r�r�r-r.rr�r�rrr7r8r9r:rer�rvrr5r�r/rrr)rxr/r.r-r�r�r�r�r(r0r1r�r2r�rrBr3r�r�r r4rCrr
rr	r	r
�
set_vfstab�s�

�


�
�

�������
����r9�/etc/auto_saltc
Cs�t|�}||vr
dSg}zxtjj�|d��f}|D][}tjj�|�}|�d�r,|�|�q|�	�s6|�|�q|�
�}t|�dkrF|�|�q|�
�}d}|d�|d�}	|d�
d	�}
|ri|	|krh|
d
|krhqn|	|krnq|�|�qWd�n1s~wYWnt
y�}z
d}t|�||���d}~wwz$tjj�|d
��}
|
�tjj�|��Wd�n1s�wYWnt
y�}z
d}t|�||���d}~wwtdd�dS)z�
    Remove the mount point from the auto_master

    CLI Example:

    .. code-block:: bash

        salt '*' mount.rm_automaster /mnt/foo /dev/sdg
    Trr|r�/..rr�rr"r$Nrrr�cmd.runz
automount -cv)�
automasterrrr7r8r9r:rMr�r]rrr?rrr5rrrr)rxr/r��contentsr�rCrr�prefixZname_chk�
device_fmtr
rBrr	r	r
�
rm_automastersb




����������rAr�c
KsLt|t�r
d�|�}g}d}	d}
d}tj�|�s(td|�td|d|���d|��}|�d|��}d	|�d|��}
|d
krF|�|d�}z�tj	j
�|d���}|D]�}tj	j�
|�}|�d
�rf|�|�qR|��sp|�|�qR|��}t|�dkr�|�|�qR|d|ks�|d|kr�d}
|r�qR|d|kr�d}	||d<|d|
kr�d}	|
|d<|d|kr�d}	||d<|	r�t�d|�|�d|
�d|�d�}|�|�qR|�|�qRWd�n1s�wYWnty�}z
d}t|�||���d}~ww|	�rGtj	jjdd|i|���sEz(tj	j
�|d��}|�tj	j�|��Wd�WdS1�s,wYWdSt�yDd}t|�|���wdS|	�s�|
�rOdStj	jjdd|i|���s�|�d|
�d|�d�}|�|�z(tj	j
�|d��}|�tj	j�|��Wd�WdS1�s�wYWdSt�y�td|����wdS) a
    Verify that this mount is represented in the auto_salt, change the mount
    to match the data passed, or add the mount if it is not present.

    CLI Example:

    .. code-block:: bash

        salt '*' mount.set_automaster /mnt/foo /dev/sdz1 ext4
    r&Fz/etc/auto_masterz
file.touchzfile.appendz/-			r;r"z-fstype=�smbfsr�rr|rrrTr$z8auto_master entry for mount point %s needs to be updatedrHrNrr(rr)r&r%�File not writable r'r	)r*r+r[rr�r�rr?rrr7r8r9r:rMr�r]rrr��debugrrr5r�r/rrr)rxr/r.r-r�r(r1r�r�r&r%Zautomaster_filer@Z	type_optsrCrr�newliner
rBrr	r	r
�set_automaster[s�






�
����(������
����rFc	Cs�i}tj�|�s
|Stjj�|��S}|D]G}tjj�|�}|�	d�r#q|�
�s(q|��}t|�dkr3qd}|d�
|d�}|d�d�}|d�d	�}|d|d|dd
�d�||<qWd
�|S1sgwY|S)z}
    List the contents of the auto master

    CLI Example:

    .. code-block:: bash

        salt '*' mount.automaster
    r|rr;rr�rr"r$r&NrK)rr�r�rrr7r8r9r:rMr]rrr?)	r�rrCrrr?rxr@r-r	r	r
r=�s.

"�
��r=c
Csx|dkr2|dkrtd||d�S|dkr0td||�}|sdStt|����}|td|��<|SdSd	|vr>td
dvr>d}t|t�rH|�d
�}t	j
�|�sX|rXtd||d�d}	|durhd
�|�}
d|
��}	|r�dtd
vrx|	d|��7}	ndtd
�
�vr�|	d|��7}	n|	d|��7}	d}|r�||	�d|�d|�d�7}n|d|�d�7}td||dd�}|dr�|dSd S)!zz
    Mount a device

    CLI Example:

    .. code-block:: bash

        salt '*' mount.mount /mnt/foo /dev/sdz1 True
    r�guestfsz
guestfs.mount)r,�qemu_nbdz
qemu_nbd.initF�img.mnt_rr)rrrhNr&z
file.mkdir��userr��-o rh� -v �solaris� -F � -t �mount � '�' '�' �'�cmd.run_all�Zrunas�python_shell�retcode�stderrT)r�next�iterr�r6rr*r\rrr��existsr[r=)
rxr/�mkmntr.r-rK�utilZmnt�firstr��lopts�cmd�outr	r	r
r�sF



cCsxd}tddvr|dkrd}|dkrd}dtdvr |dkr g}t|t�r*|�d	�}t�}||vr�d
|vr@tddvr@|�d
�|rIt|||d�d
}|rWd	�|�}	d|	��}|r~dtdvrg|d|��7}ndtd��vrw|d|��7}n|d|��7}tddvs�|r�d|�d|�d|�d�}
nd|�d|�d|�d�}
t	d|
|dd�}|dr�|dSdSt
||||||d�S)z�
    Attempt to remount a device, if the device is not already mounted, mount
    is called

    CLI Example:

    .. code-block:: bash

        salt '*' mount.remount /mnt/foo /dev/sdz1 True
    Frr
rZnoownersrBTrhr&�remount)rkrrrJr�rLrMrNrOrPrQrRrSrTz	mount -u rVrWrYrZ)rr*r\rrmr��umountr[r=rr)rxr/r^r.r-rKZforce_mount�mntsr�rarbrcr	r	r
rd/sF




rdcCs�|dkrtd||d�dS|dkr*dtvr*d|��tvr*tdtd|���dSt�}||vr6|�d�S|s?d	|�d
�}nd	|�d
�}td||dd
�}|drV|dSdS)a
    Attempt to unmount a device by specifying the directory it is mounted on

    CLI Example:

    .. code-block:: bash

        salt '*' mount.umount /mnt/foo

    .. versionadded:: 2015.5.0

    .. code-block:: bash

        salt '*' mount.umount /mnt/foo /dev/xvdc1
    rGzguestfs.umount)ZdiskNrHzqemu_nbd.clearrIz does not have anything mountedzumount 'rUrVFrWrYrZT)rr6rm)rxr/rKr_rfrbrcr	r	r
reos$
recCsJtjj�|�}|sdStjj�d�std��tdd|��dd�}d|vS)z�
    Returns true if the command passed is a fuse mountable application.

    CLI Example:

    .. code-block:: bash

        salt '*' mount.is_fuse_exec sshfs
    FZlddr<zldd �rXZlibfuse)rrr��whichrr)rbZcmd_pathrcr	r	r
�is_fuse_exec�s
ricCsi}tddkrAtdd���D].}|�d�rq|��}|d�d�r%dnd	t|d
�t|d
�t|d�dd
�||d<q|Sdtdvr�tdd���D]5}|�d�rWqO|��}dt|d
dd��dt|d
dd��t|ddd��ddd
�||d<qO|Stddkr�tjj�	d��2}|D]&}tjj
�|�}|�d�r�q�|��}|d|d|d
|dd
�||d<q�Wd�|S1s�wY|Stdd���D](}|�d�r�q�d	}|��}|d�d�r�d}||d|d|dd
�||d<q�|S)z�
    Return a dict containing information on active swap

    .. versionchanged:: 2016.3.2

    CLI Example:

    .. code-block:: bash

        salt '*' mount.swaps
    rirjrzswap -lZswapfiler)z/devZswapr/�filerr)r#)r�r��used�priorityrhN���irrkz/proc/swapsZFilenamer$rzswapctl -kl)ZDeviceZTotalz/dev/�	partitionr%)rr�
splitlinesrMr�intrrr7r8r9r:)rrrZfp_Z	swap_typer	r	r
�swaps�sj

�.�
*�!�
��
���
�rqcCs�i}t�}||vr|||d<d|d<|Stddkr0tddkr.tdd	|�d
�dd�ndSd|�d
�}|rEd
tdvrE|d|��7}td|dd�t�}||vr`|||d<d|d<|S|S)z�
    Activate a swap disk

    .. versionchanged:: 2016.3.2

    CLI Example:

    .. code-block:: bash

        salt '*' mount.swapon /root/swapfile
    ZstatsFr'rirj�virtual�zoner<�	swap -a 'rUrgzswapon 'rhz -p T�rqrr)rxrlr�on_rbr	r	r
�swapon�s(rwcCs�t�}||vrLtddkr"tddkr tdd|�d�dd	�n!dStd
dkr5tdd|�d�dd	�ntdd
|�d�dd	�t�}||vrJdSdSdS)z�
    Deactivate a named swap mount

    .. versionchanged:: 2016.3.2

    CLI Example:

    .. code-block:: bash

        salt '*' mount.swapoff /root/swapfile
    rirjrrrsr<rtrUFrgrrkz	swapoff 'zswapctl -d 'TNru)rxrvr	r	r
�swapoffsrxcCst�}||vr	dSdS)z�
    .. versionadded:: 2014.7.0

    Provide information if the path is mounted

    CLI Example:

    .. code-block:: bash

        salt '*' mount.is_mounted /mnt/share
    TF)rm)rxZactive_r	r	r
�
is_mounted5srycCs>tjj�t�}|rd|vr|dr||dvr|d|SiS)z�
    .. versionadded:: 2018.3.0

    Provide information if the path is mounted

    CLI Example:

    .. code-block:: bash

        salt '*' mount.read_mount_cache /mnt/share
    r)rrr�
read_cache�__opts__)rx�cacher	r	r
�read_mount_cacheHsr}cCsftjj�t�}|si}i|d<nd|vri|d<||||d�|d|<tjj�|t�}|r/dStd��)a�
    .. versionadded:: 2018.3.0

    Provide information if the path is mounted

    :param real_name:     The real name of the mount point where the device is mounted.
    :param device:        The device that is being mounted.
    :param mkmnt:         Whether or not the mount point should be created.
    :param fstype:        The file system that is used.
    :param mount_opts:    Additional options used when mounting the device.
    :return:              Boolean if message was sent successfully.

    CLI Example:

    .. code-block:: bash

        salt '*' mount.write_mount_cache /mnt/share /dev/sda1 False ext4 defaults,nosuid
    r)r/r.r^r-T�Unable to write mount cache.�rrrrzr{Zwrite_cacher)�	real_namer/r^r.Z
mount_optsr|�cache_writer	r	r
�write_mount_cache\s
�r�cCsPtjj�t�}|r&d|vr&||dvr&|d|=tjj�|t�}|s&td��dS)z�
    .. versionadded:: 2018.3.0

    Provide information if the path is mounted

    CLI Example:

    .. code-block:: bash

        salt '*' mount.delete_mount_cache /mnt/share
    rr~Tr)r�r|r�r	r	r
�delete_mount_cache�s
r��/etc/filesystemsTc
CsDt�}g}d}tj�|�rdtdvr|Stjj�|��|}|D]p}tjj	�
|�}|�d�s0|s0q|�d�r=d}|�|�q|�
�s�d}z<t�|tj�}g}d|vrZ|d�
d�|d<|d|vrn|dd	7<|d|vs`|rx|||�d�<n|||d<Wqtjy�Yqw|�|�qWd
�|S1s�wY|S)a"
    Return the contents of the filesystems in an OrderedDict

    config
        File containing filesystem infomation

    leading_key
        True    return dictionary keyed by 'name' and value as dictionary with other keys, values (name excluded)
                OrderedDict({ '/dir' : OrderedDict({'dev': '/dev/hd8', .... }}))

        False   return dictionary  keyed by 'name' and value as dictionary with all keys, values (name included)
                OrderedDict({ '/dir' : OrderedDict({'name': '/dir', 'dev': '/dev/hd8', ... })})
    FrhrirUTr-r&rxr�N)rrr�r�rrrr7r8r9r:rMr�rr�r�r�r�rv)r�Zleading_keyrr�Z
parsing_blockrCrr�r	r	r
�_filesystems�sL
�����
�!�!r�cCsDi}dtdvr
|St|�}|r tt|����}|t||�i}|S)z�
    .. versionadded:: 2018.3.3

    List the contents of the filesystems

    CLI Example:

    .. code-block:: bash

        salt '*' mount.filesystems
    rhri)rr�r[r\r�r�)r�rZret_dictZret_keyr	r	r
�filesystems�sr��truec	
Ksvt|t�r
d�|�}||�dd�|||d�}
g}d}dtdvr"|St|t�r(n"t|t�s1td��|d	krGtgd
��}
||
vrCdg}ndg}n|g}t�	|
|	�}z|�
|�}Wntyod
d�}t||�}td|�d���wt
j�|�s~td|�d���z5t|d�}|��D])}|�|�r�d}|�|�s�|r�|�|�q�d}|d}|�||f�q�|�|�q�Wnty�}z
td|�d|����d}~ww|dur�|����D]}|�|�q�d}|dk�r9z6tjj�|d��"}|D]}|d}t�|�}|�tjj�|��q�Wd�W|S1�swYW|St�y(td|����t�y8}ztd��d}~ww|S)a�
    .. versionadded:: 2018.3.3

    Verify that this mount is represented in the filesystems, change the mount
    to match the data passed, or add the mount if it is not present on AIX

    If the entry is found via `match_on` and `not_change` is True, the
    current line will be preserved.

        Provide information if the path is mounted

    :param name:          The name of the mount point where the device is mounted.
    :param device:        The device that is being mounted.
    :param vfstype:       The file system that is used (AIX has two fstypes, fstype and vfstype - similar to Linux fstype)
    :param opts:          Additional options used when mounting the device.
    :param mount:         Mount if not mounted, default True.
    :param config:        Configuration file, default /etc/filesystems.
    :param match:         File systems type to match on, default auto

    CLI Example:

    .. code-block:: bash

        salt '*' mount.set_filesystems /mnt/foo /dev/sdz1 jfs2
    r&r(r')rxr�r�r-rNrhrirr)rrrrrrrrrrZcdrfsZprocfsZjfsZjfs2rZsfsZnfs3ZcachefsZudfsZcifsZnamefsZpmemfsZahafsrZautofsZstnfsrxr�cSrr)r�r�rr	r	r
r ]r!z!set_filesystems.<locals>.filterFnr"r#r$Fr%r&�Couldn't read from �: r'rr$rCz%set_filesystems error exception {exc})r*r+r[r?rr\rr,r�r�r�r-r.rr�r�r�r�rer�rr�rrr7r8r�rrr�	Exception)rxr/r�r-rr�r(r0r1r�r2�
view_linesrr3Zentry_ipr�r r4�
fsys_filedictr�Zkvr
Z	dict_viewrr��
list_strgsr	r	r
�set_filesystems�s�
&

�

�
�	

���

������r�c
Cshd}g}dtdvr|St||d�}z,t|d�}|��D] }z|�|�r'd}n|�|�Wqtjy<|�|�YqwWntyT}z
td|�d|����d}~ww|r�z5t	j
j�|d	��"}	|D]}|d
}
t�
|
�}|	�t	j
j�|��qcWd�W|S1s�wYW|Sty�}z
td|�d|����d}~wty�}ztd��d}~ww|S)
z�
    .. versionadded:: 2018.3.3

    Remove the mount point from the filesystems

    CLI Example:

    .. code-block:: bash

        salt '*' mount.rm_filesystems /mnt/foo /dev/sdg
    Frhri)rxr�Tr�r�Nrr$zCouldn't write to z$rm_filesystems error exception {exc})rr�r�r�rer�rvrrrrr7r8r�rrrr�)rxr/r�r	r�r�r�r�r
rr�r�r	r	r
�rm_filesystems�sR


���
��
��
�
����r�cCsXtj�tj�|��}|tjjkr*tj�|�r|Stj�tj�|tj��}|tjjks|S)z�
    Return the mount providing a specified path.

    .. versionadded:: 3006.0

    path
        The path for the function to evaluate.

    CLI Example:

    .. code-block:: bash

        salt '*' mount.get_mount_from_path /opt/some/nested/path
    )rr��realpath�abspath�sep�ismountr[�pardirr�r	r	r
�get_mount_from_path�s�r�cCs t|�}t�}|�|i��d�S)z�
    Return the underlying device for a specified path.

    .. versionadded:: 3006.0

    path
        The path for the function to evaluate.

    CLI Example:

    .. code-block:: bash

        salt '*' mount.get_device_from_path /
    r/)r�rmr<)r�rrr	r	r
�get_device_from_path�sr�)F)r�)r�)rrrr�FrF)r#r#r#r6r�FrF)r:)r�r:FF)FFr�rNr)Fr�rN)NNrr)r�T)r�)r#r�r�FrF)=ru�loggingrrZsalt.utils.argsrZsalt.utils.dataZsalt.utils.filesZsalt.utils.mountZsalt.utils.pathZsalt.utils.platformZsalt.utils.stringutilsZsalt.exceptionsrrZsalt.utils.odictr�	getLoggerrrr�Z__virtualname__rr rDrErNrRrVr_r`r>rmrnr�r�r�rrr
r5r9rArFr=rrdrerirqrwrxryr}r�r�r�r�r�r�r�r�r	r	r	r
�<module>s�

-.
 `h
-
*

4
�
�
A
�
r%
�
>
@(
C'*

9
�
"1