Current File : //usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyo
�
/�P`cK@s�ddlZddlZddlZddlZddlZddlZddlZddlmZm	Z	ddlm
Z
ddlZddlm
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZddlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)dddd	d
gZ*ej+rie,Z-nyddl.m/Z/Wn!e0k
r�ddl1m/Z/nXdd�Z3d
�Z4d�Z5d�Z6d�Z7dZ8d�Z9d�Z:d�Z;d�Z<e=d�Z>d�Z?de@fd��YZAdeBd�ZCd�ZDdddd d!d"d#d$d%d&d'd(gZEdpZFd,d-jGeF�ZHdqZId2d-jGeI�ZJd3d4gZKd5d-jGeK�ZLeMd6d7d8d9d:eLd;eKd<e9�ZNd=d>d?gZOd@d-jGeO�dAdBZPeMd6d7d8d9d:ePd;eOd<e9�ZQdCZReMd6dDd8dEd:dF�ZSeSjT�ZUdGeUd:<eMd6dHd8dId:dJ�ZVeVjT�ZWdKeWd:<eMd6dLd8dMd:dN�ZXeXjT�ZYdOeYd:<eMd6dPd8dQd:dR�ZZeZjT�Z[dSe[d:<eMd6dTd8dUd:dV�Z\e\jT�Z]dWe]d:<eMd6dXd8dYd:dZd<e6�Z^eMd6d[d8d\d:d]�Z_eMd6d^d8d_d:d`�Z`eMd6dad8dbd:dc�ZaeMd6ddd8ded:df�ZbeMd6dgd8dhd:eR�ZceMd6did8djd:dk�ZdeMd6dld:dmd8dn�ZeeMd6dod:dpdqeMd6drd:dsdtjGeE�dud8dvd;eEd<e9�gdweMeU�eMeW�eMeY�eMeb�eMe]�eMe[�eMea�eMed�g�eMd6dxd:dydqeMd6dzd8d{d:d|�g�eMd6d}d:d~dqeMeS�g�eMd6dd:d��eMd6d�d:d�dqeMd6d�d:d�d8d��eMec�eMeV�gdweMd6d�d:eHd�d)d;eFd<e9�g�eMd6d�d:d�dqeMd6d�d:d�d8d��eMd6ddd8d�d:d�d�d��eMd6d�d:d�dtjGe%jf�d;e%jfd<e9�gdweMd6d�d:d�eR�g�eMd6d�d:d�dqeMeS�g�eMd6d�d:d�dqeMeX�g�eMd6d�d:d�dqeMeX�eMd6dgd8d�d:d�eR�g�eMd6d�d:d�dqeMeX�eMd6d�d8d�d:d��eMd6d�d8d�d:eJd;eI�gdweMd6dHd:d��g�eMd6d�d:d�dqeMd6d�d8d�d:d��eMd6d�d8d�d:d��eMd6d�d8d�d:d�d;d.d/g�eMd6d�d8d�d:d�d�d�d<e7�eMd6d�d8d�d:d�d�d�d<e7�eMd6d�d8d�d:d�d�d�d<e7�g�eMd6d�d:d�dqeMeS�g�eMd6d�d:d�dqeMeX�g�eMd6d�d:d�dqeMeX�g�eMd6d�d:d�dqeMeX�g�eMd6d�d:d�dqeMeX�eMe\�g�eMd6d�d:d�dqeMe\�eMeX�g�eMd6d�d:d�dqeMeX�g�eMd6d�d:d�dqeMeX�g�eMd6d�d:d�dqeMeX�g�eMd6d�d:d�dqeMd6dLd8dMd:d��g�eMd6d�d:d�dqeMd6dLd8dMd:d��g�eMd6d�d:d�dqeMd6dDd8dEd:d��eMd6d�d:d�d<e7�g�eMd6d�d:d�dqeMeV�g�eMd6d�d:d�dqeMd6d�d8d�d:d��eMe^�eMeS�g�eMd6d�d:d�dqeMe\�eMe^�g�eMd6d�d:d�dqeMe\�eMe^�g�eMd6d�d:d�dqeMe\�g�eMd6d�d:d�dqeMe\�g�eMd6d�d:d�dqeMe^�gdweMd6d�d8d�d:d��eMd6d�d8d�d:d��eMd6d�d8d�d:d��eMd6d�d8d�d:d��g�eMd6d�d:d�dqeMd6d�d8d�d:d��eMec�eMeV�g�eMd6d�d:d�dqeMeZ�g�eMd6d�d:d�dqeMeZ�eMd6dgd8d�d:d�eR�g�eMd6d�d:d�dqeMeZ�gdweMd6d�d8d�d:d��eMd6d�d8d�d:d�d�ejgd<e7�eMd6d�d8d�d:d�d�ejgd<e7�eMd6d�d8dd:d�eMd6dd8dd:dd�d�d�gd<eD�eMd6dd8dd:dd�d�d�gd<eD�eMd6dd8d	d:d
d�d�d�gd<eD�g�eMd6dd:ddqeMe`�g�eMd6d
d:ddqeMd6dd8dd:d�eMd6dd8dd:d�gdweMd6dd8dd:d�g�eMd6dd:ddqeMd6d�d8dd:d�eMeZ�g�eMd6dd:ddqeMe_�eMeZ�g�eMd6dd:ddqeMe_�eMeZ�gdweMd6d d8d!d:d"d�d�d�g�eMd6d#d8d$d:d%d�d�d�g�g�eMd6d&d:d'dqeMeZ�gdweMd6d d8d!d�d�d�gd:d(�g�eMd6d)d:d*dqeMeZ�gdweMd6d d�d�d�gd:d+�g�eMd6d,d:d-dqeMeZ�eMd6d.d8d/d:d0�eMd6d1d8d2d:d3�gdweMd6dd:d�g�eMd6dd:d4dqgdwg�eMd6d5d:d6dqeMeX�g�eMd6d7d:d8dqeMeX�eMeN�g�eMd6d9d:d:dqeMeX�eMeN�g�eMd6d;d:d<dqeMeX�eMeQ�g�eMd6dd:d=dqeMee�g�eMd6dd:d>dqeMee�g�eMd6d	d:d?dqeMee�g�eMd6d
d:d@dqeMee�g�f3ZheMdAdBdCdDdEdFdGdHdIdJdKdLdMdNdOd}dPddQd�dRd�dSd�dTd�dUd�dVd�dWd�dXd�dYd�dZd�d[d�d\d�d]d�d^d�d_d�d`d�dad�dbd�dcddddedfd5dgd7dhd9did;djddkddld	dmd
�%Zidnejfdo��YZkdS(ri����N(tArgumentParsertArgumentTypeError(tRawTextHelpFormatter(tClienttPooltVERSIONtLsmErrortDisktVolumet	JobStatustErrorNumbert
BlockRanget	uri_parsetProxytsize_human_2_size_bytestAccessGroupt
FileSystemt	NfsExportt
TargetPortt	LocalDisktBattery(
tDisplayDatatPlugDatatouttvol_provision_str_to_typetvol_rep_type_str_to_typetVolumeRAIDInfotPoolRAIDInfotVcrCapt
LocalDiskInfotVolumeRAMCacheInfoslocal-disk-listslocal-disk-ident-led-onslocal-disk-ident-led-offslocal-disk-fault-led-onslocal-disk-fault-led-off(tOrderedDictcCsbd}d}zyt�}|j|�Wn�tk
rg}tjjt|��tjj�d}n�t	k
r�}tjjt|�d�tjj�|j
tjkr�d}qd}n]t
k
r�d}nGtk
r�}|j
}n,ddl}|jd	tj�d}nXWd|rPy|j|�WqPtk
rLqPXntj|�XdS(
s+
    Common command line code, called.
    iis
i
iii����Ntfile(tNonetCmdLinetprocesstArgErrortsyststderrtwritetstrtflushRtcodeR
tPERMISSION_DENIEDtKeyboardInterruptt
SystemExitt	tracebackt	print_exctstdouttshutdownt	Exceptiontexit(tcterr_exittclitaetletseR.((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytcmd_line_wrapper;s<	
	
		
	
cCshtjj�}tj|�}z,tjtjj��tjjd�}Wdtj|tj	|�X|S(Ni(
R%tstdintfilenottermiost	tcgetattrtttytsetrawtreadt	tcsetattrt	TCSADRAIN(tfdtprevtch((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytgetchhscCs<tj|�\}}}|r(||fStd|��dS(s�
    If init_id is a WWPN, convert it into LSM standard version:
        (?:[0-9a-f]{2}:){7}[0-9a-f]{2}

    Return (converted_init_id, lsm_init_type)
    s,--init "%s" is not a valid WWPN or iSCSI IQNN(Rtinitiator_id_verifyR$(tinit_idtvalidtconverted_init_typetconverted_init_id((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytparse_convert_initss
cCs6tj|�\}}}|r"|Std|��dS(s�
    Call back from validating an initiator
    :param init_id: Initiator to validate
    :return: Value of initiator or raises an exception
    s!"%s" is invalid WWPN or iSCSI IQNN(RRHR(RIRJt_RL((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt_check_init�scCs^y6t|d�}|dkr1td|��n|SWn!tk
rYtd|��nXdS(s�
    Call back for validating a positive integer
    :param num: Number string to check
    :return: Numeric value, else exception
    i
is,invalid: require positive integer value '%d's*invalid: not a positive integer value '%s'N(tlongRt
ValueError(tnumtrc((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt_check_positive_integer�s
tchild_cCs
|j�S(N(tupper(ts((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt_upper�scCs�|s
tS|jd�}t|�dkr/tSd|kr?tSx�|D]�}dt|�koidknsrtSt|�dkr�|ddkr�tSyt|d�d	kr�tSWqFtk
r�tSXqFWtS(
s�
    Check if a string represents a valid ip4 address
    :param address: String representing address
    :return: True if valid address, else false
    t.it/iiit0i
i�(tFalsetsplittlentintRQtTrue(taddresstpartsti((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt_valid_ip4_address�s$
""
	cskd�t}|stSd|kr&tSt|jd��dkrEtS|jd�}t|�dksxt|�dkr|tSd|d	kr�t|j��s�d
GHtS|jddg�nd|krg|D]}|dkr�|^q�}|jd�t}n|rt|�d
ks.t|�d
krgtd�|D��oft�fd�dj	|�D��StS(s�
    Check if a string represents a valid ipv6 address
    :param address: String representing address
    :return: True if valid address, else false
    sABCDEFabcdef0123456789:RZs::it:ii	RYi����sNot valid ipv suffixR[ticss!|]}t|�dkVqdS(iN(R^(t.0tx((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pys	<genexpr>�sc3s|]}|�kVqdS(N((RgRh(tallowed(s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pys	<genexpr>�s(
R\R^R]RdtpoptextendtappendR`talltjoin(Rat	has_zerosRbtp((Ris6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt_valid_ip6_address�s0$%
	*#cs�tjdtj��tjd�}t|�r4tSt|�rDtSt|�dkrZtS|j|�rmtS|ddkr�|d }nt	�fd�|j
d�D��S(s�
    Checks to see if the supplied string is a valid ip4/6 or hostname
    :param ip_hn: String representing address user inputted
    :return: True if valid IP address or hostname
    s(?!-)[A-Z0-9-]{1,63}(?<!-)$s	^[0-9.]+$i�i����RYc3s|]}�j|�VqdS(N(tmatch(RgRh(Ri(s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pys	<genexpr>s(tretcompilet
IGNORECASERdR`RqR^R\RrRmR](tip_hntdigits_only((Ris6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt_is_valid_network_name�s
c
Csd}|rt}n|jddddddtjdtf�|jdd	dd
dtdd
dd|dd�|jdddddd|dd�|jdddddd|dd�|jdddd
dd|dddd�|jd d!dddd"|d#tdd$�|jd%d&dddd'|d#tdd(�|jd)d*dd
dd+|dd,dt�|jd-dddd.|dd/�|jd0dddd1|d#tdd2�|jd3d4dddd5|d#tdd6�|rt�}d7|d+|<|j	|�nd8S(9s
    As https://bugs.python.org/issue23058 indicate, argument parser should
    not have subparser sharing the same argument and destination.
    For subparser, we add common options as 'child_xxx' destination.
    For default value, False is the only allowed default value in root.
    Rfs-vs	--versiontactiontversions%s %sis-us--uritstorettypetmetavars<URI>tdests%surithelps,Uniform resource identifier (env LSMCLI_URI)s-Ps--promptt
store_trues%sprompts)Prompt for password (env LSMCLI_PASSWORD)s-Hs--humans%shumans:Print sizes in human readable format
(e.g., MiB, GiB, TiB)s-ts--terses%sseps<SEP>s;Print output in terse form with "SEP" as a record separators-es--enums%senumtdefaults3Display enumerated types as numbers instead of texts-fs--forces%sforces3Bypass confirmation prompt for data loss operationss-ws--waits%swaits+Command timeout value in ms (default = 30s)s--headers%sheadersInclude the header with terses-bs%s_asyncsmRun the command async. Instead of waiting for completion.
 Command will exit(7) and job id written to stdout.s-ss--scripts%sscriptsMDisplaying data in script friendly way with additional information(if exists)i0uN(
t_CHILD_OPTION_DST_PREFIXtadd_argumentR%targvRR(R\RTtdicttset_defaults(t
arg_parsertis_childtprefixtdefault_dict((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt_add_common_optionss\	
	cCslg|_y1t|j�dkr9tj|j�|_nWn+tk
rg}|jtjkrh�qhnX|S(Ni(	tsd_pathsR^tvpd83Rtvpd83_searchRR*R
t
NO_SUPPORT(tlsm_objtlsm_err((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt
_add_sd_pathsXs	
R$cBseZd�Zd�ZRS(cOs tj|||�||_dS(s,
        Class represents an error.
        N(R2t__init__tmsg(tselftmessagetargstkwargs((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�escCs$dtjjtjd�|jfS(Ns%s: error: %s
i(tostpathtbasenameR%R�R�(R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt__str__ls(t__name__t
__module__R�R�(((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR$ds	titemcCsKx!|D]}|j|kr|SqW|rCtd||f��ndSdS(Ns%s with ID %s not found!(tidR$R!(tltthe_idt
friendly_nametraise_errorR�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt	_get_itemus
cCs*t|�}|r|Std|��dS(sT
    Custom value checker for hostname/IP address
    :param addr:
    :return:
    s%s is invalid IP or hostnameN(RxR(taddrRJ((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt_check_network_hoststVOLUMEStPOOLStFSt	SNAPSHOTStEXPORTStNFS_CLIENT_AUTHt
ACCESS_GROUPStSYSTEMStDISKStPLUGINStTARGET_PORTSt	BATTERIEStDEFAULTtTHINtFULLsprovisioning type: s, tCLONEtCOPYtMIRROR_ASYNCtMIRROR_SYNCsreplication type: tENABLEtDISABLEsPolicy: tnames--policyR}s<POLICY>RtchoicesR|tWBtAUTOtWTsWrite cache polices: s' which stand for "write back", "auto", s"write through"s7Can use B, KiB, MiB, GiB, TiB, PiB postfix (IEC sizing)s--syss<SYS_ID>s	System IDsmSearch by System ID. Only supported for: 
(VOLUMES, POOLS, FS, DISKS, ACCESS_GROUPS,
TARGET_PORTS, BATTERIES)s--pools	<POOL_ID>sPool IDs;Search by Pool ID. Only supported for:
(VOLUMES, POOLS, FS)s--vols<VOL_ID>s	Volume IDsASearch by Volume ID. Only supported for:
(VOLUMES, ACCESS_GROUPS)s--fss<FS_ID>sFile System IDs=Search by FS ID. Only supported for:
(FS, SNAPSHOTS, EXPORTS)s--ags<AG_ID>sAccess Group IDsGSearch by Access Group ID. Only supported for:
(ACCESS_GROUPS, VOLUMES)s--inits	<INIT_ID>sInitiator IDs--snaps	<SNAP_ID>sSnapshot IDs--exports<EXPORT_ID>s	Export IDs--nfs-exports<NFS_EXPORT_ID>s6Search by NFS Export ID. Only supported for:
(EXPORTS)s--disks	<DISK_ID>s.Search by Disk ID. Only supported for:
(DISKS)s--sizes<SIZE>s--tgts<TGT_ID>s=Search by target port ID.  Only supported for:
(TARGET_PORTS)s--pathsLocal disk paths<DISK_PATH>tlistsList records of different typesR�s--typesList records of type:
    s
    s3

When listing SNAPSHOTS, it requires --fs <FS_ID>.s<TYPE>toptionals
job-statuss Retrieve information about a jobs--jobs<JOB_ID>s
job status idtcapabilitiessRetrieves array capabilitiessplugin-infos(Retrieves plugin description and versions
volume-createsCreates a volume (logical unit)s--namesvolume names<NAME>s--provisioningR�svolume-raid-creates(Creates a RAIDed volume on hardware RAIDs<DISK>s>Free disks for new RAIDed volume.
This is repeatable argument.RyRls--raid-types@RAID type for the new RAID group. Should be one of these:
    %ss--strip-sizesStrip size. svolume-raid-create-caps=Query capability of creating a RAIDed volume on hardware RAIDs
volume-deletesDeletes a volume given its ids
volume-resizesRe-sizes a volumes
<NEW_SIZE>sNew size. %ssvolume-replicates:Creates a new volume and replicates provided volume to it.s<NEW_VOL_NAME>s"The name for New replicated volumes
--rep-types<REPL_TYPE>s[Pool ID to contain the new volume.
By default, new volume will be created in the same pool.svolume-replicate-ranges3Replicates a portion of a volume to existing volumes	--src-vols<SRC_VOL_ID>sSource volume ids	--dst-vols<DST_VOL_ID>sDestination volume ids
<REP_TYPE>sReplication type: CLONE, COPYs--src-starts<SRC_START_BLK>s>Source volume start block number.
This is repeatable argument.s--dst-starts<DST_START_BLK>sCDestination volume start block number.
This is repeatable argument.s--counts<BLK_COUNT>s;Number of blocks to replicate.
This is repeatable argument.s!volume-replicate-range-block-sizes2Size of each replicated block on a system in bytessvolume-dependantss>Returns True if volume has a dependant child, like replicationsvolume-dependants-rmsRemoves volume dependenciessvolume-access-groups4Lists the access group(s) that have access to volumesvolume-masks>Grants access to an access group to a volume, like LUN Maskings
volume-unmasks7Revoke the access of specified access group to a volumes
volume-enablesEnable block access of a volumesvolume-disables Disable block access of a volumesvolume-raid-infosQuery volume RAID informationsvolume-ident-led-ons!Enable the IDENT LED for a volumesTargeted volume.
svolume-ident-led-offs"Disable the IDENT LED for a volumessystem-read-cache-pct-updates,Change the read cache percentage of a systemsTargeted system.
s
--read-pctsRead cache percentage.
spool-member-infos!Query Pool membership informationsaccess-group-createsCreate an access groups	<AG_NAME>s$Human readable name for access groupsaccess-group-adds+Add an initiator into existing access groupsaccess-group-removes.Remove an initiator from existing access groupsaccess-group-deletesDeletes an access groupsaccess-group-volumessBLists the volumes that the access group has been granted access tos
iscsi-chaps5Configures iSCSI inbound/outbound CHAP authentications	--in-users	<IN_USER>sInbound chap user names	--in-passs	<IN_PASS>sInbound chap passwords
--out-users
<OUT_USER>sOutbound chap user names
--out-passs
<OUT_PASS>sOutbound chap passwords	fs-createsCreates a file systems	<FS_NAME>sname of the file systems	fs-deletesDelete a filesystems	fs-resizesRe-sizes a filesystems	fs-exportsExport a filesystem via NFS.s--exportpaths
<EXPORT_PATH>s(NFS server export path. e.g. '/foo/bar'.s	--anonuids
<ANON_UID>s%UID(User ID) to map to anonymous users	--anongids
<ANON_GID>s&GID(Group ID) to map to anonymous users--auth-types<AUTH_TYPE>sNFS client authentication types--root-hosts<ROOT_HOST>s9The host/IP has root access.
This is repeatable argument.s	--ro-hosts	<RO_HOST>srThe host/IP has readonly access.
This is repeatable argument.
At least one '--ro-host' or '--rw-host' is required.s	--rw-hosts	<RW_HOST>ssThe host/IP has readwrite access.
This is repeatable argument.
At least one '--ro-host' or '--rw-host' is required.sfs-unexportsRemove an NFS exportsfs-clonesCreates a file system clones--src-fss<SRC_FS_ID>s&The ID of existing source file system.s
--dst-names
<DST_FS_NAME>s3The name for newly created destination file system.s--backing-snapshots
<BE_SS_ID>sbacking snapshot idsfs-snap-createsCreates a snapshots<SNAP_NAME>s'The human friendly name of new snapshotsfs-snap-deletesDeletes a snapshotsfs-snap-restores;Restores a FS or specified files to previous snapshot states--files<FILE_PATH>skOnly restore provided file
Without this argument, all files will be restored
This is a repeatable argument.s--fileass<NEW_FILE_PATH>sGstore restore file name to another name.
This is a repeatable argument.s
fs-dependantssHReturns True if filesystem has a child dependency(clone/snapshot) existss-For file check
This is a repeatable argument.sfs-dependants-rms Removes file system dependenciessHFile or files to remove dependencies for.
This is a repeatable argument.s
file-clones,Creates a clone of a file (thin provisioned)s--srcs<SRC_FILE_PATH>sCsource file to clone (relative path)
This is a repeatable argument.s--dsts<DST_FILE_PATH>s@Destination file (relative path), this is a repeatable argument.sQuery local disk informationsvolume-cache-infos"Query volume RAM cache informationsvolume-phy-disk-cache-updates)Update volume physical disk cache settingsvolume-read-cache-policy-updatesUpdate volume read cache policys volume-write-cache-policy-updates Update volume write cache policys/Turn on the identification LED for a local disks0Turn off the identification LED for a local disks&Turn on the fault LED for a local disks'Turn off the fault LED for a local disktlsslist --type systemstlpslist --type poolstlvslist --type volumestldslist --type diskstlaslist --type access_groupstlfslist --type fstltslist --type target_portsR4Rptvctvrctvrcctvdtvrtvmtvutvetvitactaatartadtvritvilontvilofftsrcputpmitldltlbslist --type batteriestvcitvpdcutvrcputvwcputldilontldilofftldflontldfloffR"cBs�eZdZd�Zd�Zd�Zed��Zed��Zd�Z	d�Z
ed��Zd	�Zd
�Z
d�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zed��Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d�Z"d �Z#d!�Z$d"�Z%ed#��Z&d$�Z'd%�Z(d&�Z)d'�Z*d(�Z+d)�Z,d*�Z-d+�Z.d,�Z/d-�Z0d.�Z1d/�Z2d0�Z3d1�Z4d2�Z5d3�Z6d4�Z7d5�Z8d6�Z9d7�Z:d8�Z;d9�Z<d:�Z=dFd;�Z?dFd<�Z@d=�ZAd>�ZBd?�ZCd@�ZDdA�ZEdB�ZFdC�ZGdD�ZHdE�ZIRS(Gs'
    Command line interface class.
    cCsd|jjs\|rdnd}td|�t�}|j�dkrKtStd�tSntSdS(s1
        Give the user a chance to bail.
        twilltmaysxWarning: You are about to do an operation that %s cause data to be lost!
Press [Y|y] to continue, any other key to aborttYsOperation aborted!N(R�tforceRRGRVR`R\(R�tdeletingR�tpressed((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytconfirm_promptTs	
cCs�t}t|�dkrdStj}t}|jjr@t}n|jjrUt}n|jjrmtj	}ntj
|d|d|jjd|jjd|jjd|d|�dS(Nitdisplay_wayt
flag_humant	flag_enumtsplittertflag_with_headertflag_dsp_all_data(
R\R^RtDISPLAY_WAY_DEFAULTR`R�tseptheadertscripttDISPLAY_WAY_SCRIPTtdisplay_datathumantenum(R�tobjectstdisplay_allR�R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�ks 			cCshg}d}tj|�}x9|D]1}|j|�\}}|jt||��q"W|j|�dS(Ns<}{>(Rtavailable_pluginsR]RlRR�(R�tdR�tpluginsRptdescRz((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytdisplay_available_plugins�s
cCsXg}xKtjdD]<}|tkrC|jt|jd��q|j|�qW|S(sb
        Walk the command line argument list and build up a new command line
        with the appropriate substitutions which is then passed to argparse, so
        that we can avoid adding more sub parsers and do all argument parsing
        before the need to talk to the library
        :return copy of command line args with alias expansion:
        it (R%R�taliasesRkR]Rl(RSRc((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pythandle_alias�s	cCsCd}x6ttj��D]"\}}|dj||�7}qW|S(Nscommand aliases:
s   {0:<18}   Alias of '{1}'
(tsortedRtitemstformat(RStktv((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytalias_help_text�sc	CsZtdt�}t|dt�tdddtj�ddt�}t|dt�|jdd	�}xtD]}|j	|d
d|dd|gdt�}|j
d
�}xA|jdg�D]-}|d
}|d
=|j|dt|�q�W|j
d�}xV|jdg�D]B}|d
}	|d
=t
|	t�sF|	f}	n|j|	|�qW|jdt||d
jdd���qmWttj�dkr�|j�td�n||_|jdtj��}
xt|
�j�D]k\}}|jt�r�|tt�}
t|
|
�dks<t|
|
�tkrRt|
|
|�qRq�q�W|
S(s3
        Command line interface parameters
        tadd_helpR�tdescriptions^The libStorageMgmt command line interface. Run %(prog)s <command> -h for more on each command.tepilogsh

Copyright 2012-2018 Red Hat, Inc.
Please report bugs to <libstoragemgmt-devel@lists.fedorahosted.org>
tformatter_classR}tcommandR�Rtparentsscmd required argumentsR�trequiredscmd optional argumentsR�tfunct-RNiN( RR\R�R`R"RRtadd_subparserstcmdst
add_parsertadd_argument_grouptgetR�t
isinstancettupleR�tgetattrtreplaceR^R%R�tprint_usageR3tparsert
parse_argsRtvarsRt
startswithR�R!tsetattr(R�t
parent_parserR t
subparserstcmdt
sub_parsertgrouptargR�tflagst
known_argsR
Rtroot_k((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR6�sN		
	

	$

	cCsQ|jjr1t|jjj|jj���ntdj|jj���dS(sD
        Dump the supported nfs client authentication types
        s, N(R�R�RRnR4texport_auth(R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt!display_nfs_client_authentication�s%c	Cs�d}d}|jdf|jdf|jdf|jdf|jdf|jdf|jdf|jdff}xJ|D]B}|d	ry|r�t	d
||df��q�|\}}qyqyW||fS(Nt	system_idtpool_idt	volume_idtdisk_idtaccess_group_idtfs_idt
nfs_export_idttgt_port_idis,Search key specified more than once (%s, %s)i(
R!R%tpooltvoltdisktagtfst
nfs_exportttgtR$(R�t
search_keytsearch_valuetsearch_argstsa((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt_get_search_key_value�s$

cCsstj|�\}}|jdkr�g}|dkr?d}n|dkr�t|jj�|jddt�}|r�|jj|�}q�n=|r�|t	j
kr�td|��n|jj||�}|j
td�|D���n�|jd	krU|d
krd}n|r6|tj
kr6td|��n|j
|jj||��n|jdkr�|d
kryd}n|r�|tj
kr�td|��n|j
|jj||��n�|jdkrL|jdkr�td��n|r|d
krtd|��nt|jj�|jd�}|j
|jj|��n#|jdkr�|dkrpd}n|r�|tj
kr�td|��n|j
|jj||��n�|jdkr�|r�td��n|j�n�|jdkr�|dkrd}n|dkrkt|jj�|jddt�}|r[|j
|jj|��S|j
g�Sn(|r�|tj
kr�td|��n|j
|jj||��n�|jdkr�|r�td��n|j
|jj��n�|jdkrj|dkrd}n|r;|tj
kr;td|��n|j
td�|jj||�D���n|jd kr�|d!kr�d}n|r�|tj
kr�td"|��n|j
|jj||��n�|jd#kr|r�td$��n|j �ni|jd%kr\|r=|t!j
kr=td&|��n|j
|jj"||��ntd'|j��dS((NR�R2R�R4sAccess GroupR�s3Search key '%s' is not supported by volume listing.css|]}t|�VqdS(N(R�(RgR((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pys	<genexpr>sR�R1s1Search key '%s' is not supported by pool listing.R�R5R�s--fs <file system id> requireds5Search key '%s' is not supported by snapshot listing.sFile SystemR�R6s6Search key '%s' is not supported by NFS Export listingR�sCNFS client authentication type listing with search is not supportedR�Rs8Search key '%s' is not supported by Access Group listingR�s+System listing with search is not supportedR�R3s0Search key '%s' is not supported by disk listingcss|]}t|�VqdS(N(R�(RgR((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pys	<genexpr>bsR�R7s7Search key '%s' is not supported by target port listingR�s,Plugins listing with search is not supportedR�s3Search key '%s' is not supported by battery listingsunsupported listing type=%s(#R"RCR|R�R4t
access_groupsR;R\t"volumes_accessible_by_access_groupRtSUPPORTED_SEARCH_KEYSR$tvolumesR�R�RtpoolsRR<R!tfs_snapshotsRtexportsR/R9taccess_groups_granted_to_volumeRtsystemsRtdisksRttarget_portsRRt	batteries(R�R�R?R@tlsm_volstlsm_agR<tlsm_vol((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�s�		
 	
	

	

	
	
	 	


cCset|jj�|jd�}t|j�\}}|jj|j|||�}|j|g�dS(NtSystem(	R�R4RLR%RMtinittaccess_group_createR�R�(R�R�tsystemRIt	init_typetaccess_group((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyRU|s
cCsit|jj�|jd�}t|j�\}}|rO|jj|||�S|jj|||�SdS(NsAccess Group(R�R4RDR;RMRTtaccess_group_initiator_addtaccess_group_initiator_delete(R�R�topRQRIRW((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt_add_rm_access_grp_init�scCs |j|j|t�g�dS(N(R�R\R`(R�R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytaccess_group_add�scCs |j|j|t�g�dS(N(R�R\R\(R�R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytaccess_group_remove�scCsW|jj�}t||jd�}|jj|�}|jtd�|D���dS(NsAccess Groupcss|]}t|�VqdS(N(R�(RgR((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pys	<genexpr>�s(R4RDR�R;RER�R�(R�R�taglR)tvols((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytaccess_group_volumes�sc
CsOt|j�\}}|tjkr:td|j��n|jjrb|jjrbtd��n|jjr�|jjr�td��n|jjr�|jj	r�td��n|jj	r�|jjr�td��n|jjr|jj	r|jjo|jjrtd��n|j
j||j|jj|jj|jj	�dS(Ns$--init "%s" is not a valid iSCSI IQNs--in-user requires --in-passs--in-pass requires --in-users--out-user requires --out-passs--out-pass requires --out-users?out-user and out-password only supported if inbound is supplied(RMRTRtINIT_TYPE_ISCSI_IQNR$R�tin_usertin_passtout_usertout_passR4tiscsi_chap_auth(R�R�RIRW((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt
iscsi_chap�s$		cCsAt|jj�|jd�}|jj|�}|j|�dS(NR(R�R4RGR9RKR�(R�R�R9tgroups((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytvolume_access_group�scCs4|jj�}t||jd�}|jj|�S(NsAccess Group(R4RDR�R;taccess_group_delete(R�R�R_R)((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyRk�scCsSt|jj�|jd�}|jt�rO|jd|jj|�d�ndS(NsFile Systems	fs-delete(R�R4R<R�R`t_wait_for_itt	fs_deleteR!(R�R�R<((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyRm�scCset|jj�|jd�}|jd|jj||j|j|j���}|j	|g�dS(NRs	fs-create(
R�R4RHR8Rlt	fs_createR�t_sizetsizeR�(R�R�RpR<((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyRn�s
	cCs�t|jj�|jd�}|j|j�}||jkrTttjd��n|j	t
�r�|jd|jj||��}|j
|g�ndS(NsFile SystemsSpecified size same as currents	fs-resize(R�R4R<RoRpttotal_spaceRR
tNO_STATE_CHANGER�R\Rlt	fs_resizeR�(R�R�R<Rp((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyRs�s	cCs�t|jj�|jd�}d}|jrQt|jj|�|jd�}n|jd|jj||j	|��}|j
|g�dS(NsSource File SystemtSnapshottfs_clone(R�R4R<tsrc_fsR!tbacking_snapshotRIRlRutdst_nameR�(R�R�RvtssR<((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyRu�s	!cCs�t|jj�|jd�}|jjrNt|jj|�|jd�}nd}|jd|jj||j	|j
|�d�dS(NsFile SystemRtt
fs_file_clone(R�R4R<R�RwRIR!RlRztsrctdst(R�R�R<Ry((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt
file_clone�s!cCs/t|�}|dkr+td|��n|S(Nis$Incorrect size argument format: '%s'(RR$(RWt
size_bytes((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyRo�scCsW|jjdk	r!|jj}nd}|r6d}nd}td|||f�dS(NRet	SUPPORTEDtUNSUPPORTEDs%s%s%s(R�R�R!R(R�tcaptvalRWR((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt_cps	c	Cs�t|jj�|jd�}|jj|�}t|j�j��}t|jt�j��}t	j
}|jjdk	r�|jj}nt�}x|D]}d||<q�Wx'|D]}||kr�d||<q�q�Wt	j|g|�dS(NRSRR�(R�R4RLR%R�Rt
get_supportedtvaluesR`RtDEFAULT_SPLITTERR�R�R!Rtdisplay_data_script_way(	R�R�RWR�tsup_capstall_capsR�tcap_dataR((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�s		

cCsS|jj�\}}|jr;td||j|f�ntd||f�dS(Ns%s%s%ssDescription: %s Version: %s(R4tplugin_infoR�R(R�R�RRz((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�)s	cCswt|jj�|jd�}|jd|jj||j|j|j�t	|j
���}|jt|�g�dS(NRs
volume-create(
R�R4RHR8Rlt
volume_createR�RoRpRtprovisioningR�R�(R�R�RpR9((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�2s	cCsVt|jj�|jd�}|jd|jj||j��}|j|g�dS(NsFile Systemssnapshot-create(R�R4R<Rltfs_snapshot_createR�R�(R�R�R<Ry((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytfs_snap_create?s		cCs
t|jj�|jd�}t|jj|�|jd�}|jj}t|�dkrfd}nt	}|jjr�t
}|jjr�t|jj�t|jj�kr�td��q�q�n|j
t	�r|jd|jj||||jj|�d�ndS(NsFile SystemRtis&number of --file not equal to --fileassfs-snap-restore(R�R4R<RItsnapR�R R^R!R`R\tfileasR$R�Rltfs_snapshot_restore(R�R�R<Rytfilestflag_all_files((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytfs_snap_restoreJs$!	$	cCsSt|jj�|jd�}|jt�rO|jd|jj|�d�ndS(NRs
volume-delete(	R�R4RGR9R�R`Rlt
volume_deleteR!(R�R�R((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�cscCswt|jj�|jd�}t|jj|�|jd�}|jt�rs|jd|jj||�d�ndS(NsFile SystemRttfs_snap_delete(
R�R4R<RIR�R�R`Rltfs_snapshot_deleteR!(R�R�R<Ry((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�js
!	cCs�|s
|S|jjr3t|�|jtj�nx�tr�|jj|�\}}}|t	j
krvtjd�q6|t	j
kr�|jj|�|St|dt|���q6WdS(Ng�?s job error code= (R�t_asyncRR1R
tJOB_STARTEDR`R4t
job_statusR	t
INPROGRESSttimetsleeptCOMPLETEtjob_freeR$R((R�R�tjobR�RWtpercent((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyRlws
	cCs�|jj|j�\}}}|tjkrb|rL|jt|�g�n|jj|j�n tt	|��|j
tj�dS(N(
R4R�R�R	R�R�R�R�RR(R1R
R�(R�R�RWR�R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR��scCs�d}|jr0t|jj�|jd�}nt|jj�|jd�}t|j�}|t	j
krtd|��n|jd|jj
||||j��}|jt|�g�dS(NRRsinvalid replication type= %ssreplicate volume(R!R8R�R4RHRGR9Rtrep_typeRtREPLICATE_UNKNOWNR$Rltvolume_replicateR�R�R�(R�R�RpRR�R9((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR��s	!!cCsMd�}|jdd��||d�|jdd��||d�dS(Nc	Ss�x�tdt|��D]�}t||d|�}||dj}t|||�}||j}|||krtd||||d|||df��qqWdS(Nis<Overlapping %s replication range %d..%d overlaps with %d..%d(trangeR^Rtblock_countR$(trtmemberRctpstpctcstcc((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt_overlap�s
tkeycSs|jS(N(t	src_block(Rh((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt<lambda>�sR�cSs|jS(N(t
dest_block(Rh((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR��sR�(tsort(trangesR�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt_check_overlap�s
	
c
Cst|jj�|jd�}t|jj�|jd�}t|j�}|tjkrmt	d|��n|j
}|j}|j}t
|�s�t
|�t
|�ko�t
|�knr�t	d��ng}x�tt
|��D]�}	t||	�}
t||	�}t||	�}|
dkr=t	d��n|dkrXt	d��n|dkrst	d��n||
|jkr�t	d	��n||
|jkr�t	d
��n|jt|||
��q�Wtj|�|jt�r|jj||||�ndS(Ns
Source VolumesDestination Volumesinvalid replication type= %ss@Differing numbers of src_start, dest_start, and count parametersis--count: value < 0s--src-start: value < 0s--dst_start: value < 0s#--src-start + --count > source sizes(--dst-start + --count > destination size(R�R4RGtsrc_voltdst_volRR�RR�R$t	src_startt	dst_starttcountR^R�RPt
num_of_blocksRlRR"R�R�R\tvolume_replicate_range(
R�R�R{R|R�t
src_startst
dst_startstcountsR�tbR�R�R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR��s>				
/
cCs8t|jj�|jd�}t|jj|��dS(NRS(R�R4RLR%Rt!volume_replicate_range_block_size(R�R�RW((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR��scCsSt|jj�|jd�}t|jj�|jd�}|jj||�dS(NRsAccess Group(R�R4RGR9RDR;tvolume_mask(R�R�R9R;((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR��scCsOt|jj�|jd�}t|jj�|jd�}|jj||�S(NsAccess GroupR(R�R4RDR;RGR9t
volume_unmask(R�R�R;R9((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR��scCs�t|jj�|jd�}|j|j�}||j|jkr[tt	j
d��n|jt�r�|j
d|jj||��}|jt|�g�ndS(NRsSpecified size same as currenttresize(R�R4RGR9RoRpt
block_sizeR�RR
RrR�R\Rlt
volume_resizeR�R�(R�R�RRpR9((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�s	cCs2t|jj�|jd�}|jj|�dS(NR(R�R4RGR9t
volume_enable(R�R�R((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�scCs2t|jj�|jd�}|jj|�dS(NR(R�R4RGR9tvolume_disable(R�R�R((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�scCs2t|jj�|jd�}|jj|�dS(Ns
NFS Export(R�R4RJtexportt
export_remove(R�R�R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytfs_unexportscCs�t|jj�|jd�}t|j�dkrWt|j�dkrWtd��n|jj|j|j	|j
|j|j|j|j|j
d�	}|j|g�dS(NsFile Systemis& please specify --ro-host or --rw-host(R�R4R<R^trw_hosttro_hostR$t	export_fsR�t
exportpatht	root_hosttanonuidtanongidt	auth_typeR!R�(R�R�R<R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt	fs_export!s		cCs>t|jj�|jd�}|jj|�}t|�dS(NR(R�R4RGR9tvolume_child_dependencyR(R�R�RRS((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytvolume_dependants6scCsAt|jj�|jd�}|jd|jj|�d�dS(NRsvolume-dependant-rm(R�R4RGR9Rltvolume_child_dependency_rmR!(R�R�R((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytvolume_dependants_rm<s	cCsJt|jj�|jd�}|jt|j|jj|��g�dS(NR(R�R4RGR9R�RR�tvolume_raid_info(R�R�RR((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�AscCsJt|jj�|jd�}|jt|j|jj|��g�dS(NR(R�R4RHR8R�RR�tpool_member_info(R�R�tlsm_pool((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�HscCs\tj|j�}|jj�}g|D]}|j|jkr(|^q(}t|�t|j�kr�tt	j
ddjt|j�td�|D�����ng|D]}|j
tj@s�|j^q�}t|�dkrtt	jddj|���n|jr!t|j�}n	tj}|jt|jj|j|||��g�dS(NsDisk ID %s not founds, css|]}|jVqdS(N(R�(RgR((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pys	<genexpr>XsisDisk %s is not free(Rtraid_type_str_to_lsmt	raid_typeR4RMR�R:R^RR
tNOT_FOUND_DISKRntsettstatusRtSTATUS_FREEt
DISK_NOT_FREEt
strip_sizeRRtVCR_STRIP_SIZE_DEFAULTR�R�tvolume_raid_createR�(R�R�R�t
all_lsm_disksRt	lsm_diskst
busy_disksR�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�Os*+3
			cCsJt|jj�|jd�}|jt|j|jj|��g�dS(NRS(R�R4RLR%R�RR�tvolume_raid_create_cap_get(R�R�tlsm_sys((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytvolume_raid_create_caplscCs2t|jj�|jd�}|jj|�dS(NR(R�R4RGR9tvolume_ident_led_on(R�R�t
lsm_volume((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�qscCs2t|jj�|jd�}|jj|�dS(NR(R�R4RGR9tvolume_ident_led_off(R�R�R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�vscCs�t|jj�|jd�}yt|j�}Wn+tk
r^}ttj	t
|���nX|jj||�t|jj�|jd�}|j|g�dS(NRS(
R�R4RLR%R_tread_pctRQRR
tINVALID_ARGUMENTR(tsystem_read_cache_pct_updateR�(R�R�t
lsm_systemR�R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR�{scCsDt|jj�|jd�}|jj||j�}t|�dS(NsFile System(R�R4R<tfs_child_dependencyR R(R�R�R<RS((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt
fs_dependants�scCsGt|jj�|jd�}|jd|jj||j�d�dS(NsFile Systemsfs-dependants-rm(R�R4R<Rltfs_child_dependency_rmR R!(R�R�R<((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytfs_dependants_rm�s
		c
Cs�d}tjjd�d}tjj|�s2dSt|���}x�|D]�}|j�jd�riqHnyTg|jdd�D]}|j�^q\}}||kr�t	|||�nWqHt
k
r�qHXqHWWdQXdS(	so
        Set uri from config file. Will be overridden by cmdline option or
        env var if present.
        turit~s/.lsmcliNt#t=i(suri(R�R�t
expandusertexiststopentlstripR#R]tstripR$RQ(R�tallowed_config_optionstconfig_pathtftlineRhR�R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt_read_configfile�s
1
cCs)|jjjjdd�tkr%tStS(sU
        Return True if current command is one of _CONNECTION_FREE_COMMANDS.
        RNR(R�RR�Rt_CONNECTION_FREE_COMMANDSR`R\(R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytis_connection_free_cmd�s	cCs�d|_d|_d|_d|_|j�|_d|_t|jj	�|_
|j
sj|j
dkrytd��n|j�r�dS|j
�tjd�dk	r�tjd�|_ntjd�|_|jjdk	r�|jj|_n|jdkrGd|jkr8|jjdkr8d|_d|_qGtd��n|jjretj�|_n|jdk	r�t|j�}|d	dkr�td
��q�ndS(Nis0[-w|--wait] requires a non-zero positive integert
LSMCLI_URItLSMCLI_PASSWORDR|R�ssim://s"--uri missing or export LSMCLI_URItusernames+password specified with no user name in uri(R!R�R4R tunknown_argsR6R�tcleanupR_twaitttmoR$RRR�tgetenvtpasswordR|tprompttgetpassR(R�tu((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR��s8					
!	cCs0|jr|j�n|r,tj|�ndS(N(RR%R3(R�tec((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR1�s	
cCs�|j�r"|jj|j�n�|rkt|��|_|jj|j|j|j�|jj	|_
nOtt|j|j|j��|_tj
d�r�td�n|jj|_
|jj|j�|j�dS(s-
        Process the parsed command.
        tLSM_DEBUG_PLUGINs8Attach debugger to plug-in, press <return> when ready...N(RR�RR
R4tplugin_registerR�RR
tplugin_unregisterRRR�RtinputtcloseR1(R�R6((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR#�s$
cCs�g}itjd6tjd6tjd6tjd6tjd6tjd6tjd6}x%tj�D]}idd6t	j
d6t	jd6dd6t	jd6t	j
d6t	jd6}x�|j�D]v}y|||�||<Wq�tk
r-}|jtjkr.tjjd	||j||j|jf�q.q�Xq�W|jt||d|d|d|d|d|d|d��q_W|j|�dS(
NR�trpmt	link_typet
serial_numt
led_statust
link_speedt
health_statusRfsWARN: %s('%s'): %d %s
(Rt	vpd83_gettrpm_gett
link_type_gettserial_num_gettled_status_gettlink_speed_getthealth_status_getR�RtRPM_NO_SUPPORTtLINK_TYPE_NO_SUPPORTtLED_STATUS_UNKNOWNtLINK_SPEED_UNKNOWNtHEALTH_STATUS_UNKNOWNtkeysRR*R
R�R%R&R'R�R�RlRR�(R�R�tlocal_diskst	func_dictt	disk_patht	info_dictR�R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytlocal_disk_list	sH












cCsJt|jj�|jd�}|jt|j|jj|��g�dS(NR(R�R4RGR9R�RR�tvolume_cache_info(R�R�RR((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR13scCs�t|jj�|jd�}|jdkr9tj}n	tj}|jj||�|j	t
|j|jj|��g�dS(NRR�(
R�R4RGR9tpolicyRtREAD_CACHE_POLICY_ENABLEDtREAD_CACHE_POLICY_DISABLEDt!volume_physical_disk_cache_updateR�RR�R1(R�R�RRR2((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytvolume_phy_disk_cache_update:s	cCs�t|jj�|jd�}|jdkr9tj}n	tj}|jj||�|j	t
|j|jj|��g�dS(NRR�(
R�R4RGR9R2RtPHYSICAL_DISK_CACHE_ENABLEDtPHYSICAL_DISK_CACHE_DISABLEDtvolume_read_cache_policy_updateR�RR�R1(R�R�RRR2((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR9Fs	cCs�t|jj�|jd�}|jdkr9tj}n$|jdkrTtj}n	tj}|jj	||�|j
t|j|jj
|��g�dS(NRR�R�(R�R4RGR9R2RtWRITE_CACHE_POLICY_WRITE_BACKtWRITE_CACHE_POLICY_AUTOt WRITE_CACHE_POLICY_WRITE_THROUGHt volume_write_cache_policy_updateR�RR�R1(R�R�RRR2((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR=Rs	cCstj|j�dS(N(Rtident_led_onR�(R�R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytlocal_disk_ident_led_on`scCstj|j�dS(N(Rt
ident_led_offR�(R�R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytlocal_disk_ident_led_offcscCstj|j�dS(N(Rtfault_led_onR�(R�R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytlocal_disk_fault_led_onfscCstj|j�dS(N(Rt
fault_led_offR�(R�R�((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pytlocal_disk_fault_led_offisN(JR�R�t__doc__R�R�RtstaticmethodRRR6R/RCR�RUR\R]R^RaRhRjRkRmRnRsRuR}RoR�R�R�R�R�R�R�R�RlR�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�RRR�R!R1R#R0R1R6R9R=R?RARCRE(((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyR"Js�				>		p														
				
				
		
		2																					
	/		*							(R�R�R�(R�R�R�R�(lR�R%RRsR�R?R=targparseRRRtsixtlsmRRRRRRR	R
RRR
RRRRRRRtlsm.lsmcli.data_displayRRRRRRRRRRRtPY3R_RPtcollectionsRtImportErrortordereddictR!R:RGRMRORTR�RXRdRqRxR\R�R�R2R$R`R�R�tlist_choicestprovision_typesRntprovision_helptreplicate_typestreplicate_helptpolicy_typestpolicy_helpR�t
policy_opttwrite_cache_policy_typestwrite_cache_policy_helptwrite_cache_policy_optt	size_helpt
sys_id_opttcopytsys_id_filter_opttpool_id_opttpool_id_filter_optt
vol_id_opttvol_id_filter_optt	fs_id_opttfs_id_filter_optt	ag_id_opttag_id_filter_opttinit_id_opttsnap_id_optt
export_id_opttnfs_export_id_filter_opttdisk_id_filter_opttsize_optttgt_id_filter_opttlocal_disk_path_opttVOL_CREATE_RAID_TYPES_STRtANON_UID_GID_NARRtobjectR"(((s6/usr/lib/python2.7/site-packages/lsm/lsmcli/cmdline.pyt<module>s�vF			
-						 	*	G