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__/disk.cpython-310.pyc
o

�N�gz�@s�dZddlZddlZddlZddlZddlZddlZddlZddl	Zddl
ZddlZddlm
Z
ddiZe�e�Zdd�Zdd	�Zd
d�Zd=dd
�Zd=dd�Zd=dd�Zejjj�d�d>dd��Zdd�Zdd�Zd=dd�Zdd�Z ejjj�d�ejjj�d�					d?d d���Z!ejjj�"d!d"g�d#d$��Z#ejjj�d%�d@d'd(��Z$ejjj�d%�d=d)d*��Z%ejjj�d%�d=d+d,��Z&d>d-d.�Z'ejjj�d/�dAd2d/��Z(d3d4�Z)d5d6�Z*d7d8�Z+d9d:�Z,d;d<�Z-dS)Bz,
Module for managing disks and blockdevices
�N��CommandExecutionError�format_�formatcCstjj��rdSdS)z)
    Only work on POSIX-like systems
    )Fz$This module doesn't work on Windows.T)�salt�utils�platformZ
is_windows�r	r	�E/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/disk.py�__virtual__src	Cs�|��r	t�|�Sz.ddddddddd	�}|d
|vr2t�|dd
��}|t�||d
�}|WSt�|�WStyB|YSw)z�
    Convert a string to a number, allowing for a K|M|G|T postfix, 32.8K.
    Returns a decimal number if the string is a real number,
    or the string unchanged otherwise.
    Z10E3Z10E6Z10E9Z10E12Z10E15Z10E18Z10E21Z10E24)�K�M�G�T�P�E�Z�Y���N)�isdigit�decimal�Decimal�
ValueError)�textZpostPrefixes�vr	r	r
�_parse_numbers s(
�
�rcCs@d}|dur|Sd}|D]}||vr||7}qtd|����|S)z'
    Sanitize flags passed into df
    �N)�a�B�h�H�i�k�lr�tr�xrzInvalid flag passed to r)�argsZcaller�flags�allowed�flagr	r	r
�_clean_flags>s
r*c
Cs
t|d�}tj�d�s$tddkr$t�d�t�d�dkr"t�d�iStddkr-d	}ntdd
ks9tddkr<d}ntdd
krEd}nd}|rP|d|��7}i}td|dd��	�}d}|D]�}|seq`|�
d�rkq`|rs|d|}|��}t|�dkr�|}q`d}t|�dkr�|d�
�s�|d�d|d��|d<|�d�t|�dkr�|d�
�r�t|�dkr�q`z>tddkr�|d|d|d|d|d|d|d|dd �||d!<n|d|d|d|d|dd"�||d<Wq`t�yt�d#�i}Yq`w|S)$z�
    Return usage information for volumes mounted on this minion

    .. versionchanged:: 2019.2.0

        Default for SunOS changed to 1 kilobyte blocks

    CLI Example:

    .. code-block:: bash

        salt '*' disk.usage
    z
disk.usagez	/etc/mtab�kernel�Linuxzdf cannot run without /etc/mtabZvirtual_subtypeZLXCz�df command failed and LXC detected. If you are running a Docker container, consider linking /proc/mounts to /etc/mtab or consider running Docker with -privileged�df -P�OpenBSD�AIX�df -kP�SunOSzdf -k�df� -�cmd.runF�Zpython_shellN�
Filesystem� ��r�Darwin�����)�
filesystemz
512-blocks�used�	available�capacityZiusedZifreez%iused�)r@z	1K-blocksrArBrC�&Problem parsing disk usage information)r*�os�path�isfile�
__grains__�log�error�get�__salt__�
splitlines�
startswith�split�lenr�pop�
IndexError)r&r'�cmd�ret�outZoldline�line�compsr	r	r
�usageNsz

�

����
�rYc
CsJt|d�}tddkrd}nd}|r|d|��7}i}td|dd	���}|D]{}|�d
�r/q'|��}|s6q'zZtddkr\t|d�t|d
�|d|d
|d|dd�||d<n3tddkry|d|d|d|d|dd�||d
<n|d|d|d|d|dd�||d<Wq'ttfy�t	�
d�i}Yq'w|S)z�
    Return inode usage information for volumes mounted on this minion

    CLI Example:

    .. code-block:: bash

        salt '*' disk.inodeusage
    zdisk.inodeusager+r/zdf -izdf -iPr3r4Fr5r6r.r=r>r?r)�inodesrA�freeZuser@rDr<r9r8r;z'Problem parsing inode usage information)r*rIrMrNrOrP�intrSrrJrK)r&r'rTrUrVrWrXr	r	r
�
inodeusage�sR


��	��
�r]c	CsTtddkr	d}ntddkstddkrd}nd}i}td|d	d
���}|D]i}|s-q(|�d�r3q(|��}t|�dkra|d
��sa|d�d|d
��|d<|�d
�t|�dkra|d
��rCt|�dkrhq(ztddkrx|d||d<n|d||d<Wq(ty�t	�
d�i}Yq(w|r�||vr�t	�
d|�i}|S|r�||S|S)z�
    Return partition information for volumes mounted on this minion

    CLI Example:

    .. code-block:: bash

        salt '*' disk.percent /var
    r+r,r-r.r/r0r2r4Fr5r6r9r8rr7r:r<rDr=rEzFProblem parsing disk usage information: Partition '%s' does not exist!)rIrMrNrOrPrQrrRrSrJrK)r&rTrUrVrWrXr	r	r
�percent�sL


��
���r^�blkidcCs�dg}|r|�|�n	|r|�d|g�i}td|dd�}|ddkr&|S|d��D]?}|s1q,|��}|dd	d
�}i}t�d|�d�d
�}tt|�gd
�D]\}	}
|	�	d��	d�}	|
�	d�||	<qS|||<q,|S)a�
    Return block device attributes: UUID, LABEL, etc. This function only works
    on systems where blkid is available.

    device
        Device name from the system

    token
        Any valid token used for the search

    CLI Example:

    .. code-block:: bash

        salt '*' disk.blkid
        salt '*' disk.blkid /dev/sda
        salt '*' disk.blkid token='UUID=6a38ee5-7235-44e7-8b22-816a403bad5d'
        salt '*' disk.blkid token='TYPE=ext4'
    r_�-t�cmd.run_allFr5�retcoder�stdoutNrz"*"r7r9�=�")
�append�extendrMrNrP�re�	partition�zip�iter�strip)�device�tokenrTrUZblkid_resultrWrX�infoZdevice_attributes�key�valuer	r	r
r_
s*
c	Ks�ddddd�}d}g}|D]?}||vrL||}|dkr%|�|�dd	��n|�d
�||dks6||dur?|d
|�d�7}q
|d
|�d||�d�7}q
d|�|��}td|dd���}t||�S)ad
    Set attributes for the specified device

    CLI Example:

    .. code-block:: bash

        salt '*' disk.tune /dev/sda1 read-ahead=1024 read-write=True

    Valid options are: ``read-ahead``, ``filesystem-read-ahead``,
    ``read-only``, ``read-write``.

    See the ``blockdev(8)`` manpage for a more complete description of these
    options.
    ZsetraZsetfraZsetroZsetrw)z
read-aheadzfilesystem-read-aheadz	read-only�
read-writerrr�setrLZgetro�TrueT�--r7z	blockdev r4Fr5)rf�replacerMrN�dump)	rm�kwargsZ	kwarg_map�optsr&rpZswitchrTrVr	r	r
�tune:s(�
�
rzc
Csnd|��}z
td|dd�}Wntjy#}zWYd}~dSd}~ww|ddkr,dSt�d	||d
�dS)z}
    Remove the filesystem information

    CLI Example:

    .. code-block:: bash

        salt '*' disk.wipe /dev/sda1
    z
wipefs -a raFr5NrbrTzError wiping device %s: %s�stderr)rM�
subprocess�CalledProcessErrorrJrK�rmrTrV�errr	r	r
�wipecs
��r�cCs�d�|�}i}dd�|��D�}td|dd�}|ddkrMd	d�|d
��D�}d}|D]}||||<|d}q-|rKi}	|D]}
||
|	|
<q@|	S|SdS)z�
    Return all contents of dumpe2fs for a specified device

    CLI Example:

    .. code-block:: bash

        salt '*' disk.dump /dev/sda1
    z�blockdev --getro --getsz --getss --getpbsz --getiomin --getioopt --getalignoff --getmaxsect --getsize --getsize64 --getra --getfra {}cSs"g|]
}|�d�r|dd��qS)rur9N)rO)�.0�cr	r	r
�
<listcomp>�s"zdump.<locals>.<listcomp>raFr5rbrcSsg|]}|r|�qSr	r	)r�rWr	r	r
r���rcr8)rrPrMrN)rmr&rTrUryrV�lines�countrWZtemp_ret�argr	r	r
rwzs&�
rwc
Cs\d|��}z
td|dd�}Wntjy#}zWYd}~dSd}~ww|ddkr,dSdS)	zx
    Resizes the filesystem.

    CLI Example:

    .. code-block:: bash

        salt '*' disk.resize2fs /dev/sda1
    z
resize2fs raFr5NrbrT)rMr|r}r~r	r	r
�	resize2fs�s

���r��sync�mkfs�ext4Fc	Cs$ddt|�g}|dur+|dd�dkr|�dt|�g�n|dkr+|�dd|��g�|durA|dd�dkrA|�d	d
|��g�|durX|dvrX|dd�d
krX|�d|g�|rq|dd�dkrh|�d�n	|dkrq|�d�|�t|��td|dd�dk}tdddd�dk}t||g�S)a�
    Format a filesystem onto a device

    .. versionadded:: 2016.11.0

    device
        The device in which to create the new filesystem

    fs_type
        The type of filesystem to create

    inode_size
        Size of the inodes

        This option is only enabled for ext and xfs filesystems

    lazy_itable_init
        If enabled and the uninit_bg feature is enabled, the inode table will
        not be fully initialized by mke2fs.  This speeds up filesystem
        initialization noticeably, but it requires the kernel to finish
        initializing the filesystem  in  the  background  when  the filesystem
        is first mounted.  If the option value is omitted, it defaults to 1 to
        enable lazy inode table zeroing.

        This option is only enabled for ext filesystems

    fat
        FAT size option. Can be 12, 16 or 32, and can only be used on
        fat or vfat filesystems.

    force
        Force mke2fs to create a filesystem, even if the specified device is
        not a partition on a block special device. This option is only enabled
        for ext and xfs filesystems

        This option is dangerous, use it with caution.

    CLI Example:

    .. code-block:: bash

        salt '*' disk.format /dev/sdX1
    r�r`Nr;�extz-iZxfszsize=z-Ezlazy_itable_init=)��� ����fatz-Fz-fzcmd.retcodeT)Zignore_retcoderr�)�strrgrfrM�all)	rm�fs_typeZ
inode_sizeZlazy_itable_initr��forcerTZmkfs_successZsync_successr	r	r
r�s*5
�lsblkr2cCs�tjj�d�r"tdd|�����}t|�dkr"|d��}|r"|Stjj�d�ritddkrPt	j�
d�rPtdd	|�����}t|�d
krN|d
}|rN|SdStdd|�����}t|�dkri|d}|ri|SdS)
z�
    Return the filesystem name of the specified device

    .. versionadded:: 2016.11.0

    device
        The name of the device

    CLI Example:

    .. code-block:: bash

        salt '*' disk.fstype /dev/sdX1
    r�r4zlsblk -o fstype r8r2r+r/z/usr/sysv/bin/dfz/usr/sysv/bin/df -n r9zdf -T r)rrrG�whichrMrNrQrlrIrFrHrP)rmZ	lsblk_outr�Zdf_outr	r	r
�fstype�s(�r�ZhdparmTcCsPd|��}td|�}|ddkr$d�||d�}|rt|��t�|�|dS)zT
    Execute hdparm
    Fail hard when required
    return output when possible
    zhdparm rarbrz{}: {}r{rc)rMrrrJ�warning)r&ZfailhardrT�result�msgr	r	r
�_hdparm's

r�c
Cs
d}|dur	|}nt|ttf�rd�|�}t|ttf�s|g}i}|D]�}|�d�s/d|��}i}td|�d|��d���D]�}|��}|rL||d	krMq>d	|vra|�d	d
�\}}t	�
dd|�}nd|vrn|�dd
�\}}nq>|�����dd
�}|��}g}	t	�
d|�r�|�d�}|	�t|d��|	�|d
�d��n[i}
t	�d|���D]<}|��}zt|�}|	�|�Wq�ty�d|vr�|�dd
�\}}|��}|��}|r�||
|<n|r�|	�|�Yq�w|
r�|	�|
�|	s�q>t|	�d
kr�|	d}	|	||<q>|||<q#|S)z�
    Retrieve all info's for all disks
    parse 'em into a nice dict
    (which, considering hdparms output, is quite a hassle)

    .. versionadded:: 2016.3.0

    CLI Example:

    .. code-block:: bash

        salt '*' disk.hdparms /dev/sda
    ZaAbBcCdgHiJkMmNnQrRuWNrz/dev�/dev/�-r7F�:r8z is$rd�_z
[0-9]+ \(.*\)rz()z[/,])�
isinstance�list�tuple�joinrOr�rNrlrPrh�sub�lowerrv�matchrfr\�	ExceptionrQ)
�disksr&Z	all_parmsrV�diskZ	disk_datarWrp�valsZrvalsZvaldict�valZdeep_keyr	r	r
�hdparms:sp



�
��	


r�c	Csi}t|d���D](\}}tt|����\}}}||ks d|vr'd|i||<q	||||d�||<q	|dur8|S|��D]A\}}z
|dt|�}Wn tyjd|vrht|�d��}d||d}|d}Ynw|dkrs|d}td	|�d
|���q<dS)a�
    Get/set Host Protected Area settings

    T13 INCITS 346-2001 (1367D) defines the BEER (Boot Engineering Extension Record)
    and PARTIES (Protected Area Run Time Interface Extension Services), allowing
    for a Host Protected Area on a disk.

    It's often used by OEMS to hide parts of a disk, and for overprovisioning SSD's

    .. warning::
        Setting the HPA might clobber your data, be very careful with this on active disks!

    .. versionadded:: 2016.3.0

    CLI Example:

    .. code-block:: bash

        salt '*' disk.hpa /dev/sda
        salt '*' disk.hpa /dev/sda 5%
        salt '*' disk.hpa /dev/sda 10543256
    �N�disabled�total)r��visibleZhiddenN�%�drz --yes-i-know-what-i-am-doing -Npr7)	r��items�nextrk�valuesr\r�rlr�)r��sizeZhpa_datar��datar�r��statusr	r	r
�hpa�s2����r�c
s�|�d�s	d|}d|��}td|dd�}|ddkr"t|d��t|d	���}g}|D]}|�d
�rJt�d|���}dd
�|dd�D�}nq.�durX�fdd
�|D�}i}|D]w}t�d|�sg|Stjd|��t	|�d�}t
|d�}|dur�||vr�q\tt||dd���}	z|	d=Wn	t
y�Ynw|	D]0}
|	|
}zt
|�}Wnt
y�zdd
�|�d�D�}Wn	t
y�YnwYnw||	|
<q�|	||<q\|S)a�
    Fetch SMART attributes
    Providing attributes will deliver only requested attributes
    Providing values will deliver only requested values for attributes

    Default is the Backblaze recommended
    set (https://www.backblaze.com/blog/hard-drive-smart-stats/):
    (5,187,188,197,198)

    .. versionadded:: 2016.3.0

    CLI Example:

    .. code-block:: bash

        salt '*' disk.smart_attributes /dev/sda
        salt '*' disk.smart_attributes /dev/sda attributes=(5,187,188,197,198)
    r�zsmartctl --attributes ra�quiet�Zoutput_loglevelrbrr{rczID#z\s+cSsg|]}|���qSr	)r�)r�rpr	r	r
r��r�z$smart_attributes.<locals>.<listcomp>r8Ncsg|]
}|�vr
|nd�qS)r�r	)r��field�r�r	r
r��sz[\s]*\d)�maxsplitr�cS�g|]}t|��qSr	)r\)r�rqr	r	r
r��r�r7)rOrMrrkrNrhrPrlr�rQr\�dictrjr�)�devZ
attributesr�rTZsmart_result�fieldsrWZ
smart_attr�attrr�r�r�r	r�r
�smart_attributes�s\


��
����

r��iostatr8r=cCsLtjj��rt|||�Stjj��rt|||�Stjj��r$t|||�SdS)z�
    Gather and return (averaged) IO stats.

    .. versionadded:: 2016.3.0

    .. versionchanged:: 2016.11.4
        Added support for AIX

    CLI Example:

    .. code-block:: bash

        salt '*' disk.iostat 1 5 disks=sda
    N)	rrrZis_linux�
_iostat_linuxZ
is_freebsd�_iostat_fbsdZis_aix�_iostat_aix)�intervalr�r�r	r	r
r�s�cCs$dd�t|�D�}tt||��}|S)z�
    Transpose collected data, average it, stomp it in dict using header

    Use Decimals so we can properly calc & round, convert to float 'caus' we can't transmit Decimals over 0mq
    cSs,g|]}tt|�t|��t�d����qS)z.01)�float�sumrQZquantizerr�r��statr	r	r
r�%s��z!_iostats_dict.<locals>.<listcomp>)rjr�)�header�statsr	r	r
�
_iostats_dicts
�r�c
s�|durd|�d|�d�}nt|t�rd|�d|�d|��}n
d�||d�|��}g}t�t�}g}g}d�ttd|d	d
��	��}|D]L}	|	�
d�sLqD|sV|	��dd�}|	d
ur�t|d
�}	|	rg|	d�
�shn(|	��}	|	d}
dd�|	dd�D�}t|��kr�t|��||
�|�|	d
usZqDi}�t|�kr�|�d�}|d��}|��D] \}
}t|d��krɇfdd�|D�}�fdd�|D�||
<q�t||�|d<|��D]\}
}t||�||
<q�|S)z[
    Tested on FreeBSD, quite likely other BSD's only need small changes in cmd syntax
    Nziostat -xC -w z -c r7z
iostat -x -w ziostat -x -w {} -c {} {}i��cmd.run_stdoutr�r�rmr8FrcS�g|]}t�|��qSr	�rr�r�r%r	r	r
r�L�z _iostat_fbsd.<locals>.<listcomp>csg|]}|�d��qS�Nr	r��Zh_lenr	r
r�\�csg|]}|d���qS)rr	r�r�r	r
r�]r��sys)r�r�rr��collections�defaultdictr�rkrMrNrOrPr��isalnumrQrfr�r��
r�r�r��
iostat_cmdZ	sys_stats�	dev_statsZ
sys_headerZ
dev_headerrUrWr�r��iostatsr	r�r
r�-sV

�

���r�c
Cs�|durd|�d|�d�}nt|t�rd|�d|�d|��}n
d�||d�|��}g}t�t�}g}g}ttd|dd��	��}|D]e}	|	�
d�rf|sUt|	��d	d��}d
d�t
|���D�}	|�|	�qB|	�
d�r�|swt|	��d	d��}|	d
ur�t
|d
�}	|	r�|	d��s�n|	��}	|	d}
dd�|	d	d�D�}||
�|�|	d
us{qBi}|r�t||�|d<|��D]\}
}t||�||
<q�|S)Nz
iostat -x r7ziostat -xd ziostat -xd {} {} {}r�r�r�zavg-cpu:r8cSr�r	r�r�r	r	r
r�{r�z!_iostat_linux.<locals>.<listcomp>zDevice:FrcSr�r	r�r�r	r	r
r��r�r�)r�r�rr�r�r�r�rkrMrNrOr�rPr�rfr�r�r�r�r	r	r
r�gsJ

�


��	r�cCsjt�d�|durd|�d|�d�}nt|t�r$d|�d|�d|��}n
d�d�|�||�}i}d}g}d}d}t�t�}	t	d|��
�D]�}
|
rS|
�d�sS|
�d	�rTqEt�
d
|
�s�|
�d�}|d��}|d}|d
}|d
��}||	��vr�g|	|<t|	|�}|	|�i�i|	|||<||	|||d<g|	|||d<qEd|
vr�|
�d�}
|
d
��}|
d��}||	|d��vr�i|	|d|<||	|d|d<g|	|d|d<qE|
��}
dd�|
dd�D�}|	|d|d�|�qEi}|	��D],\}}i||<|D] }|��D]}||d}||d}t||�|||<�q�q�q|S)z?
    AIX support to gather and return (averaged) IO stats.
    zAIX disk iostat entryNziostat -dD r7ziostat -dD {} {} {}rr4�Systemz-----------z\sr�rr8r�r�cSr�r	)rr�r	r	r
r��r�z_iostat_aix.<locals>.<listcomp>)rJ�debugr�r�rr�r�r�r�rMrNrOrhr�rP�keysrQrf�lstripr�r�)r�r�r�r�rUZprocnr�Z	disk_nameZ	disk_moder�rWZ	dsk_compsZ
dsk_firstsrXr�r�r�Z
list_modes�modesr	r	r
r��sh


$

���r�cCstd|�}t|�S)a
    Return the filesystem type of the underlying device for a specified path.

    .. versionadded:: 3006.0

    path
        The path for the function to evaluate.

    CLI Example:

    .. code-block:: bash

        salt '*' disk.get_fstype_from_path /root
    zmount.get_device_from_path)rMr�)rGr�r	r	r
�get_fstype_from_path�sr�r�)NN)r�NNNF)T)r8r=N).�__doc__r�r�loggingrFrhr|Zsalt.utils.decoratorsrZsalt.utils.decorators.pathZsalt.utils.pathZsalt.utils.platformZsalt.exceptionsrZ__func_alias__�	getLogger�__name__rJrrr*rYr]r^rZ
decoratorsrGr�r_rzr�rwr�rZ	which_binr�r�r�r�r�r�r�r�r�r�r�r	r	r	r
�<module>sd
	

Q
:1/)
"�L
)M
5I:-d