%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python2.7/site-packages/salt/modules/
Upload File :
Create Path :
Current File : //lib/python2.7/site-packages/salt/modules/purefa.pyc

�
���^c@@s3dZddlmZmZmZddlZddlZddlmZddlm	Z	ddl
mZyddlZe
ZWnek
r�eZnXdZdZd	Zd
Zd.Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zdd�Z ded�Z!dd�Z"dd�Z#ed�Z$d�Z%d�Z&ed�Z'ed�Z(d �Z)d!�Z*ddd"�Z+ddd#�Z,d$�Z-ddd%�Z.ddd&�Z/d'�Z0ddd(�Z1ddde
d)�Z2dddd*�Z3ed+�Z4d,�Z5dddd-�Z6dS(/u,

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

i(tabsolute_importtprint_functiontunicode_literalsN(tdatetime(tsix(tCommandExecutionErrorurestructuredtext enu1.0.0uSaltupurefau23456789uABCDEFGHJKLMNPQRSTUVWXYZuabcdefghijkmnopqrstuvwxyzcC@str
tStdfS(u6
    Determine whether or not to load this module
    uMpurefa execution module not loaded: purestorage python library not available.(tHAS_PURESTORAGEt__virtualname__tFalse(((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt__virtual__UscC@s�itd6td6td6tj�d6}dj|�}y\tddjd�}tddjd	�}|r�|r�tj|d
|d|�}nWn�t	t
tfk
r\yCtj
jd�}tj
jd
�}tj|d
|d|�}Wq]tt	t
fk
rXy'tjtdd
td
d|�}WqYt	t
fk
rTtd��qYXq]XnXy|j�Wntk
r�td��nX|S(uc
    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)

  ubaseuclassuversionuplatformu%{base} {class}/{version} ({platform})u	pure_tagsufausan_ipu	api_tokent	api_tokent
user_agentu	PUREFA_IPu
PUREFA_APIu-No Pure Storage FlashArray credentials found.u.Pure Storage FlashArray authentication failed.(tUSER_AGENT_BASEt__name__tVERSIONtplatformtformatt__opts__tgettpurestoraget
FlashArraytKeyErrort	NameErrort	TypeErrortostenviront
ValueErrort
__pillar__Rt	Exception(tagentRtarraytapitsystemtsan_ipR
((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt_get_system^s:
"



cC@s-y|j|�SWntjk
r(dSXdS(u Private function to check volumeN(t
get_volumeRt	PureErrortNone(tnameR((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt_get_volume�scC@sb|d|}y8x1|j|dt�D]}|d|kr'|Sq'WWntjk
r]dSXdS(u"Private function to check snapshotu.tsnapunameN(R#tTrueRR$R%(R&tsuffixRtsnapshotR(((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt
_get_snapshot�scC@s3y|j|dd�SWntjk
r.dSXdS(u(Private function to check deleted volumetpendingutrueN(R#RR$R%(R&R((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt_get_deleted_volume�scC@s;d}x.|j�D] }|d|kr|}PqqW|S(u*Private function to check protection groupunameN(R%tlist_pgroups(R&Rtpgroupttemp((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt_get_pgroup�scC@s3y|j|dd�SWntjk
r.dSXdS(u2Private function to check deleted protection groupR-utrueN(t
get_pgroupRR$R%(R&R((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt_get_deleted_pgroup�scC@s;d}x.|j�D] }|d|kr|}PqqW|S(u#Private function to check hostgroupunameN(R%tlist_hgroups(R&Rt	hostgroupR1((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt_get_hgroup�scC@s;d}x.|j�D] }|d|kr|}PqqW|S(uPrivate function to check hostunameN(R%t
list_hosts(R&RthostR1((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt	_get_host�scC@s�t�}|dkredtjtj�tddddddd�j��}|jdd�}nt||�dk	r�y|j	|d|�t
SWq�tjk
r�t
SXnt
SdS(	u�

    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

    usnap-i�iiu.uR*N(R"R%Rt	text_typeRtutcnowt
total_secondstreplaceR'tcreate_snapshotR)RR$R(R&R*R((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pytsnap_create�s	;cC@s�t�}t|||�dk	r�y|d|}|j|�Wntjk
rWtSX|tkr�y|j|�tSWq�tjk
r�tSXq�tSntSdS(u�

    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

    u.N(	R"R,R%tdestroy_volumeRR$RR)teradicate_volume(R&R*t	eradicateRtsnapname((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pytsnap_delete�s	
cC@sgt�}t|||�dk	r_|d|}y|j|�tSWqctjk
r[tSXntSdS(uf

    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

    u.N(R"R,R%RBR)RR$R(R&R*RRD((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pytsnap_eradicates	
cC@s�t|�dkr"|dd!}nt�}t||�dkr�|dkrUd}ny|j||�tSWq�tjk
r�tSXntSdS(u�

    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

    i?iu1GN(	tlenR"R'R%t
create_volumeR)RR$R(R&tsizeR((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt
volume_create>s		cC@s�t�}t||�dk	r�y|j|�Wntjk
rFtSX|tkr�y|j|�tSWq�tjk
rtSXq�tSntSdS(u�

    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

    N(	R"R'R%RARR$RR)RB(R&RCR((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt
volume_deleteds	
cC@sVt�}t||�dk	rNy|j|�tSWqRtjk
rJtSXntSdS(u$

    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

    N(R"R.R%RBR)RR$R(R&R((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pytvolume_eradicate�s	
cC@s�t�}t||�}|dk	rxtd|�|dkrqy|j||�tSWqutjk
rmtSXq|tSntSdS(u�

    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

    ustringutils.human_to_bytesusizeN(	R"R'R%t	__utils__t
extend_volumeR)RR$R(R&RIRtvol((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt
volume_extend�s	cC@s�t�}|jd�\}}t|||�dk	r�t||�dkr~y|j||�tSWq�tjk
rzt	SXq�|r�y|j||d|�tSWq�tjk
r�t	SXq�t	Snt	SdS(u

    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

    u.t	overwriteN(
R"tsplitR,R%R'tcopy_volumeR)RR$R(R&ttargetRQRtsourceR*((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pytsnap_volume_create�s"	cC@s�t�}t||�dk	r�t||�dkrfy|j||�tSWq�tjk
rbtSXq�|r�y|j||d|�tSWq�tjk
r�tSXq�tSntSdS(u�

    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

    RQN(R"R'R%RSR)RR$R(R&RTRQR((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pytvolume_clone�s 	cC@snt�}t||�dk	rft||�dk	rfy|j||�tSWqjtjk
rbtSXntSdS(uJ

    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

    N(	R"R'R%R:tconnect_hostR)RR$R(R&R9R((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt
volume_attach)s	*cC@s�t�}t||�dks3t||�dkr7tSt||�dk	r�t||�dk	r�y|j||�tSWq�tjk
r�tSXndS(u�

    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

    N(	R"R'R%R:Rtdisconnect_hostR)RR$(R&R9R((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt
volume_detachIs	**cC@st�}t|�dkr+|dd!}nt||�dkry|j|�Wntjk
rhtSX|dk	r�y|j|d|g�Wq�tjk
r�|j	|�tSXn|dk	ry|j|d|g�Wqtjk
r|j	|�tSXqntSt
S(u

    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
    wwn : string
        Fibre Channel WWN of host

    CLI Example:

    .. code-block:: bash

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

    i?it
addiqnlistt
addwwnlistN(R"RGR:R%tcreate_hostRR$Rtset_hosttdelete_hostR)(R&tiqntwwnR((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pythost_createjs,	

cC@s�t�}t||�dk	r�|dk	r_y|j|d|g�Wq_tjk
r[tSXn|dk	r�y|j|d|g�Wq�tjk
r�tSXntStSdS(u(

    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
    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>'

    R\R]N(R"R:R%R_RR$RR)(R&RaRbR((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pythost_update�s	cC@s�t�}t||�dk	r�xG|j|�D]6}y|j||d�Wq.tjk
rctSXq.Wy|j|�t	SWq�tjk
r�tSXntSdS(u

    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

    uvolN(
R"R:R%tlist_host_connectionsRZRR$RR`R)(R&RRO((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pythost_delete�s		
cC@s;t�}t|�dkr+|dd!}nt||�dkr3y|j|�Wntjk
rhtSX|dk	r�t||�r�y|j	|d|g�Wq�tjk
r�tSXq�t
|�tSn|dk	r/t||�ry|j||�Wq,tjk
rt
|�tSXq/t
|�tSnt
StSdS(u�

    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

    i?itaddhostlistN(R"RGR7R%t
create_hgroupRR$RR:t
set_hgroupt	hg_deleteR'tconnect_hgroupR)(R&R9tvolumeR((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt	hg_create�s6	


cC@s�t�}t||�dk	r�|dk	rut||�rny|j|d|g�Wqrtjk
rjtSXqutSn|dk	r�t||�r�y|j	||�Wq�tjk
r�tSXq�tSnt
StSdS(u�

    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

    RgN(R"R7R%R:RiRR$RR'RkR)(R&R9RlR((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt	hg_update"s$	cC@s�t�}t||�dk	r�xG|j|�D]6}y|j||d�Wq.tjk
rctSXq.W|j|�}y,|j	|d|d�|j
|�tSWq�tjk
r�tSXntSdS(u?

    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

    uvoltremhostlistuhostsN(R"R7R%tlist_hgroup_connectionstdisconnect_hgroupRR$Rt
get_hgroupRit
delete_hgroupR)(R&RROR9((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyRjQs		
cC@sIt�}t||�dk	rA|dk	r�t||�r�xZ|j|�D]I}|d|krIy|j||�tSWq�tjk
r�t	SXqIqIWt	St	Sn|dk	r"t
||�rt
||�}|d|kry|j|d|g�tSWqtjk
rt	SXqt	Sq"t	Sn|dkrE|dkrEt	Snt	SdS(u�

    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

    uvoluhgroupRoN(R"R7R%R'RpRqR)RR$RR:Ri(R&RlR9RR1((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt	hg_removevs6	cC@s�t�}|dkr�|dkr�|dkr�t||�dkr�y|j|�Wntjk
rjtSXy|j|d|�tSWq�tjk
r�t	|�tSXq�tSn�t
d|||�r�t||�dkr�y|j|�Wntjk
rtSXy|j|d|�Wntjk
r>t	|�tSX|dk	r�t||�dk	r�y|j|d|g�tSWq�tjk
r�t	|�tSXq�t	|�tSq�|dk	r)t||�dk	ry|j|d|g�tSWq&tjk
rt	|�tSXq�t	|�tSq�|dk	r�t
||�dk	r�y|j|d|g�tSWq�tjk
r�t	|�tSXq�t	|�tSq�q�tSntSdS(u.

    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]

    tsnap_enabledu	value.xort
addhgrouplistRgt
addvollistN(R"R%R2t
create_pgroupRR$Rt
set_pgroupR)t	pg_deleteRMR7R:R'(R&R6R9RltenabledR((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt	pg_create�sr	$








c
C@s�t�}t||�}|dk	r�|dk	r�|ddk	r�t||�dk	r�y|j||�tSWq�tjk
r�tSXq�tSq�|dk	r�|ddk	r�t	||�dk	r�y|j
||�tSWq�tjk
r�tSXq�tSq�|dk	re|ddk	ret||�dk	r^y|j||�tSWqbtjk
rZtSXq�tSq�|ddkr�|ddkr�|ddkr�|dk	r�t||�dk	r�y|j
|d|g�tSWq�tjk
r�tSXq�tSq�|dk	rWt	||�dk	rPy|j
|d|g�tSWqTtjk
rLtSXq�tSq�|dk	r�t||�dk	r�y|j
|d|g�tSWq�tjk
r�tSXq�tSq�q�tSntSdS(u�

    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]

    uhgroupsuhostsuvolumesRvRgRwN(R"R2R%R7t
add_hgroupR)RR$RR:tadd_hostR't
add_volumeRy(R&R6R9RlRR0((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt	pg_updatesl	0
cC@s�t�}t||�dk	r�y|j|�Wntjk
rFtSX|tkr�y|j|�tSWq�tjk
rtSXq�tSntSdS(u3

    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

    N(	R"R2R%tdestroy_pgroupRR$RR)teradicate_pgroup(R&RCR((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyRzks	
cC@sVt�}t||�dk	rNy|j|�tSWqRtjk
rJtSXntSdS(u=

    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

    N(R"R4R%R�R)RR$R(R&R((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pytpg_eradicate�s	
cC@stt�}t||�}|dk	rl|dk	r�|ddk	r�t||�dk	r�y|j||�tSWq�tjk
r�tSXqitSqp|dk	r�|ddk	r�t	||�dk	r�y|j
||�tSWq�tjk
r�tSXqitSqp|dk	re|ddk	ret||�dk	r^y|j||�tSWqbtjk
rZtSXqitSqptSntSdS(u�

    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]

    uhgroupsuhostsuvolumesN(
R"R2R%R7t
remove_hgroupR)RR$RR:tremove_hostR't
remove_volume(R&R6R9RlRR0((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt	pg_remove�s:	(u23456789uABCDEFGHJKLMNPQRSTUVWXYZuabcdefghijkmnopqrstuvwxyz(7t__doc__t
__future__RRRRRRtsalt.extRtsalt.exceptionsRRR)RtImportErrorRt
__docformat__RRRtDEFAULT_PASSWORD_SYMBOLSR	R"R'R,R.R2R4R7R:R%R@RERFRJRKRLRPRVRWRYR[RcRdRfRmRnRjRtR|R�RzR�R�(((s7/usr/lib/python2.7/site-packages/salt/modules/purefa.pyt<module>4sd


			0				
		
	
$*!&'		%.-	 	!3*	#8/	%9_]%	

Zerion Mini Shell 1.0