܍~c?DddlZddlZddlZddlZddlZddlZddlmZddlm Z m Z m Z m Z ej eZdZdZdgZGdde jZGd d eZGd d eZGd dZdZdZ ddZddZdZeZee jffgZ dZ!dS)N)log)netsourcessubputilziid-dsopennebulanobody context.shcHeZdZdZdZdZdZdZedZ d dZ d S) DataSourceOpenNebula OpenNebulactj||||d|_tj|jd|_dS)N opennebula)r DataSource__init__seedospathjoinseed_dir)selfsys_cfgdistropathss H/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOpenNebula.pyrzDataSourceOpenNebula.__init__$sC##D'65AAA  U^\BB cjtj|}|d|jd|jdS)Nz [seed=z ][dsmode=])rr__str__rdsmode)rroots rrzDataSourceOpenNebula.__str__)s5!))$//,0DD$)))T[[[IIrc<dti}d}d}t}d|jvr|jd}|jg}|t |D]} tj |jrt||j |}nK| dr6tjt||j }tj||}nJ#t"$rYt$$r}|d}~wtj$rt(d|YnwxYw|r|}t(d|n|sdS|d } tj| |g} ||d |jd g|_|jt4jkrdS||_|d |_| |_|d |_dS)Nz instance-id parseuserasuserz/dev)r$rz%s was not mountablezfound datasource in %sFmetadataDSMODErnetwork-interfacesuserdataT) DEFAULT_IIDDEFAULT_PARSEUSERds_cfggetrextendfind_candidate_devsrrisdirread_context_disk_dirr startswith functoolspartialrmount_cbNonContextDiskDirBrokenContextDiskDirMountFailedErrorLOGwarningdebug mergemanydict_determine_dsmoderrDSMODE_DISABLEDrnetworkr% userdata_raw) rdefaultsresultsrr" candidatescdevpartially_applied_funcexcmds r _get_datazDataSourceOpenNebula._get_data-sS!;/& $+ % %  44Im_ -//000  D :7==// J3dk)GG__V,, J.7->-(#{...* #mD2HIIG$   '    ( : : : 2D99999 :  2D999   5Z   X / /,, [[ " "DKOOH$=$= >    ;'1 1 15 {{#788  #KK 33ts%&BC.. D5: D5D-D54D5cB|j|jvrd}nd}|d|jdS)z/Return the subplatform metadata source details.zseed-dirz config-diskz ())rr)rsubplatform_types r_get_subplatformz%DataSourceOpenNebula._get_subplatformjs7 =DI % %)  , ,,,diii88rc"|j|jSdSN)r>)rs rnetwork_configz#DataSourceOpenNebula.network_configrs < #< 4rFc|||jtjkrd}nd}tj|||S)NTF)rrDSMODE_NETWORKr get_hostname)rfqdn resolve_ip metadata_onlys rrQz!DataSourceOpenNebula.get_hostnameys?  {g444! " !..tT:FFFrN)FFF) __name__ __module__ __qualname__dsnamerrrGrKpropertyrNrQrrr r s FCCC JJJ;;;z999X GGGGGGrr ceZdZdS)r5NrUrVrWrZrrr5r5Drr5ceZdZdS)r6Nr\rZrrr6r6r]rr6cfeZdZddZdZdZdZdZdZdZ d Z d Z d Z d Z d ZddZdZdS)OpenNebulaNetworkNc||_|t|}tjdt |dD|_i|_|D]K\}}tj d|}|r/| d|j| <LdS)Ncg|]}|SrZrZ.0ks r z.OpenNebulaNetwork.__init__..s(      rc6tj|dS)N)rnatural_sort_key)res rz,OpenNebulaNetwork.__init__..s#"6qt"<"<r)keyz ^(.+)_MAC$rh) contextget_physical_nics_by_mac collections OrderedDictsorteditemsifacescontext_devnamerematchgrouplower)rrlrsystem_nics_by_macrevms rrzOpenNebulaNetwork.__init__s  %!9&!A!A !-  &,,..<<       "MMOO = =DAq**A =23''!**$QWWYY/ = =rcvdd|dddDS)N.cHg|]}tt|d S))strint)rdcs rrfz,OpenNebulaNetwork.mac2ip..s&EEEQSBZZEEEr:)rsplitrmacs rmac2ipzOpenNebulaNetwork.mac2ips6xxEE#))C..2DEEEFFFrcd||dddzS)Nr|rz.0)r rpartitionrs r mac2networkzOpenNebulaNetwork.mac2networks,{{3**3//2T99rcJi}||dd}||jdd|r||d<||dd}|r||d<|S)NdnsDNS addresses search_domainsearch) get_fieldrr-rlr,)rdev nameserversrrs rget_nameserversz!OpenNebulaNetwork.get_nameserverss nnS%,,2244 4<##E2..4466777  +'*K $sOR@@FFHH  2$1K !rc.||dS)Nmturrrs rget_mtuzOpenNebulaNetwork.get_mtus~~c5)))rcV||d||S)Nip)rrrrrs rget_ipzOpenNebulaNetwork.get_ips$~~c4S)9)9:::rcg}||d}|r||||d}|r|||S)Nip6ip6_ula)rappend)rr addresses6rrs rget_ip6zOpenNebulaNetwork.get_ip6sk nnS%((  #   c " " "..i00  '   g & & &rc0||ddS)Nip6_prefix_length64rrs rget_ip6_prefixz OpenNebulaNetwork.get_ip6_prefixs~~c#6===rc.||dS)Ngatewayrrs r get_gatewayzOpenNebulaNetwork.get_gateways~~c9---rcX||d||dS)N ip6_gatewaygateway6rrs r get_gateway6zOpenNebulaNetwork.get_gateway6s/~~ sJ ? ?   rc0||ddS)Nmaskz 255.255.255.0rrs rget_maskzOpenNebulaNetwork.get_masks~~c6?;;;rcV||d||S)Nr>)rrrs r get_networkzOpenNebulaNetwork.get_networks&~~c9d.>.>s.C.CDDDrc|jd||f}|dvr|n|S)zreturn the field name in context for device dev. context stores _ (example: eth0_DOMAIN). an empty string for value will return default._)Nr)rlr,rupper)rrnamedefaultvals rrzOpenNebulaNetwork.get_fieldsX l HH   egg   ++ww4rcPi}d|d<i|d<i}|jD]v\}}|}|j||}i}d|i|d<g|d<||}t tj|}|d | ||dz|z| |} | r<| ||d fd| D||} | r| |d <||} | r| |d <||} | r| |d <||} | r| |d <|||<x||d<|S) Nrversion ethernets macaddressrur/c g|] }|dzz S)rrZ)rdiprefix6s rrfz.OpenNebulaNetwork.gen_conf..s";;;1QWw&;;;rgateway4rrr)rrrqrwrsr,rrripv4_mask_to_net_prefixrrrrr-rrrr)rnetconfrrrc_devdevconfrprefixrrrrrrs @rgen_confzOpenNebulaNetwork.gen_confs !   ))++. %. %HC))++C(,,S#66EG!-c2GG $&GK ==''D4T::;;F K ' ' E3(?(?#(E(N O O Oe,,J --e44 $++;;;; ;;; &&u--G .&- #((//H /&. #..u55K 5)4 &,,u%%C %!$$IcNN( rrM)rUrVrWrrrrrrrrrrrrrrrZrrr`r`s====,GGG:::   ***;;;>>>...   <<<EEE5555 77777rr`cg}dD]H}tj|}||D]}||vr||I|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. snH =##"1%%  # #A  """ # Orc dd|gS)Nsudoz-urZusers rswitch_user_cmdr/s D$ rct|tr|g}n|ddg}|t}dtjdzD}|}||}g}dd}d}d|z||zd |zzdz||zdz} g} | ||} | |tj| | \} } d } i}i}d}| d d } | dD]n} |dd\}}||ur|||<n&|| vr"||vs| ||kr|||<M#t$r|dkr||}n||ur|}YkwxYw|S)Nbashz-ecg|]}d|zS)z${!%s*}rZ)rdxs rrfz&parse_shell_config..AsAAAy1}AAArr )z__v="";rcbdddd|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..varprinterOs;yy(#chhuoo58     rz unset IFS z{ %s : } > /dev/null )data) EPOCHREALTIME EPOCHSECONDSRANDOMLINENOSECONDSrSRANDOM__vr=rh_start_) isinstancerrstring ascii_lettersrr-rrr, ValueError)contentkeylistrr$switch_user_cballvars keylist_insetuprbcmdcmdoutput_errorexcludedpresetrettargetlinerkrs rparse_shell_configr3s)$v ~(BAf&:S&@AAAGJ II   E    0    *W    (' 1 2    *W         C nV$$JJty4000VV HF C F AbD\F V$$ C++JS#!s H$$z!!VZZ__%;%;C   y  ~6!!   Js2A D<<EEcHi}tD]F}tj||}tj|r|||<G|st |ddi}did}d|vr|L t j|n6#t$r)}td ||d}~wwxYw tj|d} tj | } t| |}nY#tj$r}td |z|d}~wt $r}t d |z|d}~wwxYwt d |s|S||d <d} d |vrd } nd|vrd} | r<|| } d| D|d d<dD]} | |vr|| |d d<nd|vr |d|d<nd|vr |d|d<d|vrx|d|d}|dkrI tj|d|d<n*#t($rt*dYnwxYwd|D}|r't/||}||d<|S)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_KEYcZg|](}t||d&|)S)#)lenr1)rdrs rrfz)read_context_disk_dir..sG. . . c$ii. 8<8L8L. . . . rz public-keys) SET_HOSTNAMEHOSTNAME PUBLIC_IP IP_PUBLICETH0_IPzlocal-hostname USER_DATAr(USERDATAUSERDATA_ENCODINGUSER_DATA_ENCODINGbase64z"Failed base64 decoding of userdatac<g|]}tjd||S)z ^ETH\d+_IP.*$)rtrurcs rrfz)read_context_disk_dir..s*GGG2BA)F)FG1GGGrr')CONTEXT_DISK_FILESrrrisfiler5pwdgetpwnamKeyErrorr6formatr load_filerrProcessExecutionErrorIOErrorr, splitlinesb64d TypeErrorr8r9r`r) source_dirrr$foundaffnrlrAerr ssh_key_varlinesreencoding ipaddr_keysonets rr0r0s E  W\\*b ) ) 7>>"   E"I KJJJ8H8H IJJJGR00Gu    V$$$$   *=DD#E   7<< L99DnT**G(@@@GG)   &1Q7    #.!4    4555 !GJKG W $ $&   K((3355. . ". . .  M* O <<4;AJGJ  0 1 E  g%k2  w  %j1 W;; -A!B!B   x   B&*i 0C&D&D ## B B B @AAAAA B HGgGGGK8 &11(, $% NsO5B B=$B88B=ADED)) E6E  E%I$I*)I*ctj}tfd|DS)NcRg|]#\}}j|||f$SrZ) networking is_physical)rdrznrs rrfz,get_physical_nics_by_mac..s7MMMDAqF,=,I,I!,L,LM!QMMMr)rget_interfaces_by_macdictrq)rrs` rrmrmsB  $ & &D MMMMDJJLLMMM  rc6tj|tSrM)rlist_from_depends datasources)dependss rget_datasource_listr2s  $Wk : ::r)NNNNrM)"rnr2rrrtr cloudinitrloggingrrrr getLoggerrUr8r)r*rrr Exceptionr5r6r`r.rrr0rmDataSourceOpenNebulaNetDEP_FILESYSTEMr0r2rZrrr9s $$$$$$............g!! "^_G_G_G_G_G7-_G_G_GD             9   SSSSSSSSl      CGhhhhV]]]]@/G245 ;;;;;r