f?BddlZddlZddlZddlZddlZddlZddlZddlmZm Z m Z m Z m Z ejeZdZdZdgZGdde j&ZGdd eZGd d eZGd d ZdZdZ ddZddZdZeZee j>ffgZ dZ!y)N) atomic_helpernetsourcessubputilziid-dsopennebulanobody context.shc@eZdZdZdZdZdZdZedZ d dZ y) DataSourceOpenNebula OpenNebulactjj||||d|_tj j |jd|_y)N opennebula)r DataSource__init__seedospathjoinseed_dir)selfsys_cfgdistropathss H/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOpenNebula.pyrzDataSourceOpenNebula.__init__$s=##D'65A  U^^\B c~tjj|}|d|jd|jdS)Nz [seed=z ][dsmode=])rr__str__rdsmode)rroots rrzDataSourceOpenNebula.__str__)s-!!))$/,0$))T[[IIrc,dti}d}d}t}d|jvr|jjd}|jg}|j t |D]} tjj|jrt||j|}nM|jdr->-(#{{.* #mmD2HIG 2D95 8Z    X /,, [[ "DKKOOH$= >   ;;'11 1 {{#78  #KK 3?% '  (( : 2D9 :s%(BG  HH!G##,HHc`|j|jvrd}nd}|d|jdS)z/Return the subplatform metadata source details.zseed-dirz config-diskz ())rr)rsubplatform_types r_get_subplatformz%DataSourceOpenNebula._get_subplatformjs- ==DII %) , ,dii88rc4|j |jSyN)r>)rs rnetwork_configz#DataSourceOpenNebula.network_configrs << #<< rc|"|jtjk(rd}nd}tjj |||S)NTF)rrDSMODE_NETWORKr get_hostname)rfqdn resolve_ip metadata_onlys rrQz!DataSourceOpenNebula.get_hostnameys?  {{g444! " !!..tT:FFrN)FFF) __name__ __module__ __qualname__dsnamerrrGrKpropertyrNrQrrr r s8 FC J;z9 Grr c eZdZy)r5NrUrVrWrZrrr5r5rr5c eZdZy)r6Nr\rZrrr6r6r]rr6cXeZdZddZdZdZdZdZdZdZ d Z d Z d Z dd Z d Zy)OpenNebulaNetworkNc||_| t|}tjt |j dDcgc]}|c}|_i|_|j D]J\}}tjd|}|s|jd|j|j<Lycc}w)Nc2tj|dS)N)rnatural_sort_key)ks rz,OpenNebulaNetwork.__init__..s#"6"6qt"<r)keyz ^(.+)_MAC$rc) contextget_physical_nics_by_mac collections OrderedDictsorteditemsifacescontext_devnamerematchgrouplower)rrhrsystem_nics_by_macrevms rrzOpenNebulaNetwork.__init__s  %!9&!A !-- &,,.<     "MMO =DAq*A23''!*$$QWWY/ = s B<c dj|jdddDcgc]}tt|dc}Scc}w)N.:)rsplitstrint)rmaccs rmac2ipzOpenNebulaNetwork.mac2ips8xx#))C.2DEQSBZEFFEsAci}|j|ddj}|j|jj ddj|r||d<|j|ddj}|r||d<|S)NdnsDNS addresses search_domainsearch) get_fieldr|r-rhr,)rdev nameserversrrs rget_nameserversz!OpenNebulaNetwork.get_nameserverss nnS%,224 4<<##E2.4467 '*K $sOR@FFH $1K !rc&|j|dS)Nmturrrs rget_mtuzOpenNebulaNetwork.get_mtus~~c5))rcF|j|d|j|S)Nip)rr)rrrs rget_ipzOpenNebulaNetwork.get_ips~~c4S)9::rcg}|j|d}|r|j||j|d}|r|j||S)Nip6ip6_ula)rappend)rr addresses6rrs rget_ip6zOpenNebulaNetwork.get_ip6sO nnS%(    c "..i0    g &rc(|j|ddS)Nip6_prefix_length64rrs rget_ip6_prefixz OpenNebulaNetwork.get_ip6_prefixs~~c#6==rc&|j|dS)Ngatewayrrs r get_gatewayzOpenNebulaNetwork.get_gateways~~c9--rcH|j|d|j|dS)N ip6_gatewaygateway6rrs r get_gateway6zOpenNebulaNetwork.get_gateway6s'~~ sJ ?  rc(|j|ddS)Nmaskz 255.255.255.0rrs rget_maskzOpenNebulaNetwork.get_masks~~c6?;;rc|jjdj||fj}|dvr|S|S)zreturn the field name in context for device dev. context stores _ (example: eth0_DOMAIN). an empty string for value will return default._)Nr)rhr,rupper)rrnamedefaultvals rrzOpenNebulaNetwork.get_fieldsL ll HH  eg  +w44rci}d|d<i|d<i}|jjD]J\}}|j}|jj ||}i}d|i|d<g|d<|j |}t tj|}|dj|j||dz|z|j|} | r9|j|} |dj| D cgc] } | dz| z c} |j|} | r| |d<|j|} | r| |d <|j!|}|r||d <|j#|}|r||d <|||<M||d<|Scc} w) Nrzversion ethernets macaddressrqr/gateway4rrr)rnrmrsror,rr}ripv4_mask_to_net_prefixrrrrr-rrrr)rnetconfrrrc_devdevconfrprefixrprefix6irrrrs rgen_confzOpenNebulaNetwork.gen_confs !   ))+. %HC))+C((,,S#6EG!-c2GG $&GK =='D44T:;F K ' ' E3(?#(E(N Oe,J--e4 $++0:;1QWw&; &&u-G&- #((/H&. #..u5K)4 &,,u%C!$$IcN]. %` ) 5 rM)rUrVrWrrrrrrrrrrrrrZrrr`r`s?=,G *;>. <5 7rr`cg}dD]D}tj|}|j|D]}||vs|j|F|S)zE Return a list of devices that may contain the context disk. )z LABEL=CONTEXTz LABEL=CDROMz TYPE=iso9660)rfind_devs_withsortr)combinedfdevsds rr.r.s[H =#""1%  #A " ## Orc dd|gS)Nsudoz-urZusers rswitch_user_cmdr)s D$ rct|tr|g}n|ddg}|t}tjdzDcgc]}d|z }}|}||}g}dj d}d} d|z| |zd |zzdz| |zdz} g} |||} | j |tj| | \} } d }i}i}d}| d d } | jdD]C} |jdd\}}||ur|||<n!||vr||vs|j||k7r|||<E|Scc}w#t$r|dk7r||}n||ur|}YiwxYw)Nbashz-erz${!%s*} )z__v="";rcRdjdddj|zdddfS)Nrzprintf "%s\0" _start_zfor __v in %s; do z% printf "%s=%s\0" "$__v" "${!__v}";doner)r)vlists r varprinterz&parse_shell_config..varprinterIs4yy(#chhuo58    rz unset IFS z{ %s : } > /dev/null )data) EPOCHREALTIME EPOCHSECONDSRANDOMLINENOSECONDSrSRANDOM__vr=rc_start_) isinstancer}rstring ascii_lettersrr-rr|r, ValueError)contentkeylistrr$switch_user_cbxallvars keylist_insetuprbcmdcmdoutput_errorexcludedpresetrettargetlinergrs rparse_shell_configr-s$v ~('-&:&:S&@Ay1}AGAJ II  E  0    W   (' 1 2    W        C V$JJtyy40VV HF C F Ab\F V$ C+JS#!s H$z!VZZ_%;C" JuBd y ~6!  s D"AD''EEcHi}tD]G}tjj||}tjj |sC|||<I|st |ddi}did}d|vr\| t j| tjj|d} tj| } t| |}n t d |s|S||d <d} d |vrd } nd|vrd} | rS|j#| j%} | D cgc]"} t'| s| j)dr!| $c} |d d<dD]}||vs|||d d<nd|vr |d|d<n d|vr|d|d<d|vrB|j#d|j#d}|dk(r t+j,|d|d<|Dcgc]}t5j6d|s|}}|rt9||}|j;|d<|S#t$r!}tdj||d}~wwxYw#tj$r}td |z|d}~wt $r}t d |z|d}~wwxYwcc} w#t.$rt0j3dYwxYwcc}w)z read_context_disk_dir(source_dir): read source_dir and return a tuple with metadata dict and user-data string populated. If not a valid dir, raise a NonContextDiskDir z: zno files foundN)r(r%r z'configured user '{user}' does not existrr#zError processing context.sh: %szError reading context.sh: %szMissing context.shr%SSH_KEYSSH_PUBLIC_KEY#z public-keys) SET_HOSTNAMEHOSTNAME PUBLIC_IP IP_PUBLICETH0_IPzlocal-hostname USER_DATAr(USERDATAUSERDATA_ENCODINGUSER_DATA_ENCODINGbase64z"Failed base64 decoding of userdataz ^ETH\d+_IP.*$r')CONTEXT_DISK_FILESrrrisfiler5pwdgetpwnamKeyErrorr6formatrload_text_filerrProcessExecutionErrorIOErrorr, splitlineslenr1rb64d TypeErrorr8r9rprqr`r) source_dirrr$foundaffnrhrAerr ssh_key_varlinesrreencoding ipaddr_keysonets rr0r0s E  WW\\*b ) 77>>" E"I J8H IJJGR0Gu    V$ 77<< L9D))$/G(@G 455 !GJKG W $&  K(335". c$i8LD.  M* O <4;AJGJ  0 1  g%k2  w %j1 W;; -A!B  x  B&3&8&89L&M #&G2BA)F1GKG &1(, $% NO *=DD#E  )) &1Q7  #.!4  *. 2 B @A B Hsm3H AH1I6%I67I6 I;?JJ H. H))H.1I3I I3I..I3;JJc tj}t|jDcgc]%\}}|jj |s"||f'c}}Scc}}wrM)rget_interfaces_by_macdictrm networking is_physical)rrrvns rririsO  $ $ &D  JJLMDAqF,=,=,I,I!,L!QM Ms #A A c6tj|tSrM)rlist_from_depends datasources)dependss rget_datasource_listr! s  $ $Wk ::r)NNNNrM)"rjr2loggingrrrpr cloudinitrrrrr getLoggerrUr8r)r*rrr Exceptionr5r6r`r.rrr0riDataSourceOpenNebulaNetDEP_FILESYSTEMrr!rZrrr(s ==g! "^_G7--_GD   9 MM`  CGhV]@/G2245 ;r