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
ddlmZddl
mZddl
mZddl
mZddlmZdd	lmZdd
lmZddlmZddlZddlmZddlZdd
lmZddlm Z ddlm!Z!ddlm"Z"ddl#m$Z$ddl#m%Z%ddl#m&Z&ddl#m'Z'ddl#m(Z(ddl#m)Z)ddl*m+Z+ddlm,Z,ddl-m.Z.ddl-m/Z/ddl0m1Z1ddl0m2Z2ddl0m3Z3ddl0m4Z4ddl5m6Z6dd l7m8Z8dd!l7m9Z9ddl:Z5ddl;Z5dd"l<m=Z=ddl5mZdd#l>m?Z?m@Z@mAZAmBZBdd$l5mCZCdd%l5mDZDe5jEjFZFejGeHƒZIejJƒZKejJƒZLdd&„ZNd'„ZOd(„ZPdd)„ZQd*„ZReSdd+„ZTd,„ZUd-ZVd.ZWd/d0d1gZXd2„ZYd3„ZZd4„Z[d5„Z\d6„Z]d7„Z^d8„Z_d9„Z`ddeSd:„Zad;„Zbd<„Zcd=„Zdd>„Zed?„Zfd@„ZgiecdA6eddB6eedC6efdD6egdE6ZhdF„ZidG„ZjdH„ZkdIelfdJ„ƒYZmdKelfdL„ƒYZndMelfdN„ƒYZoe^dO„ƒZpe_dP„ƒZqe`dQ„ƒZre_ddR„ƒZse_dS„ƒZte_dT„ƒZue_eSdU„ƒZve_eSdV„ƒZwe_dW„ƒZxe_dX„ƒZye`dY„ƒZze^dZ„ƒZ{e
j|d[d\d]e}ƒe^d^„ƒƒZ~dddd_„Zdddd`„Z€e_da„ƒZe_db„ƒZ‚e_dc„ƒZƒe_dd„ƒZ„e`de„ƒZ…e_df„ƒZ†e_dddg„ƒZ‡e_dh„ƒZˆe^di„ƒZ‰e
j|d[d\d]e}ƒe^dj„ƒƒZŠe^dk„ƒZ‹e_dl„ƒZŒeKjdm„ƒZŽeKjdn„ƒZeKjdo„ƒZ‘eKjdp„ƒZ’eZeKjdq„ƒƒZ“eZeKjdr„ƒƒZ”eZe
j|d[d\d]e}dse}ƒeKjeSdt„ƒƒƒZ•eZeKje}du„ƒƒZ–dvdw„Z—eZeKjdx„ƒƒZ˜eZeKjdy„ƒƒZ™dz„ZšeZe
j|d[d\d]e}ƒeKjd{„ƒƒƒZ›eZe
j|d[d\d]e}ƒeKjd|„ƒƒƒZœeZeKjd}„ƒƒZeZeKjd~„ƒƒZžd„ZŸeKjd€„ƒZ eKjd„ƒZ¡eZeKjd‚„ƒƒZ¢eZeKjdƒ„ƒƒZ£d„„Z¤eZeKjd…„ƒƒZ¥eZeKjd†„ƒƒZ¦eZeKjd‡„ƒƒZ§eZeKjdˆ„ƒƒZ¨d‰„Z©eKjdŠ„ƒZªeKjd‹„ƒZ«eKjdŒ„ƒZ¬eKjd„ƒZ­e
j|d[d\d]e}dse}ƒeKjdeSddŽ„ƒƒZ®e
j|d[d\d]e}dse}ƒeKjdddd„ƒƒZ¯eZeKjd„ƒƒZ°eZeKjd‘„ƒƒZ±eZeKjd’„ƒƒZ²eKjd“„ƒZ³eZeKjeSd”„ƒƒZ´eKjd•„ƒZµeZeKjdd–„ƒƒZ¶dd—„Z·eZeKjd˜„ƒƒZ¸eZeKjd™„ƒƒZ¹eKjdš„ƒZºeZeKjd›„ƒƒZ»eZeKjdœ„ƒƒZ¼eZeKjd„ƒƒZ½dž„Z¾eZe^dŸ„ƒƒZ¿d „ZÀeZe^d¡„ƒƒZÁeZe_d¢„ƒƒZÂeZe_d£„ƒƒZÃeZe_d¤„ƒƒZÄeZe[e`d¥„ƒƒƒZÅeZe_d¦„ƒƒZÆeZe^d§„ƒƒZÇeZe^d¨„ƒƒZÈeZe_d©„ƒƒZÉdª„ZÊd«„ZËd¬„ZÌd­„ZÍeZe
j|d[d\d]e}ƒe^d®„ƒƒƒZÎd¯„ZÏeZe
j|d[d\d]e}ƒe^dd°„ƒƒƒZÐeZe`dd±„ƒƒZÑdd²„ZÒeZe_dd³„ƒƒZÓdd´„ZÔddµ„ZÕd¶„ZÖeZe_dd·„ƒƒZ×eZe`dddd¸„ƒƒZØeZe`dddddd¹„ƒƒZÙdº„ZÚd»„ZÛd¼„ZÜd½„ZÝd¾d¿gdÀdÁ„ZÞeZe`ddddd„ƒƒZßeSddÄZàe`ddĄƒZádńZâe_ddƄƒZãe_ddDŽƒZäe_dȄƒZåeZeKjdɄƒƒZæe_dʄƒZçd˄ZèeZeèƒe^dd̄ƒƒƒZéeZeèƒe^ddd̈́ƒƒƒZêd΄ZëddτZìe^dЄƒZíeZe^dфƒƒZîeZe_d҄ƒƒZïeZe
j|d[d\d]e}ƒe^dӄƒƒƒZðeZe^dԄƒƒZñdՄZòe^dքƒZóe_ddׄƒZôeZeKjd؄ƒƒZõeZeKjdلƒƒZöeZeKjdڄƒƒZ÷eZeKjdddۄƒƒZøeZeKjd܄ƒƒZùeKjdeSd݄ƒZúdބZûeKjd߄ƒZüeKjdà„ƒZýeKjdᄃZþeKjd℃Zÿdãdä„ZeZeKjdãd儃ƒZeZeKjd愃ƒZeZeKjd焃ƒZddè„ZeKjdd鄃ZeKjdꄃZdë„ZeKjd섃ZeKjd턃Z	eKjdZ
e
j|d[d\d]e}dse}ƒeKjdƒZeZeKjdð„ƒƒZeZeKjddñ„ƒƒZ
eZeKjdò„ƒƒZeZeKjd󄃃ZeZeKjdô„ƒƒZdõ„ZeKjddö„ƒZeKjdd÷„ƒZeZeKjdø„ƒƒZeKjdù„ƒZeZeKjdú„ƒƒZeKjdû„ƒZeKjdü„ƒZeZeKjddý„ƒƒZddþ„ZeZeKjdÿ„ƒƒZeZeKjd„ƒƒZd„ZeKjd„ƒZd„Zd„Z d„Z!d„Z"d„Z#eSd„Z$d	„Z%eZe
j|d[d\d]e}ƒeKjddd
„ƒƒƒZ&eZe
j|d[d\d]e}ƒeKjddd„ƒƒƒZ'd„Z(eZe
j|d[d\d]e}ƒeKjddd
„ƒƒƒZ)eZe
j|d[d\d]e}ƒeKjddd„ƒƒƒZ*eKjd„ƒZ+eKjd„ƒZ,e
j|d[d\d]e}ƒeKjd„ƒƒZ-d„Z.d„Z/eZeKjdd„ƒƒZ0eZeKjd„ƒƒZ1eZeKjd„ƒƒZ2eZeKjdd„ƒƒZ3eZeKjd„ƒƒZ4eZeKjd„ƒƒZ5dd„Z6d„Z7eSd„Z8eZe^e}d„ƒƒZ9eZe^e}d„ƒƒZ:e^e}d„ƒZ;eZe`d „ƒƒZ<eZe`d!„ƒƒZ=eZe_dd"„ƒƒZ>eZe_dd#„ƒƒZ?eZe^d$„ƒƒZ@eZe^d%„ƒƒZAeZe^d&„ƒƒZBeZeKjd'„ƒƒZCdeSe}d(„ZDd)„ZEeZeKjd*„ƒƒZFeZeKjdd+„ƒƒZGeZeKjdd,„ƒƒZHeZeKjd-„ƒƒZIeZeKjd.„ƒƒZJeZeKjd/„ƒƒZKeZeKjdd0„ƒƒZLd1„ZMeKjd2„ƒZNeZeKjd3„ƒƒZOd4„ZPd5„ZQd6„ZReZeKjd7„ƒƒZSeZeKjdd8„ƒƒZTeZeKjd9„ƒƒZUeZeKjd:„ƒƒZVeZeKjd;„ƒƒZWeZeKjd<„ƒƒZXd=„ZYeZeKjd>„ƒƒZZeKjd?„ƒZ[eKjd@„ƒZ\eZeKjdA„ƒƒZ]eKjdB„ƒZ^eKjdC„ƒZ_eKjdD„ƒZ`eZeKje}dE„ƒƒZae^dF„ƒZbe^dG„ƒZce_dH„ƒZde_dI„ƒZee_dJ„ƒZfe`dK„ƒZge_dL„ƒZhe_ddM„ƒZie_dN„ƒZje^dO„ƒZke_dP„ƒZle_dQ„ƒZme^dR„ƒZne^dS„ƒZoe_dT„ƒZpe_ddU„ƒZqe_ddV„ƒZreKjddW„ƒZsdX„ZtddY„ZueZeKjeSddZdÀddd[„ƒƒZvd\„Zwd]„ZxeZeKjd^„ƒƒZyeZeKjd_„ƒƒZzeZeKjd`„ƒƒZ{eKjda„ƒZ|db„Z}eKjdc„ƒZ~eKjdd„ƒZeKjde„ƒZ€df„ZeZeKjdg„ƒƒZ‚eZeKjdh„ƒƒZƒeZeKjdidj„ƒƒZ„eKjdk„ƒZ…dl„Z†eKjdm„ƒZ‡eKjdn„ƒZˆeKjdo„ƒZ‰eKjdp„ƒZŠdq„Z‹dr„ZŒeZe_ds„ƒƒZeZe
j|d[d\d]e}ƒe^dt„ƒƒƒZŽeZe
j|d[d\d]e}ƒe^du„ƒƒƒZdv„Zdw„Z‘eZe_dx„ƒƒZ’eZe^dy„ƒƒZ“eKjdz„ƒZ”eKjd{„ƒZ•eKjdd|„ƒZ–eKjd}„ƒZ—eKjd~„ƒZ˜eZe`d„ƒƒZ™eZe`d€„ƒƒZšeZe
j|d[d\d]e}ƒe^dd„ƒƒƒZ›eZe_d‚„ƒƒZœeZe^eSdƒ„ƒƒZeKjd„„ƒZžeKjd…„ƒZŸeKjd†„ƒZ dddd‡„Z¡eKjddˆ„ƒZ¢eKjd‰„ƒZ£eKjdŠ„ƒZ¤eKjdd‹„ƒZ¥eKjddŒ„ƒZ¦eKjd„ƒZ§eKjdŽ„ƒZ¨eKjd„ƒZ©eKjd„ƒZªd‘d’„Z«e\eKjd“„ƒƒZ¬e\eKjd”„ƒƒZ­e\eKjeSdid•„ƒƒZ®e\eKjd–„ƒƒZ¯e\eKjd—„ƒƒZ°e\eKjd˜„ƒƒZ±e^d™„ƒZ²e_dš„ƒZ³e^d›„ƒZ´e^dœ„ƒZµe_d„ƒZ¶e_dž„ƒZ·dŸ„Z¸d „Z¹e^d¡„ƒZºe^d¢„ƒZ»e_d£„ƒZ¼e_d¤„ƒZ½eZe^dd¥„ƒƒZ¾eZe_d¦„ƒƒZ¿eZe_d§„ƒƒZÀeZe_d¨„ƒƒZÁd©„ZÂdddª„ZÃe_dd«„ƒZÄe_ddd¬„ƒZÅe^ddd­„ƒZÆe^dd®„ƒZÇd¯„ZÈd°„ZÉdd±„ZÊeKjd²„ƒZËeKjd³„ƒZÌdddd´„ZÍeKjdddµ„ƒZÎeKjd¶„ƒZÏeKjd·„ƒZÐeKjd¸„ƒZÑeKjd¹„ƒZÒeKjdº„ƒZÓeKjd»„ƒZÔd¼„ZÕd½d¾„ZÖd¿„Z×eSdÀ„ZØeKjeSdÁ„ƒZÙeKjd„ƒZÚeKjdăZÛeSdÄ„ZÜe_dÅ„ƒZÝe_dÆ„ƒZÞe_dÇ„ƒZße_dÈ„ƒZàeZe_dÉ„ƒƒZáe_dÊ„ƒZâe^dË„ƒZãe^dÌ„ƒZäe^dÍ„ƒZåe^d΄ƒZæe_dÏ„ƒZçe^dЄƒZèe^dÑ„ƒZéeKjdÒ„ƒZêe^dÓ„ƒZëe_dÔ„ƒZìe^dÕ„ƒZíe^dÖ„ƒZîdS(×s%Implementation of SQLAlchemy backend.iÿÿÿÿN(tapi(t	exception(tenginefacade(tupdate_match(tutils(tlog(texcutils(t	timeutils(t	uuidutils(trange(tand_(tNoSuchTableError(tMetaData(tor_(taliased(tcontains_eager(t
joinedload(tjoinedload_all(tnoload(tundefer(tTable(tsql(tasc(tdesc(tfalse(tfunc(tnull(ttrue(tblock_device(ttask_states(t	vm_states(tmodels(t_t_LIt_LEt_LW(tquota(t
safe_utilsc Cs‘td|p|jd|jdtdtdtd|jd|jd|jd	|jd
|j	d|j
d|jd
|jd|j
d|jƒ}|S(Nt
connectiontslave_connectiont	sqlite_fkt__autocommittexpire_on_committmysql_sql_modetidle_timeouttconnection_debugt
max_pool_sizetmax_overflowtpool_timeouttsqlite_synchronoustconnection_tracetmax_retriestretry_interval(tdictR&R'tFalsetTrueR+R,R-R.R/R0R1R2R3R4(t
conf_groupR&tkw((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_get_db_confPs"										cCs,|r(y|jSWq(tk
r$q(XndS(N(t
db_connectiontAttributeError(tcontext((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_context_manager_from_contextds

cCs0tjt|jƒtjt|jƒdS(N(tmain_context_managert	configureR:tdatabasetapi_context_managertapi_database(tconf((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR@lscCs,tjƒ}|jttjd|ƒ|S(sfCreate a database context manager object.

    : param connection: The database connection string
    R&(Rttransaction_contextR@R:tCONFRA(R&tctxt_mgr((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcreate_context_managerqscCst|ƒptS(swGet a database context manager object.

    :param context: The request context that can contain a context manager
    (R>R?(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytget_context_manager{scCs(t|ƒpt}|jƒjd|ƒS(s¨Get a database engine object.

    :param use_slave: Whether to use the slave connection
    :param context: The request context that can contain a context manager
    t	use_slave(R>R?tget_legacy_facadet
get_engine(RJR=RG((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRLƒscCstjƒjƒS(N(RBRKRL(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytget_api_enginestshadow_tdefaultt	fixed_ipstfloating_ipstnetworkscCstjtS(s"The backend is this module itself.(tsystmodulest__name__(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytget_backend–scs"tjˆƒ‡fd†ƒ}|S(s3Decorator to require *any* user or admin context.

    This does no authorization for user or project access matching, see
    :py:func:`nova.context.authorize_project_context` and
    :py:func:`nova.context.authorize_user_context`.

    The first argument to the wrapped function must be the context.

    cs!tjj|dƒˆ||ŽS(Ni(tnovaR=trequire_context(targstkwargs(tf(sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytwrapper¦s(t	functoolstwraps(R[R\((R[sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRX›scs"tjˆƒ‡fd†ƒ}|S(s Decorator to require the specified instance to exist.

    Requires the wrapped function to use context and instance_uuid as
    their first two arguments.
    cs t||ƒˆ||||ŽS(N(tinstance_get_by_uuid(R=t
instance_uuidRYRZ(R[(sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR\³s
(R]R^(R[R\((R[sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt"require_instance_exists_using_uuid­scs"tjˆƒ‡fd†ƒ}|S(s Decorator to require the specified aggregate to exist.

    Requires the wrapped function to use context and aggregate_id as
    their first two arguments.
    cs t||ƒˆ||||ŽS(N(t
aggregate_get(R=taggregate_idRYRZ(R[(sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR\Âs
(R]R^(R[R\((R[sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytrequire_aggregate_exists»scs"tjˆƒ‡fd†ƒ}|S(s\Decorator to select synchronous or asynchronous reader mode.

    The kwarg argument 'use_slave' defines reader mode. Asynchronous reader
    will be used if 'use_slave' is True and synchronous reader otherwise.
    If 'use_slave' is not specified default value 'False' will be used.

    Wrapped function must have a context in the arguments.
    cs‚tjˆƒ}tj|||Ž}|d}|jdtƒ}|rRtj}n	tj}|j	|ƒˆ||ŽSWdQXdS(NR=RJ(
R%tget_wrapped_functiontinspecttgetcallargstgetR6R?tasynctreadertusing(RYRZtwrapped_funct
keyed_argsR=RJtreader_mode(R[(sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR\Ós
	(R]R^(R[R\((R[sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytselect_db_reader_modeÉs
cs"tjˆƒ‡fd†ƒ}|S(s¹Decorator to use a writer db context manager.

    The db context manager will be picked from the RequestContext.

    Wrapped function must have a RequestContext in the arguments.
    cs9t|ƒ}|jj|ƒˆ|||ŽSWdQXdS(N(RItwriterRk(R=RYRZRG(R[(sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytwrappedìs(R]R^(R[Rq((R[sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytpick_context_manager_writeråscs"tjˆƒ‡fd†ƒ}|S(s¹Decorator to use a reader db context manager.

    The db context manager will be picked from the RequestContext.

    Wrapped function must have a RequestContext in the arguments.
    cs9t|ƒ}|jj|ƒˆ|||ŽSWdQXdS(N(RIRjRk(R=RYRZRG(R[(sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRqûs(R]R^(R[Rq((R[sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytpick_context_manager_readerôscs"tjˆƒ‡fd†ƒ}|S(sÅDecorator to use a reader.allow_async db context manager.

    The db context manager will be picked from the RequestContext.

    Wrapped function must have a RequestContext in the arguments.
    cs<t|ƒ}|jjj|ƒˆ|||ŽSWdQXdS(N(RIRjtallow_asyncRk(R=RYRZRG(R[(sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRq
s(R]R^(R[Rq((R[sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt'pick_context_manager_reader_allow_asyncscCs|dkr|j}ni}d|kr7t|d<n>d|krPt|d<n%d|kr_nttdƒ|ƒ‚tj||j||}t	j
j|ƒrÿ|rÿ|dkrç|jt
|j|jk|jtƒkƒƒ}qÿ|jd|jƒ}n|S(	s0Query helper that accounts for context's `read_deleted` field.

    :param context:     NovaContext of the query.
    :param model:       Model to query. Must be a subclass of ModelBase.
    :param args:        Arguments to query. If None - model is used.
    :param read_deleted: If not None, overrides context's read_deleted field.
                        Permitted values are 'no', which does not return
                        deleted values; 'only', which only returns deleted
                        values; and 'yes', which does not filter deleted
                        values.
    :param project_only: If set and context is user-type, then restrict
                        query to match the context's project_id. If set to
                        'allow_none', restriction includes project_id = None.
    tnotdeletedtonlytyess$Unrecognized read_deleted value '%s't
allow_nonet
project_idN(tNonetread_deletedR6R7t
ValueErrorR tsqlalchemyutilstmodel_querytsessionRWR=tis_user_contexttfilterR
R{Rt	filter_by(R=tmodelRYR}tproject_onlytquery_kwargstquery((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR€s(


cGs¶|sd}nx |D]˜}||kr||rt||tjƒr‘ytj||ƒ||<Wq‘tk
rtj||ƒ||<q‘Xn||jddƒ||<qqW|S(Nt
created_att
deleted_att
updated_atttzinfo(s
created_ats
deleted_ats
updated_at(	t
isinstancetsixtstring_typesRt
parse_strtimeR~t
parse_isotimetreplaceR|(tvaluest
datetime_keystkey((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt!convert_objects_related_datetimesCs	

!cCsttdt|||ƒƒƒS(Nt	instancestcorestram(s	instancesR˜sram(R5tzipt_instance_data_get_for_user(R=R{tuser_id((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_sync_instancesVs	cCstdt||ƒƒS(NRQ(R5t_floating_ip_count_by_project(R=R{Rœ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_sync_floating_ips[s	cCstdt||ƒƒS(NRP(R5t_fixed_ip_count_by_project(R=R{Rœ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_sync_fixed_ips`scCstdt|||ƒƒS(Ntsecurity_groups(R5t)_security_group_count_by_project_and_user(R=R{Rœ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_sync_security_groupsds	cCstdt|||ƒƒS(Nt
server_groups(R5t)_instance_group_count_by_project_and_user(R=R{Rœ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_sync_server_groupsis	RRŸR¡R¤R§cKs
t|ƒS(N(t
Constraint(t
conditions((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt
constraintxscGs
t|ƒS(N(tEqualityCondition(R“((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt	equal_any|scGs
t|ƒS(N(tInequalityCondition(R“((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt	not_equal€sR¨cBseZd„Zd„ZRS(cCs
||_dS(N(R©(tselfR©((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt__init__†scCsVxO|jjƒD]>\}}x/|jt||ƒƒD]}|j|ƒ}q5WqW|S(N(R©titemstclausestgetattrRƒ(R¯R…RˆR•t	conditiontclause((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytapply‰s(RUt
__module__R°R¶(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR¨„s	R«cBseZd„Zd„ZRS(cCs
||_dS(N(R“(R¯R“((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR°’scCs)tg|jD]}||k^q
ŒgS(N(R
R“(R¯tfieldtvalue((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR²•s(RUR·R°R²(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR«s	R­cBseZd„Zd„ZRS(cCs
||_dS(N(R“(R¯R“((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR°scCs g|jD]}||k^q
S(N(R“(R¯R¸R¹((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR² s(RUR·R°R²(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR­›s	cCs…t||ƒ}t|tjƒjd|ƒjdtƒt|tjƒjt	tjj
|ktjj|dkƒƒjdtƒdS(Ntidtsynchronize_sessionthost(tservice_getR€RtServiceR„tsoft_deleteR6tComputeNodeRƒR
t
service_idR¼(R=RÁtservice((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytservice_destroy§scCsIt|tjƒjd|ƒ}|jƒ}|sEtjd|ƒ‚n|S(NRºRÁ(R€RR¾R„tfirstRtServiceNotFound(R=RÁRˆtresult((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR½·s
cCss|jjtjjtjtjjƒƒjtjjj	|ƒƒjtjj
tƒkƒjtjjƒ}t
|ƒS(N(RRˆRR¾tbinaryRtmintversionRƒtin_tforced_downRtgroup_byR5(R=tbinariestmin_versions((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytservice_get_minimum_versionÂs		cCs=t|tjƒ}|dk	r3|jd|ƒ}n|jƒS(Ntdisabled(R€RR¾R|R„tall(R=RÐRˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytservice_get_allÍscCs4t|tjddƒjdtƒjd|ƒjƒS(NR}RvRÐttopic(R€RR¾R„R6RÑ(R=RÓ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytservice_get_all_by_topic×scCs@t|tjddƒjdtƒjd|ƒjd|ƒjƒS(NR}RvRÐR¼RÓ(R€RR¾R„R6RÄ(R=R¼RÓ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytservice_get_by_host_and_topicßscCsIt|tjddƒjd|ƒ}|s?|jdtƒ}n|jƒS(NR}RvRÇRÐ(R€RR¾R„R6RÑ(R=RÇtinclude_disabledRˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytservice_get_all_by_binaryès
	cCsŽt|tjddƒjddƒ}|s?|jdtƒ}n|jtjtjjtjjkƒjtjj	|kƒj
dƒ}|jƒS(NR}RvRÇsnova-computeRÐR¼(R€RR¾R„R6tjoinRÀR¼Rƒthypervisor_typetdistinctRÑ(R=thv_typeRÖRˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt#service_get_all_computes_by_hv_typeñs		cCs[t|tjddƒjd|ƒjd|ƒjƒ}|sWtjd|d|ƒ‚n|S(NR}RvR¼RÇ(R€RR¾R„RÄRtHostBinaryNotFound(R=R¼RÇRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytservice_get_by_host_and_binaryÿscCs(t|tjddƒjd|ƒjƒS(NR}RvR¼(R€RR¾R„RÑ(R=R¼((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytservice_get_all_by_hostscCsUt|tjddƒjd|ƒjddƒjƒ}|sQtjd|ƒ‚n|S(NR}RvR¼RÇsnova-compute(R€RR¾R„RÄRtComputeHostNotFound(R=R¼RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytservice_get_by_compute_hostscCsÚtjƒ}|j|ƒtjsCtdƒ}t|_||_ny|j	|j
ƒWn|tjk
rÕ}d|j
kr¨tjd|jdƒd|jdƒƒ‚ntjd|jdƒd|jdƒƒ‚nX|S(Ns*New service disabled due to config option.RÇR¼RÓ(RR¾tupdateRFtenable_new_servicesR R7RÐtdisabled_reasontsaveRtdb_exctDBDuplicateEntrytcolumnsRtServiceBinaryExistsRhtServiceTopicExists(R=R“tservice_reftmsgte((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytservice_create s
		R3itretry_on_deadlockcCsTt||ƒ}d|krC|d|jkrCtjƒ|_qCn|j|ƒ|S(Ntreport_count(R½RðRtutcnowtlast_seen_upRâ(R=RÁR“Rë((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytservice_update3s
cCsÈ|dkri}ntjtjjddƒ}tj|gƒ}|jdkro|j|j	j
dkƒ}nd|kr|j|j	j|dkƒ}nd|krË|j|j	j|dkƒ}nd|krù|j|j	j
|dkƒ}nd|kr-|d}|j|j	j|kƒ}n|dk	r‘yt||ƒWn&tjk
rrtjd	|ƒ‚nX|j|j	j|kƒ}n|dk	r¯|j|ƒ}n|jtd
ƒƒ}|S(NtnametcnRvit
compute_idRÁR¼thypervisor_hostnametmarkerRº(R|tsataliasRRÀt	__table__tselectR}twheretcRwRºRÁR¼R÷tcompute_node_getRRàtMarkerNotFoundtlimittorder_byR(R=tfiltersRRøtcn_tblRüthyp_hostname((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_compute_node_selectEs2	"""
c	Csut||d|d|ƒ}t|ƒ}|jƒ}|j|ƒjƒ}g|D]}t|ƒ^qO}|jƒ|S(NRRø(RRLtconnecttexecutetfetchallR5tclose(	R=RRRøRütenginetconntresultstr((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_compute_node_fetchalles
cCs9t|i|d6ƒ}|s1tjd|ƒ‚n|dS(NRöR¼i(RRRà(R=RöR
((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRÿrscCsCt|tjƒjd|ƒjƒ}|s?tjd|ƒ‚n|S(NRºR¼(R€RRÀR„RÄRRà(R=RöRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcompute_node_get_modelzs
cCs5t|i|d6ƒ}|s1tjd|ƒ‚n|S(NRÁ(RRRÅ(R=RÁR
((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcompute_nodes_get_by_service_id†scCs@t|i|d6|d6ƒ}|s8tjd|ƒ‚n|dS(NR¼R÷i(RRRà(R=R¼tnodenameR
((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt%compute_node_get_by_host_and_nodenameŽs
cCs5t|i|d6ƒ}|s1tjd|ƒ‚n|S(NR¼(RRRà(R=R¼R
((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcompute_node_get_all_by_host—scCs
t|ƒS(N(R(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcompute_node_get_allŸscCst|d|d|ƒS(NRRø(R(R=RRø((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt"compute_node_get_all_by_pagination¤scCs8tjj}t|tjƒj|jd|ƒƒjƒS(Ns%%%s%%(RRÀR÷R€RƒtlikeRÑ(R=thypervisor_matchR¸((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt!compute_node_search_by_hypervisor©scCs7t|ƒtjƒ}|j|ƒ|j|jƒ|S(s_Creates a new ComputeNode and populates the capacity fields
    with the most recent data.
    (R–RRÀRâRåR(R=R“tcompute_node_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcompute_node_create±s


cCs:t||ƒ}tjƒ|d<t|ƒ|j|ƒ|S(s9Updates the ComputeNode record with the most recent data.R‹(RRRñR–Râ(R=RöR“tcompute_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcompute_node_update¿s


cCsIt|tjƒjd|ƒjdtƒ}|sEtjd|ƒ‚ndS(sDelete a ComputeNode record.RºR»R¼N(R€RRÀR„R¿R6RRà(R=RöRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcompute_node_deleteÏs
	c	
smt|ƒ}tjj}tjt|ƒddƒ}tj||tj	tj
|jj|jjk|jj
|jjkƒ|jjtƒk|jjdkƒƒ}tjƒjdƒtjj|jjƒjdƒtjj|jjƒjdƒtjj|jjƒjdƒtjj|jjƒjdƒtjj|jjƒjd	ƒtjj|jjƒjd
ƒtjj|jjƒjdƒtjj|jjƒjdƒtjj|jjƒjd
ƒtjj|jjƒjdƒtjj|jj ƒjdƒg}tj!|ƒj"|ƒ}|j#ƒ}|j$|ƒj%ƒ‰d}‡fd†t&|ƒDƒ‰|j'ƒˆS(s*Compute statistics over all compute nodes.Rôt	inner_selsnova-computetcounttvcpust	memory_mbtlocal_gbt
vcpus_usedtmemory_mb_usedt
local_gb_usedtfree_ram_mbtfree_disk_gbtcurrent_workloadtrunning_vmstdisk_available_leastcs/i|]%\}}tˆ|p"dƒ|“qS(i(tint(t.0tidxR¸(R
(sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pys
<dictcomp> s	(scountsvcpuss	memory_mbslocal_gbs
vcpus_usedsmemory_mb_useds
local_gb_usedsfree_ram_mbsfree_disk_gbscurrent_workloadsrunning_vmssdisk_available_least((RLRR¾RûRùRúRRØRR
R
RþR¼RÁRºRÐRRÇRR tlabeltsumR!R"R#R$R%R&R'R(R)R*R+Rütselect_fromRRtfetchonet	enumerateR
(	R=Rtservices_tblRtjtagg_colsRüRtfields((R
sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcompute_node_statisticsÚsn											
cCsGtjƒ}x$|jƒD]\}}|||<qW|j|jƒ|S(N(RtCertificateR±RåR(R=R“tcertificate_refR•R¹((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcertificate_create)s
cCs(t|tjddƒjd|ƒjƒS(NR}RvR{(R€RR9R„RÑ(R=R{((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcertificate_get_all_by_project2scCs(t|tjddƒjd|ƒjƒS(NR}RvRœ(R€RR9R„RÑ(R=Rœ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcertificate_get_all_by_user9scCs4t|tjddƒjd|ƒjd|ƒjƒS(NR}RvRœR{(R€RR9R„RÑ(R=RœR{((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt'certificate_get_all_by_user_and_project@scCs›yXt|tjdtƒjd|ƒjtdƒƒjƒ}|sWtj	d|ƒ‚nWn<t
jk
r–tj
tdƒ|ƒtjd|ƒ‚nX|S(NR†Rºsfixed_ip.instances$Invalid floating IP ID %s in request(R€Rt
FloatingIpR7R„toptionsRRÄRtFloatingIpNotFoundRætDBErrortLOGtwarningR#t	InvalidID(R=RºRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_getKs	cCsQg}xDt|tjtjjfƒjƒD]}|ji|dd6ƒq+W|S(NiRô(R€RR?tpoolRÚtappend(R=tpoolsRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_get_pools\s
tretry_on_requestcCstjj||ƒt|tjddƒjddƒjddƒjd|ƒjƒ}|sjt	j
ƒ‚ni|d6|d6}t|tjddƒjd|dƒjddƒjddƒjd|ƒj|dd	ƒ}|stj
d
ƒtjt	jƒƒ‚n|dS(NR}Rvtfixed_ip_idR{RGt
auto_assignedRºR»tevaluatesJThe row was updated in a concurrent transaction, we will fetch another onetaddress(RWR=tauthorize_project_contextR€RR?R„R|RÄRtNoMoreFloatingIpsRâRCtdebugRætRetryRequesttFloatingIpAllocateFailed(R=R{RGRMtfloating_ip_reftparamstrows_update((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_allocate_addressfs&	
cCs©y,tjƒj}|jj|jƒ|ƒWn+tjk
rY}tj	d|j
ƒ‚nX|r¥t|tjƒjtjj
jg|D]}|d^q…ƒƒjƒSdS(NRO(RR?RûRRtinsertRæRçRtFloatingIpExistsR¹R€RƒRORÊRÑ(R=tipstwant_resultttabRítip((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_bulk_createˆsiccsng}d}xM|D]E}|j|dƒ|d7}||dkr|Vg}d}qqW|rj|VndS(s;Yields blocks of IPs no more than block_size elements long.iROiN(RH(R[t
block_sizetoutR R^((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_ip_range_splitter—s


c	CsQtjtƒ}x©t|ƒD]›}t|tjƒjtjjj	|ƒƒj
dtƒ}x(|jƒD]}||dcd8<qeWt|tjƒjtjjj	|ƒƒj
ddƒqWx|jƒD]\}}y;tjj|d|d|ƒ}tjj||d|ƒWqÈtk
rHtjƒtjtdƒƒWdQXqÈXqÈWdS(NRMR{iR»tfetchRQs5Failed to update usages bulk deallocating floating IP(tcollectionstdefaultdictR,RbR€RR?RƒRORÊR„R6RÑR¿R±R$tQUOTAStreservetcommitt	ExceptionRtsave_and_reraise_exceptionRCRR"(	R=R[tproject_id_to_quota_counttip_blockRˆtrowR{R treservations((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_bulk_destroy¨s&		

cCs^tjƒ}|j|ƒy|j|jƒWn*tjk
rYtjd|dƒ‚nX|S(NRO(	RR?RâRåRRæRçRRZ(R=R“RU((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_createÊs
cCsGtjj||ƒt|tjddƒjd|ƒjdtƒjƒS(NR}RvR{RM(	RWR=RPR€RR?R„R6R (R=R{((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRžÖscCsït|tjƒjd|ƒjtdƒƒjƒ}|sNtjd|ƒ‚nt|tj	ƒjd|ƒj
tj	j|jkƒj
ttj	j
|dktj	j
jdƒƒƒji|dd6|d6ƒ}|sëtjd|ƒ‚n|S(NROtnetworkRºRLR¼(R€RtFixedIpR„R@RRÄRtFixedIpNotFoundForAddressR?RƒR{R
RLtis_R|RâtFloatingIpAssociateFailed(R=tfloating_addresst
fixed_addressR¼tfixed_ip_reftrows((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_fixed_ip_associateßs 			
cCspt|tjƒjd|ƒjttjjtƒkƒtjjtƒkƒj	idd6dd6td6dtƒS(NROR{R¼RMR»(R€RR?R„RƒR
R{RRLRâR|R6(R=RO((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_deallocateùs	

cCs&t|tjƒjd|ƒjƒdS(NRO(R€RR?R„tdelete(R=RO((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_destroyscCsŒt|tjƒjd|ƒjƒ}|s?tjd|ƒ‚nt|tjƒjd|dƒjt	dƒƒjƒ}d|_d|_|S(NRORºRLRq(
R€RR?R„RÄRtFloatingIpNotFoundForAddressRrR@RR|RLR¼(R=RORURx((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_disassociates
		cCst|tjddƒS(NR}Rv(R€RR?(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_floating_ip_get_all#scCs:t|ƒjtdƒƒjƒ}|s6tjƒ‚n|S(Ntfixed_ip(R€R@RRÑRtNoFloatingIpsDefined(R=tfloating_ip_refs((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_get_all's
cCsLt|ƒjd|ƒjtdƒƒjƒ}|sHtjd|ƒ‚n|S(NR¼R(R€R„R@RRÑRtFloatingIpNotFoundForHost(R=R¼Rƒ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_get_all_by_host1s	cCsJtjj||ƒt|ƒjd|ƒjdtƒjtdƒƒjƒS(NR{RMsfixed_ip.instance(	RWR=RPR€R„R6R@RRÑ(R=R{((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_get_all_by_project<s
	cCs
t||ƒS(N(t_floating_ip_get_by_address(R=RO((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_get_by_addressHscCsÜ|sd}nyRt|tjƒjd|ƒjtdƒƒjƒ}|s`tj	d|ƒ‚nWn@t
jk
r£tdƒ|}t
j|ƒtj|ƒ‚nX|jrØtjj|ƒrØtjj||jƒn|S(NROsfixed_ip.instances!Invalid floating IP %s in request(R|R€RR?R„R@RRÄRR~RæRBR RCRDtInvalidIpAddressErrorR{RWR=R‚RP(R=RORÆRì((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRˆNs		
cCsLt|tjƒjtjtjjtjjkƒjtjj|kƒj	ƒS(N(
R€RR?t	outerjoinRrRºRLRƒRORÑ(R=Rw((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt floating_ip_get_by_fixed_addresshs
	cCs"t|tjƒjd|ƒjƒS(NRL(R€RR?R„RÑ(R=RL((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_get_by_fixed_ip_idsscCsat||ƒ}|j|ƒy|j|jƒWn*tjk
r\tjd|dƒ‚nX|S(NRO(RˆRâRåRRæRçRRZ(R=ROR“tfloat_ip_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfloating_ip_update{s
cCs1t|tjddƒjd|ƒjdƒjƒS(NR}RvtdomainRâ(R€Rt	DNSDomainR„t
with_lockmodeRÄ(R=tfqdomain((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt
dnsdomain_getŠs	cCsKt||ƒ}|sGtjƒ}|ji|d6dd6dd6ƒ|S|S(NRtavailability_zoneR{(R”RR‘RâR|(R=R“t
domain_reftdns_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_dnsdomain_get_or_create“scCs5t||ƒ}d|_||_|jj|ƒdS(Ntprivate(R˜tscopeR•Rtadd(R=R“tzoneR–((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytdnsdomain_register_for_zoneŸs		cCs5t||ƒ}d|_||_|jj|ƒdS(Ntpublic(R˜RšR{RR›(R=R“tprojectR–((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytdnsdomain_register_for_project§s		cCs&t|tjƒjd|ƒjƒdS(NR(R€RR‘R„R|(R=R“((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytdnsdomain_unregister¯scCst|tjddƒjƒS(NR}Rv(R€RR‘RÑ(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytdnsdomain_get_all¶sc
Cs§tj|ƒs$tjd|ƒ‚nttjj|ktjjtƒkƒ}t	|tjddƒj
|ƒjd|ƒjd|ƒjƒ}|dkr´tjd|d|ƒ‚n|jrØtjd|d|ƒ‚ni|d6|dk	d6}|js||d	<n|r||d
<nt	|tjddƒjd|jƒj
|ƒjd|ƒjd|ƒj|dd
ƒ}	|	s£tjdƒtjtjd|ƒƒ‚n|S(sKeyword arguments:
    reserved -- should be a boolean value(True or False), exact value will be
    used to filter on the fixed IP address
    tuuidR}RvtreservedROtnetwork_uuidR`t	allocatedt
network_idtvirtual_interface_idRºR»RNsJThe row was updated in a concurrent transaction, we will fetch another rowtnetN(Rtis_uuid_likeRtInvalidUUIDR
RRrR§RR€RƒR„RÄR|tFixedIpNotFoundForNetworkR`tFixedIpAlreadyInUseRºRâRCRRRæRStFixedIpAssociateFailed(
R=ROR`R§R¤R¨tnetwork_or_noneRxRVtrows_updated((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfixed_ip_associate¾s>		
	

	
c	Cs|r+tj|ƒr+tjd|ƒ‚nttjj|ktjjtƒkƒ}t	|tjddƒj
|ƒjdtƒjddƒjddƒjdtƒjttjjƒƒjƒ}|sÜtjd|ƒ‚ni|dk	d	6}|d
dkr||d
<n|r||d<n|r2||d<n|rE||d<nt	|tjddƒjd|dƒjd
|d
ƒjdtƒjddƒjddƒjdtƒjd
|d
ƒj|ddƒ}|sýtjdƒtjtjd|ƒƒ‚n|S(sËallocate a fixed ip out of a fixed ip network pool.

    This allocates an unallocated fixed ip out of a specified
    network. We sort by updated_at to hand out the oldest address in
    the list.

    R£R}RvR¤R`R¼tleasedR©R¦R§R¨RºROR»RNsJThe row was updated in a concurrent transaction, we will fetch another rowN(RRªRR«R
RRrR§RR€RƒR„R6R|RRR‹RÄtNoMoreFixedIpsRâRCRRRæRSR®(	R=R§R`R¼R¨R¯RxRVR°((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfixed_ip_associate_poolðsH	





cCs^tjƒ}|j|ƒy|j|jƒWn*tjk
rYtjd|dƒ‚nX|S(NRO(	RRrRâRåRRæRçRt
FixedIpExists(R=R“Rx((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfixed_ip_create*s
cCs[y)tjj}|jj|jƒ|ƒWn+tjk
rV}tj	d|j
ƒ‚nXdS(NRO(RRrRûRRRYRæRçRRµR¹(R=R[R]Rí((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfixed_ip_bulk_create6s
cCs(t||ƒjidd6dd6ƒdS(NR`R¨(t_fixed_ip_get_by_addressRâR|(R=RO((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfixed_ip_disassociate@s
cCsftttjj|ktjjtƒkƒtjj|kƒ}t|tj	tj	j
fddƒjtj	jt
ƒkƒjtj	j|kƒjtjtjj
tj	jkfƒjtjtjjtj	jkfƒj|ƒjƒ}g|D]}|d^qî}|sdSt|tj	ƒjtj	j
j|ƒƒjidd6td6tjƒd6ddƒ}|S(	NR}RviR`R²R‹R»Rc(R
R
RtInstanceR¼tNetworkt
multi_hostRR€RrRºRƒR¦RR‹RØR§R£R`RÑRÊRâR|R6RRñ(R=R¼ttimethost_filterRÆtfiptfixed_ip_ids((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt$fixed_ip_disassociate_all_by_timeoutHs,	
	cCsÁt|tjƒjd|ƒ}|r<|jtdƒƒ}n|jƒ}|sctjd|ƒ‚nt	j
j|ƒr½|ddk	r½t
|jddƒ|dƒ}t	j
j||jƒn|S(NRºRqR`R}Ry(R€RRrR„R@RRÄRtFixedIpNotFoundRWR=R‚R|R_televatedRPR{(R=Rºtget_networkRˆRÆtinstance((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfixed_ip_getgs
cCs7t|tjddƒjƒ}|s3tjƒ‚n|S(NR}Ry(R€RRrRÑRtNoFixedIpsDefined(R=RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfixed_ip_get_all|scCst||d|ƒS(Ntcolumns_to_join(R¸(R=RORÉ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfixed_ip_get_by_address…scCs%|dkrg}nyot|tjƒ}x#|D]}|jt|ƒƒ}q1W|jd|ƒjƒ}|sƒtj	d|ƒ‚nWn@t
jk
rÆtdƒ|}t
j|ƒtj|ƒ‚nXtjj|ƒr!|ddk	r!t|jddƒ|dƒ}tjj||jƒn|S(NROs&Invalid fixed IP Address %s in requestR`R}Ry(R|R€RRrR@RR„RÄRRsRæRBR RCRDtFixedIpInvalidRWR=R‚t_instance_get_by_uuidRÃRPR{(R=RORÉRÆtcolumnRìRÅ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR¸Œs*	



cCsLt|tjƒjtjtjjtjjkƒjtjj|kƒj	ƒS(N(
R€RRrRØR?RLRºRƒRORÄ(R=Rv((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt fixed_ip_get_by_floating_address¨s
	cCsútj|ƒs$tjd|ƒ‚nttjjtjj	ktjj
dkƒ}t|tjddƒjd|ƒj
tj|ƒjtdƒƒjtdƒƒjtdƒƒjttjjƒttjjƒƒjƒ}|sötjd|ƒ‚n|S(	NR£iR}RvR`tvirtual_interfaceRqRQ(RRªRR«R
RtVirtualInterfaceRºRrR¨RwR€R„R‹R@RRRRR‰RÑtFixedIpNotFoundForInstance(R=R`tvif_andRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfixed_ip_get_by_instance´s 	cCsGt||ƒ}|sgSt|tjƒjtjjj|ƒƒjƒS(N(t_instance_get_all_uuids_by_hostR€RRrRƒR`RÊRÑ(R=R¼tinstance_uuids((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfixed_ip_get_by_hostÍs
cCs[t|tjddƒjd|ƒjd|ƒjƒ}|sWtjd|d|ƒ‚n|S(NR}RvR§R¼(R€RRrR„RÄRtFixedIpNotFoundForNetworkHost(R=R§R¼RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfixed_ip_get_by_network_hostØscCsLt|tjddƒjd|ƒjtdƒƒjtdƒƒjƒ}|S(NR}RvR¨RqRQ(R€RRrR„R@RRÑ(R=tvif_idRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfixed_ips_by_virtual_interfaceæs
	cCst||ƒj|ƒdS(N(R¸Râ(R=ROR“((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytfixed_ip_updateòscCsttjj||ƒt|tjtjjfddƒjtjtjj	tjj
kfƒjtjj|kƒj
ƒS(NR}Rv(RWR=RPR€RRrRºRØRºR£R`RƒR{R (R=R{((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR øs	cCsgy-tjƒ}|j|ƒ|j|jƒWn3tjk
rbtjt	dƒƒtj
ƒ‚nX|S(soCreate a new virtual interface record in the database.

    :param values: = dict containing column values
    s*VIF creation failed with a database error.(RRÐRâRåRRæRBRCRR"tVirtualInterfaceCreateException(R=R“tvif_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytvirtual_interface_creates
cCst|tjddƒS(NR}Rv(R€RRÐ(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_virtual_interface_queryscCs0t||ƒ}|j|ƒ|j|jƒ|S(N(t virtual_interface_get_by_addressRâRåR(R=ROR“RÝ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytvirtual_interface_updates
cCs"t|ƒjd|ƒjƒ}|S(s_Gets a virtual interface from the table.

    :param vif_id: = id of the virtual interface
    Rº(RßR„RÄ(R=RÙRÝ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytvirtual_interface_get$scCsiy"t|ƒjd|ƒjƒ}Wn@tjk
rdtdƒ|}tj|ƒtj	|ƒ‚nX|S(swGets a virtual interface from the table.

    :param address: = the address of the interface you're looking to get
    ROs/Invalid virtual interface address %s in request(
RßR„RÄRæRBR RCRDRRŠ(R=RORÝRì((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRà1s
cCs"t|ƒjd|ƒjƒ}|S(ssGets a virtual interface from the table.

    :param vif_uuid: the uuid of the interface you're looking to get
    R£(RßR„RÄ(R=tvif_uuidRÝ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytvirtual_interface_get_by_uuidCscCs:t|ƒjd|ƒjtdƒtdƒƒjƒ}|S(suGets all virtual interfaces for instance.

    :param instance_uuid: = uuid of the instance to retrieve vifs for
    R`R‰Rº(RßR„RRRÑ(R=R`tvif_refs((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt!virtual_interface_get_by_instancePs	cCs.t|ƒjd|ƒjd|ƒjƒ}|S(sCGets virtual interface for instance that's associated with network.R`R§(RßR„RÄ(R=R`R§RÝ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt-virtual_interface_get_by_instance_and_network_scCs t|ƒjd|ƒjƒdS(s“Delete virtual interface records that are associated
    with the instance given by instance_id.

    :param instance_uuid: = uuid of instance
    R`N(RßR„R¿(R=R`((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt$virtual_interface_delete_by_instancekscCs t|ƒjd|ƒjƒdS(sJDelete virtual interface records.

    :param id: id of the interface
    RºN(RßR„R¿(R=Rº((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytvirtual_interface_deletexscCst|ƒjƒ}|S(s
Get all vifs.(RßRÑ(R=Rå((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytvirtual_interface_get_all„scCsZg}|rVxG|jƒD]6\}}|ƒ}||d<||d<|j|ƒqWn|S(NR•R¹(R±RH(t
metadata_dictt
meta_classt
metadata_refstktvtmetadata_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_metadata_refss	

cCsÃtjs
dS|jƒ}t|tjddƒjtjtjjƒ|kƒ}tjdkr||j	d|j
ƒjƒ}n"tjdkrš|jƒ}ndS|dkr¿tj
d|ƒ‚ndS(NR}RvRŸR{tglobaliRô(RFt&osapi_compute_unique_server_name_scopetlowerR€RRºRƒRthostnameR„R{R RtInstanceExists(R=Rôt	lowernamet
base_querytinstance_with_same_name((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_validate_unique_server_namešs		cCs[xAd	D]9}||kr||dk	rt||ƒ||<qqWd
}t||ŒdS(sšMake sure that certain things in values (which may have come from
    an objects.instance.Instance object) are in suitable form for the
    database.
    taccess_ip_v4taccess_ip_v6R‰RŠR‹tlaunched_att
terminated_atN(saccess_ip_v4saccess_ip_v6(s
created_ats
deleted_ats
updated_atslaunched_ats
terminated_at(R|tstrR–(R“R•R”((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt(_handle_objects_related_type_conversions±s
cCsIt|tjdddtƒjd|ƒjƒsEtjd|ƒ‚ndS(NR}RvR†R£tinstance_id(R€RRºR7R„RÄRtInstanceNotFound(R=R`((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt!_check_instance_exists_in_projectÁscs©tˆƒ|jƒ}t|jdƒtjƒ|d<t|jdƒtjƒ|d<t|ƒtjƒ}|jdƒs’t	t
jƒƒ|d<ntjƒ|d<|j
ddƒ}|dk	rÔ|dj|ƒn|j
dgƒ}tjƒ|d<|djidd6dd6dd	6ƒ|dj|j
diƒƒ|j|ƒ‡fd
†}d|krutˆ|dƒn||ƒ|_ˆjj|ƒtˆ|dƒ|S(
s„Create a new Instance record in the database.

    context - request context object
    values - dict containing column values.
    tmetadatatsystem_metadataR£t
info_cacheR¢textrat
numa_topologytpci_requestst
vcpu_modelcsvg}tˆƒ}d|krS|j|ƒg|D]}|dkr2|^q2}n|rr|jtˆ|ƒƒn|S(NRO(t_security_group_ensure_defaultRHtextendt_security_group_get_by_names(R¢Rt
default_grouptx(R=(sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_get_sec_group_modelsís
(	RõN(tsecurity_group_ensure_defaulttcopyRñRhRtInstanceMetadatatInstanceSystemMetadataRRºRÿR£tuuid4tInstanceInfoCachetpopR|Rât
InstanceExtraRúR¢RR›tec2_instance_create(R=R“tinstance_refRR¢R((R=sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_createÈs:





cCs¯t|tjtjtjjƒtjtjjƒtjtjjƒfƒj	d|ƒ}|rx|j	d|ƒj
ƒ}n|j
ƒ}|dp‘d|dpžd|dp«dfS(NR{Rœiii(R€RRºRR RºR0R!R"R„RÄ(R=R{RœRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR›s	cCstj|ƒr!t||ƒ}ntj|ƒ‚t|tjƒjd|ƒ}|dk	rr|j
tj|ƒ}n|jƒ}|dkr™tjƒ‚nt|tj
ƒjd|ƒjƒt|tjƒjd|ƒjƒt|tjƒjd|ƒjƒt|tjƒjd|ƒjƒt|tjƒjd|ƒjƒt|tjƒjd|ƒjƒt|tjƒjd|ƒjƒt|tjƒjd|ƒjƒt|tjƒjd|ƒjƒ|jjtjƒjd|ƒjƒ|jjtjƒjd|ƒjƒ|S(NR£iR`Rtresource_id(RRªRÌRR«R€RRºR„R|R¶R¿tConstraintNotMett SecurityGroupInstanceAssociationRRt
InstanceFaultRRtInstanceGroupMembertBlockDeviceMappingt	MigrationRRˆtTagR|tConsoleAuthToken(R=R`RªRRˆR ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_destroysB	










cCst||d|ƒS(NRÉ(RÌ(R=R£RÉ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR_GscCsCt|d|ƒjd|ƒjƒ}|s?tjd|ƒ‚n|S(NRÉR£R(t_build_instance_getR„RÄRR(R=R£RÉRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRÌNs
cCsŠyGt|d|ƒjd|ƒjƒ}|sBtjd|ƒ‚n|SWn<tjk
r…tjt	dƒ|ƒtj
d|ƒ‚nXdS(NRÉRºRs!Invalid instance id %s in request(R&R„RÄRRRæRBRCRDR#RE(R=RRÉRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_getYscCsìt|tjdtƒjtdƒƒjtdƒƒ}|dkrQddg}nxY|D]Q}|dkrpqXnd|kr”|jt|ƒƒ}qX|jt|ƒƒ}qXWx8ddgD]*}||krº|jt	|ƒƒ}qºqºW|S(	NR†ssecurity_groups.rulesRRRR¢sextra.(s
info_cachessecurity_groups(
R€RRºR7R@RRR|RR(R=RÉRˆRÍtcol((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR&ks
c
Cs˜g|D]}|d^q}|dkr8ddg}ntjtƒ}d|kr…x/t||ƒD]}||dj|ƒqcWntjtƒ}d|krÒx/t||ƒD]}||dj|ƒq°Wntjtƒ}d|krx/t||ƒD]}||dj|ƒqýWng}	xl|D]d}t|ƒ}||d|d<||d|d<d|krƒ||d|d<n|	j|ƒq,W|	S(s”Selectively fill instances with manually-joined metadata. Note that
    instance will be converted to a dict.

    :param context: security context
    :param instances: list of instances to fill
    :param manual_joins: list of tables to manually join (can be any
                         combination of 'metadata' and 'system_metadata' or
                         None to take the default of both)
    R£RRR`tpci_devicesN(	R|RdRetlistt_instance_metadata_get_multiRHt#_instance_system_metadata_get_multit_instance_pcidevs_get_multiR5(
R=R—tmanual_joinstinsttuuidstmetaRmtsys_metatpcidevstfilled_instances((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_instances_fill_metadata€s0

cCsYg}tj|ƒ}x7dD]/}||kr|j|ƒ|j|ƒqqW||fS(sGSeparate manually joined columns from columns_to_join

    If columns_to_join contains 'metadata', 'system_metadata', or
    'pci_devices' those columns are removed from columns_to_join and added
    to a manual_joins list to be used with the _instances_fill_metadata method.

    The columns_to_join formal parameter is copied and not modified, the return
    tuple has the modified columns_to_join list to be used with joinedload in
    a model query.

    :param:columns_to_join: List of columns to join in a model query.
    :return: tuple of (manual_joins, columns_to_join)
    RRR)(smetadatassystem_metadataspci_devices(RtremoveRH(RÉR.tcolumns_to_join_newRÍ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_manual_join_columnsªs

cCsÏ|dkr'ddg}ddg}nt|ƒ\}}t|tjƒ}x#|D]}|jt|ƒƒ}qRW|js³|jr›|j	d|jƒ}q³|j	d|j
ƒ}n|jƒ}t|||ƒS(NRR¢RRR{Rœ(
R|R8R€RRºR@Rtis_adminR{R„RœRÑR5(R=RÉR7R.RˆRÍR—((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_get_allÁs
		c
Cs1t||d|d|d|d|gd|gƒS(s…Return instances matching all filters sorted by the primary key.

    See instance_get_all_by_filters_sort for more information.
    RRøRÉt	sort_keyst	sort_dirs(t instance_get_all_by_filters_sort(R=Rtsort_keytsort_dirRRøRÉ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_get_all_by_filters×s

	c
Csá|dkrgSt||ddƒ\}}|dkrRddg}ddg}nt|ƒ\}}|jjtjƒ}	xG|D]?}
d|
krª|	jt|
ƒƒ}	q€|	jt	|
ƒƒ}	q€W|j
ƒ}d	|krtj|d	ƒ}|	j
tjj|kƒ}	nd
|kr|jd
ƒ}|r¥|jdtƒrttjjtjjktjjtjkƒ}
|	j
|
ƒ}	q|	j
tjjtjjkƒ}	q|	jd
dƒ}	|jdtƒsttjjtjktjjtƒkƒ}|	j
|ƒ}	qnd|krP|jdƒr,d
nd}|	j
tjj|kƒ}	nd|krý|jdƒ}|jdƒ}|	jtjjƒ}	|	j
tjj|kƒ}	xP|D]E}ttjƒ}|	j|tjjƒ}	|	j
|j|kƒ}	q±Wnd|kr]|jdƒ}ttjƒ}|	j|tjjƒ}	|	j
|jj |ƒƒ}	nd|krA|jdƒ}|jdƒ}|	jjtjj!ƒ}|jtjjƒ}|j
tjj|kƒ}xM|D]E}ttjƒ}|j|tjjƒ}|j
|j|kƒ}qÖW|	j
tjj"j |ƒƒ}	nd|kr|jdƒ}|	j
tjjj#tjjj |ƒƒƒ}	n|j$s¿|j%r¯|j%|d<q¿|j&|d<nddddddddddg
}t'|	||ƒ}	|	dkrgSt(|	|ƒ}	t)||	|ƒ}	|dk	r}yt*|j+ddƒ|ƒ}Wq}t,j-k
ryt,j.d|ƒ‚q}Xny+t/j0|	tj||d|d|ƒ}	Wn t1j2k
rÊt,j2ƒ‚nXt3||	j4ƒ|ƒS(sÎReturn instances that match all filters sorted by the given keys.
    Deleted instances will be returned by default, unless there's a filter that
    says otherwise.

    Depending on the name of a filter, matching for that filter is
    performed using either exact matching or as regular expression
    matching. Exact matching is applied for the following filters::

    |   ['project_id', 'user_id', 'image_ref',
    |    'vm_state', 'instance_type_id', 'uuid',
    |    'metadata', 'host', 'system_metadata']


    A third type of filter (also using exact matching), filters
    based on instance metadata tags when supplied under a special
    key named 'filter'::

    |   filters = {
    |       'filter': [
    |           {'name': 'tag-key', 'value': '<metakey>'},
    |           {'name': 'tag-value', 'value': '<metaval>'},
    |           {'name': 'tag:<metakey>', 'value': '<metaval>'}
    |       ]
    |   }

    Special keys are used to tweek the query further::

    |   'changes-since' - only return instances updated after
    |   'deleted' - only return (or exclude) deleted instances
    |   'soft_deleted' - modify behavior of 'deleted' to either
    |                    include or exclude instances whose
    |                    vm_state is SOFT_DELETED.

    A fourth type of filter (also using exact matching), filters
    based on instance tags (not metadata tags). There are two types
    of these tags:

    `tags` -- One or more strings that will be used to filter results
            in an AND expression: T1 AND T2

    `tags-any` -- One or more strings that will be used to filter results in
            an OR expression: T1 OR T2

    `not-tags` -- One or more strings that will be used to filter results in
            an NOT AND expression: NOT (T1 AND T2)

    `not-tags-any` -- One or more strings that will be used to filter results
            in an NOT OR expression: NOT (T1 OR T2)

    Tags should be represented as list::

    |    filters = {
    |        'tags': [some-tag, some-another-tag],
    |        'tags-any: [some-any-tag, some-another-any-tag],
    |        'not-tags: [some-not-tag, some-another-not-tag],
    |        'not-tags-any: [some-not-any-tag, some-another-not-any-tag]
    |    }

    itdefault_dirRRR¢RRsextra.s
changes-sinceRwtsoft_deletedtcleanedittagsstags-anysnot-tagssnot-tags-anyR{Rœt	image_reftvm_statetinstance_type_idR£R¼t
task_stateR}RyRøR<N(5tprocess_sort_paramsR|R8RRˆRRºR@RRRRtnormalize_timeRƒR‹RR7R
RwRºRFRtSOFT_DELETEDR„R6RRCRØRDR#ttagRRÊRR£tanyR9R{Rœt_exact_instance_filtert_regex_instance_filtert_tag_instance_filterRÌRÃRRRRtpaginate_queryRætInvalidSortKeyR5RÑ(R=RRRøRÉR;R<R7R.tquery_prefixRÍt
changes_sinceRwR|tnot_soft_deletedRCRDt	first_tagRLt	tag_aliastsubqtexact_match_filter_names((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR=èsÆB
		
	
"								
cCsØ|jdƒdkr|Stj}tj}|j}d}d„}xF|dD]:}t|tƒsiqNn|jdƒ}	|	dkrŠqNn|	d}
||jdƒƒ}|	jdƒr%|
dkrét	dƒ|
}t
jd	|ƒ‚nt||
ƒj
|ƒ}
|dkr|
nt||
ƒ}qN|	jd
ƒrNt|||fƒjd|
ƒj|jj
|ƒƒ}
|j|jj
|
ƒƒ}qNqNW|dk	rÔt|||fƒj|ƒ}
|j|jj
|
ƒƒ}n|S(
s~Applies tag filtering to an Instance query.

    Returns the updated query.  This method alters filters to remove
    keys that are tags.  This filters on resources by tags - this
    method assumes that the caller will take care of access control

    :param context: request context object
    :param query: query to apply filters to
    :param filters: dictionary of filters
    RƒcSsFt|tƒr|jƒ}nt|tttfƒsB|f}n|S(N(RR5R“ttupleR*tset(tval((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_to_listÏs
RôiR¹stag-R•sInvalid field name: %sterrstag:N(skeysvalue(RhR|RRºRR`RR5t
startswithR RtInvalidParameterValueR³RÊR
R€R„RƒR¹R£(R=RˆRR…tmodel_metadatat
model_uuidtor_queryR]tfilter_blocktfilter_namettag_namettag_valRìRX((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRP»s>				
$	"	cCsK|jdƒdjdƒd}idd6dd6dd6}|j|d	ƒS(
Nt:it+t~t
postgresqltREGEXPtmysqltsqlitetLIKE(tsplitRh(R;t	db_stringt
regexp_op_map((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_get_regexp_op_for_connectionös 
cCsótj}ttjjƒ}xÑ|D]É}yt||ƒ}Wntk
rQq"nXdt|ƒj	krmq"n||}t
|tjƒs˜t
|ƒ}n|dkrÍ|j|j|ƒd|dƒƒ}q"|j|j|ƒ|ƒƒ}q"W|S(sÈApplies regular expression filtering to an Instance query.

    Returns the updated query.

    :param query: query to apply filters to
    :param filters: dictionary of filters with regex values
    tpropertyRou%(RRºRsRFRAR&R³R<ttypeRURRŽRRÿRƒtop(RˆRR…tdb_regexp_opRetcolumn_attrt
filter_val((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRO	s$		


cCsÎi}tj}xo|D]g}||kr.qn|j|ƒ}|dkr$t||ƒ}t|tƒrÎx·|D]Y}xP|jƒD]B\}	}
|j|jd|	ƒƒ}|j|jd|
ƒƒ}qWqnWq}x¬|jƒD]B\}	}
|j|jd|	ƒƒ}|j|jd|
ƒƒ}qÛWqt|tt	t
tfƒrs|sIdSt||ƒ}|j|j
|ƒƒ}q|||<qW|rÊ|jg|jƒD]$\}	}
ttj|	ƒ|
k^qšŒ}n|S(süApplies exact match filtering to an Instance query.

    Returns the updated query.  Modifies filters argument to remove
    filters consumed.

    :param query: query to apply filters to
    :param filters: dictionary of filters; values that are lists,
                    tuples, sets, or frozensets cause an 'IN' test to
                    be performed, while exact matching ('==' operator)
                    is used for other values
    :param legal_keys: list of keys to apply exact filtering to
    RRR•R¹(smetadatassystem_metadataN(RRºRR³RR*R±RƒRMRZR[t	frozensetR|RÊ(RˆRt
legal_keystfilter_dictR…R•R¹RxtitemRîRï((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRN	s4	

&"	:R‰RºRcCsb|r%t|ƒdkr%|d}n|}|r@t|ƒ}ng}|r g}xd|D]@}|dkrŒtdƒ}tjd|ƒ‚n|j|ƒqYWng|D]}	|^q§}x)t|ƒt|ƒkrä|j|ƒq¼Wt|ƒt|ƒkrtdƒ}tjd|ƒ‚nx7|D]/}
|
|kr%|j|
ƒ|j|ƒq%q%W||fS(sProcess the sort parameters to include default keys.

    Creates a list of sort keys and a list of sort directions. Adds the default
    keys to the end of the list if they are not already included.

    When adding the default keys to the sort keys list, the associated
    direction is:
    1) The first element in the 'sort_dirs' list (if specified), else
    2) 'default_dir' value (Note that 'asc' is the default value since this is
    the default in sqlalchemy.utils.paginate_query)

    :param sort_keys: List of sort keys to include in the processed list
    :param sort_dirs: List of sort directions to include in the processed list
    :param default_keys: List of sort keys that need to be included in the
                         processed list, they are added at the end of the list
                         if not already specified.
    :param default_dir: Sort direction associated with each of the default
                        keys that are not supplied, used when they are added
                        to the processed list
    :returns: list of sort keys, list of sort directions
    :raise exception.InvalidInput: If more sort directions than sort keys
                                   are specified or if an invalid sort
                                   direction is specified
    iRRs/Unknown sort direction, must be 'desc' or 'asc'treasons)Sort direction size exceeds sort key size(sascsdesc(tlenR*R RtInvalidInputRH(R;R<tdefault_keysRAtdefault_dir_valuetresult_keystresult_dirsR?Rìt	_sort_keyR•((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRIV	s0



c
Cs;|jjtjƒ}|dkr<ddg}ddg}nt|ƒ\}}xG|D]?}	d|	kr|jt|	ƒƒ}qU|jt|	ƒƒ}qUW|j	t
tjjtƒktjj|kƒƒ}|rï|j	tjj
|kƒ}n|r
|jd|ƒ}n|r%|jd|ƒ}nt||jƒ|ƒS(	s:Return instances and joins that were active during window.RR¢RRsextra.R{R¼N(RRˆRRºR|R8R@RRRƒR
RþRRýR„R5RÑ(
R=tbegintendR{R¼RÉRˆR7R.RÍ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt$instance_get_active_by_window_joined›	s$
cCs|dkrddg}nt|tjd|ƒ}xG|D]?}d|krd|jt|ƒƒ}q:|jt|ƒƒ}q:W|S(NRR¢R†sextra.(R|R€RRºR@RR(R=R†tjoinsRˆRÍ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_instance_get_all_query¼	s		
cCs+t|t|ƒjd|ƒjƒd|ƒS(NR¼R.(R5RŠR„RÑ(R=R¼RÉ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_get_all_by_hostË	scCs\g}xOt|tjtjjfddƒjd|ƒjƒD]}|j|dƒq=W|S(ssReturn a list of the instance uuids on a given host.

    Returns a list of UUIDs, not Instance model objects.
    R}RvR¼i(R€RRºR£R„RÑRH(R=R¼R0RZ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRÔÒ	scCsŸ|dkrg}nMddg}g|D]}||kr(|^q(}tt|ƒt|ƒƒ}t|t|d|ƒjd|ƒjd|ƒjƒd|ƒS(NRRR‰R¼tnodeR.(R|R*R[R5RŠR„RÑ(R=R¼RŒRÉR.t
candidatesR((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt!instance_get_all_by_host_and_nodeà	s	%cCs:t|t|ƒjd|ƒjtjj|kƒjƒƒS(NR¼(R5RŠR„RƒRRºRGRÑ(R=R¼ttype_id((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt%instance_get_all_by_host_and_not_typeð	scCsY|s
gSt|t|ƒjtjjƒjtjjj	tj
jj|ƒƒƒj
ƒƒS(N(R5RŠRØRRºR¢Rƒt
SecurityGrouptrulesRMtSecurityGroupIngressRuletgroup_idRÊRÑ(R=t	group_ids((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt+instance_get_all_by_grantee_security_groups÷	scCswtj|ƒs$tjd|ƒ‚nt|tjtjjfƒjtjj	ƒj
d|ƒ}g|D]}|j^qdS(NR£R`(RRªRR«R€RR?RORØRR„(R=R`RQtfloating_ip((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt!instance_floating_address_get_all
s	cCsetjƒtjd|ƒ}t|t|tjƒjtjj	|kƒj
dtjƒj
ƒdgƒS(NtsecondsRHR.(RRñtdatetimet	timedeltaR5R€RRºRƒR‹R„Rt	REBOOTINGRÑ(R=t
reboot_window((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt"instance_get_all_hung_in_rebooting
s	cCs%d„}tjdddtd|ƒS(s^Wrap with oslo_db_api.wrap_db_retry, and also retry on
    UnknownInstanceUpdateConflict.
    cSst|tjfƒS(N(RRtUnknownInstanceUpdateConflict(texc((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt<lambda>'
sR3iRïtexception_checker(toslo_db_apit
wrap_db_retryR7(R¢((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_retry_instance_update"
s	cCst||||ƒS(N(t_instance_update(R=R`R“texpected((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_update,
scCs=t||d|ƒ}tj|ƒt||||d|ƒfS(s_Set the given properties on an instance and update it. Return
    a shallow copy of the original instance reference, as well as the
    updated one.

    :param context: = request context object
    :param instance_uuid: = instance uuid
    :param values: = dict containing column values

    If "expected_task_state" exists in values, the update can only happen
    when the task state before update matches expected_task_state. Otherwise
    a UnexpectedTaskStateError is thrown.

    :returns: a tuple of the form (old_instance_ref, new_instance_ref)

    Raises NotFound if instance does not exist.
    RÉtoriginal(RÌRR¦(R=R`R“RÉR§R((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt instance_update_and_get_original3
s	cCsBt|ƒ}g}xZ||D]N}|d}||krO|j|ƒ|d<q||kr|j|ƒqqW|dkr°xS|D]'}|jj|ƒ||j|ƒq‚Wn!x|D]}|j|jƒq·Wxj|jƒD]\\}}	|ƒ}
|
ji|d6|	d6|dd6ƒ|jj	|
ƒ||j|
ƒqÞWdS(NR•R¹RR£R`(
R5RRHRR|R6R¿R±RâR›(R=RÅt
metadata_typeR…Rt	to_deletetkeyvalueR•t	condemnedR¹tnewitem((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt"_instance_metadata_update_in_placeQ
s(


	cCs»tj|ƒs!tj|ƒ‚n|dkr6i}nd„tj|ƒDƒ}xhdD]`}d|}||krV|j|dƒ}|dkr dg||<q¶tj	|ƒ||<qVqVW|jddƒ}|jddƒ}	t
|ƒd|krt||dƒntj
d||}
y+t|tj
d	tƒj|
d|ƒ}Wntjk
rf|dkryt||ƒ}ni}i}
xJtj|ƒD]9\}}||}||kr•|||<||
|<q•q•Wi|d
6|d6|
d6}t|
ƒd
krtj|‚nd|
krN|
d}|tjkrBtj}qWtj}n	tj}||‚nX|dk	rt||dtj|ƒn|	dk	r·t||dtj|	ƒn|S(NcSs=i|]3\}}|dkr'dgntj|ƒ|“qS(N(R|Rtto_list(R-RîRï((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pys
<dictcomp>x
s	RHRFsexpected_%sRRRõR£R†R`R§tactuali(s
task_statesvm_state(RRªRR«R|RŽt	iteritemsRRR±RRúRRºR€R7tupdate_on_matchRt
NoRowsMatchedRÌRRŸRtDELETINGt UnexpectedDeletingTaskStateErrortUnexpectedTaskStateErrortInstanceUpdateConflictR°RR(R=R`R“R§R©R¸texpected_fieldR¹RRtcompareRtconflicts_expectedtconflicts_actualtexpected_valuesR²t	exc_propstconflict_task_stateR ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR¦p
sr	


	



		
	
cCs;tjƒ}|ji|d6|d6ƒ|j|jƒdS(s;Associate the given security group with the given instance.R`tsecurity_group_idN(RRRâRåR(R=R`RÁt
sec_group_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_add_security_groupä
scCs2t|tjƒjd|ƒjd|ƒjƒdS(s>Disassociate the given security group from the given instance.R`RÁN(R€RRR„R¿(R=R`RÁ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_remove_security_groupí
scCs"t|tjƒjd|ƒjƒS(soGets an instance info cache from the table.

    :param instance_uuid: = uuid of the info cache's instance
    R`(R€RRR„RÄ(R=R`((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_info_cache_getú
scCsât|ƒt|tjƒjd|ƒjƒ}t}|rY|drYtjd|ƒ‚n(|s||d<tj|}t	}nyFt
jjj
|ƒ+|r³|j|jƒn
|j|ƒWdQXWntjk
rÝnX|S(s¯Update an instance info cache record in the table.

    :param instance_uuid: = uuid of info cache's instance
    :param values: = dict containing column values to update
    R`RwN(R–R€RRR„RÄR6RtInstanceInfoCacheNotFoundR7R?Rpt	savepointRkRåRRâRæRç(R=R`R“Rtneeds_create((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_info_cache_updates&	
	
	cCs&t|tjƒjd|ƒjƒdS(s~Deletes an existing instance_info_cache record

    :param instance_uuid: = uuid of the instance tied to the cache record
    R`N(R€RRR„R¿(R=R`((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_info_cache_delete.scCs-tjƒ}|j|ƒ|j|jƒ|S(N(RRRâRåR(R=R“tinst_extra_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_instance_extra_create=s
cCspt|tjƒjd|ƒj|ƒ}|sltjd|ƒtj|ƒ}||d<t||ƒd}n|S(NR`sCreated instance_extra for %si(	R€RRR„RâRCRRRRÌ(R=R`R“R°t
create_values((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_extra_update_by_uuidDs		

	cCsxt|tjƒjd|ƒ}|dkrBdddddg}nx#|D]}|jt|ƒƒ}qIW|jƒ}|S(NR`RR	tflavorR
tmigration_context(R€RRR„R|R@RRÄ(R=R`RèRˆRÍtinstance_extra((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt#instance_extra_get_by_instance_uuidRs	
cCsby1tjƒ}|j|ƒ|j|jƒ|SWn*tjk
r]tjd|dƒ‚nXdS(Ntkey_nameRô(	RtKeyPairRâRåRRæRçRt
KeyPairExists(R=R“tkey_pair_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytkey_pair_createcs
cCsUt|tjƒjd|ƒjd|ƒjƒ}|sQtjd|d|ƒ‚ndS(NRœRô(R€RRÔR„R¿RtKeypairNotFound(R=RœRôRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytkey_pair_destroyos
cCsUt|tjƒjd|ƒjd|ƒjƒ}|sQtjd|d|ƒ‚n|S(NRœRô(R€RRÔR„RÄRRØ(R=RœRôRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytkey_pair_getzscCs¸d}|dk	rft|tjddƒjd|ƒjd|ƒjƒ}|sftjd|ƒ‚qfnt|tjddƒjd|ƒ}tj	|tj|dgd|ƒ}|j
ƒS(NR}RvRôRœRø(R|R€RRÔR„RÄRRRRQRÑ(R=RœRRøt
marker_rowRˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytkey_pair_get_all_by_userˆs	cCs(t|tjddƒjd|ƒjƒS(NR}RvRœ(R€RRÔR„R (R=Rœ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytkey_pair_count_by_user›scsyd‡fd†}|s'||ƒ}n|s4|ru|d|ƒ}|sXtjƒ‚n||d<ˆjj|ƒn|S(s3Associate a project with a network.

    called by project_get_networks under certain conditions
    and network manager add_network_to_project()

    only associate if the project doesn't already have a network
    or if force is True

    force solves race condition where a fresh project has multiple instance
    builds simultaneously picked up by multiple network hosts which attempt
    to associate the project with multiple networks
    force should only be used as a direct consequence of user request
    all automated requests should not use force
    csTi|d6}|dk	r&||d<ntˆtjddƒj|jdƒjƒS(NR{RºR}RvRâ(R|R€RR»R„R’RÄ(tproject_filterRºt
filter_kwargs(R=(sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt
network_queryµs

	R{N(R|RtNoMoreNetworksRR›(R=R{R§tforceRàtnetwork_ref((R=sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytnetwork_associate¥s	

cCs"t|tjddƒjd|ƒS(NR}RvR§(R€RRrR„(R=R§((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_network_ips_queryÓscCst||ƒjdtƒjƒS(NR¤(RåR„R7R (R=R§((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytnetwork_count_reserved_ipsØscCsxtjƒ}ttjƒƒ|d<|j|ƒy|j|jƒ|SWn*tj	k
rst
jd|dƒ‚nXdS(NR£tvlan(RR»RÿR£RRâRåRRæRçRt
DuplicateVlan(R=R“Rã((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytnetwork_create_safeßs
cCs¥t|tjddƒjd|ƒjdtƒjƒ}|dkrWtjd|ƒ‚nt|d|ƒ}t|tjddƒjd|ƒj	ƒ|j
j|ƒdS(NR}RvR§R¦i(R€RRrR„R7R RtNetworkInUset_network_getR¿RR|(R=R§RÆRã((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytnetwork_delete_safeìs
cCs@i}|rd|d<n|r,d|d<nt|||ƒdS(NR{R¼(R|tnetwork_update(R=R§tdisassociate_hosttdisassociate_projectt
net_update((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytnetwork_disassociateýs

RzcCsIt|tjd|ƒjd|ƒjƒ}|sEtjd|ƒ‚n|S(NR†RºR§(R€RR»R„RÄRtNetworkNotFound(R=R§R†RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRës
cCst||d|ƒS(NR†(Rë(R=R§R†((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytnetwork_getscCs=t|tjddd|ƒjƒ}|s9tjƒ‚n|S(NR}RvR†(R€RR»RÑRtNoNetworksFound(R=R†RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytnetwork_get_alls
cCsÁt|tjddd|ƒjtjjj|ƒƒjƒ}|sQtjƒ‚nxi|D]a}xX|D]}|d|krePqeqeW|r§tj	d|d|j
ƒ‚ntjd|ƒ‚qXW|S(NR}RvR†R£R¥R{R§(R€RR»RƒR£RÊRÑRRôtNetworkNotFoundForProjectR{Rò(R=t
network_uuidsR†RÆR¥Rq((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytnetwork_get_all_by_uuids%s	

	cCsüttjjtjjktjjdkƒ}ttjjtjj	ktjjdkƒ}|j
jtj
tjjƒjdƒtjj	ƒjtjj	ƒjƒ}t|jjtjjk|jj	tjj	kƒ}|j
jtjjtjj	tjjtjjtjjtjjtjjtjjtjjtjj|jjƒjtjjdkƒjtjj|kƒjtj|fƒjtj|fƒj||fƒjtjj	tƒkƒjtjjtƒkƒ}|rø|jtjj|kƒ}n|S(NiRº(R
RRÐRºRrR¨RwRºR£R`RRˆRRÈR/RÌtsubqueryRþROR§RõR‹R‰R¦R²RƒRØR‹RR¼(R=R§R¼RÒtinst_andRXtsubq_andRˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_get_associated_fixed_ips_query?sB												cCsìt|||ƒ}|jƒ}g}xÁ|D]¹}i}|d|d<|d|d<|d|d<|d|d<|d	|d
<|d|d<|d
|d<|d|d<|d|d<|d|d<|ddk	|d<|j|ƒq+W|S(NiROiR`iR§iRÙitvif_addressitinstance_hostnameitinstance_updateditinstance_creatediR¦i	R²i
t
default_route(RüRÑR|RH(R=R§R¼RˆRÆtdatatdatumRC((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt network_get_associated_fixed_ipsis$
cCs"t|||ƒ}|jƒdkS(Ni(RüR (R=R§R¼Rˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytnetwork_in_use_on_hostƒscCst|tjddƒS(NR}Rv(R€RR»(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_network_get_query‰scCs=t|ƒjd|ƒjƒ}|s9tjd|ƒ‚n|S(NR£(RR„RÄRtNetworkNotFoundForUUID(R=R£RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytnetwork_get_by_uuidscCs[t|ƒjttjj|ktjj|kƒƒjƒ}|sWtj	d|ƒ‚n|S(Ntcidr(
RRƒR
RR»R	tcidr_v6RÄRtNetworkNotFoundForCidr(R=R	RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytnetwork_get_by_cidr—scCsÓttjj|kttjjtƒktjj|kƒƒ}t|tjtjj	fƒj
tjtjjtjjkfƒj|ƒ}ttj
j|ktj
jj|jƒƒƒ}t|ƒj|ƒjƒS(N(R
RRrR¼R
R`RRºR€R§R‹R£RƒR»RºRÊRùRRÑ(R=R¼tfixed_host_filtertfixed_ip_queryR¾((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytnetwork_get_all_by_host¤s		cCs¯t|ƒjd|ƒjƒ}|s9tjd|ƒ‚n|jrFdSt|ƒjd|ƒjddƒji|d6ƒ}|s«tj	dƒt
jtjd|ƒƒ‚ndS(NRºR§R¼sJThe row was updated in a concurrent transaction, we will fetch another row(
RR„RÄRRòR¼R|RâRCRRRæRStNetworkSetHostFailed(R=R§thost_idRãR°((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytnetwork_set_host·s		
cCsat||ƒ}|j|ƒy|j|jƒWn*tjk
r\tjd|dƒ‚nX|S(NRç(RëRâRåRRæRçRRè(R=R§R“Rã((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRíÑs
cCs¦|rtjntj}t||ƒjd|ƒjd|ƒ}|rZ|jd|ƒ}n|jƒ}|s¢|rtjd|d|ƒ‚q¢tjd|ƒ‚n|S(NR{tresourceRœ(	RtProjectUserQuotatQuotaR€R„RÄRtProjectUserQuotaNotFoundtProjectQuotaNotFound(R=R{RRœR…RˆRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt	quota_getàs	cCs~t|tjtjjtjjfƒjd|ƒjd|ƒjƒ}i|d6|d6}x|D]}|j||j<q`W|S(NR{Rœ(R€RRRt
hard_limitR„RÑ(R=R{Rœtuser_quotasRÆt
user_quota((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt!quota_get_all_by_project_and_userõs	
cCs\t|tjddƒjd|ƒjƒ}i|d6}x|D]}|j||j<q>W|S(NR}RvR{(R€RRR„RÑRR(R=R{RyRÆRm((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytquota_get_all_by_project
s

cCs(t|tjƒjd|ƒjƒ}|S(NR{(R€RRR„RÑ(R=R{RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt
quota_get_all
scCstS(N(tPER_PROJECT_QUOTAS(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytquota_get_per_project_resources
scCs¤|o|tk}|r$tjƒn	tjƒ}|rB||_n||_||_||_y|j|j	ƒWn,t
jk
rŸtj
d|d|ƒ‚nX|S(NR{R(RRRRRœR{RRRåRRæRçRtQuotaExists(R=R{RRRœtper_usert	quota_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytquota_create"
s			c	CsÂ|o|tk}|r!tjntj}t||ƒjd|ƒjd|ƒ}|rl|jd|ƒ}n|ji|d6ƒ}|s¾|r©tjd|d|ƒ‚q¾tj	d|ƒ‚ndS(NR{RRœR(
RRRRR€R„RâRRR(	R=R{RRRœR"R…RˆRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytquota_update2
s	cCsUt|tjddƒjd|ƒjd|ƒjƒ}|sQtjd|ƒ‚n|S(NR}Rvt
class_nameR(R€Rt
QuotaClassR„RÄRtQuotaClassNotFound(R=R&RRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytquota_class_getH
scCs\t|tjddƒjdtƒjƒ}itd6}x|D]}|j||j<q>W|S(NR}RvR&(R€RR'R„t_DEFAULT_QUOTA_NAMERÑRR(R=RyRÆRm((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytquota_class_get_defaultV
s

cCs\t|tjddƒjd|ƒjƒ}i|d6}x|D]}|j||j<q>W|S(NR}RvR&(R€RR'R„RÑRR(R=R&RyRÆRm((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytquota_class_get_all_by_namec
s

cCs;tjƒ}||_||_||_|j|jƒ|S(N(RR'R&RRRåR(R=R&RRtquota_class_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytquota_class_createq
s			cCs_t|tjddƒjd|ƒjd|ƒji|d6ƒ}|s[tjd|ƒ‚ndS(NR}RvR&RR(R€RR'R„RâRR((R=R&RRRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytquota_class_update{
s	cCs£t|tjddƒjd|ƒjd|ƒ}|rx|tkr]|jd|ƒjƒ}q„|jddƒjƒ}n|jƒ}|sŸtjd|ƒ‚n|S(NR}RvR{RRœ(	R€Rt
QuotaUsageR„RRÄR|RtQuotaUsageNotFound(R=R{RRœRˆRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytquota_usage_get‰
s	cCst|tjddƒjd|ƒ}i|d6}|rw|jttjj|ktjjtƒkƒƒ}||d<n|jƒ}xv|D]n}|j	|krÖ||j	dc|j
7<||j	dc|j7<qŠtd|j
d|jƒ||j	<qŠW|S(NR}RvR{Rœtin_useR¤(
R€RR0R„RƒR
RœRRÑRR3R¤R5(R=R{RœRˆRÆRyRm((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_quota_usage_get_all
s	


cCst||d|ƒS(NRœ(R4(R=R{Rœ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt'quota_usage_get_all_by_project_and_user²
scCs
t||ƒS(N(R4(R=R{((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytquota_usage_get_all_by_project¸
scCsbtjƒ}||_||_||_||_||_||_tj	ƒ|_
|j|ƒ|S(N(RR0R{RœRR3R¤t
until_refreshRRñR‹Rå(R{RœRR3R¤R7Rtquota_usage_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_quota_usage_create¾
s						
cKsÂi}x4dddgD]#}||kr||||<qqWt|tjddƒjd|ƒjd|ƒjttjj|ktjjtƒkƒƒj|ƒ}|s¾t	j
d|ƒ‚ndS(NR3R¤R7R}RvR{R(R€RR0R„RƒR
RœRRâRR1(R=R{RœRRZtupdatesR•RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytquota_usage_updateÏ
s		c	Cs`tjƒ}||_|d|_||_||_||_||_||_|j	|ƒ|S(NRº(
RtReservationR£tusage_idR{RœRtdeltatexpireRå(	R£tusageR{RœRR>R?Rtreservation_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_reservation_createå
s	
					
c
Cs t|tjddƒjd|ƒjtjjjƒƒjdƒjƒ}t	ƒ}t	ƒ}x¹|D]±}|j
|jt	ddddddƒƒ||jdc|j7<||jdc|j
7<||jdc|j|j
7<|jdks|j|kra|||j<qaqaW||fS(	NR}RvR{RâR3iR¤ttotal(R€RR0R„RRºRR’RÑR5t
setdefaultRR3R¤RœR|(R=R{RœRytproj_resulttuser_resultRm((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_get_project_user_quota_usagesû
s 			
!c	Cshd}||kr^|}|tkr-d}nt|||dd|pHd|ƒ}|||<n|dk	S(s!Creates a QuotaUsage record and adds to user_usages if not present.

    :param user_usages:   dict of resource keys to QuotaUsage records. This is
                          updated if resource is not in user_usages yet or
                          until_refresh is not None.
    :param resource:      The resource being checked for quota usage.
    :param until_refresh: Count of reservations until usage is refreshed,
                          int or None
    :param project_id:    The project being checked for quota usage.
    :param user_id:       The user being checked for quota usage.
    :param session:       DB session holding a transaction lock.
    :return:              True if a new QuotaUsage record was created and added
                          to user_usages, False otherwise.
    iN(R|RR9(tuser_usagesRR7R{RœRt	new_usagetuser_id_to_use((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_create_quota_usage_if_missings	
cCsœt}|jdkr4tjdt|ƒƒt}nd|jdk	rm|jd8_|jdkr˜t}q˜n+|r˜tj	ƒ|j
j|kr˜t}n|S(sDetermines if a quota usage refresh is needed.

    :param quota_usage:   A QuotaUsage object for a given resource.
    :param max_age:       Number of seconds between subsequent usage refreshes.
    :return:              True if a refresh is needed, False otherwise.
    is>in_use has dropped below 0; forcing refresh for QuotaUsage: %siN(R6R3RCRRR5R7R7R|RRñR‹R™(tquota_usagetmax_agetrefresh((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_is_quota_refresh_needed+s	
		cCs‰|j|krWtjtdƒi|jd6|jd6|jd6|jd6|d6ƒntjdt|ƒƒ||_|pd|_
dS(	s&Refreshes quota usage for the given resource.

    :param quota_usage:   A QuotaUsage object for a given resource.
    :param until_refresh: Count of reservations until usage is refreshed,
                          int or None
    :param in_use:        Actual quota usage for the resource.
    s¡quota_usages out of sync, updating. project_id: %(project_id)s, user_id: %(user_id)s, resource: %(res)s, tracked usage: %(tracked_use)s, actual usage: %(in_use)sR{Rœtresttracked_useR3s:QuotaUsage has not changed, refresh is unnecessary for: %sN(R3RCtinfoR!R{RœRRRR5R|R7(RLR7R3((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_refresh_quota_usagesDs



	
	c		Cs|jƒ}	t|ƒ}
xâ|
rü|
jƒ}t||||||jƒ}|}
|
ss|pmt|||ƒ}
n|
rt||j}||	||ƒ}xZ|jƒD]I\}}t||||||jƒt	||||ƒ|
j
|ƒq©WqqWdS(N(RÃR[RRKRROtQUOTA_SYNC_FUNCTIONStsyncR±RStdiscard(RHR=t	resourcestkeysR{RœR7RMt
force_refreshRÃtworkRtcreatedRNRUR:RPR3((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_refresh_quota_usages_if_neededas*			

cCsg}x|jƒD]\}}|dkrd||koR|||dknrŸtjdi|d6||d6|d6||dd6ƒ|j|ƒqd||koÆ|||dknrtjdi|d6||d6|d6||dd6ƒ|j|ƒqqqW|S(sÆChecks if any resources will go over quota based on the request.

    :param project_quotas: dict of resource quotas (limits) for the project.
    :param user_quotas:    dict of resource quotas (limits) for the user.
    :param deltas:         dict of resource keys to positive/negative quota
                           changes for the resources in a given operation.
    :param project_usages: dict of resource keys to QuotaUsage records for the
                           project.
    :param user_usages:    dict of resource keys to QuotaUsage records for the
                           user.
    :return:               list of resources that are over-quota for the
                           operation.
    iRCsˆRequest is over project quota for resource "%(res)s". Project limit: %(limit)s, delta: %(delta)s, current total project usage: %(total)sRPRR>sRequest is over user quota for resource "%(res)s". User limit: %(limit)s, delta: %(delta)s, current total user usage: %(total)s(R±RCRRRH(tproject_quotasRtdeltastproject_usagesRHtoversRPR>((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_calculate_overquotas,	,	c	Csq|dkr|j}n|dkr0|j}nt|||ƒ\}}t||||||||dtƒdS(NRY(R|R{RœRGR\R7(	R=RWRXR7RMR{RœR_RH((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytquota_usage_refresh¹s	c

Cs±|dkr|j}n|	dkr0|j}	nt|||	ƒ\}
}t||||jƒ||	||ƒg|jƒD]5\}}
|
dkrz|
||jdkrz|^qz}xW|jƒD]I\}}||
krÂtj	di|d6t
|ƒd6ƒ||
|<qÂqÂWt||||
|ƒ}|s¹g}xƒ|jƒD]r\}}
tt
tjƒƒ||||	||
||jƒ}|j|jƒ|
dkr@||j|
7_q@q@Wnx$|jƒD]}|jj|ƒqÆW|rÿtjtdƒ|ƒn|r­||kr|
}nd„|jƒDƒ}|}d„|jƒDƒ}tj	di|d	6|d
6|d6|d6|
d
6|d6ƒtjdt|ƒd|d|ƒ‚n|S(NisYCopying QuotaUsage for resource "%(key)s" from user_usages into project_usages: %(value)sR•R¹sBChange will make usage less than 0 for the following resources: %sc
Ss@i|]6\}}td|dd|dd|dƒ|“qS(R3R¤RC(R5(R-RîRï((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pys
<dictcomp>(s	cSs6i|],\}}td|dd|dƒ|“qS(R3R¤(R5(R-RîRï((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pys
<dictcomp>,s	sËRaise OverQuota exception because: project_quotas: %(project_quotas)s, user_quotas: %(user_quotas)s, deltas: %(deltas)s, overs: %(overs)s, project_usages: %(project_usages)s, user_usages: %(user_usages)sR]RR`R^R_RHtquotastusages(R|R{RœRGR\RXR±R3RCRRR5RaRBRÿR£RRRHR¤R“R›RDR#Rt	OverQuotatsorted(R=RWR]RR^R?R7RMR{RœR_RHRPR>tundersR•R¹R`Rntreservationt	usage_refRd((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt
quota_reserveÍsl
#	
	
		
cCs7t|tjddƒjtjjj|ƒƒjdƒS(s!Return the relevant reservations.R}RvRâ(R€RR<RƒR£RÊR’(R=Rn((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_quota_reservations_query>sc	Cs•t|||ƒ\}}t||ƒ}xW|jƒD]I}||j}|jdkrk|j|j8_n|j|j7_q4W|jdtƒdS(NiR»(	RGRkRÑRR>R¤R3R¿R6(	R=RnR{Rœt_project_usagesRHtreservation_queryRhR@((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytreservation_commitGs
c	Csƒt|||ƒ\}}t||ƒ}xE|jƒD]7}||j}|jdkr4|j|j8_q4q4W|jdtƒdS(NiR»(RGRkRÑRR>R¤R¿R6(	R=RnR{RœRlRHRmRhR@((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytreservation_rollbackVs
cCs²t|tjddƒjd|ƒjd|ƒjdtƒt|tjddƒjd|ƒjd|ƒjdtƒt|tjddƒjd|ƒjd|ƒjdtƒdS(NR}RvR{RœR»(R€RRR„R¿R6R0R<(R=R{Rœ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt%quota_destroy_all_by_project_and_userdscCs¼t|tjddƒjd|ƒjdtƒt|tjddƒjd|ƒjdtƒt|tjddƒjd|ƒjdtƒt|tjddƒjd|ƒjdtƒdS(NR}RvR{R»(	R€RRR„R¿R6RR0R<(R=R{((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytquota_destroy_all_by_projectvscCsªtjƒ}t|tjddƒjtjj|kƒ}xZ|jtjƒj	ƒD]@}|j
dkrR|jj|j
8_|j
j|jƒqRqRW|jdtƒdS(NR}RviR»(RRñR€RR<RƒR?RØR0RÑR>R@R¤RR›R¿R6(R=tcurrent_timeRmRh((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytreservation_expire‰scCst|tjddƒS(NR}Ry(R€RtVolumeIdMapping(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_ec2_volume_get_queryœscCst|tjddƒS(NR}Ry(R€RtSnapshotIdMapping(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_ec2_snapshot_get_query scCsWtjƒ}|ji|d6ƒ|dk	rC|ji|d6ƒn|j|jƒ|S(s.Create ec2 compatible volume by provided uuid.R£RºN(RRtRâR|RåR(R=tvolume_uuidRºtec2_volume_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytec2_volume_create¤scCs=t|ƒjd|ƒjƒ}|s9tjd|ƒ‚n|S(NR£t	volume_id(RuR„RÄRtVolumeNotFound(R=RxRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytec2_volume_get_by_uuid²s
cCs=t|ƒjd|ƒjƒ}|s9tjd|ƒ‚n|S(NRºR{(RuR„RÄRR|(R=R{RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytec2_volume_get_by_id¿s
cCsWtjƒ}|ji|d6ƒ|dk	rC|ji|d6ƒn|j|jƒ|S(s0Create ec2 compatible snapshot by provided uuid.R£RºN(RRvRâR|RåR(R=t
snapshot_uuidRºtec2_snapshot_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytec2_snapshot_createÌscCs=t|ƒjd|ƒjƒ}|s9tjd|ƒ‚n|S(NRºtsnapshot_id(RwR„RÄRtSnapshotNotFound(R=tec2_idRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytec2_snapshot_get_by_ec2_idÚs
cCs=t|ƒjd|ƒjƒ}|s9tjd|ƒ‚n|S(NR£R‚(RwR„RÄRRƒ(R=RRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytec2_snapshot_get_by_uuidçs
cCsQ|dkrg}nt|tjƒ}x#|D]}|jt|ƒƒ}q.W|S(N(R|R€RR!R@R(R=RÉRˆRÍ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_block_device_mapping_get_query÷s	
cCs;x4|D],}||kr||dkr||=qqWdS(saRemove any keys found in sequence keys_to_scrub from the dict
    if they have the value ''.
    tN((tdctt
keys_to_scrubR•((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_scrub_empty_str_valuess
cCs:|r2|rtj|ƒr|Stjj|ƒSn|SdS(N(Rtis_safe_for_updatetBlockDeviceDicttfrom_legacy(R“tlegacyt
allow_updates((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_from_legacy_valuess
cCsVt|dgƒt||ƒ}t|ƒtjƒ}|j|ƒ|j|jƒ|S(Ntvolume_size(R‹R‘R–RR!RâRåR(R=R“Rtbdm_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytblock_device_mapping_creates

cCs^t|dgƒt||dtƒ}t|ƒt|ƒjd|ƒ}|j|ƒ|jƒS(NR’RRº(R‹R‘R7R–R‡R„RâRÄ(R=tbdm_idR“RRˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytblock_device_mapping_update#s

cCst|dgƒt||dtƒ}t|ƒd}|drtt|ƒ}|jd|dd|dƒjƒ}n|rŠ|j|ƒnt	j
|}|j|jƒt
j|ƒrt|ƒ}|jd|dddddƒ}|jt	j
j|jkƒ}|jƒn|S(	NR’Rtdevice_nameR`tsource_typetblanktguest_formattswap(R‹R‘R7R–R|R‡R„RÄRâRR!RåRRtnew_format_is_swapRƒRºR¿(R=R“RRÆRˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt%block_device_mapping_update_or_create/s&


cCs2|s
gSt|ƒjtjjj|ƒƒjƒS(N(R‡RƒRR!R`RÊRÑ(R=RÕ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt.block_device_mapping_get_all_by_instance_uuidsQscCst|ƒjd|ƒjƒS(NR`(R‡R„RÑ(R=R`((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt(block_device_mapping_get_all_by_instanceZscCs"t|d|ƒjd|ƒjƒS(NRÉR{(R‡R„RÑ(R=R{RÉ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt)block_device_mapping_get_all_by_volume_idbs	cCs.t|d|ƒjd|ƒjd|ƒjƒS(NRÉR{R`(R‡R„RÄ(R=R{R`RÉ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt2block_device_mapping_get_by_instance_and_volume_idls	cCs t|ƒjd|ƒjƒdS(NRº(R‡R„R¿(R=R•((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytblock_device_mapping_destroyxscCs,t|ƒjd|ƒjd|ƒjƒdS(NR`R{(R‡R„R¿(R=R`R{((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt3block_device_mapping_destroy_by_instance_and_volume€scCs,t|ƒjd|ƒjd|ƒjƒdS(NR`R—(R‡R„R¿(R=R`R—((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt3block_device_mapping_destroy_by_instance_and_deviceŠscCs‹tjƒ}|j|j|ƒy0tjjj|ƒ|j|j	ƒWdQXWn4t
jk
r†tj
d|dd|dƒ‚nX|S(NR{tsecurity_group_nameRô(RR‘R’RâR?RpRÇRkRåRRæRçRtSecurityGroupExists(R=R“tsecurity_group_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytsecurity_group_create—s
	
cCs@t|tjd|d|ƒ}|r<|jtdƒƒ}n|S(NR}R†srules.grantee_group(R€RR‘R@R(R=R}R†t
join_rulesRˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_security_group_get_query©s
cCsÂt|dddtƒjd|jƒjtjjj|ƒƒ}|j	ƒ}t
|ƒt
|ƒkrg|Sg|D]}|j^qn}x8|D]0}||krŠtjd|jd|ƒ‚qŠqŠWdS(s€Get security group models for a project by a list of names.
    Raise SecurityGroupNotFoundForProject for a name not found.
    R}RvR©R{RÁN(
RªR6R„R{RƒRR‘RôRÊRÑRRtSecurityGroupNotFoundForProject(R=tgroup_namesRˆt	sg_modelsRtgroup_names_from_modelst
group_name((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR
²s
	cCst|ƒjƒS(N(RªRÑ(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytsecurity_group_get_allÆscCsÄ|od|k}|r(|jdƒnt|dtd|ƒjd|ƒ}|dkrag}nx5|D]-}|jdƒrh|jt|ƒƒ}qhqhW|jƒ}|sÀt	j
d|ƒ‚n|S(NR’R†R©RºR—RÁ(R6RªR7R„R|R_R@RRÄRtSecurityGroupNotFound(R=RÁRÉR©RˆRÍRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytsecurity_group_getÌs 		
	cCs¢t|dddtƒjd|ƒjd|ƒ}|dkrKddg}nx#|D]}|jt|ƒƒ}qRW|jƒ}|sžtjd|d|ƒ‚n|S(	NR}RvR©R{RôR—srules.grantee_groupRÁ(	RªR6R„R|R@RRÄRR«(R=R{R¯RÉRˆRÍRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytsecurity_group_get_by_nameäs		
	cCs"t|ddƒjd|ƒjƒS(NR}RvR{(RªR„RÑ(R=R{((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytsecurity_group_get_by_projectûscCs1t|ddƒjtjjƒjd|ƒjƒS(NR}RvR£(RªRØRR‘R—R„RÑ(R=R`((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytsecurity_group_get_by_instancescCsvt|tjddƒjd|ƒjƒ}xE|D]=}t|tjddƒjd|jƒjƒ}|r1tSq1Wt	S(NR}RvRÁR£(
R€RRR„RÑRºR`R R7R6(R=R”t
inst_assoctiat
num_instances((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytsecurity_group_in_uses	
c	CsÜt|tjƒjd|ƒ}|rMx&|D]}|jt|ƒƒ}q+Wn|jƒ}|sttjd|ƒ‚n|j	|ƒ|d}|d}y|j
|jƒWn,tj
k
r×tjd|d|ƒ‚nX|S(NRºRÁRôR{R¥(R€RR‘R„R@RRÄRR±RâRåRRæRçR¦(	R=RÁR“RÉRˆRÍR§RôR{((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytsecurity_group_update!s&	
	


	
cCsUy*tjjj|ƒt|ƒSWdQXWn$tjk
rPt||jdƒSXdS(s6Ensure default security group exists for a project_id.NRO(	R?RptindependentRkRRR¦R³R{(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR;scCstyt|dgƒd}WnStjk
roidd6dd6|jd6|jd6}t||ƒ}t|tjddƒj	d|jƒj	d|jƒj	d	d
ƒ}|j
ƒsÝt|j|jd
ddtj
|jƒn'|jit|j
ƒjƒdd6ƒt|ƒjƒ}xW|D]K}i|jd
6|jd6|jd6|jd6|jd6}t||ƒqWnX|S(NROiRôtdescriptionRœR{R}RvRR¢iR3tprotocolt	from_porttto_portR	tparent_group_id(R
RtNotFoundRœR{R¨R€RR0R„RÄR9RFR7RRâR,R3t&_security_group_rule_get_default_queryRÑR½R¾R¿R	Rºt_security_group_rule_create(R=RR“R@t
default_rulestdefault_ruletrule_values((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRMs:


		
'





cCsŒt|tjƒjd|ƒjƒt|tjƒjd|ƒjƒt|tjƒjd|ƒjƒt|tjƒjd|ƒjƒdS(NRºRÁR”RÀ(R€RR‘R„R¿RR“(R=RÁ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytsecurity_group_destroyts


cCsGtjj||ƒt|tjddƒjd|ƒjd|ƒjƒS(NR}RvR{Rœ(RWR=RPR€RR‘R„R (R=R{Rœ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR£…scCs-tjƒ}|j|ƒ|j|jƒ|S(N(RR“RâRåR(R=R“tsecurity_group_rule_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRÐs
cCst|tjƒS(N(R€RR“(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_security_group_rule_get_query—scCs=t|ƒjd|ƒjƒ}|s9tjd|ƒ‚n|S(NRºtrule_id(RÉR„RÄRtSecurityGroupNotFoundForRule(R=tsecurity_group_rule_idRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytsecurity_group_rule_get›s	cCsc|dkrddg}nt|ƒjd|ƒ}x#|D]}|jt|ƒƒ}q:W|jƒS(Ns'grantee_group.instances.system_metadatas"grantee_group.instances.info_cacheRÀ(R|RÉR„R@RRÑ(R=RÁRÉRˆRÍ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt)security_group_rule_get_by_security_group©s	
cCs7t|ƒjddƒjd|ƒjtdƒƒjƒS(Ntparent_groupR—R£t
grantee_group(RÉRØR„R@RRÑ(R=R`((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt#security_group_rule_get_by_instance·s	cCs
t||ƒS(N(RÃ(R=R“((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytsecurity_group_rule_createÁscCsCt|ƒjd|ƒjƒ}|dkr?tjd|ƒ‚ndS(NRºiRÊ(RÉR„R¿RRË(R=RÌR ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytsecurity_group_rule_destroyÇs
	cCs(t|tjddƒjd|ƒjƒS(NR}RvRÀ(R€RR“R„R (R=RÁ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt"security_group_rule_count_by_groupÒscCst|tjƒS(N(R€RtSecurityGroupIngressDefaultRule(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRÂÞscCs=t|ƒjd|ƒjƒ}|s9tjd|ƒ‚n|S(NRºRÊ(RÂR„RÄRt SecurityGroupDefaultRuleNotFound(R=tsecurity_group_rule_default_idRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytsecurity_group_default_rule_getâs	cCsCt|ƒjd|ƒjƒ}|dkr?tjd|ƒ‚ndS(NRºiRÊ(RÂR„R¿RRÖ(R=R×R ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt#security_group_default_rule_destroyðs
	cCs-tjƒ}|j|ƒ|j|jƒ|S(N(RRÕRâRåR(R=R“tsecurity_group_default_rule_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt"security_group_default_rule_createûs
cCst|ƒjƒS(N(RÂRÑ(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt security_group_default_rule_listscCs-tjƒ}|j|ƒ|j|jƒ|S(N(RtProviderFirewallRuleRâRåR(R=truletfw_rule_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytprovider_fw_rule_creates
cCst|tjƒjƒS(N(R€RRÝRÑ(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytprovider_fw_rule_get_allscCs)|jjtjƒjd|ƒjƒdS(NRº(RRˆRRÝR„R¿(R=RÊ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytprovider_fw_rule_destroyscCsNt|tjddƒjd|ƒjƒ}|sJ|s:gSt||ƒgS|S(NR}RvR{(R€RR»R„RÑRä(R=R{t	associateRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytproject_get_networks#scCs-tjƒ}|j|ƒ|j|jƒ|S(N(RR"RâRåR(R=R“t	migration((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytmigration_create9s
cCs t||ƒ}|j|ƒ|S(N(t
migration_getRâ(R=RºR“Rå((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytmigration_updateAs
cCsIt|tjddƒjd|ƒjƒ}|sEtjd|ƒ‚n|S(NR}RyRºtmigration_id(R€RR"R„RÄRtMigrationNotFound(R=RºRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRçIs
cCsUt|tjƒjd|ƒjd|ƒjƒ}|sQtjd|d|ƒ‚n|S(NRºR`RéR(R€RR"R„RÄRtMigrationNotFoundForInstance(R=RºR`RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt migration_get_by_id_and_instanceUscCs[t|tjddƒjd|ƒjd|ƒjƒ}|sWtjd|d|ƒ‚n|S(NR}RyR`tstatusR(R€RR"R„RÄRtMigrationNotFoundByStatus(R=R`RíRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt$migration_get_by_instance_and_statuscscCsetjƒtjd|ƒ}t|tjddƒjtjj|kƒj	ddƒj	d|ƒj
ƒS(NR™R}RyRítfinishedtdest_compute(RRñRšR›R€RR"RƒR‹R„RÑ(R=tconfirm_windowRñ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt)migration_get_unconfirmed_by_dest_computeqs	c	Cs§t|tjƒjtttjj|ktjj|kƒttjj|ktjj	|kƒƒƒjtjj
jdddddddgƒƒjt
dƒƒjƒS(	Ntacceptedt	confirmedtrevertedterrortfailedt	completedt	cancelledsinstance.system_metadata(R€RR"RƒR
R
tsource_computetsource_nodeRñt	dest_nodeRíRÊR@RRÑ(R=R¼RŒ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt*migration_get_in_progress_by_host_and_node~scCspt|tjƒjd|ƒjtjjjddddgƒƒ}|rf|jtjj|kƒ}n|jƒS(NR`tqueuedt	preparingtrunningspost-migrating(	R€RR"R„RƒRíRÊtmigration_typeRÑ(R=R`RRˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt%migration_get_in_progress_by_instanceŽs	cCst|tjƒ}d|krj|d}t|tjƒrC|gn|}|jtjjj|ƒƒ}nd|kr³|d}|jt	tjj
|ktjj|kƒƒ}n4d|krç|d}|jtjj
|kƒ}nd|kr|d}|jtjj|kƒ}nd|krO|d}|jtjj
|kƒ}nd|krƒ|d}|jtjj|kƒ}n|jƒS(NRíR¼RûRthiddenR`(R€RR"RRŽRRƒRíRÊR
RûRñRRR`RÑ(R=RRˆRíR¼tmigtypeRR£((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytmigration_get_all_by_filtersŸs,
!!




cCsrtjƒ}|j|ƒy|j|jƒWn>tjk
rmtjd|dd|dd|dƒ‚nX|S(NR¼tconsole_typetcompute_host(	RtConsolePoolRâRåRRæRçRtConsolePoolExists(R=R“RG((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytconsole_pool_create¼s
	

cCs|t|tjddƒjd|ƒjd|ƒjd|ƒjtdƒƒjƒ}|sxtjd|d|d|ƒ‚n|S(NR}RvR¼RRtconsoles(	R€RR	R„R@RRÄRtConsolePoolNotFoundForHostType(R=RR¼RRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytconsole_pool_get_by_host_typeËs		cCsCt|tjddƒjd|ƒjd|ƒjtdƒƒjƒS(NR}RvR¼RR(R€RR	R„R@RRÑ(R=R¼R((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt!console_pool_get_all_by_host_typeÞs	cCs-tjƒ}|j|ƒ|j|jƒ|S(N(RtConsoleRâRåR(R=R“tconsole((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytconsole_createês
cCs)|jjtjƒjd|ƒjƒdS(NRº(RRˆRRR„R|(R=t
console_id((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytconsole_deleteòscCsjt|tjddƒjd|ƒjd|ƒjtdƒƒjƒ}|sftjd|d|ƒ‚n|S(NR}Rytpool_idR`RG(	R€RRR„R@RRÄRt ConsoleNotFoundInPoolForInstance(R=RR`RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytconsole_get_by_pool_instanceús		cCs]t|tjddƒjd|ƒ}|rSx&|D]}|jt|ƒƒ}q1Wn|jƒS(NR}RyR`(R€RRR„R@RRÑ(R=R`RÉRˆRÍ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytconsole_get_all_by_instance	s	
cCs t|tjddƒjd|ƒjtdƒƒ}|dk	rT|jd|ƒ}n|jƒ}|sœ|r‡tj	d|d|ƒ‚qœtj
d|ƒ‚n|S(NR}RyRºRGR`R(R€RRR„R@RR|RÄRtConsoleNotFoundForInstancetConsoleNotFound(R=RR`RˆRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytconsole_gets		cCs‡|jdƒ}g}|rhxJ|jƒD]9\}}tjƒ}||d<||d<|j|ƒq(Wn||d<tjƒ}|j|ƒ|d	kr g}ny|j|j	ƒWnut
jk
r
}	d|	jkrñt
jd|dƒ‚nt
jd|dƒ‚n"tk
r+}	t
j|	ƒ‚nXxNt|ƒD]@}
tjƒ}|ji|jd6|
d6ƒ|j|j	ƒq9Wt|ƒS(
sºCreate a new instance type. In order to pass in extra specs,
    the values dict should contain a 'extra_specs' key/value pair:

    {'extra_specs' : {'k1': 'v1', 'k2': 'v2', ...}}

    textra_specsR•R¹tflavoridt	flavor_idRôRGR{N(RhR±RtInstanceTypeExtraSpecsRHt
InstanceTypesRâR|RåRRæRçRèRtFlavorIdExiststFlavorExistsRiRBR[tInstanceTypeProjectsRºt_dict_with_extra_specs(R=R“tprojectstspecst
specs_refsRîRït	specs_reftinstance_type_refRíRŸt
access_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt
flavor_create+s6



	cCs.t|ƒ}d„|dDƒ}||d<|S(sTakes an instance or instance type query returned
    by sqlalchemy and returns it as a dictionary, converting the
    extra_specs entry from a list of dicts:

    'extra_specs' : [{'key': 'k1', 'value': 'v1', ...}, ...]

    to a single dict:

    'extra_specs' : {'k1': 'v1'}

    cSs!i|]}|d|d“qS(R¹R•((R-R((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pys
<dictcomp>as	R(R5(tinst_type_querytinst_type_dictR((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR$Ts

cCs‰t|tjd|ƒjtdƒƒ}|js…tjjtƒkg}|jtjj	j
d|jƒgƒ|jt
|Œƒ}n|S(NR}RR{(R€RR R@RR9t	is_publicRRR%RMR{RƒR
(R=R}Rˆt
the_filter((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_flavor_get_querygs		Rc
Cs |p	i}|rdnd}t|d|ƒ}d|kr^|jtjj|dkƒ}nd|krŒ|jtjj|dkƒ}nd|krº|jtjj|dkƒ}nd|krv|ddk	rvtjj|dkg}	|dr6|j	dk	r6|	j
tjjjd|j	d	d
ƒgƒnt
|	ƒdkr`|jt|	Œƒ}qv|j|	d
ƒ}nd}
|dk	rÊt|d|ƒjd|ƒjƒ}
|
sÊtjd
|ƒ‚qÊntj|tj||dgd
|
d|ƒ}|jƒ}g|D]}t|ƒ^q
S(sReturns all flavors.
    RyRvR}t
min_memory_mbtmin_root_gbRÐR.R{RwiiRRøRºR?N(R0RƒRR R"troot_gbRÐR|R.R{RR%RMRR
R„RÄRRRRQRÑR$(
R=tinactiveRR>R?RRøR}RˆR/RÛt
inst_typesti((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytflavor_get_alltsB	cCs.t|tjtjjfddƒjd|ƒS(NR}RvR(R€RR RºR„(R=R((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt _flavor_get_id_from_flavor_query¯scCs8t||ƒjƒ}|s0tjd|ƒ‚n|dS(NRi(R8RÄRtFlavorNotFound(R=RRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_flavor_get_id_from_flavor¶scCsCt|ƒjd|ƒjƒ}|s9tjd|ƒ‚nt|ƒS(s*Returns a dict describing specific flavor.RºR(R0R„RÄRR9R$(R=RºRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt
flavor_get½s
cCsCt|ƒjd|ƒjƒ}|s9tjd|ƒ‚nt|ƒS(s*Returns a dict describing specific flavor.Rôtflavor_name(R0R„RÄRtFlavorNotFoundByNameR$(R=RôRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytflavor_get_by_nameÉs
cCsmt|d|ƒjd|ƒjttjjƒttjjƒƒjƒ}|sct	j
d|ƒ‚nt|ƒS(s-Returns a dict describing specific flavor_id.R}RR(R0R„RRRR RwRºRÄRR9R$(R=RR}RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytflavor_get_by_flavor_idÕs	cCs±t|tjddƒjd|ƒjƒ}|sEtjd|ƒ‚n|j|jƒt|tj	ddƒjd|dƒjƒt|tj
ddƒjd|dƒjƒdS(s!Marks specific flavor as deleted.R}RvRRRGRºN(R€RR R„RÄRR9R¿RRR#(R=Rtref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytflavor_destroyãscCst|tjddƒS(NR}Rv(R€RR#(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_flavor_access_queryõscCs1t||ƒ}t|ƒjd|ƒjƒ}|S(s$Get flavor access list by flavor id.RG(R8RBR„RÑ(R=Rtinstance_type_id_subqtaccess_refs((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytflavor_access_get_by_flavor_idùs
	cCs}t||ƒ}tjƒ}|ji|d6|d6ƒy|j|jƒWn,tjk
rxtj	d|d|ƒ‚nX|S(s+Add given tenant to the flavor access list.RGR{R(
R:RR#RâRåRRæRçRtFlavorAccessExists(R=RR{RGR*((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytflavor_access_adds
cCsjt||ƒ}t|ƒjd|ƒjd|ƒjdtƒ}|dkrftjd|d|ƒ‚ndS(s0Remove given tenant from the flavor access list.RGR{R»iRN(R:RBR„R¿R6RtFlavorAccessNotFound(R=RR{RGR ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytflavor_access_removes	cCs1t||ƒ}t|tjddƒjd|ƒS(NR}RvRG(R8R€RRR„(R=RRC((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_flavor_extra_specs_get_query"s
	cCs#t||ƒjƒ}d„|DƒS(NcSs!i|]}|d|d“qS(R¹R•((R-Rm((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pys
<dictcomp>/s	(RJRÑ(R=RRy((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytflavor_extra_specs_get+scCs[t||ƒjtjj|kƒjdtƒ}|dkrWtjd|d|ƒ‚ndS(NR»itextra_specs_keyR(	RJRƒRRR•R¿R6RtFlavorExtraSpecsNotFound(R=RR•RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytflavor_extra_specs_delete2s		i
c
Csªx£t|ƒD]•}yMt||ƒ}t|tjddƒjd|ƒjtjjj|j	ƒƒƒj
ƒ}tƒ}xY|D]Q}|d}	|j|	ƒt
jjj|ƒ|ji||	d6ƒWdQXq}Wx†|jƒD]x\}	}
|	|krýqßntjƒ}t
jjj|ƒ7|ji|	d6|
d6|d6ƒ|jj|ƒWdQXqßW|SWq
tjk
r¡||dkr¢tjd|d|ƒ‚q¢q
Xq
WdS(	NR}RvRGR•R¹iRºtretries(R	R:R€RRR„RƒR•RÊRXRÑR[R›R?RpRÇRkRâR±RRæRçRt!FlavorExtraSpecUpdateCreateFailed(R=RR&R3tattemptRGt	spec_refst
existing_keystspec_refR•R¹((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt#flavor_extra_specs_update_or_create>s4	$	


"	cCs^tjƒ}|j|ƒy|j|jƒWn*tjk
rYtjd|dƒ‚nX|S(NRô(	RtCellRâRåRRæRçRt
CellExists(R=R“tcell((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcell_createhs
cCst|tjƒjd|ƒS(NRô(R€RRVR„(R=t	cell_name((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_cell_get_by_name_querysscCsCt||ƒ}|j|ƒs3tjd|ƒ‚n|jƒ}|S(NRZ(R[RâRtCellNotFoundRÄ(R=RZR“t
cell_queryRX((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcell_updatews
cCst||ƒjƒS(N(R[R¿(R=RZ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcell_delete€scCs4t||ƒjƒ}|s0tjd|ƒ‚n|S(NRZ(R[RÄRR\(R=RZRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcell_get…scCst|tjddƒjƒS(NR}Rv(R€RRVRÑ(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytcell_get_allscCs2|s
gSt|tjƒjtjjj|ƒƒS(N(R€RRRƒR`RÊ(R=RÕ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR+•scCs"t|tjddƒjd|ƒS(NR}RvR`(R€RRR„(R=R`((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_instance_metadata_get_queryœscCs#t||ƒjƒ}d„|DƒS(NcSs!i|]}|d|d“qS(R¹R•((R-Rm((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pys
<dictcomp>¥s	(RbRÑ(R=R`Ry((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_metadata_get¡scCs#t||ƒjd|ƒjƒdS(NR•(RbR„R¿(R=R`R•((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_metadata_delete¨sc
Cs#|jƒ}|rGt||ƒjtjjj|ƒƒjdtƒng}t||ƒjtjjj|ƒƒj	ƒ}x9|D]1}|j
|jƒ|ji||jd6ƒqWt|ƒt|ƒ}xP|D]H}	tjƒ}|ji|	d6||	d6|d6ƒ|j
j|ƒqÓW|S(NR»R¹R•R`(RXRbRƒRRR•RÊR¿R6RÑRHRâR[RR›(
R=R`RR|tall_keystalready_existing_keyst	meta_refstmeta_reftnew_keysR•((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_metadata_update±s$


cCs8|s
gSt|tjddƒjtjjj|ƒƒS(NR}Ry(R€RRRƒR`RÊ(R=RÕ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR,Òs
	cCst|tjƒjd|ƒS(NR`(R€RRR„(R=R`((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt#_instance_system_metadata_get_queryÚscCs#t||ƒjƒ}d„|DƒS(NcSs!i|]}|d|d“qS(R¹R•((R-Rm((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pys
<dictcomp>ãs	(RkRÑ(R=R`Ry((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_system_metadata_getßsc
Cs#|jƒ}|rGt||ƒjtjjj|ƒƒjdtƒng}t||ƒjtjjj|ƒƒj	ƒ}x9|D]1}|j
|jƒ|ji||jd6ƒqWt|ƒt|ƒ}xP|D]H}	tjƒ}|ji|	d6||	d6|d6ƒ|j
j|ƒqÓW|S(NR»R¹R•R`(RXRkRƒRRR•RÊR¿R6RÑRHRâR[RR›(
R=R`RR|ReRfRgRhRiR•((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_system_metadata_updateæs$


cCsrtjƒ}|j|ƒy|j|jƒWn>tjk
rmtjd|dd|dd|dƒ‚nX|S(Nt
hypervisortostarchitecture(	Rt
AgentBuildRâRåRRæRçRtAgentBuildExists(R=R“tagent_build_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytagent_build_creates
cCs@t|tjddƒjd|ƒjd|ƒjd|ƒjƒS(NR}RvRnRoRp(R€RRqR„RÄ(R=RnRoRp((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytagent_build_get_by_triplescCsN|r.t|tjddƒjd|ƒjƒSt|tjddƒjƒSdS(NR}RvRn(R€RRqR„RÑ(R=Rn((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytagent_build_get_alls
cCsIt|tjƒjd|ƒjƒ}|dkrEtjd|ƒ‚ndS(NRºi(R€RRqR„R¿RtAgentBuildNotFound(R=tagent_build_idt
rows_affected((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytagent_build_destroy%scCsLt|tjƒjd|ƒj|ƒ}|dkrHtjd|ƒ‚ndS(NRºi(R€RRqR„RâRRw(R=RxR“Ry((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytagent_build_update-s
		cCs`i|d6}t|dƒ}t|tjddƒjd|dƒjd|ƒjd|ƒjƒS(Ntstart_periodR}RyR£tmac(R–R€RtBandwidthUsageR„RÄ(R=R£R|R}R“((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytbw_usage_get8s
cCs`i|d6}t|dƒ}t|tjddƒjtjjj|ƒƒjd|dƒjƒS(NR|R}Ry(	R–R€RR~RƒR£RÊR„RÑ(R=R0R|R“((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytbw_usage_get_by_uuidsDs

c	CsS|dkrtjƒ}ni|d6|d6}	d}
t|	|
Œ}	i|	dd6|d6|d6|d6|d6}t|tjddƒjd|	dƒjd	|ƒjd
|ƒjt	tjj
ƒƒjƒ}|rã|j|ƒ|Stjƒ}
|	d|
_
||
_||
_|	d|
_||
_||
_||
_||
_|
j|jƒ|
S(Ntlast_refreshedR|tlast_ctr_intlast_ctr_outtbw_intbw_outR}RyR£R}(sstart_periodslast_refreshed(R|RRñR–R€RR~R„RRRºRÄRâR|R£R}RR„R…R‚RƒRåR(R=R£R}R|R„R…R‚RƒRt	ts_valuestts_keysR“tbw_usagetbwusage((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytbw_usage_updateQs>


	

		
				cCsjt|tjddƒjttjjtƒktjj|ktjjtƒktjj|kƒƒjƒS(sCReturn volumes usage that have been updated after a specified time.R}Ry(	R€RtVolumeUsageRƒR
ttot_last_refreshedRtcurr_last_refreshedRÑ(R=R†((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytvol_get_usage_by_time…s
cCs,tjƒ}i}|
s`i	|d6|d6|d6|d6|d6|d6|d6|d6|	d	6}n‰i
|d
6tjj|d6tjj|d6tjj|d
6tjj|d6dd6dd6dd6dd6|d6|d6|d6|	d	6}t|tjddƒj	d|ƒj
ƒ}
|
r|||
dksY||
dksY||
dksY||
dkrKtjt
dƒ|ƒ|
sØtjj|
d|d<tjj|
d|d<tjj|
d|d
<tjj|
d|d<qKtjj|
d||d<tjj|
d||d<tjj|
d||d
<tjj|
d||d<n|
j|ƒ|
j|jƒ|jj|
ƒ|
Stjƒ}||_||_||_||_|	|_|
së||_||_||_||_||_n-||_||_||_||_||_|j|jƒ|S(NRt
curr_readstcurr_read_bytestcurr_writestcurr_write_bytesR`R{RœR•RŒt	tot_readsttot_read_bytest
tot_writesttot_write_bytesiR}RyR{svVolume(%s) has lower stats then what is in the database. Instance must have been rebooted or crashed. Updating totals.(RRñRR‹R“R”R•R–R€R„RÄRCRRR!RâRåRRNR{R`R{RœR•RRRR‘R’RŒ(R=Rºtrd_reqtrd_bytestwr_reqtwr_bytesRR{RœR•t
update_totalst	refreshedR“t
current_usaget	vol_usage((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytvol_usage_update‘s–


		
				
														cCsIt|tjddƒjd|ƒjƒ}|sEtjd|ƒ‚n|S(s3Find local s3 image represented by the provided id.R}RyRºtimage_id(R€RtS3ImageR„RÄRt
ImageNotFound(R=R RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyts3_image_getýs
cCsIt|tjddƒjd|ƒjƒ}|sEtjd|ƒ‚n|S(s5Find local s3 image represented by the provided uuid.R}RyR£R (R€RR¡R„RÄRR¢(R=t
image_uuidRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyts3_image_get_by_uuid
s
cCs]y4tjƒ}|ji|d6ƒ|j|jƒWn"tk
rX}tj|ƒ‚nX|S(s3Create local s3 image represented by provided uuid.R£(RR¡RâRåRRiRæRB(R=R¤ts3_image_refRí((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyts3_image_createscCs…iddgtj6}t||d|ƒ}x/|j|gƒD]}|jt|ƒƒ}q>W|r|r|j||kƒ}n|S(Nt_hostst	_metadataR}(Rt	AggregateR€RhR@RRƒ(R=tmodel_classtid_fieldRºR}RÉRˆRþ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_aggregate_get_query'scCsËt|tjtjj|dddƒ}|jƒ}|sxtjƒ}|j|ƒ|j|jƒg|_g|_	nt
jd|dƒ‚|rÇt||j
|ƒ|jj|dgƒ|j	n|S(NRôR}Rvtaggregate_nameR©(R­RRªRôRÄRâRåRR¨R©RtAggregateNameExiststaggregate_metadata_addRºR?(R=R“RRˆt	aggregate((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaggregate_create6s$	
	
	
cCsIt|tjtjj|ƒ}|jƒ}|sEtjd|ƒ‚n|S(NRc(R­RRªRºRÄRtAggregateNotFound(R=RcRˆR±((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRbSs		cCsIt|tjtjj|ƒ}|jƒ}|sEtjd|ƒ‚n|S(NRc(R­RRªR£RÄRR³(R=R£RˆR±((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaggregate_get_by_uuidas		cCst|tjƒ}|jtdƒƒ}|jtdƒƒ}|jdƒ}|jtjj|kƒ}|r“|jdƒjtj	j
|kƒ}n|jƒS(s«Return rows that match host (mandatory) and metadata key (optional).

    :param host matches host, and is required.
    :param key Matches metadata key, if not None.
    R¨R©(R€RRªR@RRØRƒt
AggregateHostR¼tAggregateMetadataR•RÑ(R=R¼R•Rˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaggregate_get_by_hostoscCsçt|tjƒ}|jdƒ}|jdƒ}|jtjj|kƒ}|jtdƒƒ}|r„|jtj	j
|kƒ}n|jƒ}tj
tƒ}x;|D]3}x*|jD]}||dj|dƒq¶Wq¦Wt|ƒS(NR¨R©R•R¹(R€RRªRØRƒRµR¼R@RR¶R•RÑRdReR[R©R›R5(R=R¼R•RˆRyRtaggtkv((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaggregate_metadata_get_by_host‚s
!cCspt|tjƒ}|jdƒ}|jtjj|kƒ}|jtdƒƒ}|jt	dƒƒ}|j
ƒS(sOReturn rows that match metadata key.

    :param key Matches metadata key.
    R©R¨(R€RRªRØRƒR¶R•R@RRRÑ(R=R•Rˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaggregate_get_by_metadata_key•scCsmd|krkt|tjtjj|dddƒjƒ}|rk|j|krktjd|dƒ‚qknt|tjtjj|ƒjƒ}t}|rWd|krí|j	dƒ}d|krÜi|d6|d<t
}qí||dd<n|jdƒ}|dk	r*t
|||j	dƒd|ƒn|j|ƒ|j|jƒt||jƒStjd|ƒ‚dS(	NRôR}RvR®R•Rt
set_deleteRc(R­RRªRôRÄRºRR¯R7RR6RhR|R°RâRåRRbR³(R=RcR“taggregate_by_nameR±R¼tazR((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaggregate_update£s<	
		

cCskt|tjtjj|ƒjƒ}|dkrEtjd|ƒ‚nt|tjƒj	d|ƒjƒdS(NiRc(
R­RRªRºR¿RR³R€R¶R„(R=RcR ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaggregate_deleteËs	cCst|tjƒjƒS(N(R­RRªRÑ(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaggregate_get_allÛsRycCs"t|tjd|ƒjd|ƒS(NR}Rc(R€RR¶R„(R=RcR}((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_aggregate_metadata_get_queryàs	cCs2t|tjƒjd|ƒjƒ}d„|DƒS(NRccSs!i|]}|d|d“qS(R¹R•((R-R((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pys
<dictcomp>îs	(R€RR¶R„RÑ(R=RcRy((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaggregate_metadata_getçscCs[t|tjtjj|ƒjd|ƒjƒ}|dkrWtjd|d|ƒ‚ndS(NR•iRctmetadata_key(R­RR¶RcR„R¿RtAggregateMetadataNotFound(R=RcR•R ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaggregate_metadata_deleteñs	c
CsÖ|jƒ}xÃt|ƒD]µ}yCt||ddƒ}|ri|jtjjj|ƒƒjdt	ƒnt
ƒ}|rÞ|jtjjj|ƒƒ}xE|jƒD]4}	|	j}
|	ji||
d6ƒ|j
|
ƒq£Wng}xN|jƒD]@\}
}|
|krqñn|ji|
d6|d6|d6ƒqñW|r]|jjtjjjƒ|ƒn|SWqtjk
rÍtjƒG}
||dkr t	|
_n$tjtdƒi|d	6|d
6ƒWdQXqXqWdS(NR}RvR»R¹R•RcisBAdd metadata failed for aggregate %(id)s after %(retries)s retriesRºRO(RXR	RÂRƒRR¶R•RÊR¿R6R[RÑRâR›R±RHRRRûRYRæRçRRjtreraiseRCRDR#(R=RcRR¼R3ReRQRˆRfRhR•tnew_entriesR¹tctxt((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR°ÿsD	"
			
cCs>t|tjƒjd|ƒjƒ}g|D]}|j^q+S(NRc(R€RRµR„RÑR¼(R=RcRyR((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaggregate_host_get_all.scCs[t|tjtjj|ƒjd|ƒjƒ}|dkrWtjd|d|ƒ‚ndS(NR¼iRc(R­RRµRcR„R¿RtAggregateHostNotFound(R=RcR¼R ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaggregate_host_delete8s	cCsntjƒ}|ji|d6|d6ƒy|j|jƒWn,tjk
ritjd|d|ƒ‚nX|S(NR¼Rc(	RRµRâRåRRæRçRtAggregateHostExists(R=RcR¼thost_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaggregate_host_addFs
cCs3tjƒ}|j|ƒ|j|jƒt|ƒS(sCreate a new InstanceFault.(RRRâRåRR5(R=R“t	fault_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_fault_createVs
cCs¯|s
iSt|tjddƒjtjjj|ƒƒjtdƒtdƒƒjƒ}i}x|D]}g||<qeWx/|D]'}t	|ƒ}||dj
|ƒq€W|S(s8Get all instance faults for the provided instance_uuids.R}RvR‰RºR`(R€RRRƒR`RÊRRRÑR5RH(R=RÕRytoutputR`RmR((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt$instance_fault_get_by_instance_uuids_s

cCs:t|dƒtjƒ}|j|ƒ|j|jƒ|S(Nt
start_time(R–RtInstanceActionRâRåR(R=R“t
action_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaction_startys


cCs„t|ddƒt|tjƒjd|dƒjd|dƒ}|j|ƒdkrztjd|dd|dƒ‚n|jƒS(NRÔtfinish_timeR`t
request_idi(	R–R€RRÕR„RâRtInstanceActionNotFoundtone(R=R“Rˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt
action_finish‚s
	
cCs@t|tjƒjd|ƒjtdƒtdƒƒjƒ}|S(s/Get all instance actions for the provided uuid.R`R‰Rº(R€RRÕR„RRRÑ(R=R`tactions((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytactions_gets	cCst|||ƒ}|S(s0Get the action by request_id and given instance.(t_action_get_by_request_id(R=R`RÙtaction((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaction_get_by_request_id™scCs4t|tjƒjd|ƒjd|ƒjƒ}|S(NR`RÙ(R€RRÕR„RÄ(R=R`RÙRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRß scCs@t|tjƒjd|ƒjtdƒtdƒƒjƒ}|S(NR`R‰Rº(R€RRÕR„RRRÄ(R=R`RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt)_action_get_last_created_by_instance_uuid¨s	cCs²t|dƒt||d|dƒ}|rN|jrNt||dƒ}n|swtjd|dd|dƒ‚n|d|d<tjƒ}|j|ƒ|j	j
|ƒ|S(s%Start an event on an instance action.RÔR`RÙRºt	action_id(R–RßR{RâRRÚRtInstanceActionEventRâRR›(R=R“Ràt	event_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaction_event_start°s


	

cCst|ddƒt||d|dƒ}|rQ|jrQt||dƒ}n|sztjd|dd|dƒ‚nt|tjƒj	d|dƒj	d|dƒj
ƒ}|sÛtjd|dd|dƒ‚n|j|ƒ|dj
ƒd	kr|jid
d6ƒn|S(s&Finish an event on an instance action.RÔRØR`RÙRãRºteventRÆR÷tErrortmessage(R–RßR{RâRRÚR€RRäR„RÄtInstanceActionEventNotFoundRâRô(R=R“RàRå((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaction_event_finishÍs(

	

cCs@t|tjƒjd|ƒjtdƒtdƒƒjƒ}|S(NRãR‰Rº(R€RRäR„RRRÑ(R=Rãtevents((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaction_events_getòs	cCs4t|tjƒjd|ƒjd|ƒjƒ}|S(NRãRº(R€RRäR„RÄ(R=Rãtevent_idRç((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytaction_event_get_by_idüscCsWtjƒ}|ji|d6ƒ|dk	rC|ji|d6ƒn|j|jƒ|S(s0Create ec2 compatible instance by provided uuid.R£RºN(RtInstanceIdMappingRâR|RåR(R=R`Rºtec2_instance_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR	scCs=t|ƒjd|ƒjƒ}|s9tjd|ƒ‚n|S(NR£R(t_ec2_instance_get_queryR„RÄRR(R=R`RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytec2_instance_get_by_uuids
cCs=t|ƒjd|ƒjƒ}|s9tjd|ƒ‚n|S(NRºR(RòR„RÄRR(R=RRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytec2_instance_get_by_id$s
cCst||ƒ}|dS(NR£(Rô(R=R„RÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytget_instance_uuid_by_ec2_id1scCst|tjddƒS(NR}Ry(R€RRð(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRò8scCs­i|d6|d6}t||jƒŒ}t|tjƒjd|ƒjd|dƒjd|dƒ}|dk	rˆ|jd|ƒ}n|dk	r©|jd|ƒ}n|S(Ntperiod_beginningt
period_endingt	task_nameR¼tstate(R–RXR€RtTaskLogR„R|(R=RøRöR÷R¼RùR“Rˆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_task_log_get_query?s


cCst||||||ƒjƒS(N(RûRÄ(R=RøRöR÷R¼Rù((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyttask_log_getPscCst||||||ƒjƒS(N(RûRÑ(R=RøRöR÷R¼Rù((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyttask_log_get_allWsc	CsÕi|d6|d6}t||jƒŒ}tjƒ}||_|d|_|d|_||_d|_|r|||_	n|rŽ||_
ny|j|jƒWn,t
jk
rÐtjd|d|ƒ‚nXdS(NRöR÷tRUNNINGRøR¼(R–RXRRúRøRöR÷R¼RùRét
task_itemsRåRRæRçRtTaskAlreadyRunning(	R=RøRöR÷R¼RÿRéR“ttask((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyttask_log_begin_task^s"

	

		c	Csttddd|ƒ}|r(||d<nt|||||ƒj|ƒ}|dkrptjd|d|ƒ‚ndS(NRùtDONEterrorsRéiRøR¼(R5RûRâRtTaskNotRunning(	R=RøRöR÷R¼RRéR“Ry((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyttask_log_end_taskus
cCsªddlm}|jdtƒjg|jD]}|j^q,tj|gt	|jj
|jj
jjk|jj
|jjkƒƒj|jjƒj|ƒƒ}tj|jjgt	|jj
|jj
jjk|jj
|jjkƒƒj|jjƒj|ƒ}|j|||jjƒ}	y:|jƒ(|j|ƒ|j|	ƒ}
|
jSWdQXWnGtjk
r¥}tjtdƒi|jd6tj|ƒd6ƒdSXdS(	sRLook for records that pertain to deleted instances, but may not be
    deleted themselves. This catches cases where we delete an instance,
    but leave some residue because of a failure in a cleanup path or
    similar.

    Logic is: if I have a column called instance_uuid, and that instance
    is deleted, then I can be deleted.
    iÿÿÿÿ(RtinlineNs&Failed to archive %(table)s: %(error)sttableR÷i(tnova.db.sqlalchemyRRYR7tfrom_selectRþRôRRüR
RwROtargR£R`RRºRtDeleteFromSelectR†RtrowcountRætDBReferenceErrorRCRDR#t
__tablename__RŽt	text_type(Rtshadow_tableR—Rtmax_rowstdb_utilsRþtquery_inserttquery_deletetdelete_statementt
result_deletetex((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_archive_if_instance_deleted†s2


c	Csêddlm}tƒ}|jƒ}tƒ}||_tjjj	|}t
|}d}yt||dtƒ}	Wnt
k
r‡|SX|dkr£|jj}
n|jj}
|jj}g|jD]}|j^qÅ}
|dkrxtjjj	d}tj|jjgƒj|jj|jjjjkƒ}|jƒjd	|jjƒj|jjj|ƒƒ}|j|ƒná|d
krYtjjj	d}tjjj	d}tj|jjgƒj|jj|jjjjkƒ}tj|jjgƒj|jjj|ƒƒ}|jƒjd	|jjƒj|jjj|ƒƒ}|j|ƒn|	jdtƒj |
tj|g||jjkƒj!|
ƒj"|ƒƒ}tj|
g||jjkƒj!|
ƒj"|ƒ}|j#|||
ƒ}y<|j$ƒ!|j|ƒ|j|ƒ}WdQX|j%}WnCt&j'k
rm}t(j)t*d
ƒi|d6t+j,|ƒd6ƒnX|dks†||kræd|
krætjjj	d}|dk	r»||nd}t.||	|||ƒ}||7}n|S(s{Move up to max_rows rows from one tables to the corresponding
    shadow table.

    :returns: number of rows archived
    iÿÿÿÿ(Ritautoloadtdns_domainstinstance_actionst
migrationsR—Rwtinstance_actions_eventsRNsEIntegrityError detected when archiving table %(tablename)s: %(error)st	tablenameR÷R`(sinstance_actionss
migrations(/R	RRLRRtbindRtBASERttablest_SHADOW_TABLE_PREFIXRR7RRþRRºRwRôRRüR£RýRORRâR“R`RÊRRãRYR
RRRR†R
RæRRCRDR#RŽRR|R(RRRRRRRtshadow_tablenamet
rows_archivedRRÍtdeleted_columnRþRèR—tdeleted_instancestupdate_statementRtdeleted_actionsRYRRRRRR((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_archive_deleted_rows_for_table±sv			

!!


"
cCs¶i}d}ttdtƒƒ}|jƒx„t|jƒD]s}|j}|dks;|jtƒrkq;nt	|d||ƒ}||7}|rž|||<n||kr;Pq;q;W|S(sKMove up to max_rows rows from production tables to the corresponding
    shadow tables.

    :returns: dict that maps table name to number of rows archived from that
              table, for example:

    ::

        {
            'instances': 5,
            'block_device_mapping': 5,
            'pci_devices': 2,
        }

    iRJtmigrate_versionR(
RRLR7treflecttreversedt
sorted_tablesRôR_R#R*(Rttable_to_rows_archivedttotal_rows_archivedR1RRR%((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytarchive_deleted_rowss"
	

cCsÎddlm}d}d}|jjƒsAtjtdƒƒnƒt|tjƒj	ddƒj|ƒ}xY|D]Q}|d7}|jj||jƒ|ƒ}|j
ƒro|jƒ|d7}qoqoW||fS(Niÿÿÿÿ(t
pci_deviceis‰Data migrations for PciDevice are not safe, likely because not all services that access the DB directly are updated to the latest versiontparent_addri(tnova.objectsR2t	PciDevicetshould_migrate_dataRCR÷R"R€RR„R|Rt_from_db_objecttobj_what_changedRå(R=t	max_counttpci_dev_objt	count_allt	count_hitR
tdb_dicttpci_dev((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytpcidevice_online_data_migrationAs

	
cCsŸddlm}d}d}t|tjƒjddƒj|ƒ}xO|D]G}|d7}|jj||jƒ|ƒ}d|krJ|d7}qJqJW||fS(Niÿÿÿÿ(R±iR£i(	R4R±R€RRªR„R|RR7(R=R9R±R;R<R
tdb_aggR¸((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt%aggregate_uuids_online_data_migrationZs

		cCs‹iddgtj6}t||d|dtƒ}x/|j|gƒD]}|jt|ƒƒ}qDW|r‡|r‡|j||kƒ}n|S(Nt	_policiest_membersR}R†(Rt
InstanceGroupR€R7RhR@RRƒ(R=R«R¬RºR}RÉRˆRþ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_instance_group_get_queryps	cCsä|jddƒ}|dkr7tjƒ}||d<ny-tjƒ}|j|ƒ|j|jƒWn&t	j
k
rŒtjd|ƒ‚nX|r©t
||j|ƒn	g|_|rÎt||j|ƒn	g|_t||ƒS(sCreate a new group.R£t
group_uuidN(RhR|Rt
generate_uuidRRDRâRåRRæRçRtInstanceGroupIdExistst_instance_group_policies_addRºRBt_instance_group_members_addRCtinstance_group_get(R=R“tpoliciestmembersR£tgroup((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_group_create~s"

		cCsCt|tjtjj|ƒjƒ}|s?tjd|ƒ‚n|S(sGet a specific group by uuid.RF(RERRDR£RÄRtInstanceGroupNotFound(R=RFRN((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRKœs	cCsˆt|tjƒjd|ƒjƒ}|s?tjddƒ‚nt|tjtjj	|j
ƒjƒ}|s„tjd|j
ƒ‚n|S(NRRFRˆ(R€RR R„RÄRRPRERDRºR”(R=R`tgroup_memberRN((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_group_get_by_instance©s		cCsöt|tjƒjd|ƒjƒ}|s?tjd|ƒ‚n|jdƒ}|dk	rt	||j
|jdƒdtƒn|jdƒ}|dk	r¿t
||j
|jdƒdtƒn|j|ƒ|rß||d<n|rò||d<ndS(s¡Update the attributes of a group.

    If values contains a metadata key, it updates the aggregate metadata
    too. Similarly for the policies and members.
    R£RFRLR¼RMN(R€RRDR„RÄRRPRhR|RIRºRR7RJRâ(R=RFR“RNRLRM((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_group_update¹s*



cCsšt||ƒ}t|tjtjj|ƒjƒ}|dkrTtjd|ƒ‚ntjtj	g}x-|D]%}t
||ƒjd|ƒjƒqmWdS(sDelete a group.iRFR”N(t_instance_group_idRERRDR£R¿RRPtInstanceGroupPolicyR R€R„(R=RFR”R tinstance_modelsR…((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_group_deleteÛs	
cCst|tjƒjƒS(sGet all groups.(RERRDRÑ(R=((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_group_get_allîscCs"t|tjƒjd|ƒjƒS(sGet all groups.R{(RERRDR„RÑ(R=R{((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt$instance_group_get_all_by_project_idôscCs4t|tjddƒjd|ƒjd|ƒjƒS(NR}RvR{Rœ(R€RRDR„R (R=R{Rœ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR¦üsRvcCst||d|ƒjd|ƒS(NR}R”(R€R„(R=R«R”R}((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt_instance_group_model_get_queryscCsRt|tjtjjfƒjd|ƒjƒ}|sKtjd|ƒ‚n|jS(s1Returns the group database ID for the group UUID.R£RF(R€RRDRºR„RÄRRP(R=RFRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRTsc	Csÿt|ƒ}t|tj|ƒ}|rS|jtjjj|ƒƒjdtƒn|jtjjj|ƒƒ}tƒ}x$|j	ƒD]}|j
|jƒq‡WxW|D]O}||krÀq¨ntjƒ}|ji|d6|d6ƒ|jj
|ƒq¨W|S(NR»RR”(
R[RZRR RƒRRÊR¿R6RÑR›RâR(	R=RºRMR¼tall_membersRˆtalready_existingt
member_refR((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRJs(
	
cCs%t||ƒ}t|||d|ƒS(NR¼(RTRJ(R=RFRMR¼Rº((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_group_members_add2scCsat||ƒ}t|tj|ƒjd|ƒjƒ}|dkr]tjd|d|ƒ‚ndS(NRiRF(RTRZRR R„R¿RtInstanceGroupMemberNotFound(R=RFRRºR ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_group_member_delete:scCsZt||ƒ}t|tjtjjfƒjd|ƒjƒ}g|D]}|d^qFS(NR”i(RTR€RR RR„RÑ(R=RFRºR—RÅ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_group_members_getGsc	Csÿt|ƒ}t|tj|ƒ}|rS|jtjjj|ƒƒjdtƒn|jtjjj|ƒƒ}tƒ}x$|j	ƒD]}|j
|jƒq‡WxW|D]O}||krÀq¨ntjƒ}|ji|d6|d6ƒ|jj
|ƒq¨W|S(NR»tpolicyR”(
R[RZRRURƒRbRÊR¿R6RÑR›RâR(	R=RºRLR¼tallpolsRˆR\t
policy_refRb((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyRIQs$"
	
cCsUt|tjƒjd|ƒjd|ƒjƒ}|sQtjd|d|ƒ‚n|S(Ntcompute_node_idROtnode_id(R€RR5R„RÄRtPciDeviceNotFound(R=Rftdev_addrtpci_dev_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytpci_device_get_by_addrlscCsCt|tjƒjd|ƒjƒ}|s?tjd|ƒ‚n|S(NRº(R€RR5R„RÄRtPciDeviceNotFoundById(R=RºRi((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytpci_device_get_by_idws
cCs"t|tjƒjd|ƒjƒS(NRe(R€RR5R„RÑ(R=Rf((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytpci_device_get_all_by_nodescCs.t|tjƒjd|ƒjd|ƒjƒS(NReR3(R€RR5R„RÑ(R=RfR3((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt!pci_device_get_all_by_parent_addrˆscCs.t|tjƒjddƒjd|ƒjƒS(NRíR¦R`(R€RR5R„RÑ(R=R`((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt#pci_device_get_all_by_instance_uuidscCs>|s
gSt|tjƒjddƒjtjjj|ƒƒS(NRíR¦(R€RR5R„RƒR`RÊ(R=RÕ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyR-™s
	cCsUt|tjƒjd|ƒjd|ƒjƒ}|sQtjd|d|ƒ‚ndS(NReRORf(R€RR5R„R¿RRg(R=RfRORÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytpci_device_destroy¢s
cCs{t|tjddƒjd|ƒjd|ƒ}|j|ƒdkrqtjƒ}|j|ƒ|jj|ƒn|jƒS(NR}RvReROi(R€RR5R„RâRR›RÛ(R=RfROR“Rˆtdevice((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytpci_device_update¬s	
cCs|tjƒ}||_||_yCt||ƒt|ƒjjj|ƒ|j	j
|ƒWdQXWntjk
rwnX|S(N(
RR#RRLRRIRpRÇRkRR›RæRç(R=R`RLttag_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_tag_add»s		
cCs-t||ƒ|jjtjjƒjd|ƒjƒ}td„|Dƒƒ}t|ƒ}||}||}|r¹|jjtjƒjd|ƒj	tjjj
|ƒƒjdtƒn|rg|D]}i|d6|d6^qÆ}|jj
tjjjƒ|ƒn|jjtjƒjd|ƒjƒS(NRcss|]}|jVqdS(N(RL(R-Rm((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pys	<genexpr>ÓsR»RL(RRRˆRR#RLR„RÑR[RƒRÊR|R6RRûRY(R=R`RDtexistingR¬tto_addRLR((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_tag_setÌs"


	
'"cCs2t||ƒ|jjtjƒjd|ƒjƒS(NR(RRRˆRR#R„RÑ(R=R`((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt!instance_tag_get_by_instance_uuidçs
cCs_t||ƒ|jjtjƒjd|d|ƒjƒ}|s[tjd|d|ƒ‚ndS(NRRLR(	RRRˆRR#R„R|RtInstanceTagNotFound(R=R`RLRÆ((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_tag_deleteîs
cCs6t||ƒ|jjtjƒjd|ƒjƒdS(NR(RRRˆRR#R„R|(R=R`((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_tag_delete_allùs
cCsPt||ƒ|jjtjƒjd|d|ƒ}|jj|jƒƒjƒS(NRRL(RRRˆRR#R„texiststscalar(R=R`RLtq((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytinstance_tag_existss
cCsI|jdƒ}t||ƒtjƒ}|j|ƒ|jj|ƒ|S(NR`(RhRRR$RâRR›(R=R“R`t	token_ref((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytconsole_auth_token_creates

cCsYt||ƒ|jjtjƒjd|ƒjd|ƒjtjjtj	ƒkƒj
ƒS(Nt
token_hashR`(RRRˆRR$R„RƒtexpiresRt	utcnow_tsRÄ(R=R‚R`((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pytconsole_auth_token_get_valids

	cCs)|jjtjƒjd|ƒjƒdS(NR`(RRˆRR$R„R|(R=R`((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt*console_auth_token_destroy_all_by_instancescCsD|jjtjƒjd|ƒjtjjtjƒkƒj	ƒdS(NR¼(
RRˆRR$R„RƒRƒRR„R|(R=R¼((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt*console_auth_token_destroy_expired_by_host%s	(ït__doc__RdRRšR]RfRSR£toslo_dbRR£RRætoslo_db.sqlalchemyRRRRtoslo_logRtloggingt
oslo_utilsRRRRŽt	six.movesR	t
sqlalchemyRùR
tsqlalchemy.excRRR
tsqlalchemy.ormRRRRRRtsqlalchemy.schemaRRtsqlalchemy.sql.expressionRRtsqlalchemy.sqlRRRRRWRtnova.computeRRt	nova.conftnova.contextR	Rt	nova.i18nR R!R"R#R$R%RDRFt	getLoggerRURCRER?RBR|R:R>R@RHRIR6RLRMR#R*RRVRXRaRdRoRrRsRuR€R–RRŸR¡R¤R§RTRªR¬R®tobjectR¨R«R­RÃR½RÏRÒRÔRÕR×RÜRÞRßRáRîR¤R7RóRRRÿRRRRRRRRRRR8RpR;RjR<R=R>RFRJRXR_RbRoRpRžRzR{R}RR€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çRèRéRêRñRúRRRR›R%R_RÌR'R&R5R8R:R@R=RPRsRORNRIRˆ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íRRRRR R$R%R)R+R,R.R/R2R4R5R6R9R;RBRGRKRORSR\RaRbRjRkRnRoRpRqRsRuRwRzR}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ºRRRÇ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þRRRRRRRRRRR+R$R0R7R8R:R;R>R?RARBRERGRIRJRKRNRURYR[R^R_R`RaR+RbRcRdRjR,RkRlRmRtRuRvRzR{RR€RŠRŽRŸR£R¥R§R­R²RbR´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ïRRóRôRõRòRûRüRýRRRR*R1R?RARERORKRRRSRWRXRYR¦RZRTRJR^R`RaRIRjRlRmRnRoR-RpRrRtRwRxRzR{RRR…R†R‡(((sK/home/tvault/.virtenv/lib/python2.7/site-packages/nova/db/sqlalchemy/api.pyt<module>sŒ"		
	
									.						
					

 
	O		
!			
	
	.6		
	
	

				:	2*	Ï	;	
		8	C		
	t	&	

	-	
*	


		



						-	)l						

!			'			
	
	


	(	
	7		
			'							
0h

(	
,	
		

		%

		+	i'

"