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:
ó
w=4\c@sædZddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
mZddlmZyddl
mZWn!ek
r½ddlmZnXyddlmZWn!ek
rõddlmZnXddlmZddlmZdd	lmZddlmZejeƒZejeƒZy0dd
lm Z m!Z!m"Z"ddl#m$Z$Wn e%k
r¦Z&eje&ƒnXej'dd
dddƒej'dd
dddƒej'dd
dddƒej'dd
dddƒej'dd
dddƒej'dd
dddƒej'dd
d dd!ƒej'd"d
d#dd$ƒej'd%d
d#dd&ƒej'd'd
d(dd)ƒej'd*d
d+dd,ƒej'd-d
d.dd/ƒej(d0d
d1dd2ƒej'd3d
d4dd5ƒej'd6d
d7dd8ƒej'd9d
d:dd;ƒgZ)ej*Z*e*j+e)ƒye*j,d<d=ƒWne-k
rjnXd>„Z.d?„Z/e0d[dB„Z1e0dC„Z2e0dD„Z3dE„Z4dF„Z5dG„Z6dH„Z7e.ƒdI„ƒZ8dJ„Z9e.ƒdK„ƒZ:dL„Z;dM„Z<dN„Z=dO„Z>dP„Z?e.ƒdQ„ƒZ@dR„ZAejBdSeƒdT„ƒZCejBdSeƒddU„ƒZEejBdSeƒdV„ƒZFejBdSeƒdW„ƒZGejBdSeƒdX„ƒZHejBdSeƒdY„ƒZIdS(\s!Implementation of Vault backend

iÿÿÿÿN(tisfiletisdirtjoin(twalk(tlog(tcfg(t	exception(tautolog(tutils(tSwiftServicet
SwiftErrortSwiftUploadObject(tClientExceptiontvault_storage_typetdefaulttnfsthelps'Storage type: nfs, swift-i, swift-s, s3tvault_data_directorys/var/triliovault-mountss'Location where snapshots will be storedtvault_data_directory_olds/var/triliovaulttvault_storage_nfs_exporttlocals
NFS Exporttvault_storage_nfs_optionstnolocksNFS Optionstvault_swift_auth_versiontKEYSTONE_V2s KEYSTONE_V2 KEYSTONE_V3 TEMPAUTHtvault_swift_auth_urlshttp://localhost:5000/v2.0sKeystone Authorization URLtvault_swift_tenanttadminsSwift tenanttvault_swift_usernamesSwift usernametvault_swift_passwordtpasswordsSwift passwordtvault_swift_container_prefixtTrilioVaultsSwift Container Prefixtvault_swift_segment_sizet	524288000sDefault segment size 500MBtvault_retry_countis(The number of times we retry on failurestvault_swift_url_templates,http://localhost:8080/v1/AUTH_%(project_id)ssThe URL of the Swift endpointtguestfs_backendtdirectsGuestfs backendtguestfs_backend_settingsts)Qemu tcg mode on or off or other settingst
state_paths
nova.pathscCs
d„}|S(s<Make sure NFS share is mounted at CONF.vault_data_directory.cs‡fd†}|S(Nc
s¥tjjƒdkrCtjjƒdkrCtjjƒdkrCdStjjƒdkrŠtj|ddƒ}tjjtj|ƒ}n	tj}tjj	|ƒrÔtjjƒdkrÔt
jdd|ƒ‚ntdd	ƒW}g|j
ƒD]=}|jƒd
|krói|jƒd|jƒd
6^qó}WdQXt|ƒdksv|dj|dƒtjjdƒkr˜t
jdd|tjfƒ‚nˆ||ŽS(
NRsswift-sts3itbackend_endpointtreasons'%s' is not a valid mount points/proc/mountstrit,s'%s' is not '%s' mounted(tCONFR
tlowertbase64t	b64encodetostpathRRtismounttcontego_exceptiontInvalidNFSMountPointtopent	readlinestsplittlentgettNoneR(targstkwtbase64encodet	mountpathtftlinetmounts(tfunc(sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytnew_functionls,			S	((RERF((REsX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytwrapks((RG((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytensure_nfs_mountedis	 cCs{ttjdƒrAytjj||ƒSWqAtk
r=tSXntjjtjj|ƒƒtjjtjj|ƒƒkS(Ntsamefile(thasattrR3R4RItOSErrortFalsetnormcasetabspath(tsrctdst((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pyt	_samefileŽs
i@ic
Cs t||ƒr0tjddj||ƒƒ‚ntjj|ƒ}tjj|dƒ}xf||gD]X}ytj|ƒ}Wnt	k
rqdXtj
|jƒrdtjdd|ƒ‚qdqdW|rõtjj|ƒrõtj
tj|ƒ|ƒn'tj|ƒj}	t|dƒ}
t|dƒì}d}xÜtr|
j|ƒ}
|
sSPn|j|
ƒ|t|
ƒ7}t|ƒ|	d}|d	dks¤|ddkrütj|dt|ƒƒtj|dt|ƒƒtjj|ƒrütd
ƒ‚qüntj|dƒq4WWdQXWdQX|S(s«Copy data from src to dst.

    If follow_symlinks is not set and src is a symbolic link, a new
    symlink will be created instead of copying the file it points to.

    tmsgs{!r} and {!r} are the same filet	cancelleds`%s` is a named pipetrbtwbiidiis%s %% percentage complete
s%s bytes copied
s#Error: User initiated backup cancelNii@(RQRt
NovaExceptiontformatR3R4tdirnameRtstatRKtS_ISFIFOtst_modetislinktsymlinktreadlinktst_sizeR8tTruetreadtwriteR;tfloatRtupdate_progresststrtexistst	ExceptiontutimeR=(RORPtprogress_tracking_file_pathtfollow_symlinkst
chunk_sizettracking_dirtcancel_filetfntstttotal_bytestfsrctfdsttcopied_bytestbuftpercentage_copied((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pyt	_copyfile›sP	
		
	 cCs©|rWtjj|ƒrWtjj|ƒrWttdƒrPtjtj}}q€dSn)ttdƒr|tjtj}}ndS||ƒ}||tj|j	ƒƒdS(sàCopy mode bits from src to dst.

    If follow_symlinks is not set, symlinks aren't followed if and only
    if both `src` and `dst` are symlinks.  If `lchmod` isn't available
    (e.g. Linux) this method does nothing.

    tlchmodNtchmod(
R3R4R\RJtlstatRwRYRxtS_IMODER[(RORPRjt	stat_funct
chmod_funcRo((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pyt	_copymodeÔs+cCsctjj|ƒr6tjj|tjj|ƒƒ}nt|||d|ƒt||d|ƒ|S(sÊCopy data and mode bits ("cp src dst"). Return the file's destination.

    The destination may be a directory.

    If source and destination are the same file, a SameFileError will be
    raised.
    Rj(R3R4RRtbasenameRvR}(RORPRiRj((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pyt	copy_fileês$cCsšx“ttjjdƒƒD]y\}}tj|ƒ}tjjtj	|ƒ}y2ddtj
dd|g}tj|dt
ƒWqtk
r‘qXqWdS(NR.tsudos
nova-rootwraptumounts-ltshell(t	enumerateR/RR:R1R2R3R4RRtrootwrap_configt
subprocesstcallRLRg(tidxtnfsshareR@RAtcommand((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytunmount_backup_mediaús%	
cCsµtjjƒdks*tjjƒdkr6tt_n	tt_tjjƒdkrWnZtjjƒdkronBtjjƒdkr1tƒtj}xttj	j
dƒƒD]}\}}tj|ƒ}t
jjtj|ƒ}tj|ƒddd	d
dtjdd
|||g}tj|dtƒq­Wn€tjrDtƒnmtjdkr±y8d
dtjdtjtjg}tj|dtƒWq±tk
r­}tj|ƒq±XndS(s mounts storage sswift-sR*RtvaultRR.ttimeouts-sKILLt30R€s
nova-rootwraptmounts-oR‚tnoneN(R/R
R0R`tvault_using_fuseRLRŠRRƒRR:R1R2R3R4RRRtensure_treeR„R…t
check_calltvault_storage_das_deviceRgtLOGR(t
nfsoptionsR‡RˆR@RAR‰tex((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytmount_backup_medias>			
	

c
Csftj}tjjƒdkrLtjjƒdkrLtjjƒdkrLdSxttjjdƒƒD]ù\}}yÊtjjƒdkr³tj|ƒ}t	j
jtj|ƒ}ntj
rÈtj}nt	j
j|dƒ}t	j
j|ƒsõwenxBt	j|ƒD]1}t	j
j||ƒ}t|ƒrxt	j|ƒD]ó}t	j
j||ƒ}	t|	ƒr<i}
t|	dƒ}|jƒ|
d<WdQX|
r/d|
kr/t|
dƒr/t}t}
x<|
dD]0}d|kråt}n||krÊt}
qÊqÊW|tkr,|
tkr,tj|	d	ƒq,q/q<q<WqqWWqetk
r]}tj|ƒqeXqeWdS(
NRsswift-sR*R.t
contego_tasksR-tstatust	CompletedsDown 
(R/tmy_ipR
R0RƒRR:R1R2R3R4RRRRftlistdirRRR8R9R;R`RLRRdRgR”R(t
ip_addressR‡RˆR@RAtprogress_tracker_directorytxt
snapshot_dirstztsnapshot_resource_filetasync_task_statustprogress_tracking_filetupdate_file_or_nottis_running_on_same_nodeRCR–((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pyt update_in_progress_files_on_exit4sX	%					
"
cCs tjrtjtjƒndS(N(R/RtshutiltrmtreeR(((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytflush_cachehs	cCs‡i}t}t|dƒf}|jƒ|d<|r}d|kr}t|dƒr}x*|dD]}d|kr[t}q[q[WnWdQX|S(NR-R™Rš(RLR8R9R;R`(R¢R£tupdated_file_or_notR¤RC((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytensure_progress_writtenms		cCs»d}tjjƒdkrItj|dƒ}tjjtj|ƒ}ntjjƒdkr‡tjjtj|dd|dƒ}n#tjjtjdd|dƒ}t	j
|ƒ|S(NR(RR+R˜ssnapshot_%stsnapshot_id(R/R
R0R1R2R3R4RRRR‘(ttracker_metadataRžR@RA((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytget_progress_tracker_directory~s			
cCs7t|ƒ}|r/tjj||dƒ}|SdSdS(Ntresource_id(R¯R3R4RR=(R®RžRi((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytget_progress_tracker_path’s		cCs~d}tjjƒdks$tjr0tj}n!tjjtjdtj	ƒƒ}tjj
|dƒ\}}tj|ƒ|S(NR(Rtstagingt/(
R/R
R0RRR3R4RtsockettgethostnameR:RR‘(Rtheadttail((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytget_vault_data_directoryžs	
cCsrtjjƒdkrNtj|dƒ}tjjtƒ|d|dƒ}n tjjtƒd|dƒ}|S(NRR+sworkload_%stworkload_id(	R/R
R0R1R2R3R4RR¸(tworkload_metadataR@t
workload_path((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytget_workload_path«s			cCs-t|ƒ}tjj|d|dƒ}|S(Nssnapshot_%sR­(R¼R3R4R(tsnapshot_metadataR»t
snapshot_path((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytget_snapshot_path¹scCs-t|ƒ}tjj|d|dƒ}|S(Nsvm_id_%stsnapshot_vm_id(R¿R3R4R(tsnapshot_vm_metadataR¾tsnapshot_vm_path((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytget_snapshot_vm_pathÀscCsCt|ƒ}tjj|d|d|djddƒfƒ}|S(Nsvm_res_id_%s_%stsnapshot_vm_resource_idtsnapshot_vm_resource_namet R((RÃR3R4Rtreplace(tsnapshot_vm_resource_metadataRÂtsnapshot_vm_resource_path((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytget_snapshot_vm_resource_pathÇs	
cCs)t|ƒ}tjj||dƒ}|S(Ntvm_disk_resource_snap_id(RÊR3R4R(t"snapshot_vm_disk_resource_metadataRÉtsnapshot_vm_disk_resource_path((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pyt"get_snapshot_vm_disk_resource_pathÒs		
cCsÇt|ddƒtjjdƒr„tdƒ}|jƒ}WdQXx>|D]3}|jddƒ}|jd|dƒrJ|SqJWnt	t
jƒr£t
jd}nd}||dd|d}|S(Nt	containers/tmp/swift.outs
R(t_R¹t
workload_name(tswift_list_allR=R3R4RR8R9RÇtendswithR;R/R(tcontextRºRBtcontentRÏ((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytget_swift_containerÜs
tloggercCsÛtjjƒdkstjr¼t|ƒ}tjj|ƒ\}}tj	|ƒd|dd|dd}t
j|ƒt|||dƒd|dd|dd}t
j|ƒntjjƒd	ksÚtjrÅd|dd|dd
}t
j|ƒt|ƒ}|j
tƒddƒ}t||ƒ}yt||g|d
|ƒWq×tk
rÁ}	t
j|	ƒd}
d||
d|dd
}t
j|ƒt||g|d
|ƒq×Xntjdkr×ndS(NRsUploading 'RÅs' of 'tsnapshot_vm_names' to backup mediaRisFinished Uploading 'sswift-is' to object storeR(itobject_namesRetrying to upload 'R*(R/R
R0RRÎR3R4R:RR‘R”tinfoRRÇR¸RÖtswift_upload_filesRgR(RÔRÌRÍtcopy_to_file_pathR¶R·tprogress_msgRÙRÏR–trname((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pyt upload_snapshot_vm_disk_resourceïsR	

	
			

cCsf	i}tjdkrg|s0tjddƒ‚n|j}tj|jƒ}de}de}de}	de}
n0de}de}tj}tj	}tj
}	tj}
tjdkrHi,t
d6dd6ded6ded	6ded
6ded6ded6gd
6dd6td6ded6ded6td6ded6ded6t
d6dd6|d6ded6ded6ded6tjd6ded6dd6|d 6t
d!6dd"6|d#6ded$6|d%6|	d&6ded'6t
d(6d)d*6ded+6td,6td-6t
d.6|d/6ided06ded16ded26ded36ded46|d56ded66ded76ded86ded96ded:6ded;6|d<6ded=6d>6t
d?6ded@6dedA6dd6}n½tjdBkr`dC}ndD}i,t
d6dd6|d6ded	6ded
6|
d6ded6gd
6|d6td6|	d6ded6td6ded6ded6t
d6dd6|d6ded6ded6ded6tjd6ded6dd6|d 6t
d!6dd"6|d#6|d$6|d%6|	d&6ded'6t
d(6d)d*6ded+6td,6td-6t
d.6|d/6ided06ded16|
d26ded36ded46|d56ded66ded76ded86ded96ded:6ded;6|d<6ded=6d>6t
d?6ded@6dedA6dd6}|ddek	rIt|ƒdkr<tjddEƒ‚qI|dF}n|drîyt|dƒWqîtk
rêy5dGj|ddHjƒƒ}
t|ddH ƒ}Wn#tk
rÏtjddIƒ‚nXtdJ|
|ƒ|_qîXntdK|ƒc}yg}g}x²|D]ª}t|ƒr8|j|ƒqt|ƒrªxyt|ƒD]R\}}}||sz|j|ƒqQ|jg|D]}t||ƒ^q‡ƒqQWqtjddL|ƒ‚qW|ddek	rTg|D]+}t|d|j||ddƒƒ^qÛ}g|D]8}tded|j||ddƒdKitdM6ƒ^q}n{g|D]*}t|d|jt ƒdNdƒƒ^q[}g|D]7}tded|jt ƒdNdƒdKitdM6ƒ^q’}xA|j!|||ƒD])}|dOr¡|dr	dP|krM|dPdkrMdQ|kr›t"j#dR|dQ|dPfƒq›qždQ|krmt"j#|dQƒqždS|kržt"j#dT|dS|dUfƒqžq	qæ|dV}dW|kr¨|dWdXkr¨t$|t%ƒrm|dYrdZ|dYkrd[|dYdZj&ƒ}qwd\jd]„|j'|j(fDƒƒ}|j)r`|rL|d^7}n||j)d_ 7}nd`|}n
d`|}t"j*da||ƒtjdda||fƒ‚qæt"j*db|ƒt$|t%ƒoÔ|j'dck}|rý|ddFkrýt"j+ddƒntjd|ƒ‚qæWWnEt,k
r9	}t"j|ƒ‚n#t-k
r[	}t"j|ƒ‚nXWdeQXdeS(fs( upload a files or directories to swift sswift-iRRs,Error: context is none with integrated swifttTEMPAUTHtuse_sloitverbosetos_usernametos_user_domain_namet	os_cacerttos_tenant_nametos_user_domain_idtheaders1.0tauth_versiontssl_compressiontos_passwordt
os_user_idtskip_identicaltsegment_containert
os_project_idtsneti
tobject_uu_threadsRÙtos_tenant_idtos_project_nametos_service_typetsegment_sizetos_helptobject_threadstos_storage_urltinsecuretsegment_threadstauthtos_auth_urltusertkeytos_region_nameRÚitretriestos_project_domain_idtchecksumtchangedtleave_segmentst
os_auth_tokentproject_nametregion_namettenant_nametuser_domain_namet
endpoint_typetobject_storage_urltproject_domain_idtuser_idtuser_domain_idt	tenant_idtservice_typet
project_idt
auth_tokentproject_domain_namet
os_optionstdebugtos_project_domain_nametos_endpoint_typeRs2.0t3s+object-name only be used with 1 file or diritBKMGiÿÿÿÿsInvalid segment sizeitoptionssLocal file '%s' not found.t
dir_markerR(tsuccesstattemptstobjects%s [after %d attempts]t
for_objects
%s segment %st
segment_indexterrortactiontcreate_containertheaderssX-Storage-Policys with Storage Policy %sRÆcss|]}t|ƒVqdS(N(Re(t.0RŸ((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pys	<genexpr>ðss: i<s: %ss(Warning: failed to create container %r%ss%sis<Consider using the --segment-size option to chunk the objectN(.R/R
RRVRR$tto_dictR=RRRRRRLR`R!R;tintt
ValueErrortindextupperReRõR	RtappendRRtextendRRRÇR¸tuploadR”RÚt
isinstanceRtstripthttp_statusthttp_reasonthttp_response_contenttwarningR!R
Rg(RÔtfilesRÏRÙRRRtauth_urlt	user_nameRRRét	orig_pathtsize_modt
multipliertswifttobjstdir_markersRBt_dirt_dst_fst_ftotdR-R!RRt	too_largeR–((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pyRÛ5sN							

	

	





0	5E4A

		

	


	
	

cCs7tjdkrŽ|s*tjddƒ‚ntj|jƒ}tjdkrmdddd|jd	|g}q3ddd
d|jd	|g}n¥tjdkrÁddtjd
tj	ddg}nrtjdkrddddtjdtj
dtj	ddg}n0ddd
dtjdtj
dtj	ddg}|S(Nsswift-iRRs,Error: context is none with integrated swiftRR:s--auth-versiont2s--os-auth-tokens--os-storage-urlRRàs-As-Us-Ks******s
--os-auth-urls--os-tenant-names
--os-usernames
--os-password(R/R
RRVR$R&RRRRR(RÔRtcmd((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytget_swift_base_cmdsB											c
Csat|ƒ}|r%|d|g}n
|dg}dj|ƒ}x\t|ƒD]N\}}|dkr{tj||d<Pn|dkrNtj||d<PqNqNWtjjdƒrÂtjdƒnt	j
|ƒx‹tdtjƒD]w}y6t
ddƒ!}tj|d	td
|ƒPWdQXWqâtk
rX}	t	j|	ƒ|tjkrY|	‚qYqâXqâWdS(NtlistRÆs
--os-passwordis-Ks/tmp/swift.outitwR‚tstdout(RFRRƒR/RR3R4RtremoveR”RtrangeR#R8R…R’RLRgR(
RÔRÏREtcmd_listtcmd_list_strR‡topttiRBR–((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pyRÒ:s0


cCsQy$|d}|dd}|d}|ddkrQ|jdƒ}|d}n|jd	d&ƒ}|d&k	r#x±|jƒD] \}}	x‘|	jƒD]ƒ\}	}
xt|
D]l}|dd
krótjj|ƒtkrótjd||fƒq¨q¨|d}tjj	|ƒ\}
}|d
kr:tjj	|
ƒd}n|
}tjj
||||jdƒdkrq|dn|ƒ}tj
|ƒdttjƒƒ}|ddkr±i|d6|d6|d6|d6|d6}tjd|}|dd|dddd||dddd|d||g}tjd|}|dd d!|g}xÂ|||gD]K}d"j
|ƒ}tjd#|ƒtj|ƒ}tj||d$|ƒq_Wq¨dd%tjdd||g}d"j
|ƒ}tjd#|ƒtj|ƒ}tj||d$|ƒq¨Wq•Wq|WnWn&tk
rL}tj|ƒ|‚nXd&S('s÷copy all config path for given services on target backup media
       given by the user, For ex:

       service_to_backup :
           compute:
                  config_dir:
                     - /etc/nova
                     - /var/lib/nova

                  log_dir:
                     - /var/log/nova

           glance:
                 config_dir:
                     - /etc/glance
                     - /var/lib/glance

                 log_dir:
                     - /var/log/glance
    thostttrusted_usertusernametauthorized_keyttargett
controllertremote_hostthostnametservices_to_backuptcomputes2Given backup path:%s for service: %s doesn't existtbackup_directoryR(iR³is/tmp/Rýtsource_patht	dest_pathtsshssudo tmkdirs&&R€tcps-rtchowns-Rt:tscptrms-rfRÆsbackup_config_files cmd %s t
progress_files
nova-rootwrapN(R<R=t	iteritemsR3R4RfRLR”R3R:RtfindRR‘Retuuidtuuid4t
get_cmd_specsRtrun_cmdtpoll_processR/R„RgR(RÔRitparamsRPRýRSRVtservice_to_backuptservicetconfigtdirstdir_pathRZR¶R·tservice_dir_pathtbackup_dest_pathttemp_dirtkwargstssh_cmdtcmd1tcmd2tcmd3tcmdspecREtprocessR–((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytbackup_config_filesYs€




(

	#
cCsàz¼y|jddƒ}|dd}|d}|dk	r‘xR|jƒD]A\}}|d}|d}	|d}
|d}tjj||
d	tttjƒƒƒd
ƒ}t	|dƒ}
i|d6|d6|
d6}d||	f}t
jd
|}||g}dj|ƒ}tj
d|ƒt
j|d|
ƒ}t
j||d|ƒ}|rId|
|jjƒf}tjd|ƒ‚qIqIWnWn&tk
rº}tj|ƒ|‚nXWd|
tƒkrÛ|
jƒnXdS(sTake dump of given databases.t	databasesRQRRRSRýRRPRZRÐs_database_dump.sqlRHs#mysqldump -u%s -p%s --all-databasesR]RÆs!Taking backup of database cmd %s RIRds1Error while taking database backup on node %s: %sR,N(R<R=ReR3R4RReR'ttimeR8RRiR”RRjRktstderrRaR6t
ErrorOccurredRgRtlocalstclose(RÔRiRlR}RQRStdatabasetdatabase_credsRýRRPRZRst	dump_fileRut
mysql_dumpRvRzRER{treturn_codetmessageR–((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pytbackup_database¾sH




	*


 
ii(Jt__doc__RgR1R3RYR~R…R´tos.pathRRRRtoslo_logRtloggingtImportErrortnova.openstack.commontoslo_configRtoslo.configtnovaRtcontegoRRR6t	getLoggert__name__R”tLoggertswiftclient.serviceR	R
Rtswiftclient.exceptionsRRgR–tStrOpttIntOpttcontego_vault_optsR/t
register_optst
import_optt
BaseExceptionRHRQR`RvR}RRŠR—R§RªR¬R¯R±R¸R¼R¿RÃRÊRÎRÖt
log_methodRßR=RÛRFRÒR|R‰(((sX/home/tvault/.virtenv/lib/python2.7/site-packages/contego/nova/extension/driver/vault.pyt<module>sØ

	

	%	8		.	4			
				
	FÚ*e