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

�N�ga��@s�dZddlZddlZddlmZddlmZzddlZdZWney)dZYnwdZ	dZ
d	Zd
ZdZ
dd
�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�ZdLdd�ZdMd d!�ZdLd"d#�ZdLd$d%�ZdNd&d'�Zd(d)�Zd*d+�ZdNd,d-�ZdNd.d/�Zd0d1�Z d2d3�Z!dOd4d5�Z"dOd6d7�Z#d8d9�Z$dPd:d;�Z%dPd<d=�Z&d>d?�Z'dPd@dA�Z(dQdBdC�Z)dOdDdE�Z*dNdFdG�Z+dHdI�Z,dOdJdK�Z-dS)Ra,

Management of Pure Storage FlashArray

Installation Prerequisites
--------------------------
- You will need the ``purestorage`` python package in your python installation
  path that is running salt.

  .. code-block:: bash

      pip install purestorage

- Configure Pure Storage FlashArray authentication. Use one of the following
  three methods.

  1) From the minion config

  .. code-block:: yaml

        pure_tags:
          fa:
            san_ip: management vip or hostname for the FlashArray
            api_token: A valid api token for the FlashArray being managed

  2) From environment (PUREFA_IP and PUREFA_API)
  3) From the pillar (PUREFA_IP and PUREFA_API)

:maintainer: Simon Dodsley (simon@purestorage.com)
:maturity: new
:requires: purestorage
:platform: all

.. versionadded:: 2018.3.0

�N)�datetime)�CommandExecutionErrorTFzrestructuredtext enz1.0.0ZSaltZpurefa)Z23456789ZABCDEFGHJKLMNPQRSTUVWXYZZabcdefghijkmnopqrstuvwxyzcCstrtSdS)z6
    Determine whether or not to load this module
    )FzMpurefa execution module not loaded: purestorage python library not available.)�HAS_PURESTORAGE�__virtualname__�rr�G/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/purefa.py�__virtual__SsrcCs tttt��d�}djd
i|��}z tdd�d�}tdd�d�}|r0|r0tj|||d�}WnKt	t
tfy|ztj
�d�}tj
�d	�}tj|||d�}Wn(tt	t
fyyztjtdtd	|d�}Wn
t	t
fyvtd
��wYnwYnwz|��W|Sty�td��w)ae
    Get Pure Storage FlashArray configuration

    1) From the minion config
        pure_tags:
          fa:
            san_ip: management vip or hostname for the FlashArray
            api_token: A valid api token for the FlashArray being managed
    2) From environment (PUREFA_IP and PUREFA_API)
    3) From the pillar (PUREFA_IP and PUREFA_API)

    )�base�class�version�platformz%{base} {class}/{version} ({platform})Z	pure_tags�fa�san_ip�	api_token)r�
user_agentZ	PUREFA_IPZ
PUREFA_APIz-No Pure Storage FlashArray credentials found.z.Pure Storage FlashArray authentication failed.Nr)�USER_AGENT_BASE�__name__�VERSIONr�formatZ__opts__�get�purestorageZ
FlashArray�KeyError�	NameError�	TypeError�os�environ�
ValueErrorZ
__pillar__r�	Exception)Zagentr�arrayZapi�systemrrrrr�_get_system_sR��
�
�������
��r cCs$z|�|�WStjyYdSw)z Private function to check volumeN�Z
get_volumer�	PureError��namerrrr�_get_volume�s
�r%cCsT|d|}z|j|dd�D]
}|d|kr|WSqWdStjy)YdSw)z"Private function to check snapshot�.T)�snapr$Nr!)r$�suffixrZsnapshotr'rrr�
_get_snapshot�s
���r)cC�(z|j|dd�WStjyYdSw)z(Private function to check deleted volume�true��pendingNr!r#rrr�_get_deleted_volume��
�r.cC�,d}|��D]
}|d|kr|}|Sq|S)z*Private function to check protection groupNr$)Zlist_pgroups)r$r�pgroup�temprrr�_get_pgroup���r3cCr*)z2Private function to check deleted protection groupr+r,N)Z
get_pgrouprr"r#rrr�_get_deleted_pgroup�r/r5cCr0)z#Private function to check hostgroupNr$)Zlist_hgroups)r$r�	hostgroupr2rrr�_get_hgroup�r4r7cCr0)zPrivate function to check hostNr$)Z
list_hosts)r$r�hostr2rrr�	_get_host�r4r9cCs�t�}|dur!dtt��tddddddd����}|�dd�}t||�dur>z
|j||d�Wd	Stj	y=Yd
Swd
S)a�

    Create a volume snapshot on a Pure Storage FlashArray.

    Will return False is volume selected to snap does not exist.

    .. versionadded:: 2018.3.0

    name : string
        name of volume to snapshot
    suffix : string
        if specificed forces snapshot name suffix. If not specified defaults to timestamp.

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.snap_create foo
        salt '*' purefa.snap_create foo suffix=bar

    Nzsnap-i��rr&�)r(TF)
r �strr�utcnow�
total_seconds�replacer%Zcreate_snapshotrr")r$r(rrrr�snap_create�s��r@cCs�t�}t|||�dur>z
|d|}|�|�Wntjy#YdSw|dur<z|�|�WdStjy;YdSwdSdS)a�

    Delete a volume snapshot on a Pure Storage FlashArray.

    Will return False if selected snapshot does not exist.

    .. versionadded:: 2018.3.0

    name : string
        name of volume
    suffix : string
        name of snapshot
    eradicate : boolean
        Eradicate snapshot after deletion if True. Default is False

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.snap_delete foo suffix=snap eradicate=True

    Nr&FT)r r)�destroy_volumerr"�eradicate_volume)r$r(�	eradicater�snapnamerrr�snap_delete�s"�
�rEcCsNt�}t|||�dur%|d|}z|�|�WdStjy$YdSwdS)af

    Eradicate a deleted volume snapshot on a Pure Storage FlashArray.

    Will return False if snapshot is not in a deleted state.

    .. versionadded:: 2018.3.0

    name : string
        name of volume
    suffix : string
        name of snapshot

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.snap_eradicate foo suffix=snap

    Nr&TF)r r)rBrr")r$r(rrDrrr�snap_eradicate%s
�rFcCsft|�dkr|dd�}t�}t||�dur1|durd}z	|�||�WdStjy0YdSwdS)a�

    Create a volume on a Pure Storage FlashArray.

    Will return False if volume already exists.

    .. versionadded:: 2018.3.0

    name : string
        name of volume (truncated to 63 characters)
    size : string
        if specificed capacity of volume. If not specified default to 1G.
        Refer to Pure Storage documentation for formatting rules.

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.volume_create foo
        salt '*' purefa.volume_create foo size=10T

    �?rNZ1GTF)�lenr r%Z
create_volumerr")r$�sizerrrr�
volume_createFs�rJcC�rt�}t||�dur7z|�|�WntjyYdSw|dur5z|�|�WdStjy4YdSwdSdS)a�

    Delete a volume on a Pure Storage FlashArray.

    Will return False if volume doesn't exist is already in a deleted state.

    .. versionadded:: 2018.3.0

    name : string
        name of volume
    eradicate : boolean
        Eradicate volume after deletion if True. Default is False

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.volume_delete foo eradicate=True

    NFT)r r%rArr"rB�r$rCrrrr�
volume_deletels �
�rMcC�@t�}t||�durz|�|�WdStjyYdSwdS)a$

    Eradicate a deleted volume on a Pure Storage FlashArray.

    Will return False is volume is not in a deleted state.

    .. versionadded:: 2018.3.0

    name : string
        name of volume

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.volume_eradicate foo

    NTF)r r.rBrr"r#rrr�volume_eradicate��
�rOcCs^t�}t||�}|dur-td|�|dkr+z	|�||�WdStjy*YdSwdSdS)a�

    Extend an existing volume on a Pure Storage FlashArray.

    Will return False if new size is less than or equal to existing size.

    .. versionadded:: 2018.3.0

    name : string
        name of volume
    size : string
        New capacity of volume.
        Refer to Pure Storage documentation for formatting rules.

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.volume_extend foo 10T

    Nzstringutils.human_to_bytesrITF)r r%�	__utils__Z
extend_volumerr")r$rIr�volrrr�
volume_extend�s
�rScCs�t�}|�d�\}}t|||�durIt||�dur.z	|�||�WdStjy-YdSw|rGz|j|||d�WdStjyFYdSwdSdS)a

    Create R/W volume from snapshot on a Pure Storage FlashArray.

    Will return False if target volume already exists and
    overwrite is not specified, or selected snapshot doesn't exist.

    .. versionadded:: 2018.3.0

    name : string
        name of volume snapshot
    target : string
        name of clone volume
    overwrite : boolean
        overwrite clone if already exists (default: False)

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.snap_volume_create foo.bar clone overwrite=True

    r&NTF��	overwrite)r �splitr)r%�copy_volumerr")r$�targetrUr�sourcer(rrr�snap_volume_create�s&��rZcCs�t�}t||�durAt||�dur&z	|�||�WdStjy%YdSw|r?z|j|||d�WdStjy>YdSwdSdS)a�

    Clone an existing volume on a Pure Storage FlashArray.

    Will return False if source volume doesn't exist, or
    target volume already exists and overwrite not specified.

    .. versionadded:: 2018.3.0

    name : string
        name of volume
    target : string
        name of clone volume
    overwrite : boolean
        overwrite clone if already exists (default: False)

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.volume_clone foo bar overwrite=True

    NTFrT)r r%rWrr")r$rXrUrrrr�volume_clones$��r[cCsPt�}t||�dur&t||�dur&z	|�||�WdStjy%YdSwdS)aJ

    Attach a volume to a host on a Pure Storage FlashArray.

    Host and volume must exist or else will return False.

    .. versionadded:: 2018.3.0

    name : string
        name of volume
    host : string
        name of host

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.volume_attach foo bar

    NTF)r r%r9Zconnect_hostrr"�r$r8rrrr�
volume_attach1s�r]cCstt�}t||�dust||�durdSt||�dur6t||�dur8z	|�||�WdStjy5YdSwdSdS)a�

    Detach a volume from a host on a Pure Storage FlashArray.

    Will return False if either host or volume do not exist, or
    if selected volume isn't already connected to the host.

    .. versionadded:: 2018.3.0

    name : string
        name of volume
    host : string
        name of host

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.volume_detach foo bar

    NFT)r r%r9�disconnect_hostrr"r\rrr�
volume_detachQs��r_cCst�}t|�dkr|dd�}t||�dur�z|�|�Wntjy(YdSw|rFz
|j||gd�WntjyE|�|�YdSw|durez
|j||gd�Wntjyd|�|�YdSw|dur�z|j||gd�WdStjy�|�|�YdSwdSdS)	az

    Add a host on a Pure Storage FlashArray.

    Will return False if host already exists, or the iSCSI or
    Fibre Channel parameters are not in a valid format.
    See Pure Storage FlashArray documentation.

    .. versionadded:: 2018.3.0

    name : string
        name of host (truncated to 63 characters)
    iqn : string
        iSCSI IQN of host
    nqn : string
        NVMeF NQN of host
        .. versionadded:: 3006.0
    wwn : string
        Fibre Channel WWN of host

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.host_create foo iqn='<Valid iSCSI IQN>' wwn='<Valid WWN>' nqn='<Valid NQN>'

    rGrNF�Z
addnqnlist�Z
addiqnlist�Z
addwwnlistT)r rHr9Zcreate_hostrr"�set_host�delete_host�r$ZiqnZwwnZnqnrrrr�host_creatersB�
�
��
��rfcCs�t�}t||�durY|r"z
|j||gd�Wntjy!YdSw|dur<z
|j||gd�Wntjy;YdSw|durWz|j||gd�WdStjyVYdSwdSdS)a�

    Update a hosts port definitions on a Pure Storage FlashArray.

    Will return False if new port definitions are already in use
    by another host, or are not in a valid format.
    See Pure Storage FlashArray documentation.

    .. versionadded:: 2018.3.0

    name : string
        name of host
    nqn : string
        Additional NVMeF NQN of host
        .. versionadded:: 3006.0
    iqn : string
        Additional iSCSI IQN of host
    wwn : string
        Additional Fibre Channel WWN of host

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.host_update foo iqn='<Valid iSCSI IQN>' wwn='<Valid WWN>' nqn='<Valid NQN>'

    Nr`FrarbT)r r9rcrr"rerrr�host_update�s.����rgc	Cs|t�}t||�dur<|�|�D]}z
|�||d�Wqtjy'YdSwz|�|�WdStjy;YdSwdS)a

    Delete a host on a Pure Storage FlashArray (detaches all volumes).

    Will return False if the host doesn't exist.

    .. versionadded:: 2018.3.0

    name : string
        name of host

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.host_delete foo

    NrRFT)r r9Zlist_host_connectionsr^rr"rd)r$rrRrrr�host_delete�s�
�rhcCs�t�}t|�dkr|dd�}t||�durxz|�|�Wntjy(YdSw|durNt||�rHz
|j||gd�WntjyGYdSwt|�dS|durvt	||�rpz	|�
||�WdStjyot|�YdSwt|�dSdSdS)a�

    Create a hostgroup on a Pure Storage FlashArray.

    Will return False if hostgroup already exists, or if
    named host or volume do not exist.

    .. versionadded:: 2018.3.0

    name : string
        name of hostgroup (truncated to 63 characters)
    host  : string
         name of host to add to hostgroup
    volume : string
         name of volume to add to hostgroup

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.hg_create foo host=bar volume=vol

    rGrNF�ZaddhostlistT)r rHr7Z
create_hgrouprr"r9�
set_hgroup�	hg_deleter%�connect_hgroup�r$r8�volumerrrr�	hg_creates>�
�
��rocCs�t�}t||�durM|dur+t||�r)z
|j||gd�Wn
tjy(YdSwdS|durKt||�rIz	|�||�WdStjyHYdSwdSdSdS)a�

    Adds entries to a hostgroup on a Pure Storage FlashArray.

    Will return False is hostgroup doesn't exist, or host
    or volume do not exist.

    .. versionadded:: 2018.3.0

    name : string
        name of hostgroup
    host  : string
         name of host to add to hostgroup
    volume : string
         name of volume to add to hostgroup

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.hg_update foo host=bar volume=vol

    NriFT)r r7r9rjrr"r%rlrmrrr�	hg_update;s*
�
��rpc	Cs�t�}t||�durJ|�|�D]}z
|�||d�Wqtjy'YdSw|�|�}z|j||dd�|�|�WdStjyIYdSwdS)a?

    Delete a hostgroup on a Pure Storage FlashArray (removes all volumes and hosts).

    Will return False is hostgroup is already in a deleted state.

    .. versionadded:: 2018.3.0

    name : string
        name of hostgroup

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.hg_delete foo

    NrRF�hosts�ZremhostlistT)	r r7�list_hgroup_connections�disconnect_hgrouprr"Z
get_hgrouprjZ
delete_hgroup)r$rrRr8rrrrkjs"�

�rkc	Cs�t�}t||�dury|dur<t||�r:|�|�D]}|d|kr7z
|�||�WdStjy6YdSwqdSdS|durkt||�rit||�}|d|krgz|j||gd�WdStjyfYdSwdSdS|duru|durwdSdSdSdS)a�

    Remove a host and/or volume from a hostgroup on a Pure Storage FlashArray.

    Will return False is hostgroup does not exist, or named host or volume are
    not in the hostgroup.

    .. versionadded:: 2018.3.0

    name : string
        name of hostgroup
    volume : string
       name of volume to remove from hostgroup
    host : string
       name of host to remove from hostgroup

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.hg_remove foo volume=test host=bar

    NrRTFZhgrouprr)	r r7r%rsrtrr"r9rj)r$rnr8rr2rrr�	hg_remove�s>
��

��rucCst�}|durE|durE|durEt||�durCz|�|�Wntjy(YdSwz
|j||d�WdStjyBt|�YdSwdStd|||��r
t||�du�rz|�|�WntjyhYdSwz	|j||d�Wntjy�t|�YdSw|dur�t||�dur�z|j||gd�WdStjy�t|�YdSwt|�dS|dur�t	||�dur�z|j||gd�WdStjy�t|�YdSwt|�dS|du�r	t
||�du�rz|j||gd�WdStj�yt|�YdSwt|�dSdSdSdS)	a.

    Create a protection group on a Pure Storage FlashArray.

    Will return False is the following cases:
       * Protection Grop already exists
       * Protection Group in a deleted state
       * More than one type is specified - protection groups are for only
         hostgroups, hosts or volumes
       * Named type for protection group does not exist

    .. versionadded:: 2018.3.0

    name : string
        name of protection group
    hostgroup  : string
         name of hostgroup to add to protection group
    host  : string
         name of host to add to protection group
    volume : string
         name of volume to add to protection group

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.pg_create foo [hostgroup=foo | host=bar | volume=vol] enabled=[true | false]

    NF)Zsnap_enabledTz	value.xor�Z
addhgrouplistri�Z
addvollist)r r3Z
create_pgrouprr"�
set_pgroup�	pg_deleterQr7r9r%)r$r6r8rn�enabledrrrr�	pg_create�s�������
��r{cCst�}t||�}|du�r
|dur5|ddur5t||�dur3z	|�||�WdStjy2YdSwdS|dur]|ddur]t||�dur[z	|�||�WdStjyZYdSwdS|dur�|ddur�t||�dur�z	|�	||�WdStjy�YdSwdS|ddu�r|ddu�r|ddu�r|dur�t||�dur�z|j
||gd�WdStjy�YdSwdS|dur�t||�dur�z|j
||gd�WdStjy�YdSwdS|du�r	t||�du�rz|j
||gd	�WdStj�yYdSwdSdSdSdS)
a�

    Update a protection group on a Pure Storage FlashArray.

    Will return False in the following cases:
      * Protection group does not exist
      * Incorrect type selected for current protection group type
      * Specified type does not exist

    .. versionadded:: 2018.3.0

    name : string
        name of protection group
    hostgroup  : string
         name of hostgroup to add to protection group
    host  : string
         name of host to add to protection group
    volume : string
         name of volume to add to protection group

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.pg_update foo [hostgroup=foo | host=bar | volume=vol]

    N�hgroupsTFrq�volumesrvrirw)r r3r7Z
add_hgrouprr"r9Zadd_hostr%Z
add_volumerx�r$r6r8rnrr1rrr�	pg_update's~

�����
��
rcCrK)a3

    Delete a protecton group on a Pure Storage FlashArray.

    Will return False if protection group is already in a deleted state.

    .. versionadded:: 2018.3.0

    name : string
        name of protection group

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.pg_delete foo

    NFT)r r3Zdestroy_pgrouprr"�eradicate_pgrouprLrrrry�s �
�rycCrN)a=

    Eradicate a deleted protecton group on a Pure Storage FlashArray.

    Will return False if protection group is not in a deleted state.

    .. versionadded:: 2018.3.0

    name : string
        name of protection group

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.pg_eradicate foo

    NTF)r r5r�rr"r#rrr�pg_eradicate�rPr�cCst�}t||�}|dur�|dur4|ddur4t||�dur2z	|�||�WdStjy1YdSwdS|dur\|ddur\t||�durZz	|�||�WdStjyYYdSwdS|dur�|ddur�t||�dur�z	|�	||�WdStjy�YdSwdSdSdS)a�

    Remove a hostgroup, host or volume from a protection group on a Pure Storage FlashArray.

    Will return False in the following cases:
      * Protection group does not exist
      * Specified type is not currently associated with the protection group

    .. versionadded:: 2018.3.0

    name : string
        name of hostgroup
    hostgroup  : string
         name of hostgroup to remove from protection group
    host  : string
         name of host to remove from hostgroup
    volume : string
         name of volume to remove from hostgroup

    CLI Example:

    .. code-block:: bash

        salt '*' purefa.pg_remove foo [hostgroup=bar | host=test | volume=bar]

    Nr|TFrqr})
r r3r7Z
remove_hgrouprr"r9Zremove_hostr%Z
remove_volumer~rrr�	pg_remove�s@
���r�)N)NF)F)NNN)NN)NNNT).�__doc__rrrZsalt.exceptionsrrr�ImportErrorZ
__docformat__rrrZDEFAULT_PASSWORD_SYMBOLSrr r%r)r.r3r5r7r9r@rErFrJrMrOrSrZr[r]r_rfrgrhrorprkrur{rryr�r�rrrr�<module>s`&�5




&
*
!
&'
%
.- 
!
<2
#
8/
%
9
_
a%