x[hO3bdZddlZddlZddlZddlZddlmZddlZddlm Z m Z m Z eje ZGdde jZGddeZdd Zd Zd Zdd Zd ZdZdZdZdZGddeZee j:ffee j:e j<fffZdZ dZ!y)zZCloud-Init DataSource for OVF This module provides a cloud-init datasource for OVF data. N)minidom)sourcessubputilcDeZdZdZdZdZdZdZdZdZ e dZ y ) DataSourceOVFOVFctjj||||d|_tj j |jd|_d|_i|_ d|_ d|_ y)Novf)/zfile://) r DataSource__init__seedospathjoinseed_dir environmentcfgsupported_seed_starts_network_configselfsys_cfgdistropathss A/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOVF.pyrzDataSourceOVF.__init__ s\##D'65A  U^^U; %5"#cdtjj|}|d|jdS)Nz [seed=])rr __str__r)rroots rr!zDataSourceOVF.__str__)s'!!))$/!%tyy11rcg}i}d}d}ddi}t|jj\}}|r\tjj |jj|}t |\}}} ||_|j|nddtfdtfg} d} | D]\} } | }|sn|r;t |d\}}} ||_d|vr|dr |d|_ |j| |syd |vr|d r|d } d}|jD]}| j|s|}n|stjd | |yt!j"| d \}}}}tjd | t!j$||g}|j| t!j$||g}d j ||_||_||_||_ |_y)N instance-idz iid-dsovfzcom.vmware.guestInfoisoTnetwork-configFseedfromz Seed from %s not supported by %s)timeoutzUsing seeded cache data from %s,) get_ovf_envrrrrrread_ovf_environmentrappendtransport_vmware_guestinfotransport_iso9660rr startswithLOGdebugr read_seeded mergemanydictrmetadata userdata_rawvendordata_rawr)rfoundmdudvddefaultsseedfilecontentsrrnpname transfuncr( seedfoundprotomd_seed_s r _get_datazDataSourceOVF._get_data-s    ;  +4::+>+>?8 77<< 3 3X>D0:MRS'D  LL ()CD)*BD#% i$;  4Xt D R#+ #r)b1A.B+-.>+?D( T"  :*~HI33 &&u- %I   read_networkpropsr9rr: cfg_propsmd_props network_propspropvalrTs rr,r,s$ 8 $E B C B IKH%&M[[]" c : #D 8 BtH Y CI ] "| C!'!1!1#**,!?0@DDYO4[  "%%cjjl3"$ C= C AB C  "ZZ\ "s%AC#C*C'&C'*DDc d}|D]]}tjj||}tjj|sC t j |}||fcSy#t $rt jtd|YwxYw)N)z ovf-env.xmlz ovf_env.xmlz OVF_ENV.XMLz OVF-ENV.XMLzFailed loading ovf file %s)NF) rrrisfilerload_text_filerjlogexcr1)dirname env_namesfnamefull_fnr>s rr+r+sLIH'',,w. 77>>' " H..w7x(( H  H C!=wG Hs A&&$B  B c|syt|tstd|ztjj |}|j dr|jdd}|j dr|jdd}n|jddkDry|syd}tjjd|}tj|}|j|d uS) zTest if devname matches known list of devices which may contain iso9660 filesystems. Be helpful in accepting either knames (with no leading /dev/) or full path names, but do not allow paths outside of /dev/, like /dev/foo/bar/xxx. Fz Unexpected input for devname: %sz/dev/r rz^(sr[0-9]+|hd[a-z]|xvd.*)CLOUD_INIT_CDROM_DEV_REGEXN)rLstr ValueErrorrrnormpathr0 partitionsplitcountenvironrirecompilematch)devname default_regex devname_regexcdmatchs rmaybe_cdrom_devicers   %;gEFFggw'G'"##G,R0#--$R( s a  1MJJNN#?OMjj'G == ! --rctj}|jD]9\}}|d}|dk7r|rt|s|d}t |\}}|dus7|cS|rd}nd}tj |rd|zndDcgc]}t|r|} }| D]*} tj |t|\}}|dus(|cSycc}w#tj$rtjd|Y^wxYw)Nfstypeiso9660 mountpointFzTYPE=%s)mtypez%s not mountable as iso9660) rmountsrdrr+find_devs_withmount_cbMountFailedErrorr1r2) require_isordevinformp_fnamer>rdevss rr/r/s% [[]F\\^  Th Y ; !#&  , (_ 5 O  &&Ey5'8tL   c "  D   !%sKu!M VX 5 O  $$  II3S 9  sC "C)C=<C=cD||g}tj|\}}|||fSrQrrpctoolargcmdstdoutstderrs rexec_vmware_rpctoolr s* C.Cyy~VV   rcF|d|g}tj|\}}|||fS)Nz--cmdrrs r exec_vmtoolsdrs- GS !Cyy~VV   rcd\}}tjd}tjd}|r|t}}tj d||r |s|t }}tj d||stj dyd} |||S#tj $r}|r4||k(r/|jdk7rtjtd |Yd}~y|stjd Yd}~y tjd ||t cYd}~S#tj $r4}|jdk7rtjtd |Yd}~nd}~wwxYwYd}~yd}~wwxYw) N)NNvmtoolsdzvmware-rpctoolzdiscovered vmware-rpctool: %szdiscovered vmtoolsd: %szno rpctool discoveredctjd| ||d\}}}|r|Stjd|y#tj$r7}|j dk7r!tj d||j |d}~wwxYw)Nzquery guestinfo.ovfEnv with %szinfo-get guestinfo.ovfEnvz!cmd %s exited 0 with empty stdoutz%s exited with code %d)r1rr2rProcessExecutionError exit_codewarning)r rpctool_fnrrrEerrors rquery_guestinfoz3transport_vmware_guestinfo..query_guestinfo-s 17; '1LMNC II93 ?)) !# 4guOK sAAB 2BB rz+vmtoolsd failed to get guestinfo.ovfEnv: %sz$vmtoolsd fallback option not presentzfallback to vmtoolsd) rwhichrr1r2rrrrrur)rrrvmware_rpctoolrrs rr.r.sJ$GZzz*%HZZ 01N,.A 1>B"*MZG +X6  )* w 33  % % 8+!# F HH; <  HH+ ,"8]; ;)) !# F  9sHBE8*1E3 E3=!D$E8$E+7*E&!E3&E++E33E8cg}|js|S|jD]}||s |j||SrQ) hasChildNodes childNodesr-)node filter_funcretchilds r find_childr]sF C      u  JJu  Jrctj|}|jjdk7r t d|jj s t dd}t |jd}|s t di}t |dd}|D]S}|jj|d j}|jj|d j}|||<U|S) N EnvironmentzNo Environment NodezNo Child Nodesz)http://schemas.dmtf.org/ovf/environment/1c |jdk(S)NPropertySection localNamens rz get_properties..tsq{{6G'GrzNo 'PropertySection'src |jdk(S)NPropertyrrs rrz get_properties..|sAKK:$=rkeyvalue) r parseStringdocumentElementrXmlErrorrr attributesgetNamedItemNSr) r>domenvNsURI propSectionsrl propElemselemrrqs rrcrcgs   h 'C $$ 5,--    , , .'((:H GL .// EQ=Ioo,,Xu=CCoo,,Xw?EEc  Lrc eZdZy)rN)rUrVrWrZrrrrsrrc6tj|tSrQ)rlist_from_depends datasources)dependss rget_datasource_listrs  $ $Wk ::rc4|siStj|S)z The meta data could be JSON or YAML. Since YAML is a strict superset of JSON, we will unmarshal the data as YAML. If data is None then a new dictionary is returned. )yaml safe_load)datas rrhrhs  >>$ r)F)T)"__doc__reloggingrrxml.domrr cloudinitrrr getLoggerrUr1r rr\r,r+rr/rrr.rrcrjrDEP_FILESYSTEM DEP_NETWORKrrrhrZrrrs   ))g!f$G&&f$R=}=> $.R#L! ! DN@ y W++-...0C0CDE ; r