Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
contego / home / tvault / .virtenv / lib / python2.7 / site-packages / nova / virt / block_device.pyc
Size: Mime:
ó
±EYc@s˜ddlZddlZddlZddlmZddlmZddlm	Z	ddl
Z
ddlmZddl
ZddlmZddlmZddlmZdd	lmZdd
lmZejjZejeƒZdefd„ƒYZd
efd„ƒYZd„Zd„Zdefd„ƒYZ de fd„ƒYZ!de fd„ƒYZ"de fd„ƒYZ#de#fd„ƒYZ$de#fd„ƒYZ%de#fd„ƒYZ&d„Z'ej(e'e!ƒZ)ej(e'e"ƒZ*ej(e'e#ƒZ+ej(e'e$ƒZ,ej(e'e%ƒZ-ej(e'e&ƒZ.d „Z/d!„Z0d"„Z1d#„Z2d$„Z3d%„Z4e!e"e#e$e%e&fZ5d&„Z6d'„Z7dS((iÿÿÿÿN(tlog(t	jsonutils(texcutils(tblock_device(t	exception(t_LE(t_LI(t_LW(t
encryptorst_NotTransformablecBseZRS((t__name__t
__module__(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR	%st_InvalidTypecBseZRS((R
R(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR)scs"tjˆƒ‡fd†ƒ}|S(Ncs+zˆ||||Ž}Wd|jƒX|S(N(tsave(tobjtcontexttargstkwargstret_val(tmethod(sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pytwrapped.s(t	functoolstwraps(RR((RsK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyt	update_db-scCstjjrdS|jS(siDetermine az to use when creating a volume

    Uses the cinder.cross_az_attach config option to determine the availability
    zone value to use when creating a volume.

    :param nova.objects.Instance instance: The instance for which the volume
        will be created and attached.
    :returns: The availability_zone value to pass to volume_api.create
    N(tCONFtcindertcross_az_attachtNonetavailability_zone(tinstance((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyt_get_volume_create_az_value8stDriverBlockDevicecBsƒeZdZeƒZeƒZeƒZidd6dd6dd6Zd„Z	d„Z
d„Zd„Zd„Z
d	„Zd
„ZRS(s²A dict subclass that represents block devices used by the virt layer.

    Uses block device objects internally to do the database access.

    _fields and _legacy_fields class attributes present a set of fields that
    are expected on a certain DriverBlockDevice type. We may have more legacy
    versions in the future.

    If an attribute access is attempted for a name that is found in the
    _proxy_as_attr set, it will be proxied to the underlying object. This
    allows us to access stuff that is not part of the data model that all
    drivers understand.

    The save() method allows us to update the database using the underlying
    object. _update_on_save class attribute dictionary keeps the following
    mapping:

        {'object field name': 'driver dict field name (or None if same)'}

    These fields will be updated on the internal object, from the values in the
    dict, before the actual database update is done.
    tdisk_bustdevice_nametdevice_typecCsM||jd<|jjr%tƒ‚n|jd„|jDƒƒ|jƒdS(Nt_bdm_objcSsi|]}d|“qS(N(R(t.0tfield((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pys
<dictcomp>zs	(t__dict__R#t	no_deviceR	tupdatet_fieldst
_transform(tselftbdm((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyt__init__ts

cCs9||jkrt|j|ƒStt|ƒj|ƒdS(N(t_proxy_as_attrtgetattrR#tsuperRt__getattr__(R+tname((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR1}scCs?||jkr"t|j||ƒStt|ƒj||ƒdS(N(R.tsetattrR#R0Rt__setattr__(R+R2tvalue((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR4ƒscCs
tƒ‚dS(s6Transform bdm to the format that is passed to drivers.N(tNotImplementedError(R+((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR*‰scs‡fd†ˆjDƒS(s¦Basic legacy transformation.

        Basic method will just drop the fields that are not in
        _legacy_fields set. Override this in subclass if needed.
        cs"i|]}ˆj|ƒ|“qS((tget(R$tkey(R+(sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pys
<dictcomp>“s	(t_legacy_fields(R+((R+sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pytlegacyscKs
tƒ‚dS(s¯Make the device available to be used by VMs.

        To be overridden in subclasses with the connecting logic for
        the type of device the subclass represents.
        N(R6(R+R((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pytattach•scCsvxbtj|jƒD]N\}}|p(|}||t|j|ƒkrt|j|||ƒqqW|jjƒdS(N(tsixt	iteritemst_update_on_saveR/R#R3R
(R+t	attr_nametkey_nametlookup_name((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR
s
N(R
Rt__doc__tsetR)R9R.RR>R-R1R4R*R:R;R
(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyRTs			

							tDriverSwapBlockDevicecBsMeZedddgƒZeedgƒZidd6dd6Zd„ZRS(R!t	swap_sizeR cCsYtj|jƒst‚n|ji|jjd6|jjp@dd6|jjd6ƒdS(NR!iRER (Rtnew_format_is_swapR#RR(R!tvolume_sizeR (R+((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR*¬s		
N(R
RRCR)R9RR>R*(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyRD¥s


tDriverEphemeralBlockDevicecBsbeZedddgƒZeddgƒeBZeeeddgƒBZd„Zdd	„ZRS(
R R"tguest_formatR!tsizetnumtvirtual_namecCsstj|jƒst‚n|ji|jjd6|jjp@dd6|jjd6|jjd6|jj	d6ƒdS(NR!iRJR R"RI(
Rtnew_format_is_ephemeralR#RR(R!RGR R"RI(R+((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR*¼s		


icCs7tt|ƒjƒ}||d<dt|ƒ|d<|S(NRKt	ephemeralRL(R0RHR:tstr(R+RKt
legacy_bdm((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR:Çs
(R
RRCt_new_only_fieldsR)R9R*R:(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyRH¶s	tDriverVolumeBlockDevicecBsÀeZedddgƒZeddddgƒZeeBZdZdZedd	gƒZidd6dd
6dd6Z
d„Zd„Ze
eed
„ƒZe
d„ƒZd„Zd„ZRS(tconnection_infotmount_devicetdelete_on_terminationRIR"R t
boot_indextvolumeRGt	volume_idR!cs­ˆjjˆjks,ˆjjˆjkr5t‚nˆj‡fd†tjˆjƒDƒƒˆjj	ˆd<yt
jˆjjƒˆd<Wnt
k
r¨dˆd<nXdS(Ncs;i|]1\}}|ˆjtdgƒBkr||“qS(RU(t_new_fieldsRC(R$tktv(R+(sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pys
<dictcomp>äs		RTRS(R#tsource_typet
_valid_sourcetdestination_typet_valid_destinationRR(R<R=R!RtloadsRSt	TypeErrorR(R+((R+sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR*Ýs	
	#
cCsp|drld|dkrld|ddkrl|ddd|dd<tjtdƒ|ddƒqlndS(NRStdatatmultipath_idspreserve multipath_id %s(tLOGtinfoR(R+RS((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyt_preserve_multipath_idîs
cKsÁ|j||jƒ}|r4|j||d|ƒn|d}	|jƒ}|j|ƒ}
|j||	|
ƒ}d|krŠ|j|d<n|j|ƒ|r^tj|||	|ƒ}y8|j	||||dd|dd|dd|ƒWq^t
k
rZtjƒLt
jtdƒi|	d	6|dd
6d|d|ƒ|j||	|
ƒWdQXq^Xn||d<|jdkrŒ|jd
ƒ|_nd}
d|kr·|djddƒ}
n|ddkr½|jƒy'|j||	|j|dd|
ƒWq½t
k
r¹tjƒ |ry!|j|||dd|ƒWqt
k
r‰t
jtdƒi|	d	6|dd6dtd|d|ƒqXn|j||	|
ƒ|j||	ƒWdQXq½XndS(NRtidtserialRTR R"t
encryptions>Driver failed to attach volume %(volume_id)s at %(mountpoint)sRXt
mountpointRRSRJtrwRbtaccess_modet
attach_statustdetachedtmodes@Driver failed to detach volume %(volume_id)s at %(mount_point)s.tmount_pointtexc_info(R7RXtcheck_attachtelevatedtget_volume_connectortinitialize_connectionRfRtget_encryption_metadatat
attach_volumet	ExceptionRtsave_and_reraise_exceptionRdRRtterminate_connectionRGRR
R;tuuidt
detach_volumetwarningRtTruetdetach(R+RRt
volume_apitvirt_drivertdo_check_attachtdo_driver_attachRRWRXt	connectorRSRiRo((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR;ösp
		
	







	


cCsl|dsdS|j|ƒ}|j||j|ƒ}d|krQ|j|d<n|j|ƒ||d<dS(NRSRh(RtRuRXRf(R+RRR€RR„RS((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pytrefresh_connection_infoCs
		
cCshy=tj|jdƒƒ}||jjkr<||j_nWntk
rPnXtt|ƒjƒdS(NRS(	RtdumpsR7R#RSRaR0RRR
(R+tconnection_info_string((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR
Ss
c	Csšy|||ƒWn‚tjk
r•tjƒ`|drŒy|j||ƒWqŒtk
rˆ}tjtdƒi|d6|d6ƒqŒXnWdQXnXdS(NRUs5Failed to delete volume: %(volume_id)s due to %(exc)sRXtexc(	RtVolumeNotCreatedRRytdeleteRxRdR}R(R+Rt	wait_funcR€RXRˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyt_call_wait_func_s

	N(R
RRCR9RYR)R]R_R.RR>R*RfRR~tFalseR;R…R
RŒ(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyRRÎs$		


		K	tDriverSnapshotBlockDevicecBs2eZdZedddgƒZded„ZRS(tsnapshotRGRXtsnapshot_idc
Csª|jst|ƒ}|j||jƒ}|j||jdd|d|ƒ}	|rq|j||||	dƒn|	d|_ntt|ƒj	||||d|ƒdS(NtRRgR‚(
RXRtget_snapshotRtcreateRGRŒR0RŽR;(
R+RRR€RR‹R‚tav_zoneRtvol((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR;ss		N(R
RR]RCR.RR~R;(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyRŽnstDriverImageBlockDevicecBs2eZdZedddgƒZded„ZRS(timageRGRXtimage_idc		Cs›|jsrt|ƒ}|j||jddd|jd|ƒ}|rb|j||||dƒn|d|_ntt|ƒj||||d|ƒdS(NR‘R˜RRgR‚(	RXRR“RGR˜RŒR0R–R;(	R+RRR€RR‹R‚R”R•((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR;Œs		N(R
RR]RCR.RR~R;(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR–‡stDriverBlankBlockDevicecBs2eZdZedddgƒZded„ZRS(tblankRGRXR˜c
CsŸ|jsv|jd}t|ƒ}|j||j|dd|ƒ}	|rf|j||||	dƒn|	d|_ntt|ƒj||||d|ƒdS(Ns
-blank-volR‘RRgR‚(	RXR{RR“RGRŒR0R™R;(
R+RRR€RR‹R‚tvol_nameR”R•((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR;¢s	
	N(R
RR]RCR.RR~R;(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyR™scCsFg}x9|D]1}y|j||ƒƒWq
tk
r=q
Xq
W|S(N(tappendR	(R"tblock_device_mappingtdevicesR,((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyt_convert_block_devices³s

cGsYt|ƒ}t|ƒ}t|ƒ}t|ƒ}gtj||||ƒD]}|^qIS(N(tconvert_volumestconvert_snapshotstconvert_imagestconvert_blankst	itertoolstchain(tvolume_bdmst
source_volumetsource_snapshottsource_imagetsource_blankR•((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pytconvert_all_volumesÓscCs*yt|ƒdSWntk
r%nXdS(Ni(R«t
IndexError(t
volume_bdm((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pytconvert_volumeÞs
cs#‡‡fd†}t||ƒ|S(Ncs0ˆd}ˆd}|jdƒr]tjtdƒi|jd6|dd6d|d|ƒn¿|jd	ƒr¦tjtd
ƒi|jd	6|dd6d|d|ƒnv|jdƒrïtjtdƒi|jd6|dd6d|d|ƒn-tjtd
ƒi|dd6d|d|ƒ|jˆˆŽdS(NiiRXs3Booting with volume %(volume_id)s at %(mountpoint)sRTRjRRRs>Booting with volume snapshot %(snapshot_id)s at %(mountpoint)sR˜s?Booting with volume-backed-image %(image_id)s at %(mountpoint)ss+Booting with blank volume at %(mountpoint)s(R7RdReRRXRR˜R;(R,RR(tattach_argst
attach_kwargs(sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyt_log_and_attachæs*





(tmap(RR¯R°R±((R¯R°sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pytattach_block_devicesås
cOs ttjd||Ž|ƒ|S(NR…(R²toperatortmethodcaller(Rtrefresh_argstrefresh_kwargs((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pytrefresh_conn_infoss	cCsg|D]}|jƒ^q}td„|Dƒƒr{xCt|ƒD]2\}}|dd t|ƒ|d<||d<qBWn|S(Ncss|]}t|tƒVqdS(N(t
isinstanceRH(R$R,((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pys	<genexpr>sRLiÿÿÿÿRK(R:tallt	enumerateRO(RR,tbdmstitdev((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pytlegacy_block_devices
s	
cCsAtd„|DƒƒsdSy|jƒSWntk
r<dSXdS(sšGet the swap device out of the list context.

    The block_device_info needs swap to be a single device,
    not a list - otherwise this is a no-op.
    css*|] }t|tƒp!d|kVqdS(REN(R¹RD(R$tdevice((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pys	<genexpr> sN(RºRtpopR¬(ttransformed_list((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pytget_swaps	

cCs;x4tD],}y||ƒtSWqtk
r2qXqWtS(N(t_IMPLEMENTED_CLASSESR~R	R(R,tcls((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pytis_implemented/s


cCs(|jdko'|jdko't|ƒS(NR—RWRRš(simagesvolumessnapshotsblank(R\R^RÆ(R,((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pytis_block_device_mapping9s(8RR¤R´toslo_logRtloggingtoslo_serializationRt
oslo_utilsRR<tnovaRt	nova.confRt	nova.i18nRRRtnova.volumeRtconfRt	getLoggerR
RdRxR	RRRtdictRRDRHRRRŽR–R™RŸtpartialtconvert_swaptconvert_ephemeralsR R¡R¢R£R«R®R³R¸R¿RÃRÄRÆRÇ(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/virt/block_device.pyt<module>sd		Q 	
															!