grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a d�td=ã@sddZddlmZddlmZmZmZmZddlZgd¢Z gd¢Z gd¢Z gd ¢Z Gd d „d eƒZ dS) a• Implements the RTS ALUA Target Port Group class. This file is part of RTSLib. Copyright (c) 2016 by Red Hat, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. é)ÚCFSNode)Ú RTSLibErrorÚRTSLibALUANotSupportedÚfreadÚfwriteéN)Úalua_access_stateÚalua_access_statusÚalua_write_metadataÚalua_access_typeÚ preferredÚnonop_delay_msecsÚtrans_delay_msecsÚimplicit_trans_secsÚalua_support_offlineÚalua_support_standbyÚalua_support_transitioningÚ alua_support_active_nonoptimizedÚalua_support_unavailableÚalua_support_active_optimized)Ú tg_pt_gp_idÚmembersÚalua_support_lba_dependent)ÚNoneZImplicitZExplicitzImplicit and Explicit)rzAltered by Explicit STPGzAltered by Implicit ALUAcs.eZdZdZdd„Zd]‡fdd„ Z‡fdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=d>„Z!d?d@„Z"dAdB„Z#dCdD„Z$dEdF„Z%‡fdGdH„Z&e'eedIdJ�Z(e'e e dKdJ�Z)e'e e dLdJ�Z*e'e edMdJ�Z+e'eedNdJ�Z,e'edOdJ�Z-e'edPdJ�Z.e'eedQdJ�Z/e'eedRdJ�Z0e'eedSdJ�Z1e'eedTdJ�Z2e'eedUdJ�Z3e'edVdJ�Z4e'eedWdJ�Z5e'e e!dXdJ�Z6e'e"e#dYdJ�Z7e'e$e%dZdJ�Z8e9d[d\„ƒZ:‡Z;S)^ÚALUATargetPortGroupz* ALUA Target Port Group interface cCs d|jS)Nz )Úname©Úself©rú//usr/lib/python3.9/site-packages/rtslib/alua.pyÚ__repr__(szALUATargetPortGroup.__repr__Nc s:|jdurtdƒ‚|dur2|dks*|dkr2tdƒ‚tt|ƒ ¡||_||_d|j|f|_ |durøz|  d¡Wn,t yž}zt|ƒ‚WYd}~n d}~00zt d |j |ƒWn@t yô}z(| ¡td |t|ƒfƒ‚WYd}~n d}~00n>z|  d ¡Wn.t �y4}zt|ƒ‚WYd}~n d}~00dS) a @param storage_object: backstore storage object to create ALUA group for @param name: name of ALUA group @param tag: target port group id. If not passed in, try to look up existing ALUA TPG with the same name Fz#Backend does not support ALUA setupNiÿÿrz'The TPG Tag must be between 1 and 65535z %s/alua/%sZcreateú%s/tg_pt_gp_idzCannot set id to %d: %sÚlookup)Zalua_supportedrrÚsuperrÚ__init__rÚstorage_objectÚpathÚ_pathZ_create_in_cfs_ineÚOSErrorrÚIOErrorÚdeleteÚstr)rr%rÚtagÚmsg©Ú __class__rrr$+s, ,zALUATargetPortGroup.__init__cs,| ¡|jdkrtdƒ‚tt|ƒ ¡dS)z5 Delete ALUA TPG and unmap from LUNs Údefault_tg_pt_gpzCan not delete default_tg_pt_gpN)Ú _check_selfrrr#rr*rr.rrr*Rs zALUATargetPortGroup.deletecCs| ¡d|j}tt|ƒƒS)Nú%s/alua_access_state©r1r&Úintr©rr&rrrÚ_get_alua_access_state_s z*ALUATargetPortGroup._get_alua_access_statec Cs^| ¡d|j}zt|tt|ƒƒƒWn0tyX}ztd|ƒ‚WYd}~n d}~00dS)Nr2zCannot change ALUA state: %s©r1r&rr+r4r)r)rZnewstater&ÚerrrÚ_set_alua_access_stateds  z*ALUATargetPortGroup._set_alua_access_statecCs$| ¡d|j}t|ƒ}t |¡S)Nú%s/alua_access_status)r1r&rÚ alua_statusesÚindex)rr&ÚstatusrrrÚ_get_alua_access_statusls z+ALUATargetPortGroup._get_alua_access_statusc Cs^| ¡d|j}zt|tt|ƒƒƒWn0tyX}ztd|ƒ‚WYd}~n d}~00dS)Nr:zCannot change ALUA status: %sr7)rZ newstatusr&r8rrrÚ_set_alua_access_statusrs  z+ALUATargetPortGroup._set_alua_access_statuscCs$| ¡d|j}t|ƒ}t |¡S)Nú%s/alua_access_type)r1r&rÚ alua_typesr<)rr&Z alua_typerrrÚ_get_alua_access_typezs z)ALUATargetPortGroup._get_alua_access_typec Cs^| ¡d|j}zt|tt|ƒƒƒWn0tyX}ztd|ƒ‚WYd}~n d}~00dS)Nr@z"Cannot change ALUA access type: %sr7)rZ access_typer&r8rrrÚ_set_alua_access_type€s  z)ALUATargetPortGroup._set_alua_access_typecCs| ¡d|j}tt|ƒƒS)Nú %s/preferredr3r5rrrÚ_get_preferredˆs z"ALUATargetPortGroup._get_preferredc Cs^| ¡d|j}zt|tt|ƒƒƒWn0tyX}ztd|ƒ‚WYd}~n d}~00dS)NrDzCannot set preferred: %sr7©rZprefr&r8rrrÚ_set_preferred�s  z"ALUATargetPortGroup._set_preferredcCs| ¡d|j}tt|ƒƒS)Nú%s/alua_write_metadatar3r5rrrÚ_get_alua_write_metadata•s z,ALUATargetPortGroup._get_alua_write_metadatac Cs^| ¡d|j}zt|tt|ƒƒƒWn0tyX}ztd|ƒ‚WYd}~n d}~00dS)NrHz"Cannot set alua_write_metadata: %sr7rFrrrÚ_set_alua_write_metadatašs  z,ALUATargetPortGroup._set_alua_write_metadatacCs| ¡d|j}tt|ƒƒS)Nú#%s/alua_support_active_nonoptimizedr3r5rrrÚ%_get_alua_support_active_nonoptimized¢s z9ALUATargetPortGroup._get_alua_support_active_nonoptimizedc Cs^| ¡d|j}zt|tt|ƒƒƒWn0tyX}ztd|ƒ‚WYd}~n d}~00dS)NrKz/Cannot set alua_support_active_nonoptimized: %sr7©rZenabledr&r8rrrÚ%_set_alua_support_active_nonoptimized§s  z9ALUATargetPortGroup._set_alua_support_active_nonoptimizedcCs| ¡d|j}tt|ƒƒS)Nú %s/alua_support_active_optimizedr3r5rrrÚ"_get_alua_support_active_optimized¯s z6ALUATargetPortGroup._get_alua_support_active_optimizedc Cs^| ¡d|j}zt|tt|ƒƒƒWn0tyX}ztd|ƒ‚WYd}~n d}~00dS)NrOz,Cannot set alua_support_active_optimized: %sr7rMrrrÚ"_set_alua_support_active_optimized´s  z6ALUATargetPortGroup._set_alua_support_active_optimizedcCs| ¡d|j}tt|ƒƒS)Nú%s/alua_support_offliner3r5rrrÚ_get_alua_support_offline¼s z-ALUATargetPortGroup._get_alua_support_offlinec Cs^| ¡d|j}zt|tt|ƒƒƒWn0tyX}ztd|ƒ‚WYd}~n d}~00dS)NrRz#Cannot set alua_support_offline: %sr7rMrrrÚ_set_alua_support_offlineÁs  z-ALUATargetPortGroup._set_alua_support_offlinecCs| ¡d|j}tt|ƒƒS)Nú%s/alua_support_unavailabler3r5rrrÚ_get_alua_support_unavailableÉs z1ALUATargetPortGroup._get_alua_support_unavailablec Cs^| ¡d|j}zt|tt|ƒƒƒWn0tyX}ztd|ƒ‚WYd}~n d}~00dS)NrUz'Cannot set alua_support_unavailable: %sr7rMrrrÚ_set_alua_support_unavailableÎs  z1ALUATargetPortGroup._set_alua_support_unavailablecCs| ¡d|j}tt|ƒƒS)Nú%s/alua_support_standbyr3r5rrrÚ_get_alua_support_standbyÖs z-ALUATargetPortGroup._get_alua_support_standbyc Cs^| ¡d|j}zt|tt|ƒƒƒWn0tyX}ztd|ƒ‚WYd}~n d}~00dS)NrXz#Cannot set alua_support_standby: %sr7rMrrrÚ_set_alua_support_standbyÛs  z-ALUATargetPortGroup._set_alua_support_standbycCs| ¡d|j}tt|ƒƒS)Nú%s/alua_support_transitioningr3r5rrrÚ_get_alua_support_transitioningãs z3ALUATargetPortGroup._get_alua_support_transitioningc Cs^| ¡d|j}zt|tt|ƒƒƒWn0tyX}ztd|ƒ‚WYd}~n d}~00dS)Nr[z)Cannot set alua_support_transitioning: %sr7rMrrrÚ_set_alua_support_transitioningès  z3ALUATargetPortGroup._set_alua_support_transitioningcCs| ¡d|j}tt|ƒƒS)Nz%s/alua_support_lba_dependentr3r5rrrÚ_get_alua_support_lba_dependentðs z3ALUATargetPortGroup._get_alua_support_lba_dependentc Csˆ| ¡d|j}g}t|ƒ ¡D]`}| d¡}t|ƒdkr>q"| |d|dt|d dd¡dƒt|d dd¡dƒd œ¡q"|S) Nz %s/membersú/érréÚ_é)ZdriverÚtargetZtpgtZlun)r1r&rÚ splitlinesÚsplitÚlenÚappendr4)rr&Z member_listÚmemberZlun_pathrrrÚ _get_membersõs   þ z ALUATargetPortGroup._get_memberscCs| ¡d|j}tt|ƒƒS)Nr!r3r5rrrÚ_get_tg_pt_gp_ids z$ALUATargetPortGroup._get_tg_pt_gp_idcCs| ¡d|j}tt|ƒƒS)Nú%s/trans_delay_msecsr3r5rrrÚ_get_trans_delay_msecs s z*ALUATargetPortGroup._get_trans_delay_msecsc Cs^| ¡d|j}zt|tt|ƒƒƒWn0tyX}ztd|ƒ‚WYd}~n d}~00dS)Nrlz Cannot set trans_delay_msecs: %sr7©rZsecsr&r8rrrÚ_set_trans_delay_msecss  z*ALUATargetPortGroup._set_trans_delay_msecscCs| ¡d|j}tt|ƒƒS)Nú%s/implicit_trans_secsr3r5rrrÚ_get_implicit_trans_secss z,ALUATargetPortGroup._get_implicit_trans_secsc Cs^| ¡d|j}zt|tt|ƒƒƒWn0tyX}ztd|ƒ‚WYd}~n d}~00dS)Nrpz"Cannot set implicit_trans_secs: %sr7rnrrrÚ_set_implicit_trans_secss  z,ALUATargetPortGroup._set_implicit_trans_secscCs| ¡d|j}tt|ƒƒS)Nú%s/nonop_delay_msecsr3r5rrrÚ_get_nonop_delay_msecs#s z*ALUATargetPortGroup._get_nonop_delay_msecsc Cs^| ¡d|j}zt|tt|ƒƒƒWn0tyX}ztd|ƒ‚WYd}~n d}~00dS)Nrsz Cannot set nonop_delay_msecs: %sr7)rZdelayr&r8rrrÚ_set_nonop_delay_msecs(s  z*ALUATargetPortGroup._set_nonop_delay_msecscs@tt|ƒ ¡}|j|d<|j|d<tD]}t||dƒ||<q&|S)Nrr)r#rÚdumprrÚalua_rw_paramsÚgetattr)rÚdÚparamr.rrrv0s   zALUATargetPortGroup.dumpz˜Get or set ALUA state. 0 = Active/optimized, 1 = Active/non-optimized, 2 = Standby, 3 = Unavailable, 4 = LBA Dependent, 14 = Offline, 15 = Transitioning)ÚdoczAGet or set ALUA access type. 1 = Implicit, 2 = Explicit, 3 = BothzcGet or set ALUA access status. 0 = None, 1 = Altered by Explicit STPG, 2 = Altered by Implicit ALUAz-Get or set preferred bit. 1 = Pref, 0 Not-Prez>Get or set alua_write_metadata flag. enable (1) or disable (0)zGet ALUA Target Port Group IDzGet LUNs in Target Port Groupz6Enable (1) or disable (0) Active/non-optimized supportz2Enable (1) or disable (0) Active/optimized supportz)Enable (1) or disable (0) offline supportz-enable (1) or disable (0) unavailable supportz)enable (1) or disable (0) standby supportz6show lba_dependent support enabled (1) or disabled (0)z/enable (1) or disable (0) transitioning supportzmsecs to delay state transitionzimplicit transition time limitz$msecs to delay IO when non-optimizedc Cs~|d}|dkrdS||||dƒ}t |¡D]J\}}|dkr.|dkr.zt|||ƒWq.td||dfƒ‚Yq.0q.dS)Nrr0rz.Could not set attribute '%s' for alua tpg '%s')ÚsixZ iteritemsÚsetattrr)ÚclsZ storage_objZalua_tpgZerr_funcrZ alua_tpg_objrzÚvaluerrrÚsetup†s ÿzALUATargetPortGroup.setup)N)<Ú__name__Ú __module__Ú __qualname__Ú__doc__r r$r*r6r9r>r?rBrCrErGrIrJrLrNrPrQrSrTrVrWrYrZr\r]r^rjrkrmrorqrrrtrurvÚpropertyrr r r r rrrrrrrrrrrr Ú classmethodr€Ú __classcell__rrr.rr#s¾'  ÿ ÿþÿþ  þþþþþÿþþþÿr)r„ZnoderZutilsrrrrr|rwZalua_ro_paramsrAr;rrrrrÚs