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"dZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddlZddl
ZddlmZddlmZddlmZddlmZdd	lmZdd
lmZddlZddlmZddljjj Z!ddl"Z#ddl#m$Z$dd
l%m&Z&m'Z'm(Z(ddl)j*j+Z,ddl#m-Z-ddl.m/Z/ddl#m0Z0ej1e2ƒZ3e#j4j5Z5d„Z6d„Z7d„Z8dd„Z9dd„Z:d„Z;de<fd„ƒYZ=de<fd„ƒYZ>de<fd„ƒYZ?d„Z@d „ZAd!„ZBd"„ZCd#„ZDeEd$„ZFd%„ZGd&„ZHd'„ZId(d)fZJd*„ZKd+„ZLd,„ZMeEd-„ZNeEd.„ZOd/„ZPd0„ZQd1„ZRd2„ZSd3„ZTd4„ZUd5„ZVd6e<fd7„ƒYZWdS(8sCImplementation of an image service that uses Glance as the backend.i(tabsolute_importN(tgreenthread(tschemas(tlog(t	jsonutils(tsslutils(texcutils(t	timeutils(trange(t	exception(t_LEt_LIt_LW(tobjects(tfields(tsignature_utilscC@s
ttƒƒS(s>Return a random glance url from the api servers we know about.(tnexttget_api_servers(((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pytgenerate_glance_url5scC@sdtƒ|fS(s(Generate an image URL from an image_ref.s%s/images/%s(R(t	image_ref((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pytgenerate_image_url:scC@s6|jdƒ}|d}dj|d ƒ}||fS(s¥Return the image_ref and guessed endpoint from an image url.

    :param image_href: href of an image
    :returns: a tuple of the form (image_id, endpoint_url)
    t/iÿÿÿÿiýÿÿÿ(tsplittjoin(t
image_hreftpartstimage_idtendpoint((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyt_endpoint_from_image_ref?s
t	ConfirmedcC@s`it|ddƒd6t|ddƒd6t|ddƒd6djt|dgƒƒd	6|d
6S(Nt
auth_tokensX-Auth-Tokentusers	X-User-IdttenantsX-Tenant-Idt,trolessX-RolessX-Identity-Status(tgetattrtNoneR(tcontexttstatus((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pytgenerate_identity_headersMsicC@sÅi}t|ƒ|d<|jdƒr¬tjj|d<t|d<tjtƒtjj	rktjj	|d<ntjj
rŠtjj
|d<ntjjr¬tjj|d<q¬ntj
t|ƒ||S(s-Instantiate a new glanceclient.Client object.tidentity_headersshttps://tinsecuretssl_compressiont	cert_filetkey_filetcacert(R't
startswithtCONFtglancetapi_insecuretFalseRt
is_enabledtsslR+R,tca_filetglanceclienttClienttstr(R%Rtversiontparams((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyt_glanceclient_from_endpointWs

cC@ssg}xPtjjD]B}d|krHd|}tjtdƒ|ƒn|j|ƒqWtj|ƒt	j
|ƒS(sShuffle a list of CONF.glance.api_servers and return an iterator
    that will cycle through the list, looping around to the beginning
    if necessary.
    s//shttp://s‰No protocol specified in for api_server '%s', please update [glance] api_servers with fully qualified url including scheme (http / https)(R/R0tapi_serverstLOGtwarningRtappendtrandomtshufflet	itertoolstcycle(R<t
api_server((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRks
	

tGlanceClientWrappercB@s8eZdZddd„Zd„Zd„Zd„ZRS(s4Glance client wrapper class that implements retries.cC@sXtjjrd}nd}|dk	rB|j|||ƒ|_n	d|_d|_dS(Nii(R/R0t
use_glance_v1R$t_create_static_clienttclientR<(tselfR%RR9((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyt__init__ƒs			cC@st|ƒ|_t|||ƒS(s.Create a client that we'll use for every call.(R8RDR;(RIR%RR9((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRGscC@sC|jdkrtƒ|_nt|jƒ|_t||j|ƒS(s/Create a client that will be used for one call.N(R<R$RRRDR;(RIR%R9((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyt_create_onetime_client•scO@sŸtjjtjjtjjf}tjj}|dkr_tj	t
dƒi|d6ƒd}n|d}x/td|dƒD]}	|jp›|j
||ƒ}
yTt|
|jddƒƒ}t||ƒ||Ž}tj|ƒrít|ƒS|SWq}|k
r–}
|	|krd}nd}tjtd	ƒi|jd
6|d6|d6ƒ|	|kr†tjd
t|jƒd
tj|
ƒƒ‚ntjdƒq}Xq}WdS(s„Call a glance client method.  If we get a connection error,
        retry the request according to CONF.glance.num_retries.
        isKTreating negative config value (%(retries)s) for 'glance.num_retries' as 0.tretriesit
controllertimagestretryingsdone tryingsHError contacting glance server '%(server)s' for '%(method)s', %(extra)s.tservertmethodtextratreasonN(R6texctServiceUnavailabletInvalidEndpointtCommunicationErrorR/R0tnum_retriesR=R>RRRHRKR#tpoptinspecttisgeneratortlistR	R
RDtGlanceConnectionFailedR8tsixt	text_typettimetsleep(RIR%R9RQtargstkwargst
retry_excsRLtnum_attemptstattemptRHRMtresultteRR((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pytcallœs<			
	
	
	$N(t__name__t
__module__t__doc__R$RJRGRKRi(((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRE€s

		tGlanceImageServicecB@sneZdZd	d„Zd„Zeed„Zd„Z	d	d	d„Z
d	d„Zd	ed„Zd„Z
RS(
sCProvides storage and retrieval of disk image objects within Glance.cC@sº|ptƒ|_i|_tjƒ}xŒtj|ƒD]{\}}|tjj	kr[q7ny|j
ƒ|j|<Wq7tk
r±}tj
tdƒit|ƒd6|d6ƒq7Xq7WdS(NsKWhen loading the module %(module_str)s the following error occurred: %(ex)st
module_strtex(REt_clientt_download_handlerstimage_xferstload_transfer_modulesR^t	iteritemsR/R0tallowed_direct_url_schemestget_download_handlert	ExceptionR=terrorR
R8(RIRHtdownload_modulestschemetmodRo((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRJËs	cK@s†t|ƒ}y|jj|dd|}Wntk
rEtƒnXg}x3|D]+}t||ƒrS|jt|ƒƒqSqSW|S(s=Calls out to Glance for a list of detailed image information.iR\(t_extract_query_paramsRpRiRwt_reraise_translated_exceptiont_is_image_availableR?t_translate_from_glance(RIR%RcR:RNt_imagestimage((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pytdetailàs

c	C@sd}|rd}ny|jj||d|ƒ}Wntk
rQt|ƒnX|r€t|dtƒr€tjd|ƒ‚nt||ƒs¤tjd|ƒ‚nt	|d|ƒ}|r|j
ddƒpÑg}|j
ddƒ}|r
|ji|d	6id
6ƒn||d<n|S(sêReturns a dict with image data for the given opaque image id.

        :param context: The context object to pass to image client
        :param image_id: The UUID of the image
        :param include_locations: (Optional) include locations in the returned
                                  dict of information if the image service API
                                  supports it. If the image service API does
                                  not support the locations attribute, it will
                                  still be included in the returned dict, as an
                                  empty list.
        :param show_deleted: (Optional) show the image even the status of
                             image is deleted.
        iitgettdeletedRtinclude_locationst	locationst
direct_urlturltmetadataN(
RpRiRwt#_reraise_translated_image_exceptionR#R2R	t
ImageNotFoundR~RRƒR$R?(	RIR%RR…tshow_deletedR9RR†tdu((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pytshowïs(	
		
cC@sUy|j|SWn?tk
r#dStk
rPtjtdƒi|d6ƒnXdS(Ns9Failed to instantiate the download handler for %(scheme)sRz(RqtKeyErrorR$RwR=RxR
(RIRz((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyt_get_transfer_modules

cC@stjjrì|dk	rì|j||dtƒ}x¹|jdgƒD]¢}|d}|d}tj|ƒ}	|j|	j	ƒ}
|
rCy7|
j
||	||ƒtjt
dƒ|	j	ƒdSWqåtk
rátjtdƒƒqåXqCqCWny|jj|dd	|ƒ}Wntk
r(t|ƒnXd}tjjr|j||dtƒ}
tjj|
ƒ}|jjd
ƒ}|jjdƒ}|jjdƒ}|jjd
ƒ}ytj|||||ƒ}Wqtjk
rtjƒtjtdƒ|ƒWdQXqXnt}|dkr?|r?t |dƒ}t}n|dkrê|ræyOx(|D] }|j!|ƒt"j#dƒq[W|j$ƒtjt
dƒ|ƒWqæt%j&j'k
râtjƒtjtdƒ|ƒWdQXqæXn|Szþyax1|D])}|r|j!|ƒn|j(|ƒq÷W|rM|j$ƒtjt
dƒ|ƒnWn–t%j&j'k
r|j)dƒtjƒtjtdƒ|ƒWdQXnJtk
ræ}tjƒ)tjtdƒi|d6|d6ƒWdQXnXWd|rþ|j*ƒnXdS(s-Calls out to Glance for data and writes data.R…R†RˆR‰s!Successfully transferred using %sNsDownload image erroritdatat
img_signaturetimg_signature_hash_methodtimg_signature_certificate_uuidtimg_signature_key_types1Image signature verification failed for image: %stwbis4Image signature verification succeeded for image: %ss3Image signature verification succeeded for image %ss(Error writing to %(path)s: %(exception)stpathR	(+R/R0RuR$RŽtTrueRƒturlparseRRztdownloadR=tinfoRRwR	R
RpRiRŠtverify_glance_signaturesR2R
t	ImageMetat	from_dictt
propertiesRtget_verifiertSignatureVerificationErrorRtsave_and_reraise_exceptionRxtopentupdateRRatverifytcryptographyt
exceptionstInvalidSignaturetwritettruncatetclose(RIR%RR‘tdst_pathRtentrytloc_urltloc_metatotxfer_modtimage_chunkstverifiertimage_meta_dictt
image_metaR’timg_sig_hash_methodtimg_sig_cert_uuidtimg_sig_key_typet
close_filetchunkRo((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRš!s 



!
								

	








#cC@sit|ƒ}|r||d<ny|jj|dd|}Wntjjk
r^tƒnXt|ƒS(s5Store the image data and return the new image object.R‘itcreate(t_translate_to_glanceRpRiR6RTt
HTTPExceptionR}R(RIR%RµR‘tsent_service_image_metatrecv_service_image_meta((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR»s
	cC@s‡t|ƒ}||d<|jddƒ|r9||d<ny"|jj|dd||}Wntk
rxt|ƒnXt|ƒSdS(s)Modify the given image with the new data.tpurge_propstidR‘iR¤N(R¼RYR$RpRiRwRŠR(RIR%RRµR‘RÀ((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR¤s


cC@suy|jj|dd|ƒWnQtjjk
rHtjd|ƒ‚n)tjjk
rptjd|ƒ‚nXt	S(sÝDelete the given image.

        :raises: ImageNotFound if the image does not exist.
        :raises: NotAuthorized if the user is not an owner.
        :raises: ImageNotAuthorized if the user is not authorized.

        itdeleteR(
RpRiR6RTtNotFoundR	R‹t
HTTPForbiddentImageNotAuthorizedR˜(RIR%R((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR¢sN(RjRkRlR$RJR‚R2R˜RŽRRšR»R¤RÂ(((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRmÈs	'	
`tGlanceImageServiceV2cB@s¤eZdZdd„Zeed„Zd„Zd„Z	ddd„Z
dd„Zd„Zd„Z
d	„Zded
„Zded„Zdd„Zd
„ZRS(sCProvides storage and retrieval of disk image objects within Glance.cC@sº|ptƒ|_i|_tjƒ}xŒtj|ƒD]{\}}|tjj	kr[q7ny|j
ƒ|j|<Wq7tk
r±}tj
tdƒit|ƒd6|d6ƒq7Xq7WdS(NsKWhen loading the module %(module_str)s the following error occurred: %(ex)sRnRo(RERpRqRrRsR^RtR/R0RuRvRwR=RxR
R8(RIRHRyRzR{Ro((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRJ¶s	cC@sy|jj|dd|ƒ}Wntk
r<t|ƒnX|rkt|dtƒrktjd|ƒ‚nt||ƒstjd|ƒ‚nt	|d|ƒ}|r|j
dd
ƒp¼g}|j
dd
ƒ}|rõ|ji|d6id	6ƒn||d<n|S(sêReturns a dict with image data for the given opaque image id.

        :param context: The context object to pass to image client
        :param image_id: The UUID of the image
        :param include_locations: (Optional) include locations in the returned
                                  dict of information if the image service API
                                  supports it. If the image service API does
                                  not support the locations attribute, it will
                                  still be included in the returned dict, as an
                                  empty list.
        :param show_deleted: (Optional) show the image even the status of
                             image is deleted.
        iRƒR„RR…R†R‡RˆR‰N(
RpRiRwRŠR#R2R	R‹R~RRƒR$R?(RIR%RR…RŒRR†R((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRŽËs"
		
cC@sUy|j|SWn?tk
r#dStk
rPtjtdƒi|d6ƒnXdS(Ns9Failed to instantiate the download handler for %(scheme)sRz(RqRR$RwR=RxR
(RIRz((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRðs

cK@s†t|ƒ}y|jj|dd|}Wntk
rEtƒnXg}x3|D]+}t||ƒrS|jt|ƒƒqSqSW|S(s=Calls out to Glance for a list of detailed image information.iR\(t_extract_query_params_v2RpRiRwR}R~R?R(RIR%RcR:RNR€R((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR‚ús

cC@sötjjrì|dk	rì|j||dtƒ}x¹|jdgƒD]¢}|d}|d}tj|ƒ}	|j|	j	ƒ}
|
rCy7|
j
||	||ƒtjt
dƒ|	j	ƒdSWqåtk
rátjtdƒƒqåXqCqCWny|jj|dd	|ƒ}Wntk
r(t|ƒnXd}tjjr|j||dtƒ}
tjj|
ƒ}|jjd
ƒ}|jjdƒ}|jjdƒ}|jjd
ƒ}ytj|||||ƒ}Wqtjk
rtjƒtjtdƒ|ƒWdQXqXnt}|dkr?|r?t |dƒ}t}n|dkrÝ|rÙyBx|D]}|j!|ƒq[W|j"ƒtjt
dƒ|ƒWqÙt#j$j%k
rÕtjƒtjtdƒ|ƒWdQXqÙXn|Szþyax1|D])}|r|j!|ƒn|j&|ƒqêW|r@|j"ƒtjt
dƒ|ƒnWn–t#j$j%k
r|j'dƒtjƒtjtdƒ|ƒWdQXnJtk
rÙ}tjƒ)tjtdƒi|d6|d6ƒWdQXnXWd|rñ|j(ƒnXdS(s-Calls out to Glance for data and writes data.R…R†RˆR‰s!Successfully transferred using %sNsDownload image erroriR‘R’R“R”R•s1Image signature verification failed for image: %sR–s4Image signature verification succeeded for image: %ss3Image signature verification succeeded for image %sis(Error writing to %(path)s: %(exception)sR—R	()R/R0RuR$RŽR˜RƒR™RRzRšR=R›RRwR	R
RpRiRŠRœR2R
RRžRŸRR R¡RR¢RxR£R¤R¥R¦R§R¨R©RªR«(RIR%RR‘R¬RR­R®R¯R°R±R²R³R´RµR’R¶R·R¸R¹RºRo((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRš	sž



!
								

	







#cC@st|dko|jdƒdk}t|ƒ}y|j||||ƒ}Wntjjk
ritƒnXt|ƒS(s5Store the image data and return the new image object.tsizeiN(	R$RƒR¼t
_create_v2R6RTR½R}R(RIR%RµR‘tforce_activateR¾R((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR»hs!cC@sHy#|jj|dd||iƒSWntjjk
rCtƒnXdS(Nitadd_location(RpRiR6RTtHTTPBadRequestR}(RIR%Rtlocation((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyt
_add_location{s
cC@s5|jj|dd||ƒ|jj|dd|ƒS(NituploadRƒ(RpRi(RIR%RR‘((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyt_upload_dataƒscC@sòtjjtjjtjjtjjf}|jj|dddddƒ}|rj|jƒdj	dƒni}|rÉd|krÉ|d}x|D]}||kr“|Sq“Wt
jd	|d
ƒ|d
St
jt
dƒi|d
d6ƒ|d
S(
sJGets an acceptable default image disk_format based on the schema.
        iRƒRRMRRŸtdisk_formattenumsbUnable to find a preferred disk_format for image creation with the Image Service v2 API. Using: %sisnUnable to determine disk_format schema from the Image Service v2 API. Defaulting to %(preferred_disk_format)s.tpreferred_disk_format(Rt
DiskFormattQCOW2tVHDtVMDKtRAWRpRitrawRƒR=tdebugR>R(RIR%tpreferred_disk_formatstimage_schematdisk_format_schematsupported_disk_formatstpreferred_format((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyt%_get_image_create_disk_format_default‡s&					

	cC@sÇ|rJd}d|kr.|j|ƒ|d<nd|krJd|d<qJn|jddƒ}|jj|dd|}|d}|rŸ|j|||ƒ}n|dk	rÃ|j|||ƒ}n|S(	NtRÑtcontainer_formattbareRÍiR»RÁ(RàRYR$RpRiRÎRÐ(RIR%R¾R‘RÊRÍRR((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRɲs	
cC@sÊt|ƒ}|jddƒ||d<y||rŒt|j||ƒdjƒƒ}t|jdiƒjƒƒ}t||ƒ}	|	|d<n|j|||ƒ}
Wnt	k
r¿t
|ƒnXt|
ƒS(s)Modify the given image with the new data.RÁRRŸtremove_propsN(R¼RYR$tsetRŽtkeysRƒR\t
_update_v2RwRŠR(RIR%RRµR‘RÀR¾t	all_propstprops_to_updateRäR((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR¤Ðs
	

cC@s}|jddƒ}|d}|jj|dd|}|rU|j|||ƒ}n|dk	ry|j|||ƒ}n|S(NRÍRiR¤(RYR$RpRiRÎRÐ(RIR%R¾R‘RÍRR((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRçês
	cC@suy|jj|dd|ƒWnQtjjk
rHtjd|ƒ‚n)tjjk
rptjd|ƒ‚nXt	S(sÝDelete the given image.

        :raises: ImageNotFound if the image does not exist.
        :raises: NotAuthorized if the user is not an owner.
        :raises: ImageNotAuthorized if the user is not authorized.

        iRÂR(
RpRiR6RTRÃR	R‹RÄRÅR˜(RIR%R((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRÂûsN(RjRkRlR$RJR2R˜RŽRR‚RšR»RÎRÐRàRÉR¤RçRÂ(((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRƳs"$	
	_			+cC@sji}d	}x3|D]+}|j|ƒr|j|ƒ||<qqW|jdiƒ|djddƒ|S(
Ntfilterstmarkertlimitt	page_sizetsort_keytsort_dirt	is_publictnone(sfilterssmarkerslimitRíssort_keyssort_dir(Rƒt
setdefault(R:t_paramstaccepted_paramstparam((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR|s
c	C@sJi}d}x3|D]+}|j|ƒr|j|ƒ||<qqW|jdiƒ|djddƒ|d}i}xÃ|D]»}|jd	ƒr¬||||jd	ƒ<q}|d
krÓd|d
}||d<q}|dkr*|d}|jƒdkrd|d<q8|jƒdkr8d|d<q8q}||||<q}W||d<|S(NRêRëRìRíRîRïRðRñs	property-s
changes-sincesgte:t
updated_atttruet1tpublict
visibilitytfalset0tprivate(sfilterssmarkerslimits	page_sizessort_keyssort_dir(strueRø(sfalseRü(RƒRòR.tlstriptlower(	R:RóRôRõRêtnew_filterstfilter_RöRð((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRÇs2






c	C@sçt|dƒr|jrtSd„}|js:||ƒr>tS|j}|jryd|kryt|dƒt|jƒkS|jr«d|kr«t|dƒt|jƒkSy|d}Wntk
rÍtSXt|ƒt|j	ƒkS(sƒCheck image availability.

    This check is needed in case Nova and Glance are deployed
    without authentication turned on.
    RcS@s3t|dƒr(t|jƒjƒdkS|jSdS(NRúRù(thasattrR8RúRÿRð(R((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyt_is_image_publicPstowner_idt
project_idtuser_id(
RRR˜tis_adminRŸRR8RR2R(R%RRRŸR((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR~Es		
cC@s7t|ƒ}t|ƒ}tjjs3t|ƒ}n|S(N(t_convert_to_stringt_remove_read_onlyR/R0RFt_convert_to_v2(Rµ((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR¼ns
cC@s*i}xtj|ƒD]\}}|dkrÂxñtj|ƒD]}\}}|dkr€|dk	r€|jƒjƒdkr€q>q>|dksžt|tjƒr«|||<q>t|ƒ||<q>Wq|dkrát|ƒ||<q|dkr|rùd	nd
|d<q|dkrqq|||<qW|S(NRŸt	kernel_idt
ramdisk_idRñRátmin_ramtmin_diskRðRùRýRúRÈR„(s	kernel_ids
ramdisk_id(snoneRá(smin_ramsmin_disk(ssizesdeleted(	R^RtR$tstripRÿt
isinstancetstring_typesR8tint(Rµtoutputtnametvaluet	prop_namet
prop_value((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR
ys(
cC@sOtjjr!t|d|ƒ}nt|d|ƒ}t|ƒ}t|ƒ}|S(NR…(R/R0RFt_extract_attributest_extract_attributes_v2t _convert_timestamps_to_datetimest_convert_from_string(RR…Rµ((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR™scC@sGx@dddgD]/}|j|ƒrtj||ƒ||<qqW|S(sBReturns image with timestamp fields converted to datetime objects.t
created_atRöt
deleted_at(RƒRt
parse_isotime(Rµtattr((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR¨scC@s6||}t|tjƒr2tj|ƒ||<ndS(N(RR^RRtloads(RŸRtprop((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyt_json_loads±s
cC@s6||}t|tjƒs2tj|ƒ||<ndS(N(RR^RRtdumps(RŸRR!((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyt_json_dumps·s
tblock_device_mappingtmappingscC@sXtj|ƒ}|jdƒ}|rTx-tD]"}||kr+|||ƒq+q+Wn|S(NRŸ(tcopytdeepcopyRƒt_CONVERT_PROPS(RQR‰RŸR((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyt_convertÀs
cC@s
tt|ƒS(N(R*R"(R‰((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRËscC@s
tt|ƒS(N(R*R$(R‰((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRÏscC@s£ddddddddd	d
ddd
ddddg}t|dƒdk}ddg}ddg}i}x|D]}|dkr|d
rd||<qs|dkrÆ|ddkrÆd||<qs|dkrët||dƒ||<qs|r||krt||dƒ||<qs||krD|r…t||dƒ||<q…qs|dkrot||dƒped||<qst||dƒ||<qsWt|diƒ|d<|S(NRÈRÑtownerRâR&RÁRRRöR„RtchecksumRR
RðR‡R†tqueuedtactiveiRŸ(R#R$(RR…tIMAGE_ATTRIBUTESR-tqueued_exclude_attrstinclude_locations_attrsRR((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRÓs6					


c	C@s*ddg}ddddddg}|j}tj|ƒ}iid	6td
6dd6dd6dd
6dd6dd6}x°tj|ƒD]Ÿ\}}||ksƒ||kr´|r´qƒqƒ|dkrÓ|dk|d<qƒ|dkrø|dkrød|d<qƒ|j|ƒr|||<qƒ||d	|<qƒW|S(NR‡R†RItschemat	protectedtvirtual_sizetfilettagsRŸR„RRÑRâRR,RúRùRðRÈi(R2RtSchemaR2R$R^Rttis_base_property(	RR…R1t
omit_attrst
raw_schemaR2RRR((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRs(		


cC@sLddddg}tj|ƒ}x$|D]}||kr(||=q(q(W|S(NR&RöRR(R'R((RµR/RR((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR	 s
cC@s;tjƒ\}}}t||ƒ}tj|d|ƒdS(sDTransform the exception for the image but keep its traceback intact.N(tsystexc_infot_translate_image_exceptionR^treraiseR$(Rtexc_typet	exc_valuet	exc_tracetnew_exc((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRŠ)scC@s8tjƒ\}}}t|ƒ}tj|d|ƒdS(s6Transform the exception but keep its traceback intact.N(R;R<t_translate_plain_exceptionR^R>R$(R?R@RARB((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR}0scC@sŽt|tjjtjjfƒr1tjd|ƒSt|tjjƒrVtjd|ƒSt|tjj	ƒrŠtj
d|dtj|ƒƒS|S(NRtresponse(
RR6RTt	ForbiddentUnauthorizedR	RÅRÃR‹t
BadRequesttImageBadRequestR^R_(RR@((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyR=7scC@s‘t|tjjtjjfƒr7tjtj|ƒƒSt|tjjƒrbtjtj|ƒƒSt|tjj	ƒrtj
tj|ƒƒS|S(N(RR6RTRERFR	R^R_RÃRGtInvalid(R@((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRCCscC@s­dt|ƒkr%tƒ}||fSy+t|ƒ\}}td|d|ƒ}Wn#tk
rutjd|ƒ‚nXtjj	r”t
d|ƒ}ntd|ƒ}||fS(såCreate an image_service and parse the id from the given image_href.

    The image_href param can be an href of the form
    'http://example.com:9292/v1/images/b8b2c6f7-7345-4e2f-afa2-eedaba9cbbe3',
    or just an id such as 'b8b2c6f7-7345-4e2f-afa2-eedaba9cbbe3'. If the
    image_href is a standalone id, then the default image service is returned.

    :param image_href: href that describes the location of an image
    :returns: a tuple of the form (image_service, image_id)

    RR%RRRH(R8tget_default_image_serviceRREt
ValueErrorR	tInvalidImageRefR/R0RFRmRÆ(R%Rt
image_serviceRRt
glance_client((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pytget_remote_image_serviceNs	


cC@stjjrtƒStƒSdS(N(R/R0RFRmRÆ(((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRJpstUpdateGlanceImagecB@seZd„Zd„ZRS(cC@s(||_||_||_||_dS(N(R%RR‰timage_stream(RIR%RR‰tstream((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRJzs			cC@sDt|j|jƒ\}}|j|j||j|jdtƒdS(NRÀ(ROR%RR¤R‰RQR2(RIRMR((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pytstart€s(RjRkRJRS(((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyRPys	(XRlt
__future__RR'RZRBR@R;R`R¦teventletRR6tglanceclient.exctglanceclient.v2Rtoslo_logRtloggingtoslo_serializationRtoslo_serviceRt
oslo_utilsRRR^t	six.movesRtsix.moves.urllib.parsetmovesturllibtparseR™t	nova.conftnovaR	t	nova.i18nR
RRtnova.image.downloadRRšRrR
tnova.objectsRRt	getLoggerRjR=tconfR/RRRR'R;RtobjectRERmRÆR|RÇR~R¼R
R2RRR"R$R)R*RRRRR	RŠR}R=RCRORJRP(((sF/home/tvault/.virtenv/lib/python2.7/site-packages/nova/image/glance.pyt<module>s|			
	HëÿZ		)	)		 							4							"