x[h>RddlZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z m Z m Z m Z ejeZdZdZdgZdZGdde j*ZGd d eZGd d eZGd dZdZdZdZddZddZdZ eZ!ee jDffgZ#dZ$y)N) atomic_helpernetsourcessubputilziid-dsopennebulanobody context.sh) EPOCHREALTIME EPOCHSECONDSRANDOMLINENOSECONDS_SRANDOM__vc@eZdZdZdZdZdZdZedZ d dZ y) DataSourceOpenNebula OpenNebulactjj||||d|_tj j |jd|_d|_y)N opennebula) r DataSource__init__seedospathjoinseed_dirnetwork)selfsys_cfgdistropathss H/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOpenNebula.pyrzDataSourceOpenNebula.__init__/sD##D'65A  U^^\B  c~tjj|}|d|jd|jdS)Nz [seed=z ][dsmode=])rr__str__rdsmode)rroots r#r'zDataSourceOpenNebula.__str__5s-!!))$/,0$))T[[IIr$c,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_subplatformvs- ==DII %) , ,dii88r$c4|j |jSyN)r)rs r#network_configz#DataSourceOpenNebula.network_config~s << #<< r$c|"|jtjk(rd}nd}tjj |||S)NTF)r(rDSMODE_NETWORKr get_hostname)rfqdn resolve_ip metadata_onlys r#rYz!DataSourceOpenNebula.get_hostnames?  {{g444! " !!..tT:FFr$N)FFF) __name__ __module__ __qualname__dsnamerr'rOrSpropertyrVrYr$r#rr+s7 F J;z9 Gr$rc eZdZy)r>Nr]r^r_rbr$r#r>r>r$r>c eZdZy)r?Nrdrbr$r#r?r?rer$r?cXeZdZddZdZdZdZdZdZdZ 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 r#z,OpenNebulaNetwork.__init__..s#"6"6qt"<r$)keyz ^(.+)_MAC$rk) contextget_physical_nics_by_mac collections OrderedDictsorteditemsifacescontext_devnamerematchgrouplower)rrpr!system_nics_by_macrmvms r#rzOpenNebulaNetwork.__init__s  %!9&!A !-- &,,.<     "MMO =DAq*A23''!*$$QWWY/ = s B<c dj|jdddDcgc]}tt|dc}Scc}w)N.:)rsplitstrint)rmaccs r#mac2ipzOpenNebulaNetwork.mac2ips8xx#))C.2DEQSBZEFFEsAci}|j|ddj}|j|jj ddj|r||d<|j|ddj}|r||d<|S)NdnsDNS addresses search_domainsearch) get_fieldrr6rpr5)rdev nameserversrrs r#get_nameserversz!OpenNebulaNetwork.get_nameserverss nnS%,224 4<<##E2.4467 '*K $sOR@FFH $1K !r$c&|j|dS)Nmturrrs r#get_mtuzOpenNebulaNetwork.get_mtus~~c5))r$cF|j|d|j|S)Nip)rr)rrrs r#get_ipzOpenNebulaNetwork.get_ips~~c4S)9::r$cg}|j|d}|r|j||j|d}|r|j||S)Nip6ip6_ula)rappend)rr addresses6rrs r#get_ip6zOpenNebulaNetwork.get_ip6sO nnS%(    c "..i0    g &r$c(|j|ddS)Nip6_prefix_length64rrs r#get_ip6_prefixz OpenNebulaNetwork.get_ip6_prefixs~~c#6==r$c&|j|dS)Ngatewayrrs r# get_gatewayzOpenNebulaNetwork.get_gateways~~c9--r$cH|j|d|j|dS)N ip6_gatewaygateway6rrs r# get_gateway6zOpenNebulaNetwork.get_gateway6s'~~ sJ ?  r$c(|j|ddS)Nmaskz 255.255.255.0rrs r#get_maskzOpenNebulaNetwork.get_masks~~c6?;;r$c|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.r)Nr)rpr5rupper)rrnamedefaultvals r#rzOpenNebulaNetwork.get_fieldsL ll HH  eg  +w44r$ci}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) Nrversion ethernets macaddressryr/gateway4rrr)rvrur{rwr5rrripv4_mask_to_net_prefixrrrrr6rrrr)rnetconfrrrc_devdevconfrprefixrprefix6irrrrs r#gen_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 rU)r]r^r_rrrrrrrrrrrrrbr$r#rhrhs?=,G *;>. <5 7r$rhcg}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 r#r7r7&s[H =#""1%  #A " ## Or$c dd|gS)Nsudoz-urbusers r#switch_user_cmdr5s D$ r$c,tjdS)zDprint the shell environment variables within delimiters to be parsedz printf "%s\0" _start_ [ $0 != 'sh' ] && set -o posix set [ $0 != 'sh' ] && set +o posix printf "%s\0" _start_ )textwrapdedentrbr$r# varprinterr9s ??  r$cd|jvrtjdtd|zztzdz}g}| t |}|j ddgt j ||j}i}|jd d d}|d |d }}td tj|D} tdtj|D} t| jjt| jD]9} | tvr | j| } |  | | j| k7s5| || <;|S)a<run content and return environment variables which changed WARNING: the special variable _start_ is used to delimit content a context.sh that defines this variable might break in unexpected ways compatible with posix shells such as dash and ash and any shell which supports `set -o posix` s_start_zYUser defined _start_ variable in context.sh, this may breakcloud-init in unexpected ways.z{ %s : } > /dev/null  Nshz-e)dataz_start_rkrrc3BK|]}|jddyw=rk)maxsplitNr.0variables r# z%parse_shell_config..}s",4sQ'c3BK|]}|jddywrrrs r#rz%parse_shell_config..s",4sQ'r)encoderArBrrr6rstdoutrdictshlexsetkeysunion EXCLUDED_VARSr5) contentr-bcmdcmdoutputretsectionsbeforeafterpre_envpost_envrovalues r#parse_shell_configrFsr))  - $  '' 1 2 ,     C f%JJd| YYs & - -F C||M*12.H QK!EF8= F8KG8= E8JH7<<>"((X]]_)=> -   S!  '++c*:!:CH  Jr$cHi}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)r1r.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_DATAr1USERDATAUSERDATA_ENCODINGUSER_DATA_ENCODINGbase64z"Failed base64 decoding of userdataz ^ETH\d+_IP.*$r0)CONTEXT_DISK_FILESrrrisfiler>pwdgetpwnamKeyErrorr?formatrload_text_filerrProcessExecutionErrorIOErrorr5 splitlineslenr:rb64d TypeErrorrArBrxryrhr) source_dirr!r-foundaffnrprIerr ssh_key_varlineslinermencoding ipaddr_keysonets r#r9r9s 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}}wrU)rget_interfaces_by_macrru networking is_physical)r!rr~ns r#rqrqsO  $ $ &D  JJLMDAqF,=,=,I,I!,L!QM Ms #A A c6tj|tSrU)rlist_from_depends datasources)dependss r#get_datasource_listr&s  $ $Wk ::r$rU)%rrr;loggingrrrxrr cloudinitrrrrr getLoggerr]rAr2r3rrrr Exceptionr>r?rhr7rrrr9rqDataSourceOpenNebulaNetDEP_FILESYSTEMr$r&rbr$r#r-s ==g! "^  `G7--`GF   9 MM`   DN]@/G2245 ;r$