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    
Size: Mime:
ó
±EYc@s%dZddlZddlZddlZddlZddlZddlZddlZddlm	Z
ddlmZ
ddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlZddlmZddlmZdd
lmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z$ddlm%Z%ddlm&Z'ddlm(Z(ddlm)Z)ddl*Zddl+m#Z,ddlm-Z.ddlm/Z/ddl0m1Z1ddlm2Z2ddlm3Z3ddlm4Z4ddl5m6Z6ddl5m7Z7ddl5m8Z8dd l5m9Z9dd!lm:Z:dd"lm;Z;dd#lm<Z<dd$l=m>Z?dd%l@mAZAdd&l@mBZBdd'lmCZCdd(lmDZDddlEm1ZFdd
lEmZGdd)lEmHZIdd*lEmJZKdd+lEmLZMdd,lEmNZOdd-lPmQZRddlSZdd.lmTZTdd/lUmVZWddlUm&ZXdd0lmYZYddlm&Z&dd1lZm[Z[dd2l\m]Z]e
j^e_ƒZ`ejaeTjbd3d4ƒZbejae3jcd5ebd6d7ƒZcejdjeZed8Zfd9gZgd:Zhd;Zid<Zjd=Zkd>Zlememfend?„Zod@„ZpdA„ZqdB„ZrdC„ZsdDe1jtfdE„ƒYZudFe1jtfdG„ƒYZvdHe1jtfdI„ƒYZwdJe1jtfdK„ƒYZxdLe1jtfdM„ƒYZydNe1jteBjzfdO„ƒYZ{dS(PsˆHandles all requests relating to compute resources (e.g. guest VMs,
networking and storage of VMs, and compute hosts on which they run).iÿÿÿÿN(tlog(t
exceptions(t	jsonutils(texcutils(tstrutils(t	timeutils(tunits(t	uuidutils(trange(tavailability_zones(tblock_device(topts(tflavors(tinstance_actions(tpower_state(trpcapi(ttask_states(tutils(t	vm_states(t	conductor(tcontext(tcrypto(tbase(t	exception(texception_wrapper(thooks(t_(t_LE(t_LI(t_LW(timage(tkeymgr(tnetwork(tmodel(topenstack_driver(tsecurity_group_base(t
notifications(tobjects(tfields(tkeypair(tquotas(tsecurity_group(trequest(trpc(tclient(tservicegroup(thardware(tcindertservicetcomputetget_notifiertbinarysnova-apiiÿÿtdefaultshw_video:ram_max_mbtUpdatet
UpdateMetatDeletetAddcsoˆdk	r+tˆtƒr+tˆƒ‰nˆdk	rVtˆtƒrVtˆƒ‰n‡‡‡fd†}|S(sÓDecorator to check VM and/or task state before entry to API functions.

    If the instance is in the wrong state, or has not been successfully
    started at least once the wrapper will raise an exception.
    cs+tjˆƒ‡‡‡‡fd†ƒ}|S(Ncsìˆdk	rK|jˆkrKtjddd|jd|jdˆjƒ‚nˆdk	r–|jˆkr–tjddd|jd|jdˆjƒ‚nˆrÖ|jrÖtjddd|jd|jdˆjƒ‚nˆ|||||ŽS(Ntattrtvm_statet
instance_uuidtstatetmethodt
task_statetlaunched_at(tNoneR:RtInstanceInvalidStatetuuidt__name__R>R?(tselfRtinstancetargstkw(tftmust_have_launchedR>R:(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytinner}s(									(t	functoolstwraps(RHRJ(RIR>R:(RHsE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytouter|s'N(R@t
isinstancetset(R:R>RIRM((RIR>R:sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytcheck_instance_stateoscs"tjˆƒ‡fd†ƒ}|S(Ncs7|js!tjd|jƒ‚nˆ|||||ŽS(Ntinstance_id(thostRtInstanceNotReadyRB(RDRRERFtkwargs(tfunction(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytwrapped™s	(RKRL(RURV((RUsE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytcheck_instance_host˜scs"tjˆƒ‡fd†ƒ}|S(NcsA|jr+|jr+tjd|jƒ‚nˆ|||||ŽS(NR;(tlockedtis_adminRtInstanceIsLockedRB(RDRRERFRT(RU(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRJ¢s(RKRL(RURJ((RUsE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytcheck_instance_lock¡scs‡fd†}ˆj|_|S(Ncs#|j|ƒˆ|||||ŽS(N(t_validate_cell(RDRRERFRT(tfn(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_wrapped«s
(RC(R]R^((R]sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytcheck_instance_cellªscCs|d„t|jƒƒt|jƒƒDƒ}xI|jƒD];\}}||ksa|||kr9d|g||<q9q9W|S(svReturn a dict describing how to change orig to new.  The keys
    correspond to values that have changed; the value will be a list
    of one or two elements.  The first element of the list will be
    either '+' or '-', indicating whether the key was updated or
    deleted; if the key was updated, the list will contain a second
    element, giving the updated value.
    cSsi|]}dg|“qS(t-((t.0tk((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pys
<dictcomp>»s	t+(ROtkeystitems(torigtnewtresulttkeytvalue((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt
_diff_dict²s
	,tAPIcBs†eZdZd–d–d–d–d„Zed„ƒZd„Zd„Zd„Z	d„Z
d–d–d„Zd„Zd–d	„Z
d
„Zd„Zd„Zed
„ƒZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z e!d„Z"ed„ƒZ#d–e!e$e$d„Z%ed„ƒZ&d „Z'd!„Z(d"„Z)d#„Z*d$„Z+d%„Z,d&„Z-d'„Z.e$e!d(„Z/d)„Z0d*„Z1e2j3d+ƒd–d–d–d–d–d–d–d–d–d–d–d–d–d–d–d–d–d–d–d–d–d–d–e!e$e$d,„ƒZ4d–d–d-„Z5d.„Z6d/„Z7d0„Z8d1„Z9d2„Z:d3„Z;d4„Z<d5„Z=d6„Z>d–e$d7„Z?d–e$d8„Z@d–e$d9„ZAeBeCeDd:d–d;d–d<e!ƒd=„ƒƒƒZEd>„ZFeBeCeDd:d–d;d–d<e$ƒd?„ƒƒƒZGeBeDd:eHjIgƒd@„ƒƒZJeBeDd<e$ƒdA„ƒƒZKe!e!dB„ZLeBeMeCeDd:eHjNeHjOgƒe!e!dC„ƒƒƒƒZPeBeMeCeDd:eHjQgƒdD„ƒƒƒƒZReBeMeCeDd:eHjSƒdE„ƒƒƒƒZTdF„ZUdG„ZVd–dH„ZWd–d–d–d–d–d–dI„ZXedJ„ƒZYd–d–d–d–d–dK„ZZdL„Z[eCeDd:eHjNeHjQeHj\eHj]gƒd–dM„ƒƒZ^eCeDd:eHjNeHjQeHj\eHj]gƒd–dN„ƒƒZ_d–dO„Z`d–dP„ZaeDd:eHjNeHjQeHj]gƒd–dQ„ƒZbeBdR„ƒZceDd:edeHjeƒd;d–gƒdS„ƒZfeDd:edeHjgƒd;ehjiƒdT„ƒZjeBeCeDd:eHjNeHjQeHjOgƒd–dU„ƒƒƒZkeBeCeDd:eHjlgƒdV„ƒƒƒZmeBeCeDd:eHjlgƒd–dW„ƒƒƒZnedX„ƒZoeBeCeDd:eHjNeHjQgƒd–e!dY„ƒƒƒZpeBeDd:eHjNeHjQeHj\eHj]gƒe!dZ„ƒƒZqeBeDd:eHjrgƒe!d[„ƒƒZseBeDd:eHjreHjtgƒd\„ƒƒZueBd]„ƒZveBd^„ƒZweBeCeDd:eHjNgƒd_„ƒƒƒZxeBeCeDd:eHj\gƒd`„ƒƒƒZyeMda„ƒZzeMdb„ƒZ{eBeCeDd:eHjNgƒdc„ƒƒƒZ|eBeCeDd:eHj]gƒdd„ƒƒƒZ}eBeDd:eHjNeHjQeHjOgƒd–d–e!de„ƒƒZ~eBeDd:eHjgƒdf„ƒƒZ€eBeCeDd:eHjNgƒd–dg„ƒƒƒZeMdh„ƒZ‚eMdi„ƒZƒeMdj„ƒZ„eMdk„ƒZ…eMdl„ƒZ†eMdm„ƒZ‡eMdn„ƒZˆeMdo„ƒZ‰eMdp„ƒZŠeMd–dq„ƒZ‹dr„ZŒds„Zdt„ZŽeBeCdu„ƒƒZeBeCdv„ƒƒZe$dw„Z‘dx„Z’dy„Z“dz„Z”eBeDd:eHjNeHj\eHjQeHjleHjIeHjreHjtgƒd–d–d–d{„ƒƒZ•d|„Z–d}„Z—d~„Z˜eBeDd:eHjNeHj\eHjQeHjleHjIeHjreHjtgƒd„ƒƒZ™eBeDd:eHjNeHj\eHj]eHjQeHjleHjIgƒd€„ƒƒZšeBeDd:eHjNeHj\eHjQgd;d–gƒd„ƒƒZ›eBeDd:eHjNeHj\eHjQgd;d–gƒd‚„ƒƒZœdƒ„Zd„„Zžd…„ZŸd†„Z eBeDd:eHjNeHj\eHj]eHjQgd;d–ƒd‡„ƒƒZ¡eBeDd:eHjNeHj\eHj]eHjQgd;d–ƒe$dˆ„ƒƒZ¢eBeCeDd:eHjNeHj\gƒd–e$d‰„ƒƒƒZ£eBeCeDd:eHjNgd;ehj¤gƒdŠ„ƒƒƒZ¥eBeCeDd;ehj¤gƒd‹„ƒƒƒZ¦eDd:eHjNeHjQeHjOgƒd–d–dŒ„ƒZ§d„Z¨d–dŽ„Z©d„Zªd„Z«d‘„Z¬d’„Z­d“„Z®d”„Z¯d•„Z°RS(—s-API for interacting with the compute manager.cKsà|ptjƒ|_|p$tjƒ|_|p9tjƒ|_|pNtjƒ|_	t
jƒ|_
tj
ƒ|_tjƒ|_tjƒ|_tjdtjƒ|_tjjrÆtjƒ|_ntt|ƒj|dS(NR1(RRlt	image_apiR tnetwork_apiR/t
volume_apiR"t#get_openstack_security_group_drivertsecurity_group_apitconsoleauth_rpcapitConsoleAuthAPItcompute_rpcapit
ComputeAPIRtComputeTaskAPItcompute_task_apiR-tservicegroup_apiR+R2tCONFRRtnotifiertephemeral_storage_encryptiontenabledRtkey_managertsupert__init__(RDRmRnRoRqRT((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRÆscCs<yt|dƒSWn$tk
r7tjƒ|_|jSXdS(Nt
_cell_type(tgetattrtAttributeErrort
cells_optst
get_cell_typeR€(RD((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt	cell_type×s

cCs>|jdkrdS|j}|s:tjd|jƒ‚ndS(NtapiR;(R…t	cell_nameRtInstanceUnknownCellRB(RDRER‡((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR\ßs		cCs#tjj||j|dtƒdS(Ntwant_result(R%tInstanceActiontaction_startRBtFalse(RDRREtaction((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_record_action_startçscCs|dkrdSy tjj|dt|ƒƒWn tjk
rRtjƒ‚nXd}d}x>|D]6\}}t|t|ƒƒ}t|t|ƒƒ}qfWy tjj|d|d|ƒWnDtjk
r}d|j	dkr÷tj
ƒ‚qtjƒ‚nXdS(sgEnforce quota limits on injected files.

        Raises a QuotaError if any limit is exceeded.
        Ntinjected_filesitinjected_file_path_bytestinjected_file_content_bytestovers(R@R%tQuotastlimit_checktlenRt	OverQuotatOnsetFileLimitExceededtmaxRTtOnsetFilePathLimitExceededtOnsetFileContentLimitExceeded(RDRRtmax_pathtmax_contenttpathtcontenttexc((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_check_injected_file_quotaës(cs‡‡fd†ˆjƒDƒ}ˆjdƒdkr“|jdƒrz|jddƒ|d}||jddƒ|d<q“|jddƒ|d<nˆjdƒdkr|jdƒrî|jddƒ|d}||jddƒ|d<q|jddƒ|d<n|S(Ncs5i|]+}ˆ|ˆ|dˆ|d|“qS(tin_usetreserved((Ratres(R(tusages(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pys
<dictcomp>s	tcoresiÿÿÿÿt	instancesitram(Rdtget(RDR(R¤tdeltastheadroomthcthr((R(R¤sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt
_get_headroomscCs¥||d}t|jdiƒjtdƒƒ}||d|}	y>tjd|ƒ}
|
jd|d|d|	d	|d
|ƒWntjk
rš}|jd}
|jd}|jd
}
i|d6|d6|	d6}|j	|
|
|ƒ}|jddƒ}|dr(t
||d|dƒ}n|drTt
||d|d|ƒ}n|dkrotdƒ}nB||ko†|knr¡|j||||ƒStdƒ|}||krÉt
|ƒn
d||f}td|d|d|	ƒ}|j|||
|ƒ\}}}}i|d6|jd6|d6|d6|d6}||krctjd|ƒntjd|ƒtjd|d|d|d|ƒ‚nX||
fS(s4Enforce quota limits on number of instances created.tvcpustextra_specsit	memory_mbRR¦R¥R§t
project_idtuser_idR(R’R¤is+Cannot run any more instances of this type.s,Can only run %s more instances of this type.s%s-%stpidt	min_countt	max_counttmsgsS%(overs)s quota exceeded for %(pid)s, tried to run %(min_count)d instances. %(msg)ssm%(overs)s quota exceeded for %(pid)s, tried to run between %(min_count)d and %(max_count)d instances. %(msg)streqtusedtallowed(tintR¨t	VIDEO_RAMR%R“treserveRR–RTR­tminRt_check_num_instances_quotatstrtdictt_get_over_quota_detailR±tLOGtdebugtTooManyInstances(RDRt
instance_typeR´RµR±R²t	req_corestvram_mbtreq_ramR(RŸR’R¤R©RªR¹R¶t
num_instancest	requestedtreqsttotal_allowedstusedstparams((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR¾&sb$






		
	
	
c	Csªg}g}g}x[|D]S}|jt||ƒƒ|jt||||ƒƒ|jt||ƒƒqWtdj||||fƒ\}}}}||||fS(Ns, (tappendR¿tmaptjoin(	RDRªR’R(RÊRËRÍRÌtresource((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRÁms
	!c
Cs€|si}nt|tƒs?tdƒ}tjd|ƒ‚nt|ƒ}ytjj|d|ƒWn9tj	k
r }|j
dd}tjd|ƒ‚nXxØtj
|ƒD]Ç\}}y$tj|ƒtj|ddƒWn.tjk
r}	tjd|	jƒƒ‚nXt|ƒdkrEtd	ƒ}tjd|ƒ‚nt|ƒdkr±td
ƒ}tjd|ƒ‚q±q±WdS(s,Enforce quota limits on metadata properties.sMetadata type should be dict.treasontmetadata_itemsR(R¹t
min_lengthiiÿs1Metadata property key greater than 255 characterss3Metadata property value greater than 255 charactersN(RNRÀRRtInvalidMetadataR•R%R“R”R–RTtMetadataLimitExceededtsixt	iteritemsRtcheck_string_lengthtInvalidInputtformat_messagetInvalidMetadataSize(
RDRtmetadataR¶tnum_metadataRŸtquota_metadataRbtvte((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt _check_metadata_properties_quotays.	
cCsZxS|D]K}|dkrqn|jj||ƒstjd|jd|ƒ‚qqWdS(sYCheck if the security group requested exists and belongs to
        the project.
        R4R±tsecurity_group_idN(RqR¨RtSecurityGroupNotFoundForProjectR±(RDRt	secgroupstsecgroup((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_check_requested_secgroupsšs
	cCs>|dk	r(|jr|S|jƒ}n|jj|||ƒS(s£Check if the networks requested belongs to the project
        and the fixed IP address for each network provided is within
        same the network block
        N(R@tno_allocatet	as_tuplesRntvalidate_networks(RDRtrequested_networksRµ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_check_requested_networks¦s	cCsØ|jdiƒ}|dkr0|jdƒ}n|dkrN|jdƒ}n|ttjƒkrrd}d}n|dk	r |jj||ƒ}|d}n|dk	rÎ|jj||ƒ}|d}n||fS(sChoose kernel and ramdisk appropriate for the instance.

        The kernel and ramdisk can be chosen in one of three ways:

            1. Passed in with create-instance request.

            2. Inherited from image.

            3. Forced to None by using `null_kernel` FLAG.
        t
propertiest	kernel_idt
ramdisk_idtidN(R¨R@R¿Rytnull_kernelRm(RDRRïRðRtimage_propertiestkernel_imaget
ramdisk_image((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_handle_kernel_and_ramdisk¹s
	

cCsÐd}d}|r±d|kr±|jdƒ}|dkrQ|jdƒ\}}q±|dkrœd|kr|jdƒ\}}q®|jdƒ\}}}q±tjddƒ‚n|sÃtj}n|||fS(Nt:iis::RÓs!Unable to parse availability_zone(R@tcounttsplitRRÛRytdefault_schedule_zone(Rtavailability_zonetforced_hosttforced_nodetc((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytparse_availability_zoneås	cCs4tj|ƒ}|r0|r0tjd|ƒ‚ndS(NR(Rtis_auto_disk_config_disabledRtAutoDiskConfigDisabledByImage(RDtauto_disk_config_imgtauto_disk_configRtauto_disk_config_disabled((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt!_ensure_auto_disk_config_is_validscCs–|jdiƒ}tj|ƒ}|j|||jdƒƒ|dkr[tj|ƒ}ni|jdƒd6|jdƒd6|jdƒd6|d6S(NRîRñtos_typetarchitecturetvm_modeR(R¨Rt%get_auto_disk_config_from_image_propsRR@Rtbool_from_string(RDRRRóR((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_inherit_properties_from_image
s	cCsgi|d6|d6|dd6}ytj|}Wn0ttfk
rbtjtdƒƒ|}nX|S(NRBtnameiRøsGFailed to set instance name using multi_instance_display_name_template.(Ryt$multi_instance_display_name_templatetKeyErrort	TypeErrorRÂRR(RDRBtdisplay_nametindexRÎtnew_name((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt _new_instance_name_from_templates
cCs…|j}|j|j|j|ƒ}||_|jddƒstj|ƒdkrl|j|jƒ|_qtj|ƒ|_n|S(Nthostnamet(	RRRBR¨R@Rtsanitize_hostnamet_default_host_nameR(RDRRERt
original_nameR((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_apply_instance_name_template*s		cCs\|rHytj|dtƒ}WqNtk
rDtjd|ƒ‚qNXnt}|rXtSdS(NtstricttoptionR(RR
tTruet
ValueErrorRtConfigDriveInvalidValueRŒ(RDtconfig_drivetbool_val((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_check_config_drive6s

c	Cs»|s
dS|ddkr/tjd|ƒ‚n|jdiƒ}|jddƒ}|dkrttjd|ƒ‚n|d	t|jd
ƒpdƒkr¨tjƒ‚nt|jdƒp½dƒtj}t|jd
ƒpßdƒ}	|dk	rI|j	rI|j
}
|
dk	r·|
tj9}
||
krFtjd|
d|ƒ‚qFq·nn|dtj}
|
dkr·|	|
krtjd|
d|	ƒ‚n||
kr·tj
d|
d|ƒ‚q·ndS(Ntstatustactivetimage_idRîtimg_config_drivetoptionalt	mandatoryRR°tmin_ramitmin_disktsizetvolume_sizetimage_min_disktroot_gbtflavor_sizet
image_size(soptionals	mandatory(RtImageNotActiveR¨tInvalidImageConfigDriveRºtFlavorMemoryTooSmallRtGiR@t	is_volumeR+tVolumeSmallerThanMinDisktFlavorDiskSmallerThanImagetFlavorDiskSmallerThanMinDisk(RDRR$RRÅtroot_bdmRótconfig_drive_optionR,R/t	dest_size((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_check_requested_imageEs:	%"	
			cCs°|jdiƒ}|jdgƒ}|jdtƒ}|jdgƒ}|rgtj|d|ƒ}ntttj|ƒƒ}|r¬|j||ƒ}|j	||ƒ}n|S(NRîtblock_device_mappingtbdm_v2tmappings(
R¨RŒR
tfrom_legacy_mappingR@tlistRÐtBlockDeviceDictt_prepare_image_mappingt_merge_bdms_lists(RDRÅt
image_metatroot_device_nameRótimage_defined_bdmstlegacy_image_definedt
image_mapping((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_get_image_defined_bdms’s		cCs£g}tttj|ƒƒ}tttj|ƒƒ}|jdƒri|ri|jtj|dƒƒn|jdƒrŸ|rŸ|jtj|ddƒƒn|S(Ntephemeral_gbtswap(tanytfilterR
tnew_format_is_ephemeraltnew_format_is_swapR¨RÏtcreate_blank_bdm(RDRÅR<tflavor_defined_bdmsthave_ephemeral_bdmsthave_swap_bdms((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_get_flavor_defined_bdms«scCsAtd„|Dƒƒ}|g|D]}|d|kr |^q S(sòOverride any block devices from the first list by device name

        :param overridable_mappings: list which items are overridden
        :param overrider_mappings: list which items override

        :returns: A merged list of bdms
        css#|]}|dr|dVqdS(tdevice_nameN((Ratbdm((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pys	<genexpr>ÄsRU(RO(RDtoverridable_mappingstoverrider_mappingstdevice_namesRV((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRC¼s
c	Cs”|jdƒpd}	|jddƒ}
|
r–xf|D][}|jdƒdkr4tj|jdƒƒ|	kr4tdƒ|	}tj|ƒ‚q4q4Wn|j|||	ƒ}
tj|
ƒdk	}|rätj	||
|	d	|ƒ}n'|rd
„}t
t||ƒƒ}n|j|
|ƒ}|dks5|dkrnt
td„|ƒƒrntd
ƒ}tj|ƒ‚qnn||j||ƒ7}tj||ƒS(NREtvdat	image_refRtdestination_typetvolumeRUsHThe volume cannot be assigned the same device name as the root device %stno_rootcSs)|jdƒdko'|jdƒdkS(Nt
boot_indexitsource_typeR(R¨(RV((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytnot_image_and_root_bdmïsicSs|ddkS(NR`R]((RV((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt<lambda>úss7Cannot attach one or more volumes to multiple instances(R¨R
t	strip_devRRtInvalidRequestRItget_root_bdmR@R?R@RMRCRLRÐRTtblock_device_objt!block_device_make_list_from_dicts(RDRtbase_optionsRÅRDR´RµR<t
legacy_bdmRER[RVR¶RFtroot_in_image_bdmsRa((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_check_and_transform_bdmÊs@
	
		
cCs3|sdifS|jj||ƒ}|d|fS(NRñ(R@RmR¨(RDRt
image_hrefR((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt
_get_images
cCs=|j||ƒ|j||ƒ|j|||||ƒdS(N(RãR R;(RDRR$RRÅRÞtfiles_to_injectR8((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_checks_for_create_and_rebuild
sc#Cs|dr#tjd|dƒ‚n|r–t|ƒ}|tkr\tjd|dtƒ‚nytj|ƒWq–tjjk
r’tj	ƒ‚q–Xn|j
||ƒ|j|||ƒ}|j||||ƒ\}}|j
|ƒ}|d'kr'|
d'k	r'tjj||j|
ƒ}|j}nd'}tjtj|jdiƒƒƒ}ytjj|ƒ}Wn;tk
r¤}tdƒtj|ƒ}tj|ƒ‚nXtj ||ƒ}i}t!j"|ƒ} |j#j$|| |ƒi|d6|d	6|püd
d6|p	d
d6t%j&d
6t'j(d6|d6|jd6|j)d6|dd6|dd6|dd6|dd6|dd6|d6|	d6|d6|
d6|d6t*d6|p¦id6|d6|d6|
d 6|d!6d"d#6| d$6|d%6|d&6}!|j+||ƒ}"|!j,|"ƒ|!||fS((siVerify all the input parameters regardless of the provisioning
        strategy being performed.
        tdisabledt	flavor_idRñtlengthtmaxsizeRîs!Invalid image metadata. Error: %streservation_idR[RRïRðRR:RR²R±tinstance_type_idR°R®R-RJRtdisplay_descriptiont	user_datatkey_nametkey_dataRXRÞtaccess_ip_v4taccess_ip_v6RûREitprogresstpci_requestst
numa_topologytsystem_metadataN(-RtFlavorNotFoundR•tMAX_USERDATA_SIZEtInstanceUserDataTooLargetbase64tdecodestringtbinasciitErrortInstanceUserDataMalformedRèRíRöR!R@R%tKeyPairtget_by_nameR²t
public_keyR
tprepend_devtproperties_root_device_nameR¨t	ImageMetat	from_dictRRRØt	text_typeRdR.tnuma_get_constraintstpci_requesttget_pci_requests_from_flavorRnt#create_pci_requests_for_sriov_portsRtNOSTATERtBUILDINGR±RŒRtupdate(#RDRRÅt	boot_metaRlR$RïRðRRvRxRytsecurity_groupsRûRwRÞRzR{RìRRRtRµtltmax_network_counttkey_pairRERDRâR¶R~Rtpci_request_infoRhtoptions_from_image((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt _validate_and_build_base_optionss
				









c
CsÉ|j||||ƒ\}}|jj|ƒ}|jj|ƒtjd|ƒg}g}g}y~xwt|ƒD]i}ttj	ƒƒ}t
jj|||||d|d||
|dƒ	}|j
ƒt
jd|ƒ}||_|j|ƒt
jdgƒ|_|
r#|jj
j|
ƒn|j|||||||||	dtƒ	}|j||||ƒ}t
j|d|d	|jd
|jd|ƒ}|j
ƒ|j|ƒt
jd|ƒ}||_|j|_d|_|j
ƒ|j|ƒ|j
ƒ|j|ƒ|j|ƒ|
r¶|r”t
jj|d|
|jƒ}yt
jj |d|d
ƒWq”t!j"k
rt#dƒ}t!j$|ƒ‚q”Xnt
j%j&||
j|jgƒnt'j(||dt)j*ddddƒqrWWnØt+k
rºt,j-ƒ¹z¦x3|D]+}y|j.ƒWqt!j/k
r1qXqWx3|D]+}y|j.ƒWq=t!j0k
rgq=Xq=Wx3|D]+}y|j.ƒWqst!j1k
rqsXqsWWd|j2ƒXWdQXnX|j3ƒ|S(NsGoing to run %s instances...R~R}RûRR%tcreate_instanceRER;R±tblock_device_mappingstserver_group_membersis)Quota exceeded, too many servers in groupR0R†(4R¾Rqtpopulate_security_groupstensure_defaultRÂRÃRR¿RBtuuid4R%tRequestSpectfrom_componentstcreatetInstanceR–tKeyPairListtkeypairsRÏt create_db_entry_for_new_instanceRŒt#_bdm_validate_set_size_and_instancetBuildRequestR±tInstanceMappingR;R@tcell_mappingt_create_block_device_mappingR“RøR²R”RR–Rt
QuotaErrort
InstanceGrouptadd_membersR$tsend_update_with_statesRR•t	ExceptionRtsave_and_reraise_exceptiontdestroytObjectActionErrortInstanceMappingNotFoundtBuildRequestNotFoundtrollbacktcommit(RDRRÅR´RµRhR—R˜R<tshutdown_terminatetinstance_grouptcheck_server_group_quotatfilter_propertiesR›RÉR(R¦tinstance_mappingstbuild_requeststiR;treq_specREt
build_requesttinst_mappingRøR¶tinstance_mapping((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_provision_instancesŠs¦			

	
					

		










cCs¢|s
iSx‘|D]‰}|rDtj|jddƒƒdkrDqn"|rf|jdƒdkrfqn|jdƒ}|jdƒ}|r¬|jj||ƒ}|d}n|jdƒry'|d}|jj||ƒ}	|	SWqštk
rtjd	|ƒ‚qšXq|ry|jj||ƒ}
Wn9tj	k
rC‚n#tk
retj
d	|ƒ‚nX|
jd
tƒstjd	|ƒ‚nt
j|
ƒSqWiS(sœIf we are booting from a volume, we need to get the
        volume details from Cinder and make sure we pass the
        metadata back accordingly.
        RURtaR_it	volume_idtsnapshot_idR$Rñtbootable(R
tget_device_letterR¨Rotget_snapshotRmRµRtInvalidBDMImagetCinderConnectionFailedtInvalidBDMVolumeRtInvalidBDMVolumeNotBootableRtget_image_metadata_from_volume(RDRR<RiRVRÊRËtsnapshotR$RDR]((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_get_bdm_image_metadatas@




cCsP|s|jdƒrdS|jdƒjdƒ}|s=dStjj||ƒS(Ntscheduler_hintstgroup(R¨R%R²tget_by_uuid(RRÀt
group_hint((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_get_requested_instance_group3sc%CsS|dkrtjdƒ}n|p*dg}|p6d}|pB|}|pNg}|rr|j||ƒ\}}nd}|j|||ƒ}|jd|d|ƒ|j|||||||||	|
|||
|||||||||ƒ\}} }!| |krtjƒ‚n9| |krNt	j
tdƒi|d6| d6ƒ| }n|j||||||||ƒ}|j
|||||||jƒƒ|j||ƒ}"|j||||||||||"|||!ƒ
}#x$|#D]}$|j||$tjƒqãW|jj|d	|#d|d
|d|d|d
|d|d|dtƒ	|#|fS(s›Verify all the input parameters regardless of the provisioning
        strategy being performed and schedule the instance(s) for
        creation.
        trR4iRRsSmax count reduced from %(max_count)d to %(max_net_count)d due to network port quotaRµt
max_net_countR¦RÀtadmin_passwordRRìR˜R<RiN(R@Rtgenerate_uidRmRÕt_check_auto_disk_configRžRtPortLimitExceededRÂtinfoRRkRoR8RÚRÈRŽR
tCREATERwtbuild_instancesRŒ(%RDRRÅRlRïRðR´RµRRvRxRyR˜RûRwRÞRRÝRzR{RìRR<RRÀRtRiR½R¿R$R—RhRÜR›R¾R¦RE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_create_instance?sj	
			
				
cCsˆ|jdƒ}|dkr„|jdƒdkr„|jdƒdkr„|jdƒdkro|jddƒ}q„|jd	dƒ}n|S(
NR+R`tblankR\tlocaltguest_formatRKiRJ(R¨R@(RÅRVR*((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_volume_size™s!cCs$g}xtj|ƒD]}tjd|ƒ|d}|dks|dkrTqntj|ƒsiqn|jdƒ}|dkrd}n|sŸtj}ntji|dd6d	d
6dd6d
d6|d6t	d6dd6ƒ}|j
||ƒ|d<|ddkrqn|j|ƒqW|S(s5Extract and format blank devices from image mappings.sImage bdm %stvirtualtamitrootRçRKtdeviceRURåR`RæR\tdisktdevice_typetdelete_on_terminationiÿÿÿÿR_R+i(R
tmappings_prepend_devRÂRÃtis_swap_or_ephemeralR¨Rytdefault_ephemeral_formatRARRèRÏ(RDRÅR>tprepared_mappingsRVtvirtual_nameRçtvalues((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRB¥s6
		
cCswtjdt|ƒd|jƒ|j||||ƒ|jƒ}x/|D]'}|j||ƒ|_|j|_qHW|S(sêEnsure the bdms are valid, then set size and associate with instance

        Because this method can be called multiple times when more than one
        instance is booted in a single request it makes a copy of the bdm list.
        sblock_device_mapping %sR;(	RÂRÃR@RBt
_validate_bdmt	obj_cloneRèR+R;(RDRRERÅR<tinstance_block_device_mappingRV((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR¬Ìs

cCsCtj|ƒ}x-|D]%}|jdkr1qn|jƒqWdS(Ni(tcopytdeepcopyR+tupdate_or_create(RDR<tdb_block_device_mappingRV((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR°Þs

c	sÑd„}tg|D]-}|jdk	r|jdkr|j^qƒ}d|ksb||ƒrtjdt|ƒd|ƒtjƒ‚nx$|D]}|j}|j	}	|j
}
|
dk	rV|
|jdƒkrVy|j||
ƒWn#t
k
rtjd|
ƒ‚nX|jdkr°|jdkr°|jr°tjd	td
ƒƒ‚q°q”|	dk	rîyD|jj||	ƒ}|jj||d|ƒ|jdƒ|_Wq°tjtjfk
rÈ‚q°t
k
rêtjd|	ƒ‚q°Xq”|dk	rmy4|jj||ƒ}|jp'|jdƒ|_Wq°tjk
rG‚q°t
k
ritjd|ƒ‚q°Xq”|jdkr”|jdkr”|jr”tjd	td
ƒƒ‚q”q”Wt‡fd†|Dƒƒ}
|
ˆdkrïtjƒ‚ntj|ƒ}t|ƒdkr1tdƒ}tj d|ƒ‚n|rl|djpGd}|ˆdkrltj!ƒ‚qlnt"j#}|dkrÍtg|D]}|jdkr‹|^q‹ƒ}||krÍtj$ƒ‚qÍndS(Ncs$t‡fd†tˆd ƒDƒƒS(Nc3s-|]#\}}|dˆ|dkVqdS(iN((RaRÃtel(R™(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pys	<genexpr>ñsiÿÿÿÿ(tallt	enumerate(R™((R™sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_subsequent_listîsis;Invalid block device mapping boot sequence for instance: %sRER[RñRR]tmessagesLImages with destination_type 'volume' need to have a non-zero size specifiedR*RåsJBlank volumes (source: 'blank', dest: 'volume') need to have non-zero sizec3s1|]'}tj|ƒr|jp(ˆdVqdS(RJN(R
RNR+(RaRV(RÅ(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pys	<genexpr>0sRJis#More than one swap drive requested.tdetailsRKRæ(%tsortedR_R@RÂRÃR@RtInvalidBDMBootSequenceRËRÊR$R¨RmRµRÏR`R\R+t
InvalidBDMRRotcheck_attachRÐt
InvalidVolumeRÑRÎtInvalidBDMSnapshottsumtInvalidBDMEphemeralSizeR
tget_bdm_swap_listR•tInvalidBDMFormattInvalidBDMSwapSizeRytmax_local_block_devicestInvalidBDMLocalsLimit(RDRRERÅR RRVtboot_indexesRËRÊR$R]tsnaptephemeral_sizet	swap_listR¶t	swap_sizet	max_localt	num_local((RÅsE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRöìs„	
!	
			





	cCs¬|jdƒ}|jdƒr0|jdƒ}nd}|dkr`|j|jƒ}||_n|dkr¨|dkr¨|}|j|jƒ}tj||ƒ|_	ndS(s,Populate instance display_name and hostname.RRiN(
R¨tobj_attr_is_setR@t_default_display_nameRBRRRRR(RDRERÉRRtdefault_hostname((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_populate_instance_namesHs	cCsd|S(Ns	Server %s((RDR;((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRcscCsd|S(Ns	Server-%s((RDR;((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRfsc	Cs`||_tj|_tj|_tjƒ}	|j	|	_
tjƒ|	_
|	|_||_d|_d|_tjjrœ|jj|dtjjƒ|_n	d|_|jdƒsÀi|_ntj|ƒ|_tj||ƒ}
|
jd|j ƒ|jj!|
ƒ||_"|j#||ƒ||_$|dkr\|j%dkr\|j&|||ƒ}n|S(s&Build the beginning of a new instance.RrRtimage_base_image_refiR†N('tlaunch_indexRR•R:Rt
SCHEDULINGR>R%tInstanceInfoCacheRBR;t
network_modeltNetworkInfotnetwork_infot
info_cachetflavorR@t
old_flavort
new_flavorRyR{R|R}t
create_keytkey_sizetephemeral_key_uuidRRRtinstance_sys_metatget_system_metadata_from_imaget
setdefaultR[R–R˜RR½R…R(RDRRERRR˜RÅRÉR½R"tsystem_meta((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_populate_instance_for_createis:									c	Cs9|j||||||||	ƒ|
r5|jƒn|S(sTCreate an entry in the DB for this new instance,
        including any related table updates (such as security group,
        etc).

        This is called by the scheduler after a location for the
        instance has been determined.

        :param create_instance: Determines if the instance is created here or
            just populated for later creation. This is done so that this code
            can be shared with cellsv1 which needs the instance creation to
            happen here. It should be removed and this method cleaned up when
            cellsv1 is a distant memory.
        (R-R§(RDRRÅRRER)R<RÉRR½RŸ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR«™s

cCs?x8|D]0}|jrtdƒ}tjd|ƒ‚qqWdS(s=Check whether multiple instances are created from port id(s).s‚Unable to launch multiple instances with a single configured port ID. Please launch your instance one by one with different ports.RÓN(tport_idRRtMultiplePortsNotApplicable(RDRìt
requested_netR¶((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt,_check_multiple_instances_with_neutron_ports²s
	cCsHxA|D]9}|jr|jrtdƒ}tjd|ƒ‚qqWdS(s?Check whether multiple instances are created with specified ip.s?max_count cannot be greater than 1 if an fixed_ip is specified.RÓN(t
network_idtaddressRRt InvalidFixedIpAndMaxCountRequest(RDRìR0R¶((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt+_check_multiple_instances_with_specified_ip¼s
RŸc!#Cs |rJ|dk	rJ|dkrJ|j|ƒtjƒrJ|j|ƒqJn|
r¡tj|jƒtƒ}|dkr¡|
|kr¡t	dƒ}t
j|ƒ‚q¡ntj
||||ƒ} |j|||||||||	|
|||
||||||||||d| d|d|d|ƒS(sôProvision instances, sending instance information to the
        scheduler.  The scheduler will determine where the instance(s)
        go and will handle creating the DB entries.

        Returns a tuple of (instances, reservation_id)
        is0The requested availability zone is not availableRÀRiR½R¿N(R@R5Rt
is_neutronR1R	tget_availability_zonestelevatedRRRRdtscheduler_utilstbuild_filter_propertiesRä(!RDRRÅRlRïRðR´RµRRvRxRyR)RûRüRýRwRÞRRÝR<RzR{RìRRRÖRiR½R¿tavailable_zonesR¶RÀ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR§Ås<
					c	Ks±|jdƒ}|dkrdS|r1|r1dS|rj|jdiƒ}tj|ƒ}|jdƒ}n0tj|ƒ}|jdƒ}tjd|ƒ}|j|||ƒdS(NRRîRñRtsys_meta(R¨R@RR	R)t"get_auto_disk_config_from_instanceR(	RDRERtextra_instance_updatesRtimage_propsRR[R<((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRßús	c
CsÖd}ytjj||ƒ}Wntjk
r5nX|dksQ|jdkr…ytjj||ƒ}WqÒtj	k
rdSXnMt
j||jƒ6ytjj||ƒ}Wntj	k
rËdSXWdQX|S(sñHelper method for pulling an instance object from a database.

        During the transition to cellsv2 there is some complexity around
        retrieving an instance from the database which this method hides. If
        there is an instance mapping then query the cell for the instance, if
        no mapping exists then query the configured nova database.

        Once we are past the point that all deployments can be assumed to be
        migrated to cellsv2 this method can go away.
        N(R@R%R®tget_by_instance_uuidRR¹R¯R¨RØtInstanceNotFoundtnova_contextttarget_cell(RDRRBtinst_mapRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_lookup_instances$	
cCsØ|j||ƒ}tjj|dƒ}|dkr7tS|rÔtj||ƒ\}}|j|||j||ƒ}y<|j	ƒ|j
||jƒ}|dk	r®|j
ƒnWntjk
rÏ|jƒnXtStS(s¿Handle deletion if the instance has not reached a cell yet

        Deletion before an instance reaches a cell needs to be handled
        differently. What we're attempting to do is delete the BuildRequest
        before the api level conductor does.  If we succeed here then the boot
        request stops before reaching a cell.  If not then the instance will
        need to be looked up in a cell db and the normal delete path taken.
        snova-osapi_computeiN(t_attempt_delete_of_buildrequestR%tServicetget_minimum_versionRŒt
quotas_objtids_from_instancet_create_reservationsR>R¼RERBR@R·RRAR»R(RDRREtdeletedtservice_versionR±R²R(((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_delete_while_booting@s*			
cCsBy&tjj||jƒ}|jƒWntjk
r=tSXtS(N(	R%R­R@RBR·RRºRŒR(RDRREt	build_req((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRFzs	cKsZ|jr&tjtdƒd|ƒdS|jsg|j||ƒrEdS|j||jƒ}|sgdSntj	j
||jƒ}tj||ƒ\}}|j
tjtjfkrg|jjdƒ}	tjtdƒ|	d|ƒy|jj||	ƒWqgtjtjfk
r:}
tjtdƒ|
jƒd|ƒqgtk
rctjtdƒd|ƒqgXn|j}d}y€|j|ƒd|_ |j!ƒ|j"|||||ƒ}|j#dkrç||||d	dƒ|j$ƒdS|j
tjk}
|jr³|
r³y…t%j&|j'||d
|ƒ|j(ƒt%j&|j'||d|d|jƒ|j$ƒtjtd
ƒi|j
d6d|ƒdSWq³tj)k
r¯|j*ƒq³Xn|j
tj+krØ|j,||ƒnt-}yÔ|
stj.j/|j0ƒ|jƒ}|j1j2|ƒ}n|s±|t3j4t3j5fkr`tjtdƒd|ƒ|j6ƒdS|j7||t8j9ƒ|j
tj:kr•|j6ƒn||||d	|j;ƒnWntj<k
rÈnX|rõ|j=|||||ƒ|j$ƒnWn]tj>k
r|rV|j6ƒqVn7tk
rUt?j@ƒ|rL|j6ƒnWdQXnXdS(Nsinstance termination disabledREtshelved_image_ids8Working on deleting snapshot %s from shelved instance...s5Failed to delete snapshot from shelved instance (%s).sNSomething wrong happened when trying to delete snapshot from shelved instance.iR†treservationss%s.starts%s.endRsIInstance deleted and does not have host field, its vm_state is %(state)s.R<s<Instance is already in deleting state, ignoring this request(Atdisable_terminateRÂRáRRRRNRERBR%tBlockDeviceMappingListR@RIRJR:RtSHELVEDtSHELVED_OFFLOADEDRR¨RmtdeleteRt
ImageNotFoundtImageNotAuthorizedtwarningRRÜRµRR>R@R–R|tsaveRKR…R¼t
compute_utilstnotify_about_instance_usageRzR·R¸trefreshtRESIZEDt_confirm_resize_on_deletingRRGtget_by_compute_hostR8Rxt
service_is_upRtDELETINGt
SOFT_DELETINGR»RŽR
tDELETEtSOFT_DELETEDRQtComputeHostNotFoundt
_local_deleteRARR¶(RDRREtdelete_typetcbtinstance_attrstbdmsR±R²RËRŸtoriginal_task_stateR(tshelved_offloadedtis_local_deleteR0((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_delete‰s¼			

	
	
	




		
	




cCs`d}xdD]y}y\tjj|jƒ|j|ƒ}tjtdƒi|j	d6|j
d6d|d|ƒPWq
tjk
r…q
Xq
W|s³tjtdƒd|d|ƒdS|j
}ytj||ƒ}Wn7tk
rtjtd	ƒ|j	d|d|ƒdSXtj|||ƒ}|j||tjƒ|jj|||||jd
tƒdS(Ntfinishedt
confirmingsLFound an unconfirmed migration during delete, id: %(id)s, status: %(status)sRñR"RREs.Instance may have been confirmed during deletes2Migration %s may have been confirmed during deletetcast(sfinisheds
confirming(R@R%t	Migrationtget_by_instance_and_statusR8RBRÂRáRRñR"RtMigrationNotFoundByStatustsource_computeR[tdownsize_quota_deltaRtreserve_quota_deltaRŽR
tCONFIRM_RESIZERttconfirm_resizeRQRŒ(RDRREt	migrationR"tsrc_hostR©R(((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR_s<
	



	


cCs§|tjtjfkrO|j}|j}|jjddƒ}|j|}	n|jj}|jj}	t	j
d|ƒ}
|
jd|d|ddd|d	|	ƒ|
S(
Nshw_video:ram_max_mbiRR±R²R¦iÿÿÿÿR¥R§(RtRESIZE_MIGRATEDt
RESIZE_FINISHR$R®R¯R¨R°R#R%R“R¼(RDRRERlR±R²R$tinstance_vcpusRÇtinstance_memory_mbR(((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRKJs			cCs’d|krŽ|jdk	rŽtj|jƒjdƒ}|rŽ|jdƒ|jkrX|Stjdi|jdƒd6|jd6d|ƒqŽndS(	swLookup a connector dict from the bdm.connection_info if set

        Gets the stashed connector dict out of the bdm.connection_info if set
        and the connector host matches the instance host.

        :param bdm: nova.objects.block_device.BlockDeviceMapping
        :param instance: nova.objects.instance.Instance
        :returns: volume connector dict or None
        tconnection_infot	connectorRRs…Found stashed volume connector for instance but connector host %(connector_host)s does not match the instance host %(instance_host)s.tconnector_hostt
instance_hostREN(RR@RtloadsR¨RRRÂRÃ(RDRVRER‚((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_get_stashed_volume_connectorbs
	c	Csÿ|jƒ}xì|D]ä}|jríy|j||ƒ}|rY|jj||j|ƒntjd|jd|ƒ|jj||j|j	ƒ|j
r°|jj||jƒnWqítk
ré}t
dƒ}tj||d|ƒqíXn|jƒqWdS(s–The method deletes the bdm records and, if a bdm is a volume, call
        the terminate connection and the detach volume via the Volume API.
        sLUnable to find connector for volume %s, not attempting terminate_connection.REs)Ignoring volume cleanup failure due to %sN(R8R4R†Rotterminate_connectionRÊRÂRÃtdetachRBRïRVRµRRYR·(	RDRkRERR8RVR‚RŸterr_str((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_local_cleanup_bdm_volumes|s(
	
	
	c
CsW|jtjkr.tjtdƒd|ƒntjtdƒ|jd|ƒt	j
|j||d|ƒ|jƒ}|j
dkrô|j}zV|jtjkrÐt|tjdƒƒ}|jdƒ|_n|jj||ƒWd||_Xn|j|||ƒ||||dtƒ|j}	|jƒt	j
|j||d	|d|	ƒdS(
NsRinstance is in SHELVED_OFFLOADED state, cleanup the instance's info from database.REs2instance's host %s is down, deleting from databases%s.startR†Rtshelved_hostRæs%s.end(R:RRURÂRáRRYRRRR[R\RzR8R…Rtobj_basetget_attrnameR¨Rntdeallocate_for_instanceRŠRRR·(
RDRRERkRhRiR8t	orig_hosttsysmetaR<((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRgšs2
		
	
cCs]|r7tj|_d|_tjƒ|_|jƒn"|j	j
|||d|ddƒdS(NRQRhRV(RtDELETEDR:R@R>Rtutcnowt
terminated_atRZRttterminate_instance(RDRRERkRQRæ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt
_do_deleteÃs	
cCs]|r7tj|_d|_tjƒ|_|jƒn"|j	j
|||d|ddƒdS(NRQRhtforce_delete(RR‘R:R@R>RR’R“RZRtR”(RDRRERkRQRæ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_do_force_deleteÏs	
cCsT|r7tj|_d|_tjƒ|_|jƒn|j	j
||d|ƒdS(NRQ(RReR:R@R>RR’R“RZRttsoft_delete_instance(RDRRERkRQRæ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_do_soft_deleteÛs	
R:R>RIc	CsEtjdd|ƒ|j||d|jdtjdtjƒƒdS(sTerminate an instance.s$Going to try to soft delete instanceREtsoft_deleteR>t
deleted_atN(RÂRÃRoR™RRcRR’(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRšçs
	cCs&|j||d|jdtjƒdS(NRVR>(RoR•RRb(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_delete_instanceôscCs'tjdd|ƒ|j||ƒdS(sTerminate an instance.s"Going to try to terminate instanceREN(RÂRÃRœ(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRVøsc	Cs|jƒ}tj||ƒ\}}|j||ddd|d|ƒ\}}|j||tjƒy†|jr®tj	|_
d|_|j
ddgƒ|jj||ƒn1tj|_d|_
d|_|j
ddgƒ|jƒWn.tk
rtjƒ|jƒWdQXnXdS(s:Restore a previously deleted (but not reclaimed) instance.iR±R²texpected_task_stateN(t
get_flavorRIRJR¾RŽR
tRESTORERRRt	RESTORINGR>R@R›RZRttrestore_instanceRtACTIVER:R¼RµRR¶R»(RDRRER#R±R²RÉR(((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytrestores(				

cCs&|j||d|jdtjƒdS(s4Force delete an instance in any vm_state/task_state.R–R>N(RoR—RRb(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR–scCsttjdd|ƒtj|_d|_|jddgƒ|j||t	j
ƒ|jj||d|d|ƒdS(NsGoing to try to stop instanceREiRtdo_casttclean_shutdown(
RÂRÃRtPOWERING_OFFR>R|RZR@RŽR
tSTOPRtt
stop_instance(RDRRER¤R¥((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt
force_stop&s	cCs|j||||ƒdS(sStop an instance.N(R©(RDRRER¤R¥((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytstop2scCs_tjdd|ƒtj|_|jddgƒ|j||tj	ƒ|j
j||ƒdS(sStart an instance.sGoing to try to start instanceRERN(RÂRÃRtPOWERING_ONR>RZR@RŽR
tSTARTRttstart_instance(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytstart:s
cCs@tjdd|ƒ|j||tjƒ|jj||ƒdS(s"Trigger crash dump in an instance.sTry to trigger crash dumpREN(RÂRÃRŽR
tTRIGGER_CRASH_DUMPRtttrigger_crash_dump(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR°Ks
cCs:ytjj||ƒ}Wntjk
r5d}nX|S(N(R%R®R@RR¹R@(RDRR;RD((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_get_instance_map_or_noneXs	
cCs‡tjj|dƒ}|dkr:tjj||d|ƒS|j||ƒ}|r›|jdk	r›tj	||jƒ tjj||d|ƒ}WdQXnè|rh|jdkrhy"tj
j||ƒ}|j}Wqƒt
jk
rd|j||ƒ}|rF|jdk	rFtj	||jƒ tjj||d|ƒ}WdQXqetjj||d|ƒ}qƒXntjj||d|ƒ}|S(Nsnova-osapi_computeitexpected_attrs(R%RGRHR¨RØR±R¯R@RBRCR­R@RERRº(RDRR;R²RMRDRERO((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt
_get_instancecs:			
			
					cCsÅ|sg}n|jddddgƒy`tj|ƒretjdd|ƒ|j|||ƒ}n"tjd|ƒtjd|ƒ‚Wn6tjk
rÀtjd	|ƒtjd|ƒ‚nX|S(
s1Get a single instance with the given instance_id.RÞRR˜R"sFetching instance by UUIDR;s!Failed to fetch instance by id %sRQsInvalid instance id %s(	textendRtis_uuid_likeRÂRÃR³RRAt	InvalidID(RDRRQR²RE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR¨›s 	
cs‰|dkri}ntjdt|ƒƒi‰‡‡fd†}‡fd†}	‡fd†}
‡fd†}idd6dd	6d
d6|d6|	d
6|
d6|d6}x‘tj|ƒD]€\}
}y||
}Wntk
rî|ˆ|
<q·Xt|tjƒr|ˆ|<q·y||ƒWq·t	k
r6t
jƒSXq·WdˆkpPdˆk}|}|r{|r{tjdƒd}nt
jj
ˆˆd|d|d|d|ƒ}t
jdg|D]}|j^q¸ƒ}|ræ|t|ƒn|}yt
jjˆt
jjƒ}Wn&tjk
r3t
jdgƒ}nwXtjˆ|ƒby4|jˆˆd|d|d|d|d|ƒ}Wn&tjk
r£t
jdgƒ}nXWdQX|rÀ|t|ƒn|}|dksÞ|dkr|jˆˆd|d|d|d|d|ƒ}nt
jdgƒ}d„}|ƒ}t
jdtt||j
|j
|j
ƒƒƒ}|r…|j|ˆ|ƒ}n|S(snGet all instances filtered by one of the given parameters.

        If there is no filter and the context is an admin, it will retrieve
        all instances in the system.

        Deleted instances will be returned by default, unless there is a
        search option that says otherwise.

        The results will be sorted based on the list of sort keys in the
        'sort_keys' parameter (first value is primary sort key, second value is
        secondary sort ket, etc.). For each sort key, the associated sort
        direction is based on the list of sort directions in the 'sort_dirs'
        parameter.
        sSearching by: %scs&tjjˆ|ƒ}|jˆd<dS(NRu(R%tFlavortget_by_flavor_idRñ(RqR#(Rtfilters(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_remap_flavor_filterÊscsd|jddƒˆd<dS(Ns^%s$t.s\.tip(treplace(tfixed_ip(R¹(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_remap_fixed_ip_filterÎscstj|ƒˆd<dS(NRÞ(RR…(RÞ(R¹(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_remap_metadata_filterÓscstj|ƒˆd<dS(NR(RR…(RÞ(R¹(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_remap_system_metadata_filterÖsR[RRRR±t	tenant_idR#R¾RÞRtip6R¼s,Removing limit for DB query due to IP filtertlimittmarkert	sort_keyst	sort_dirsR%R²Nicstƒ‰‡fd†}|S(Ncs'|jˆkrtSˆj|jƒtS(N(RBRŒtaddR(RE(t
seen_uuids(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_filter.	s(RO(RÊ((RÉsE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_get_unique_filter_method+	s	(R@RÂRÃR¿RØRÙRRNtstring_typesRR%tInstanceListtBuildRequestListtget_by_filtersRER•tCellMappingRØt
CELL0_UUIDRtCellMappingNotFoundRBRCt_get_instances_by_filterstMarkerNotFoundR@RMt
_ip_filter(RDRtsearch_optsRÄRÅR²RÆRÇRºR¿RÀRÁtfilter_mappingtoptRjtremap_objectt	filter_ipt
orig_limitRÂROtbuild_req_instancest
cell0_mappingtcell0_instancestcell_instancesRËt
filter_methodR¦((RR¹sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_all²s„	




				
				
cs­tjt|jdƒƒƒ‰tjt|jdƒƒƒ‰‡‡fd†}g}xF|D]>}||ƒr[|j|ƒ|r™t|ƒ|kr™Pq™q[q[Wtjd|ƒS(NR¼RÃcsŸtj|ƒ}x‰|D]}xx|jƒD]j}|jdƒ}|sJq)n|jdƒ}|dkrtˆj|ƒs|dkr)ˆj|ƒr)tSq)WqWtS(NR3tversionii(R[tget_nw_info_for_instancet	fixed_ipsR¨tmatchRRŒ(REtnw_infotvifR¾R3Râ(tipv4_ftipv6_f(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_match_instanceI	s
R%(tretcompileR¿R¨RÏR•R%RÍ(tinst_modelsR¹RÄRêtresult_objsRE((RèRésE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRÕD	s


c	Cs\ddddg}|r(|j|ƒntjj|d|d|d|d|d	|d
|ƒS(NRÞRR"R˜R¹RÄRÅR²RÆRÇ(R´R%RÍRÏ(	RDRR¹RÄRÅR²RÆRÇR&((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRÓ^	s			c
Cs¤|jdƒr||j|ƒ|j||jƒ}|ro|jdk	rotj||jƒ|jƒWdQXq |jƒn$y<t	j
j||jƒ}|j}|j|ƒ|jƒWnåt
jk
rŸddddddd	d
g}|j||jƒ}|rg|jdk	rgtj||jƒ:t	jj||jd|ƒ}|j|ƒ|jƒWdQXq t	jj||jd|ƒ}|j|ƒ|jƒnX|S(shUpdates a single Instance object with some updates dict.

        Returns the updated instance.
        RñNR#tpci_devicesR~ttagsRÞRR˜R"R²(RR–R±RBR¯R@RBRCRZR%R­R@RERRºR¨RØ(RDRREtupdatesRDROR²((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytupdate_instancei	s@	

		
					
		
	
c	Cs³t|d|ƒ}tj||ƒrRtjtdƒd|d|ƒtjƒ‚n|j|||dd|ƒ}t	j
|_|jdd	gƒ|jj|||d||ƒ|S(
s
Backup the given instance

        :param instance: nova.objects.instance.Instance object
        :param name: name of the backup
        :param backup_type: 'daily' or 'weekly'
        :param rotation: int representing how many backups to keep around;
            None if rotation shouldn't be used (as in the case of snapshots)
        :param extra_properties: dict of extra image properties to include
                                 when creating the image.
        :returns: A dict containing image metadata
        tbackup_types4It's not supported to backup volume backed instance.RREtbackuptextra_propertiesRRñN(RÀR[tis_volume_backed_instanceRÂRáRRRdt
_create_imageRtIMAGE_BACKUPR>RZR@Rttbackup_instance(	RDRRERRótrotationRõt
props_copyRD((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRô¶	s
		cCs[|j|||dd|ƒ}tj|_|jddgƒ|jj|||dƒ|S(sGSnapshot the given instance.

        :param instance: nova.objects.instance.Instance object
        :param name: name of the snapshot
        :param extra_properties: dict of extra image properties to include
                                 when creating the image.
        :returns: A dict containing image metadata
        RÔRõRRñN(R÷RtIMAGE_SNAPSHOT_PENDINGR>RZR@Rttsnapshot_instance(RDRRERRõRD((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRÔß	s	cCs‘i|jd6t|jƒd6|d6}|j|p6iƒ|j|||ƒ}|dkr~|jddƒ|jddƒn|jj||ƒS(sµCreate new image entry in the image service.  This new image
        will be reserved for the compute manager to upload a snapshot
        or backup.

        :param context: security context
        :param instance: nova.objects.instance.Instance object
        :param name: string for name of the snapshot
        :param image_type: snapshot | backup
        :param extra_properties: dict of extra image properties to include

        R;R²t
image_typeRÔtdisk_formattcontainer_formatN(	RBR¿R²R–t&_initialize_instance_snapshot_metadatatpopR@RmR§(RDRRERRþRõRîRD((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR÷ù	s


cCsrtj|jƒ}|ji|d6td6ƒ|d}x!tjD]}|j|dƒqAW|j|pjiƒ|S(s?Initialize new metadata for a snapshot of the given instance.

        :param instance: nova.objects.instance.Instance object
        :param name: string for name of the snapshot
        :param extra_properties: dict of extra metadata properties to include

        :returns: the new instance snapshot metadata
        Rt	is_publicRîN(	Rtget_image_from_system_metadataRR–RŒRyt non_inheritable_image_propertiesRR@(RDRERRõRDRîRi((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR
s

cCsn|j|||ƒ}d|d<xdD]}|j|dƒq&W|d}xdD]}|j|dƒqQW|jr„|j|d<nt}	|jtjkr1y|jj	||ƒt
}	Wq1tjtj
tjtfk
r-}
tj|jjd	ƒƒr‚q.tjtd
ƒi|
d6d|d
|ƒq1Xntjj||jƒ}g}xÍ|D]Å}
|
jrkqVn|
jr|jj||
jƒ}tdƒ|d}tj d|dd
|ƒ|jj!||d||dƒ}t"j#|d|
ƒ}|j$ƒ}n|
j$ƒ}|j%|ƒqVW|	r>|jj&|||ƒn|r[||d<t
|d<n|j'j(||ƒS(sSnapshot the given volume-backed instance.

        :param instance: nova.objects.instance.Instance object
        :param name: name of the backup or snapshot
        :param extra_properties: dict of extra image properties to include

        :returns: the new image metadata
        iR*RRÿRîR<R=REtimage_os_require_quiesces(Skipping quiescing instance: %(reason)s.RÓRREssnapshot for %sRs!Creating snapshot from volume %s.RñRv(scontainer_formatsdisk_formatN(sblock_device_mappingsbdm_v2sroot_device_name()RRR@RERŒR:RR¢Rttquiesce_instanceRRtInstanceQuiesceNotSupportedtQemuGuestAgentNotEnabledt
NovaExceptiontNotImplementedErrorRR
RR¨RÂRáRR%RSR@RBt	no_deviceR4RoRÊRRÃtcreate_snapshot_forceR
tsnapshot_from_bdmtget_image_mappingRÏtunquiesce_instanceRmR§(RDRRERRõRDR9RîRitquiescedterrRktmappingRVR]RÔtmapping_dict((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytsnapshot_volume_backed3
s`



	

	
			
	

cCs3|dkr|j||ƒn|j||ƒdS(sReboot the given instance.tSOFTN(t_soft_reboott_hard_reboot(RDRREtreboot_type((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytreboot‚
scCsadg}tj|_|jd|ƒ|j||tjƒ|jj	|d|ddddƒdS(NRREtblock_device_infoRR(
R@Rt	REBOOTINGR>RZRŽR
tREBOOTRttreboot_instance(RDRRER((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRŠ
s	cCs‹tj|_dtjtjtjtjtjtjtj	g}|j
d|ƒ|j||tj
ƒ|jj|d|ddddƒdS(NRRERRtHARD(RtREBOOTING_HARDR>R@RtREBOOT_PENDINGtREBOOT_STARTEDtRESUMINGt	UNPAUSINGt
SUSPENDINGRZRŽR
RRtR(RDRRER((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR—
scs-ˆjpd}|pg}|jdiƒ}|jdtƒ}	|jdƒ}
|j||ƒ\}‰|jdˆ|ˆjƒ‰tj|ˆƒ}|j||ˆˆ|||ƒ|j	|ddˆƒ\}
}‡‡‡fd†}|jˆ|
ƒ}ˆj|ƒt
jˆ_|ˆ_|
p&dˆ_|p5dˆ_dˆ_ˆj|ƒˆjddgƒ|ƒ}tjj|ˆjƒ}|j|ˆtjƒytjj|ˆjƒ}Wntjk
rÓd}nX|jj|d	ˆd
|d|d|d
|d|d|d|	dˆj d|d|ƒdS(s8Rebuild the given instance with the provided attributes.RRÞtpreserve_ephemeralRRcs~tˆjƒ}x<tˆjjƒƒD]%}|jtjƒr%ˆj|=q%q%Wtjˆˆƒ}ˆjj|ƒˆj	ƒ|S(sÂRemove old image properties that we're storing as instance
            system metadata.  These properties start with 'image_'.
            Then add the properties for the new image.
            (
RÀRR@Rdt
startswithRtSM_IMAGE_PROP_PREFIXR*R–RZ(torig_sys_metadataRitnew_sys_metadata(R#RRE(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_reset_image_metadataÃ
s
iRREtnew_passRR[torig_image_refR)RkRRtrequest_specRTN(!R[R¨RŒRmRßRžR[ReRoRöR@RR–Rt
REBUILDINGR>RïRðR|RZR%RSR@RBRŽR
tREBUILDR¥RtRequestSpecNotFoundRwtrebuild_instanceRR(RDRRERlRÝRnRTR-RÞR&RR$R8RïRðR+RR)RkR.((R#RREsE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytrebuild«
sP
		
			
cCs|jƒ}tjj||jdƒ}tj||ƒ}tj|||ƒ}tj	|_
y|jddgƒWn.t
k
r¡tjƒ|jƒWdQXnXd|_|jƒtjjrÎ|jƒn|j||tjƒ|jj||||j|jpgƒdS(s=Reverts a resize, deleting the 'new' instance in the process.RpRNt	reverting(R8R%RsRtRBR[treverse_upsize_quota_deltaRxRtRESIZE_REVERTINGR>RZR@RµRR¶R»R"RytcellstenableR¼RŽR
t
REVERT_RESIZERtt
revert_resizetdest_computeRQ(RDRRER8R{R©R(((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR:	s*	

	


cCsË|jƒ}|dkr6tjj||jdƒ}ntj||ƒ}tj|||ƒ}d|_	|j
ƒtjj
r‰|jƒn|j||tjƒ|jj||||j|jpÃgƒdS(s;Confirms a migration/resize and deletes the 'old' instance.RpRqN(R8R@R%RsRtRBR[RwRxR"RZRyR7R8R¼RŽR
RyRtRzRvRQ(RDRRER{R8R©R(((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRz,s"		


cCs€|jƒtjd|jƒƒ}|j|_|d|_|d|_d|_|j|jkridpld|_	|j
ƒdS(s"Special API cell logic for resize.RRñRptresizeR{N(R¼R%RsR8RBR;told_instance_type_idtnew_instance_type_idR"tmigration_typeR§(RR(REtcurrent_instance_typetnew_instance_typetmig((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_resize_cells_supportJs


	cKsÐ|j|||jƒ}|s>tjdd|ƒ|}nstj|ddƒ}|jdƒdkr±|jdƒdkr±tj||ƒr±t	dƒ}t
jd|ƒ‚n|sÌt
jd	|ƒ‚n|d
}	|d
}
tjdi|	d6|
d
6d|ƒ|d|dk}|rC|jdƒrCt
jd	|ƒ‚n|rm|rm|j
dkrmt
jƒ‚n|rhtj|||ƒ}ytj|||ƒ}
Wqzt
jk
rd}|jd}
|jd}|jd}|j|
||ƒ}|j|||
|ƒ\}}}}tjtdƒi|d6|jd6ƒt
jd|d|d|d|ƒ‚qzXntjd|ƒ}
tj|_d|_|j|ƒ|j dd#gƒigd6}t"j#sÜ|dj$|j%ƒn|j
dkr|j&||
|||ƒn|s&|j'||t(j)ƒn|j'||t(j*ƒy)tj+j,||j-ƒ}|d|_.Wnt
j/k
rd#}nXi|d6}|j0j1|||d|d|d |
j2p¼gd!|d"|ƒd#S($sResize (ie, migrate) a running instance.

        If flavor_id is None, the process is considered a migration, keeping
        the original flavor_id. If flavor_id is not None, the instance should
        be migrated to a new host and resized to the new flavor_id.
        s&flavor_id is None. Assuming migration.REtread_deletedtnoR-is*Resize to zero disk flavor is not allowed.RÓRqRs^Old instance type %(current_instance_type_name)s, new instance type %(new_instance_type_name)stcurrent_instance_type_nametnew_instance_type_nameRñRpR1R(R’R¤s?%(overs)s quota exceeded for %(pid)s, tried to resize instance.R³R·R¸R¹RRtignore_hostsR†RÀtscheduler_hintR#RQR¥R.N(3RßRžRÂRÃRtget_flavor_by_flavor_idR¨R[RöRRtCannotResizeDiskR€R…tCannotResizeToSameFlavortupsize_quota_deltaRxR–RTR­RÁRYRR±RÄR%R“RtRESIZE_PREPR>R|R–RZR@Rytallow_resize_to_same_hostRÏRRRCRŽR
tMIGRATEtRESIZER¥R@RBRHR1Rwtresize_instanceRQ(RDRRERqR¥R>R@RARÓRFRGtsame_instance_typeR©R(RŸR’R¤RªRËRÌRÍRÀR.RI((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR<asœ		


	


		



	

	


	

cCs»tj|_|jddgƒ|j||tjƒtj	||ƒs›d|j
}|j|||dƒ}|d}|jj
|d|d|d|ƒn|jj|d|d|ƒdS(	swShelve an instance.

        Shuts down an instance and frees it up to be removed from the
        hypervisor.
        Rs
%s-shelvedRÔRñRER$R¥N(RtSHELVINGR>RZR@RŽR
tSHELVER[RöRR÷Rttshelve_instancetshelve_offload_instance(RDRRER¥RRDR$((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytshelveÛs	
	
cCs?tj|_|jddgƒ|jj|d|d|ƒdS(s.Remove a shelved instance from the hypervisor.RRER¥N(RtSHELVING_OFFLOADINGR>RZR@RtRW(RDRRER¥((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytshelve_offloadôscCsˆtj|_|jddgƒ|j||tjƒytj	j
||jƒ}Wntj
k
rmd}nX|jj|||ƒdS(sRestore a shelved instance.RN(Rt
UNSHELVINGR>RZR@RŽR
tUNSHELVER%R¥R@RBRR1Rwtunshelve_instance(RDRRER.((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytunshelveþs	
cCs |jj|d|d|ƒdS(s6Add fixed_ip from specified network to given instance.RER2N(Rttadd_fixed_ip_to_instance(RDRRER2((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytadd_fixed_ipscCs |jj|d|d|ƒdS(s9Remove fixed_ip from specified network to given instance.RER3N(Rttremove_fixed_ip_from_instance(RDRRER3((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytremove_fixed_ipscCsLtj|_|jddgƒ|j||tjƒ|jj	||ƒdS(sPause the given instance.RN(
RtPAUSINGR>RZR@RŽR
tPAUSERttpause_instance(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytpausescCsLtj|_|jddgƒ|j||tjƒ|jj	||ƒdS(sUnpause the given instance.RN(
RR$R>RZR@RŽR
tUNPAUSERttunpause_instance(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytunpause(scCs|jj|d|ƒS(s,Retrieve diagnostics for the given instance.RE(Rttget_diagnostics(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRj2scCs|jj|d|ƒS(s,Retrieve diagnostics for the given instance.RE(Rttget_instance_diagnostics(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRk7scCsLtj|_|jddgƒ|j||tjƒ|jj	||ƒdS(sSuspend the given instance.RN(
RR%R>RZR@RŽR
tSUSPENDRttsuspend_instance(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytsuspend=scCsLtj|_|jddgƒ|j||tjƒ|jj	||ƒdS(sResume the given instance.RN(
RR#R>RZR@RŽR
tRESUMERttresume_instance(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytresumeGsc

Cstjj||jƒ}xE|D]=}|jr|jj||jƒ}|jj||ƒqqWtj	|||ƒrŸt
dƒ}	tjd|jd|	ƒ‚nt
j|_|jdd	gƒ|j||tjƒ|jj|d|d|d|d|ƒd	S(
sRescue the given instance.s&Cannot rescue a volume-backed instanceRQRÓRREtrescue_passwordtrescue_image_refR¥N(R%RSR@RBRÊRoR¨tcheck_attachedR[RöRRtInstanceNotRescuableRtRESCUINGR>RZR@RŽR
tRESCUERttrescue_instance(
RDRRERrRsR¥RkRVtvolRÓ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytrescueQs 	
	cCsOtj|_|jddgƒ|j||tjƒ|jj	|d|ƒdS(sUnrescue the given instance.RREN(
Rt
UNRESCUINGR>RZR@RŽR
tUNRESCUERttunrescue_instance(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytunrescuelscCsUtj|_|jddgƒ|j||tjƒ|jj	|d|d|ƒdS(sÕSet the root/admin password for the given instance.

        @param context: Nova auth context.
        @param instance: Nova instance object.
        @param password: The admin password for the instance.
        RRER,N(
RtUPDATING_PASSWORDR>RZR@RŽR
tCHANGE_PASSWORDRttset_admin_password(RDRREtpassword((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRws

cCsl|jj|d|d|ƒ}|jj||d||d|d|d|jd|dƒi|dd6S(	s!Get a url to an instance Console.REtconsole_typettokenRRtporttinternal_access_patht
access_urlturl(Rttget_vnc_consoleRrtauthorize_consoleRB(RDRRERƒtconnect_info((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR‰‹s
cCs"|jj|d|d|ƒ}|S(s)Used in a child cell to get console info.RERƒ(RtR‰(RDRRERƒR‹((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_vnc_connect_info™scCsl|jj|d|d|ƒ}|jj||d||d|d|d|jd|dƒi|dd6S(	s!Get a url to an instance Console.RERƒR„RRR…R†R‡Rˆ(Rttget_spice_consoleRrRŠRB(RDRRERƒR‹((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR s
cCs"|jj|d|d|ƒ}|S(s)Used in a child cell to get console info.RERƒ(RtR(RDRRERƒR‹((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_spice_connect_info­scCsl|jj|d|d|ƒ}|jj||d||d|d|d|jd|dƒi|dd6S(	s!Get a url to an instance Console.RERƒR„RRR…R†R‡Rˆ(Rttget_rdp_consoleRrRŠRB(RDRRERƒR‹((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR´s
cCs"|jj|d|d|ƒ}|S(s)Used in a child cell to get console info.RERƒ(RtR(RDRRERƒR‹((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_rdp_connect_infoÁscCsl|jj|d|d|ƒ}|jj||d||d|d|d|jd|dƒi|dd6S(	sGet a url to a serial console.RERƒR„RRR…R†R‡Rˆ(Rttget_serial_consoleRrRŠRB(RDRRERƒR‹((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR‘Ès
cCs"|jj|d|d|ƒ}|S(s+Used in a child cell to get serial console.RERƒ(RtR‘(RDRRERƒR‹((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_serial_console_connect_infoÕscCsl|jj|d|d|ƒ}|jj||d||d|d|d|jd|dƒi|dd6S(	sGet a url to a MKS console.RERƒR„RRR…R†R‡Rˆ(Rttget_mks_consoleRrRŠRB(RDRRERƒR‹((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR“Üs
cCs|jj|d|d|ƒS(s#Get console output for an instance.REttail_length(Rttget_console_output(RDRRER”((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR•èscCsv|j|jk}|jr%|r%dS|jƒ}tjdd|d|ƒt|_|r_dnd|_|jƒdS(sLock the given instance.NtLockingRREtownertadmin(R±RXR8RÂRÃRt	locked_byRZ(RDRREtis_owner((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytlockîs	cCsG|j|jk}|rdnd}|j}|rC||krCtStS(NR—R˜(R±R™RŒR(RDRRERštexpect_locked_byR™((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytis_expected_locked_byûs	cCsE|jƒ}tjdd|d|ƒt|_d|_|jƒdS(sUnlock the given instance.t	UnlockingRREN(R8RÂRÃRŒRXR@R™RZ(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytunlock
s
		cCs|jj|d|ƒdS(s!Reset networking on the instance.REN(Rtt
reset_network(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR 
scCs|jj|d|ƒdS(s%Inject network info for the instance.REN(Rttinject_network_info(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR¡
sc	Cs‰|r^tjd|ddddd|jddd|ddd	dd
|d|ƒ
}|jƒn'|jj||||d
|d|ƒ}|S(NRR`R]R\R;R_RÊRURçtdisk_busRî(R%tBlockDeviceMappingRBR@R§Rttreserve_block_device_name(	RDRRERìRÊR¢Rîtis_local_creationt
volume_bdm((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_create_volume_bdm
s	
		cCsE|jj||ƒ}|jj||d|ƒ|jj||ƒdS(NRE(RoR¨tcheck_availability_zonetreserve_volume(RDRRÊRER]((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt _check_attach_and_reserve_volume2
sc	Cs‰|j||||d|d|ƒ}y-|j|||ƒ|jj|||ƒWn.tk
rtjƒ|jƒWdQXnX|jS(s›Attach an existing volume to an existing instance.

        This method is separated to make it possible for cells version
        to override it.
        R¢RîN(	R§RªRtt
attach_volumeRµRR¶R·RU(RDRRERÊRìR¢RîR¦((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_attach_volume8
s	

cCs•|j||||d|d|dtƒ}y3|j|||ƒ|jj|||j|ƒWn.tk
rtjƒ|j	ƒWdQXnX|j
S(sAttach an existing volume to an instance in shelved offloaded state.

        Attaching a volume for an instance in shelved offloaded state requires
        to perform the regular check to see if we can attach and reserve the
        volume then we need to call the attach method on the volume API
        to mark the volume as 'in-use'.
        The instance at this stage is not managed by a compute manager
        therefore the actual attachment will be performed once the
        instance will be unshelved.
        R¢RîR¥N(R§RRªRotattachRBRµRR¶R·RU(RDRRERÊRìR¢RîR¦((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt _attach_volume_shelved_offloadedK
s


cCs{|r+tj|ƒr+tjd|ƒ‚n|jtjk}|r_|j||||||ƒS|j||||||ƒS(s2Attach an existing volume to an existing instance.R(	R
tmatch_deviceRtInvalidDevicePathR:RRUR®R¬(RDRRERÊRìR¢Rîtis_shelved_offloaded((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR«g
s	cCs4|jj||d|ƒ|jj||dƒdS(NRERñ(Rotcheck_detachtbegin_detaching(RDRR]RE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_check_and_begin_detach‚
sc	Cs~|j|||ƒ|jdiƒ}d}|rT|j|krT||jd}n|jj|d|d|dd|ƒdS(s€Detach volume from instance.

        This method is separated to make it easier for cells version
        to override.
        tattachmentst
attachment_idRERÊRñN(R´R¨R@RBRtt
detach_volume(RDRRER]RµR¶((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_detach_volume†
scCsL|j|||ƒtjj||d|jƒg}|j|||ƒdS(soDetach a volume from an instance in shelved offloaded state.

        If the instance is shelved offloaded we just need to cleanup volume
        calling the volume api detach, the volume api terminate_connection
        and delete the bdm record.
        If the volume has delete_on_termination option set then we call the
        volume api delete as well.
        RñN(R´R%R£tget_by_volume_idRBRŠ(RDRRER]Rk((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt _detach_volume_shelved_offloaded”
s		cCs?|jtjkr(|j|||ƒn|j|||ƒdS(s!Detach a volume from an instance.N(R:RRURºR¸(RDRRER]((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR·¢
sc	Cs»|ddkr)tjd|dƒ‚n|jdiƒj|jƒshtdƒ}tjd|ƒ‚n|ddkr™td	ƒ}tjd|ƒ‚nt|d
ƒt|d
ƒkrÚtdƒ}tjd|ƒ‚n|jj||ƒ|jj	||d|ƒ|jj
||dƒ|jj||dƒy.|jj
|d|d
|dd|dƒWnRtk
r¶tjƒ3|jj||dƒ|jj||dƒWdQXnXdS(s$Swap volume attached to an instance.t
attach_statustdetachedRÊRñRµs/Old volume is attached to a different instance.RÓtattacheds-New volume must be detached in order to swap.R*s+New volume must be the same size or larger.REt
old_volume_idt
new_volume_idN(RtVolumeUnattachedR¨RBRRRºRoR²RR³R©Rttswap_volumeRµRR¶troll_detachingtunreserve_volume(RDRREt
old_volumet
new_volumeR¶((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRÁ®
s0 	


c
Cs(|jj|d|d|d|d|ƒS(s5Use hotplug to add an network adapter to an instance.RER2R.trequested_ip(Rttattach_interface(RDRRER2R.RÆ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRÇÏ
scCs |jj|d|d|ƒdS(s+Detach an network adapter from an instance.RER.N(Rttdetach_interface(RDRRER.((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRÈÚ
scCs|jj||jƒS(s-Get all metadata associated with an instance.(tdbtinstance_metadata_getRB(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_instance_metadataã
scCs|j||ddƒS(Nt
metadata_typeRÞ(t_get_all_instance_metadata(RDRtsearch_filts((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_all_instance_metadataç
scCs|j||ddƒS(NRÌR(RÍ(RDRRÎ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_all_system_metadataë
scCs=|j|diddgddgƒ}tjd|||ƒS(sGet all metadata.R¹RÆt
created_atRÇtdescRE(RÓRt#filter_and_format_resource_metadata(RDRRÎRÌR¦((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRÍï
s
	cCs7|j|ƒ|jj|d|didg|6ƒdS(s0Delete the given metadata item from an instance.REtdiffR`N(tdelete_metadata_keyRttchange_instance_metadata(RDRRERi((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytdelete_instance_metadata÷
s
cCst|jƒ}|r|}nt|jƒ}|j|ƒ|j||ƒ||_|jƒt||jƒ}|jj|d|d|ƒ|S(s¥Updates or creates instance metadata.

        If delete is True, metadata items that are not specified in the
        `metadata` argument will be deleted.

        RERÔ(RÀRÞR–RãRZRkRtRÖ(RDRRERÞRVRft	_metadataRÔ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytupdate_instance_metadatas	
	
c
Cs„tjd|pdd|ƒtj|_|jddgƒ|j||tj	ƒyt
jj||j
ƒ}Wntjk
r‰d}nX|tkr|rt
jj||ƒ}	|	sÌtjd|ƒ‚nd}|	d}
|rt
jd|
jd|
jƒ}||_qny2|jj|||d|d	|d
|d|ƒWn<tjk
r}tjƒtj|||ƒWdQXnXdS(
s&Migrate a server lively to a new host.s+Going to try to live migrate instance to %ssanother hostRERRRitnodetblock_migrationtdisk_over_commitR.tasyncN( RÂRÃRt	MIGRATINGR>RZR@RŽR
tLIVE_MIGRATIONR%R¥R@RBRR1RŒtComputeNodeListtget_all_by_hostRftDestinationRRthypervisor_hostnametrequested_destinationRwtlive_migrate_instancetoslo_exceptionstMessagingTimeoutRR¶R[tadd_instance_fault_from_exc(
RDRRERÛRÜt	host_nametforceRÝR.tnodesttargettdestinationtmessaging_timeout((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytlive_migrates@	
	

		
	c	Csštjdd|ƒtjj|||jƒ}|jdkrjtjd|d|jd|jddƒ‚n|j	||t
jƒ|jj
|||ƒd	S(
sÇForce live migration to complete.

        :param context: Security context
        :param instance: The instance that is being migrated
        :param migration_id: ID of ongoing migration

        s0Going to try to force live migration to completeREtrunningtmigration_idR;R<R=sforce completeN(RÂRÃR%Rstget_by_id_and_instanceRBR"RtInvalidMigrationStateRŽR
tLIVE_MIGRATION_FORCE_COMPLETERttlive_migration_force_complete(RDRRERñR{((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytlive_migrate_force_completeYs				c	Cs£tjj|||jƒ}tjd|jd|ƒ|jdkrptj	d|d|jd|jddƒ‚n|j
||tjƒ|j
j|||jƒd	S(
sÓAbort an in-progress live migration.

        :param context: Security context
        :param instance: The instance that is being migrated
        :param migration_id: ID of in-progress live migration

        s!Going to cancel live migration %sRERðRñR;R<R=sabort live migrationN(R%RsRòRBRÂRÃRñR"RRóRŽR
tLIVE_MIGRATION_CANCELRttlive_migration_abort(RDRRERñR{((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytlive_migrate_abortys			
cCstjdd|ƒ|j}tjj||ƒ}|jj|ƒrntjt	dƒ|ƒt
jd|ƒ‚ntj
|_|jddgƒ|j||tjƒtj|d|jd|jd|jd	d
ddƒ}	|rë||	_n|	jƒtj|j||d
ƒytjj||jƒ}
Wnt
jk
rFd}
nX|tkrÌ|rÌtj j!||ƒ}|s‰t
j"d|ƒ‚nd}|d}|
rÌtj#d|jd|j$ƒ}
|
|
_%qÌn|j&j'|d|d|dddddddddddt(d|d|d|
ƒS(séRunning evacuate to target host.

        Checking vm compute host state, if the host not in expected_state,
        raising an exception.

        :param instance: The instance to evacuate
        :param host: Target host. if not set, the scheduler will pick up one
        :param on_shared_storage: True if instance files on shared storage
        :param admin_password: password to set on rebuilt instance
        :param force: Force the evacuation to the specific host target

        svm evacuation scheduledREsHInstance compute service state on %s expected to be down, but it was up.RRRRvtsource_nodeR;R"tacceptedR?t
evacuationtevacuateiRÚR,RR[R-R)Rktrecreateton_shared_storageR.N()RÂRÃRRR%RGR`RxRaterrorRRtComputeServiceInUseRR/R>RZR@RŽR
tEVACUATERsRÚRBR;R§R[R\RzR¥R@R1RŒRàRáRfRâRãRäRwR2R(RDRRERRRÿRÝRêt	inst_hostR0R{R.RëRìRí((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRý”sb					
	

		cCstjj||ƒS(s)Get all migrations for the given filters.(R%t
MigrationListRÏ(RDRR¹((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_migrationsìscCstjj|||ƒS(s.Get all migrations of an instance in progress.(R%Rtget_in_progress_by_instance(RDRR;R?((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt&get_migrations_in_progress_by_instanceðs	cCstjj|||ƒS(s'Get the migration of an instance by id.(R%RsRò(RDRRñR;((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt get_migration_by_id_and_instanceös	cCsbtjj||ddgƒ}|jj||j||ƒii|jdƒd6|d6d6}|S(NR²RERñtvolumeIdRÔ(R%R£t
get_by_volumeRttvolume_snapshot_createRER¨(RDRRÊtcreate_infoRVRÔ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRüs	
cCsAtjj||ddgƒ}|jj||j|||ƒdS(NR²RE(R%R£R
Rttvolume_snapshot_deleteRE(RDRRÊRËtdelete_infoRV((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR
	s	c
Csótjtƒ}tjtƒ}tjtƒ}xP|D]H}x?|j||ƒD]+}||j|ƒ||jj|ƒqMWq4Wx7|D]/}	x&||	jD]}||j|	ƒq›Wq‡Wx2|D]*}|jj|||||d|ƒqÁWdS(NRR(	tcollectionstdefaultdictR@t_get_relevant_hostsRÏRBR;Rttexternal_instance_event(
RDRR¦teventstinstances_by_hosttevents_by_hostthosts_by_instanceRERRtevent((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRs


	cCs‘tƒ}|j|jƒ|jdk	r|jj}tjj||ƒ}|j|j	ƒ|j|j
ƒtjdi|j
d6|d6ƒn|S(NsSInstance %(instance)s is migrating, copying events to all relevant hosts: %(hosts)sREthosts(RORÈRRtmigration_contextR@RñR%Rst	get_by_idR;RvRÂRÃRB(RDRRERRñR{((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR)s		
cCsÏ|jr¿y“g|jD]}|jdkr|^qd}|jrStjj}nH|jrktjj}n0|j	j
|ƒ}|rtjjp˜tjj}WqËt
k
r»tjj}qËXntjj}|S(Nsnova-computei(RRtservicesR3tforced_downt
fields_objt
HostStatustDOWNRptMAINTENANCERxRatUPtUNKNOWNt
IndexErrortNONE(RDRER0thost_statustalive((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_instance_host_status7s			
cCs‡tƒ}tƒ}xn|D]f}|jrf|j|krV|j|ƒ}|||j<qr||j}ntjj}|||j<qW|S(N(RÀRRR'RRR$RB(RDt
instance_listthost_status_dictt
host_statusesRER%((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_instances_host_statusesJs		
	N(±RCt
__module__t__doc__R@RtpropertyR…R\RŽR R­R¾RÁRãRèRíRötstaticmethodRÿRRRRR!R;RIRTRCRkRmRoRžRÈRRÕRÚRŒRäRèRBR¬R°RöRRRR-R«R1R5Rtadd_hookR§RßRERNRFRoR_RKR†RŠRgR•R—R™R[R_RPRšRœRVRReR£R–R©RWR¢tERRORRªtSTOPPEDR®tALLOW_TRIGGER_CRASH_DUMPR°R±R³R¨RáRÕRÓRòtPAUSEDt	SUSPENDEDRôRÔR÷RRRROtALLOW_SOFT_REBOOTRtALLOW_HARD_REBOOTRtALLOW_REBOOTRR3R^R:RzRCR<RXRTRZRUR^R`RbRfRiRjRkRnRqRztRESCUEDR~RR‰RŒRRŽRRR‘R’R“R•R›RRŸR R¡R§RªR¬R®R«R´R¸RºR·RÁRÇRÈRËRÏRÐRÍR×RÙRïRÞRöRùRýRRRRR
RRR'R+(((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRlÃs				#	F	!			,						M				<			u	{.	P	'			\				2	
							)	/	:			1				)
	!'$
		8	‘			M%LY$!w$$$$!



	
								!				7$U			
				tHostAPIcBsìeZdZdd„Zed„Zeƒd„ƒZd„Z	eƒd„ƒZ
eƒd„ƒZded„Zd„Z
d	„Zd
„Zd„Zd„Zd
„Zd„Zddd„Zd„Zddd„Zd„Zd„ZRS(s@Sub-set of the Compute Manager API for managing host operations.cCs;|ptjƒ|_tjƒ|_tt|ƒjƒdS(N(	RtRuRR-RlRxR~R:R(RDR((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR]scCsftjj||ƒ}|s0tjd|ƒ‚n|r^|jj|ƒr^tjd|ƒ‚n|dS(s1Raise HostNotFound if compute host doesn't exist.RR(R%RGR`RtHostNotFoundRxRatComputeServiceUnavailable(RDRRét
must_be_upR0((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_assert_host_existsbscCsn|j||ƒ}i|d6|d6}tj|d|ƒ|jj|d|d|ƒ}tj|d|ƒ|S(s:Sets the specified host's ability to accept new instances.RéR|sset_enabled.startRRsset_enabled.end(R>R[tnotify_about_host_updateRtset_host_enabled(RDRRéR|tpayloadRh((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR@ks			cCs.|j||dtƒ}|jj|d|ƒS(s:Returns the result of calling "uptime" on the target host.R=RR(R>RRtget_host_uptime(RDRRé((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRBzs	cCsn|j||ƒ}i|d6|d6}tj|d|ƒ|jj|d|d|ƒ}tj|d|ƒ|S(s*Reboots, shuts down or powers up the host.RéRspower_action.startRRspower_action.end(R>R[R?Rthost_power_action(RDRRéRRARh((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRC€s			cCst|j||ƒ}i|d6|d6}tj|d|ƒ|jj|d|d|d|ƒ}tj|d|ƒ|S(s`Start/Stop host maintenance window. On start, it triggers
        guest VMs evacuation.
        Rétmodesset_maintenance.startt
host_paramRRsset_maintenance.end(R>R[R?Rthost_maintenance_mode(RDRRéRDRARh((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytset_host_maintenances		c
Cs³|dkri}n|jddƒ}d|kr<t}ntjj||d|ƒ}g}xO|D]G}x>tj|ƒD] \}}	|||	krzPqzqzW|j|ƒqdW|S(sReturns a list of services, optionally filtering the results.

        If specified, 'filters' should be a dictionary containing services
        attributes and matching values.  Ie, to get a list of services for
        the 'compute' topic, use filters={'topic': 'compute'}.
        RpRût	set_zonesN(	R@RRR%tServiceListRáRØRÙRÏ(
RDRR¹RHRpRtret_servicesR0Ritval((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytservice_get_all s			
cCstjj||ƒS(s+Get service entry for the given service id.(R%RGR(RDRt
service_id((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytservice_get_by_id¸scCstjj||ƒS(s1Get service entry for the given compute hostname.(R%RGR`(RDRRé((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytservice_get_by_compute_host¼scCs3tjj|||ƒ}|j|ƒ|jƒ|S(s-Performs the actual service update operation.(R%RGtget_by_argsR–RZ(RDRRéR3tparams_to_updateR0((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_service_updateÀs

cCs|j||||ƒS(sƒEnable / Disable a service.

        For compute services, this stops new builds and migrations going to
        the host.
        (RR(RDRRéR3RQ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytservice_updateÇscCstjj||ƒjƒdS(s/Performs the actual Service deletion operation.N(R%RGRR·(RDRRM((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_service_deleteÐscCs|j||ƒdS(sDeletes the specified service.N(RT(RDRRM((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytservice_deleteÔscCstjj||ƒS(s'Return all instances on the given host.(R%RÍtget_by_host(RDRRé((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytinstance_get_all_by_hostØsc	Cs%|jj||||d|d|ƒS(sfReturn the task logs within a given range, optionally
        filtering by host and/or state.
        RRR<(RÉttask_log_get_all(RDRt	task_nametperiod_beginningt
period_endingRRR<((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRXÜs
cCstjj|t|ƒƒS(s4Return compute node entry for particular integer ID.(R%tComputeNodeRRº(RDRt
compute_id((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytcompute_node_getçscCstjj|d|d|ƒS(NRÄRÅ(R%Ràtget_by_pagination(RDRRÄRÅ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytcompute_node_get_allës	cCstjj||ƒS(N(R%Ràtget_by_hypervisor(RDRthypervisor_match((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt!compute_node_search_by_hypervisorïscCs|jj|ƒS(N(RÉtcompute_node_statistics(RDR((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRdósN(RCR,R-R@RRŒR>twrap_exceptionR@RBRCRGRLRNRORRRSRTRURWRXR^R`RcRd(((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR:Zs(										
		tInstanceActionAPIcBs)eZdZd„Zd„Zd„ZRS(sASub-set of the Compute Manager API for managing instance actions.cCstjj||jƒS(N(R%tInstanceActionListR@RB(RDRRE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytactions_getús	cCstjj||j|ƒS(N(R%RŠtget_by_request_idRB(RDRREt
request_id((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytaction_get_by_request_idþs	cCstjj||ƒS(N(R%tInstanceActionEventListt
get_by_action(RDRREt	action_id((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytaction_events_gets	(RCR,R-RhRkRo(((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRf÷s		tAggregateAPIcBs¿eZdZd„Zeƒd„ƒZd„Zd„Zd„Zeƒd„ƒZ	eƒd„ƒZ
eƒd„ƒZde
d	„Zd
„Zd„Zeƒd„ƒZeƒd
„ƒZRS(s@Sub-set of the Compute Manager API for managing host aggregates.cKs8tjƒ|_tjƒ|_tt|ƒj|dS(N(RtRutscheduler_clienttSchedulerClientR~RpR(RDRT((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR	scCsXtjd|ƒ}||_|r4i|d6|_n|jƒ|jj||gƒ|S(s$Creates the model for the aggregate.RRû(R%t	AggregateRRÞR§Rqtupdate_aggregates(RDRtaggregate_nameRût	aggregate((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytcreate_aggregates	
cCstjj||ƒS(sGet an aggregate by id.(R%RsR(RDRtaggregate_id((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt
get_aggregatescCstjj|ƒS(sGet all the aggregates.(R%t
AggregateListRá(RDR((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_aggregate_listscCstjj||ƒS(s9Get all the aggregates where the given host is presented.(R%RzRV(RDRtcompute_host((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_aggregates_by_host"scCs·tjj||ƒ}d|kr@|jdƒ|_|jƒn|j||d|dtƒ|r|j|ƒt	j
ƒ|_n|jj
||gƒ|jdƒr³tjƒn|S(s&Update the properties of an aggregate.RRvtaction_nameRû(R%RsRRRRZtis_safe_to_update_aztAGGREGATE_ACTION_UPDATEtupdate_metadataRR’t
updated_atRqRtR¨R	treset_cache(RDRRxRõRv((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytupdate_aggregate&s


cCs‰tjj||ƒ}|j||d|dtƒ|j|ƒ|jj||gƒ|rv|jdƒrvt	j
ƒntjƒ|_
|S(sUpdates the aggregate metadata.RvR~Rû(R%RsRRtAGGREGATE_ACTION_UPDATE_METARRqRtR¨R	RƒRR’R‚(RDRRxRÞRv((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytupdate_aggregate_metadata9s

cCs¥i|d6}tj|d|ƒtjj||ƒ}t|jƒdkrqtdƒ}tj	d|d|ƒ‚n|j
ƒ|jj||ƒtj|d|ƒdS(sDeletes the aggregate.Rxsdelete.startisHost aggregate is not emptyRÓs
delete.endN(
R[tnotify_about_aggregate_updateR%RsRR•RRRtInvalidAggregateActionDeleteR·Rqtdelete_aggregate(RDRRxtaggregate_payloadRvR¶((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR‰Hs
		
	cCsãd|krß|dsBtdƒ|j}|j||j|ƒn|pN|j}tjj|dd|ƒ}g|D]4}	|	j|dkrs|	j|jkrs|	j^qs}
|
rßtdƒ|
}|j||j|ƒqßndS(sŽDetermine if updates alter an aggregate's availability zone.

            :param context: local context
            :param metadata: Target metadata for updating aggregate
            :param aggregate: Aggregate to update
            :param hosts: Hosts to check. If None, aggregate.hosts is used
            :type hosts: list
            :action_name: Calling method for logging purposes

        Rûs;Aggregate %s does not support empty named availability zoneRs4One or more hosts already in availability zone(s) %sN(	RRt_raise_invalid_aggregate_excRñRR%Rztget_by_metadata_keyRû(RDRRÞRvRR~R¶t_hoststhost_aggregatestaggtconflicting_azs((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRZs"

	

	
!	cCs¹|tkr'tjd|d|ƒ‚nu|tkrNtjd|d|ƒ‚nN|tkrutjd|d|ƒ‚n'|tkrœtjd|d|ƒ‚ntj	t
dƒ|ƒ‚dS(NRxRÓsUnexpected aggregate action %s(tAGGREGATE_ACTION_ADDRtInvalidAggregateActionAddR€tInvalidAggregateActionUpdateR…t InvalidAggregateActionUpdateMetatAGGREGATE_ACTION_DELETERˆR
R(RDR~RxRÓ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR‹zs				cCs,|r(|jdƒr(tj||ƒndS(NRû(R¨R	t#update_host_availability_zone_cache(RDRRétaggregate_meta((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_update_az_cache_for_host‹s	cCsúi|d6|d6}tj|d|ƒtjj||ƒtjj||ƒ}|j||jd|gd|ƒ|j	|ƒ|j
j||gƒ|j|||jƒ|j
j|d|d|d|ƒ|ji|jd6ƒtj|d	|ƒ|S(
sAdds the host to an aggregate.RxRés
addhost.startRRvRERRRsaddhost.end(R[R‡R%RGR`RsRRRÞtadd_hostRqRtR˜Rttadd_aggregate_hostR–R(RDRRxRéRŠRv((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytadd_host_to_aggregate“s&

	
	cCsÁi|d6|d6}tj|d|ƒtjj||ƒtjj||ƒ}|j|ƒ|jj	||gƒ|j
|||jƒ|jj
|d|d|d|ƒtj|d|ƒ|S(s Removes host from the aggregate.RxRésremovehost.startRvRERRsremovehost.end(R[R‡R%RGR`RsRtdelete_hostRqRtR˜RÞRttremove_aggregate_host(RDRRxRéRŠRv((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytremove_host_from_aggregate®s 

	
	N(RCR,R-RReRwRyR{R}R„R†R‰R@R‘RR‹R˜R›Rž(((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRps						t
KeypairAPIcBsÂeZdZejejddƒZejejdeddƒZd„Z	d„Z
eƒejd„ƒZ
eƒejd	„ƒZd
„Zd„Zeƒd„ƒZddd
„Zd„ZRS(s9Subset of the Compute Manager API for managing key pairs.R0R†R2R3snova-apicCsHi|jd6|jd6|d6}|jƒ}|j|d||ƒdS(NRÂR²Rxs
keypair.%s(R±R²R2Rá(RDRtevent_suffixtkeypair_nameRAtnotify((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_notifyÌs


csdtjtj‰dj‡fd†|Dƒƒ}||krZtjdtdƒƒ‚nytj|dddd	ƒWn,tj	k
r¥tjdtd
ƒƒ‚nXt
jj|d|ƒ}yt
jj
|d|dƒWn tjk
rþtjƒ‚nXdS(Ns_- Rc3s!|]}|ˆkr|VqdS(N((Ratx(t
safe_chars(sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pys	<genexpr>×sRÓs'Keypair name contains unsafe charactersRÕit
max_lengthiÿsAKeypair name must be string and between 1 and 255 characters longt	key_pairs(tstringtdigitst
ascii_lettersRÑRtInvalidKeypairRRRÚRÛR%R“RøR”R–tKeypairLimitExceeded(RDRR²Rxtkey_typetclean_valueRø((R¥sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt_validate_new_key_pairÕs		cCs˜|j||||ƒ|j|d|ƒ|j||ƒ}tj|ƒ}||_||_||_||_||_	|j
ƒ|j|d|ƒ|S(s/Import a key pair using an existing public key.simport.starts
import.end(R¯R£t_generate_fingerprintR%RˆR²RttypetfingerprintRŠR§(RDRR²RxRŠR­R²R'((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytimport_key_pairês					
c	Cs§|j||||ƒ|j|d|ƒ|j||ƒ\}}}tj|ƒ}||_||_||_||_||_	|j
ƒ|j|d|ƒ||fS(sCreate a new key pair.screate.starts
create.end(R¯R£t_generate_key_pairR%RˆR²RR±R²RŠR§(	RDRR²RxR­tprivate_keyRŠR²R'((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytcreate_key_pairs					
cCs<|tjkrtj|ƒS|tjkr8tj|ƒSdS(N(tkeypair_objtKEYPAIR_TYPE_SSHRtgenerate_fingerprinttKEYPAIR_TYPE_X509tgenerate_x509_fingerprint(RDRŠR­((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR°s
cCs9|tjkrtjƒS|tjkr5tj|ƒSdS(N(R·R¸Rtgenerate_key_pairRºtgenerate_winrm_x509_cert(RDR²R­((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR´s
cCs@|j|d|ƒtjj|||ƒ|j|d|ƒdS(sDelete a keypair by name.sdelete.starts
delete.endN(R£R%Rˆtdestroy_by_name(RDRR²Rx((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytdelete_key_pair#scCstjj||d|d|ƒS(sList key pairs.RÄRÅ(R%R©tget_by_user(RDRR²RÄRÅ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt
get_key_pairs*s	cCstjj|||ƒS(sGet a keypair by name.(R%RˆR‰(RDRR²Rx((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_key_pair/sN(RCR,R-RKtpartialR+R2RReR£R¯R·R¸R³R¶R°R´R¿R@RÁRÂ(((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRŸÄs 						tSecurityGroupAPIcBs
eZdZeZd„Zd„Zd„Zd„Zd„Z	dded„Zddddd„Zd„Z
d	„Zd
„Zd„Zd„Zd
„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zed„Zd„ZRS(s`Sub-set of the Compute API related to managing security groups
    and security group rules
    cKs)tt|ƒj|tjƒ|_dS(N(R~RÄRRtRu(RDRT((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR<scCs¸y|jƒ}Wn.tk
r@tdƒ|}|j|ƒnXtj|d|ddddƒ|r´tj||ƒr´tdƒi|d6|d	6|jƒd
6}|j|ƒndS(s	Validate given security group property.

        :param value:          the value to validate, as a string or unicode
        :param property:       the property, either 'name' or 'description'
        :param allowed:        the range of characters allowed
        s,Security group %s is not a string or unicodeRRÕiR¦iÿs_Value (%(value)s) for parameter Group%(property)s is invalid. Content limited to '%(allowed)s'.RjR¹R.N(	tstripR‚Rtraise_invalid_propertyRRÚRëRåt
capitalize(RDRjR.R¹RKR¶((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytvalidate_property@s
	cCs|jj|ƒdS(sÃEnsure that a context has a security group.

        Creates a security group for the security context if it does not
        already exist.

        :param context: the security context
        N(RÉtsecurity_group_ensure_default(RDR((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR£[scCs7tjd|ƒ}y|jddƒWn-tjk
rUtdƒ}|j|ƒnXtjt	dƒ|d|ƒy|j
|ƒi|jd6|jd6|d6|d	6}y|j
j||ƒ}Wn1tjk
rötd
ƒ|}|j|ƒnX|jƒWn.tk
r2tjƒ|jƒWdQXnX|S(NRR˜is)Quota exceeded, too many security groups.sCreate Security Group %sR²R±Rtdescriptions Security group %s already exists(R%R“R¼RR–Rtraise_over_quotaRÂRáRR£R²R±RÉtsecurity_group_createtSecurityGroupExiststraise_group_already_existsR¼RµRR¶R»(RDRRRÊR(R¶R×t	group_ref((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytcreate_security_groupes.





c	Csw|dtkr4tdƒ|d}|j|ƒni|d6|d6}dg}|jj||d|d|ƒ}|S(NRs"Unable to update system group '%s'RÊsrules.grantee_groupRñtcolumns_to_join(tRO_SECURITY_GROUPSRtraise_invalid_groupRÉtsecurity_group_update(	RDRR)RRÊR¶R×RÑRÏ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytupdate_security_groupƒs	

		cCs |j|ƒdg}yH|r>|jj||j|d|ƒS|r]|jj||d|ƒSWn;tjk
r›}|r•|jƒ}|j|ƒqœ‚nXdS(NtrulesRÑ(	R£RÉtsecurity_group_get_by_nameR±tsecurity_group_getRtNotFoundRÜtraise_not_found(RDRRRñt
map_exceptiontcolstexpR¶((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR¨”s 
	c	Csû|j|ƒg}|s|r‘|rXx0|D]%}|j|jj|||ƒƒq,Wn|r÷x-|D]"}|j|jj||ƒƒqeWq÷nf|jrÙ|rÁd|krÁ|jj|ƒ}q÷|jj||ƒ}n|r÷|jj||ƒ}n|S(Ntall_tenants(R£RÏRÉR×RØRYtsecurity_group_get_alltsecurity_group_get_by_project(	RDRtnamestidstprojectRÖtgroupsRRñ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR@§s&


&	cCs|dtkr4tdƒ|d}|j|ƒn|jj||dƒritdƒ}|j|ƒntjd|ƒ}tj||ƒ\}}y |j	d|d|dd	ƒWn$t
k
rÙtjt
d
ƒƒnXtjtdƒ|dd|ƒ|jj||dƒ|jƒdS(NRs"Unable to delete system group '%s'RñsSecurity group is still in useRR±R²R˜iÿÿÿÿs3Failed to update usages deallocating security groupsDelete security group %s(RÒRRÓRÉtsecurity_group_in_useR%R“RItids_from_security_groupR¼RµRÂRRRáRtsecurity_group_destroyR¼(RDRR)R¶R(t
quota_projectt
quota_user((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR·Ås&	
cCsL|s
tS|jdƒ}|s#tSx"|D]}||dkr*tSq*WtS(smCheck if the security group is already associated
           with the instance. If Yes, return True.
        R¦RB(RŒR¨R(RDR)R;R¦tinst((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytis_associated_with_serveràs
cCsž|jj||j|ƒ}|j}|j||ƒrUtjd|dd|ƒ‚n|jj|jƒ||dƒ|j	rš|j
j|||j	ƒndS(s#Add security group to the instance.RäRñRQN(RÉR×R±RBRëRtSecurityGroupExistsForInstancetinstance_add_security_groupR8RRRttrefresh_instance_security_rules(RDRREtsecurity_group_nameR)R;((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytadd_to_instanceòs			
		cCsž|jj||j|ƒ}|j}|j||ƒsUtjd|dd|ƒ‚n|jj|jƒ||dƒ|j	rš|j
j|||j	ƒndS(s7Remove the security group associated with the instance.RäRñRQN(RÉR×R±RBRëRt!SecurityGroupNotExistsForInstancetinstance_remove_security_groupR8RRRtRî(RDRRERïR)R;((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytremove_from_instances			
		cCs\|j|ƒy|jj||ƒSWn1tjk
rWtdƒ|}|j|ƒnXdS(NsRule (%s) not found(R£RÉtsecurity_group_rule_getRRÙRRÚ(RDRRñR¶((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_rules
cCstjj|d|ƒ}y*|t|ƒ}tjj|d|ƒWn-tjk
rqtdƒ}|j|ƒnXt	dƒ}g}xe|D]]}	|j
j||	ƒ}
|j|
ƒt
j|i|d6|
jd6|
jd6|
jd6ƒq‹W|j|d|ƒ|S(	sùAdd security group rule(s) to security group.

        Note: the Nova security group API doesn't support adding multiple
        security group rules at once but the EC2 one does. Therefore,
        this function is written to support both.
        tsecurity_group_ruless.Quota exceeded, too many security group rules.sNSecurity group %(name)s added %(protocol)s ingress (%(from_port)s:%(to_port)s)Rtprotocolt	from_porttto_portRñ(R%R“RøR•R”RR–RRËRRÉtsecurity_group_rule_createRÏRÂRáR÷RøRùttrigger_rules_refresh(RDRRñRtvalsRøt	projectedR¶RÖRátrule((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt	add_rules$s$



cCs–tdƒ}xl|D]d}|j||ƒ}tj|i|dd6|jd6|jd6|jd6ƒ|jj||ƒqW|j	|d|dƒdS(NsPSecurity group %(name)s removed %(protocol)s ingress (%(from_port)s:%(to_port)s)RR÷RøRùRñ(
RRõRÂRáR÷RøRùRÉtsecurity_group_rule_destroyRû(RDRR)trule_idsR¶trule_idRþ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytremove_rulesBs


cCs(x!|D]}|jj||ƒqWdS(N(RÉt#security_group_default_rule_destroy(RDRRR((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytremove_default_rulesQs
cCs,g|D]}|jj||ƒ^q}|S(N(RÉt"security_group_default_rule_create(RDRRüRáRÖ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytadd_default_rulesUs%cCsmxf|jj|ƒD]R}d}xC|D](}|j|ƒ|j|ƒkr&Pq&q&W|jdƒpdtSqWtS(sxIndicates whether the specified rule values are already
           defined in the default security group rules.
        tcidrRøRùR÷Rñ(scidrs	from_portsto_portsprotocol(RÉt security_group_default_rule_listR¨RRŒ(RDRRõRþRdRi((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytdefault_rule_existsZs
cCsCy|jj|ƒ}Wn&tk
r>d}tj|ƒ‚nX|S(Ns'cannot get default security group rules(RÉR	RµRt SecurityGroupDefaultRuleNotFound(RDRRÖR¶((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_all_default_rulesgs
cCs|jj||ƒS(N(RÉtsecurity_group_default_rule_get(RDRRñ((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_default_rulepscCs?yt|ƒSWn*tk
r:tdƒ}|j|ƒnXdS(Ns#Security group id should be integer(RºRRRÆ(RDRñR¶((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytvalidate_idss

cCs@x9|D]1}|jdk	r|jj|||jƒqqWdS(N(RRR@RtRî(RDRR¦RE((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt _refresh_instance_security_ruleszs
	cCs)tjj||ƒ}|j||ƒdS(s@Called when a rule is added to or removed from a security_group.N(R%RÍtget_by_security_group_idR(RDRRñR¦((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRû€scCs)tjj||ƒ}|j||ƒdS(s°Called when a security group gains a new or loses a member.

        Sends an update request to each compute node for each instance for
        which this is relevant.
        N(R%RÍt!get_by_grantee_security_group_idsR(RDRt	group_idsR¦((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyttrigger_members_refresh…s	cCs@|r|jj||jƒSg|jD]}i|jd6^q&S(NR(RÉtsecurity_group_get_by_instanceRBR˜R(RDRREtdetailedR×((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pytget_instance_security_groupss
cCs|stjƒStj|ƒS(N(R%tSecurityGroupListtsecurity_group_objtmake_secgroup_list(RDR˜((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyR¢•s
N(RCR,R-RŒt
id_is_uuidRRÈR£RÐRÕR@R¨R@R·RëRðRóRõRÿRRRR
RRRRRûRRR¢(((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyRÄ4s8			
													
							
(|R-RƒRRùRKRëR¨RBtoslo_logRtloggingtoslo_messagingRRætoslo_serializationRt
oslo_utilsRRRRRRØt	six.movesRtnovaR	R
t
nova.cellsRRƒtnova.computeRR
RRRtRRR[RRt	nova.conftnova.consoleauthRrRRBRtnova.dbRRRRt	nova.i18nRRRRRRR tnova.networkR!Rtnova.network.security_groupR"R#R$R%tnova.objectsRŒRfR&RR'R·R(RIR)Rtnova.pciR*R‘tnova.policyR+tnova.schedulerR,RqR9R-t	nova.virtR.tnova.volumeR/t	getLoggerRCRÂRÃR2RetconfRyRRÒR»R€R…R•R‘R@RRPRWR[R_RktBaseRlR:RfRpRŸtSecurityGroupBaseRÄ(((sE/home/tvault/.virtenv/lib/python2.7/site-packages/nova/compute/api.pyt<module>sÌ			(						ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥½p