܍~c|BddlZddlZddlZddlZddlmZddlmZddlmZ ddlm Z m Z m Z m Z ddlmZddlmZmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddl m!Z!m"Z"m#Z#m$Z$m%Z%e j&e'Z(dZ)dZ*dZ+Gdde,Z-Gdde j.Z/Gdde/Z0dZ1 d2dZ2 d3dZ3d4dZ4d Z5d5d!Z6d"Z7d#Z8d6d$Z9d%Z:d&Z;d'Ze/e j?ffe0e j?e j@fffZAd+ZBd,ZCd-ZDd.ZEd/ZFd0ZGd1ZHdS)7N)minidom)dmi)log)safeyamlsourcessubputil)Config)PostCustomScriptPreCustomScript) ConfigFile)NicConfigurator)PasswordConfigurator)GuestCustErrorEnum)GuestCustEventEnum)GuestCustStateEnum) enable_nicsget_nics_to_enableget_tools_configset_customization_status set_gc_status deployPkgzenable-custom-scripts/var/run/vmware-imcceZdZdS)GuestCustScriptDisabledN__name__ __module__ __qualname__A/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOVF.pyrr6Dr!rcLeZdZdZdZdZdZdZdZdZ e dZ d S) DataSourceOVFOVFctj||||d|_tj|jd|_d|_i|_ d|_ d|_ d|_ d|_ d|_d|_dS)Novf)/zfile://TF)r DataSource__init__seedospathjoinseed_dir environmentcfgsupported_seed_startsvmware_customization_supported_network_config_vmware_nics_to_enable_vmware_cust_conf_vmware_cust_foundselfsys_cfgdistropathss r"r+zDataSourceOVF.__init__>s##D'65AAA  U^U;; %5".2+#&*#!%"'r!cZtj|}|d|jdS)Nz [seed=])rr*__str__r,)r:roots r"r@zDataSourceOVF.__str__Ks-!))$//!%tyyy11r!c0g}i}d}d}d}d}ddi}t|jj\}} tjd} | t d|r[tj |jj|} t| \}}} | |_ | | nT| rQd| vr:t dd} d}|jst d n7tj|jd d  } tj|jd d }| s|st d nd}d}d}|D]1}t'||}|rt d|n2|r>t)|j}tjt jdt,d|f}nt dd}|rtj|}t1|}t3||_t d| t7|j\}}}n9#t8$r,}t;d|t<j||jYd}~nd}~wwxYw|r|st dd}|| st dd}nt dtA|o|}|rKtC|jdt d tE||\}}} }|r||_#n|j$%|_#nr#tLj'$r,}t;d|tPj)||jYd}~n??8'(=>>   II4 5 5 5 a O7<< 3X>>D0::MRS'D  LL     [ OX):):)<)<<< II< = = = % "N6  I)-(@L"@$))%!"&!9K!14""&K OK O JKKKK  1&*#(D*5dF*C*C'* B/ 'H 5T[AAH.2m # <2((3 ///++IIFGGG*"O!#1H!I!IJ#$;<>(%   #<&H+*    #<"C+*  '+D # LL ( ( ( L $ $ $ $"7":    $0, ? ? ? ? $j #*,D ': d4i@@@ /0F G G R.@.J.J+!%!7!A 3"BGLL1Ev$N$N!! )7(L};L%#5H );\;$F-E( <"('78>(($ (--//699N #0.F.N6c:::!w||J((33^   +    3444#A&F+*    #A"C+*  %   "1, "K"K))))$+F*K3 2   ?@@@'C*D$ 8L(($$   #;"G+*  %"  ;<<<"6"8"81@#5DHE8E'11$h  "CDDD '?&G/.   #3(*l$$!((****$+G*K3 2   && TZ%96BB!'5&G/. '+D # LL ( ( ( L)@AA B B B 3 4 4 4 $"7":    $0, ? ? ? ?()CD)*BD#%  i$9;;E # 4Xt D D R#+ #r))b1A.B)+-.>+?D( T""" u::??5   : *~HI3  &&u-- %IE  W77 Y;> a4"a//a4:8b33 c)="c$$c)ctjd}|dkr d|jzSd|jzS)NrErFz vmware (%s)zovf (%s))rrYr^r,)r:rs r"_get_subplatformzDataSourceOVF._get_subplatformsD'(=>>DDFF ( " " 49, ,DI%%r!cfd|jvrgS|jd}t|tr|S|gS)N public-keys)r isinstancelist)r:pkss r"get_public_ssh_keysz!DataSourceOVF.get_public_ssh_keyss>  - -ImM* cD " " J5Lr!c|jSN)r2r:s r"get_config_objzDataSourceOVF.get_config_objs xr!c|jSr)r5rs r"network_configzDataSourceOVF.network_configs ##r!N) rrrdsnamer+r@rrrrpropertyrr r!r"r%r%:s F ( ( (222gggR &&& $$X$$$r!r%ceZdZdZdS)DataSourceOVFNetct||||tj|jd|_d|_d|_dS)Nzovf-net)zhttp://zhttps://F)r%r+r-r.r/r0r3r4r9s r"r+zDataSourceOVFNet.__init__sKtWfe<<< U^Y?? %<".3+++r!N)rrrr+r r!r"rrs#44444r!rcd}d}|}|s|S t|||}n,#t$rtd||YnwxYw|dkrtd||||}|S)Nvmware_cust_file_max_waitzFailed to get '%s', using %srz/Invalid value '%s' for '%s', using '%s' instead)intget ValueErrorrZwarning)r2default_max_waitmax_wait_cfg_optionrs r"rbrbs5H  sww24DEEFF     *        !|| =       $ Os#0&AAcd}||krd}||krztj||}tj|r|Stdt j|||z }||kzdS)Nrz,Waiting for VMware Customization Config File)r-r.r/isfilerZr[timesleep)filenamemaxwaitnaplendirpathwaited fileFullPaths r"rdrdsF& 7  w||GX66 7>>, ' '   @AAA 6& 7   4r!TFct|j|}|||}t||j|jSr)rnicsgenerateget_network_config name_servers dns_suffixes)configuse_system_devicesrrnicConfigurator nics_cfg_lists r"rrsJ&fk3EFFO#,,YAAM v*F,?  r!cJ|}|s|r|d||dd|dS)N nameserver)typeaddresssearchr)versionr)r])r nameserversr config_lists r"rrsKK f !kV L L   K 0 00r!ci}i}d}|jr'|jr|jdz|jz|d<n |j|d<|jr |j|d<d|d<|||fS)N.local-hostnametimezoneziid-vmware-imcrD) host_name domain_namer)rrr2rs r"rtrt s~ B C B 4   4#)#3c#9F>' " " H H>'22x(((( H H H C!=wGGGGG H  H =sA!!%B B c0|sdSt|tstd|ztj|}|dr|dd}|dr|dd}n| ddkrdS|sdSd}tj d|}tj |}||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)rstrrr-r.normpathr partitionsplitcountenvironrrecompilematch)devname default_regex devname_regexcdmatchs r"maybe_cdrom_devicer _s Gu  % %G;gEFFFgw''G'""1##G,,R0#--$$R( s  a  u u1MJNN#?OOMj''G == ! ! --r!ctj}|D]H\}}|d}|dkr|rt|s&|d}t |\}}|dur|cSI|rd}nd}dtj|rd|zndD} | D][} tj|t|\}}n0#tj$rt d|YOwxYw|dur|cS\dS) Nfstypeiso9660 mountpointFc0g|]}t||Sr )r ).0devs r" z%transport_iso9660..s6     c " "     r!zTYPE=%s)mtypez%s not mountable as iso9660) r mountsrr rXfind_devs_withmount_cbMountFailedErrorrZr[) require_isor*r'infor"mp_fnamerr)devss r"rrsg[]]F||~~   dh Y  ;  !#&&   , (__ 5 OOO !  &E'Ky5'8'8tLL   D  !%sKu!M!M!M VXX$    II3S 9 9 9 H  5 OOO ! 4s"C*C/.C/cxd}d}tj|s|S|dg} tj|\}}|r|Std||nb#tj$rP}|jdkr;td||jt|Yd}~nd}~wwxYw|S)Nzvmware-rpctoolzinfo-get guestinfo.ovfEnvz%cmd %s exited 0 with empty stdout: %srz%s exited with code %d)rwhichrZr[ProcessExecutionError exit_coder)rpctool not_foundcmdout_errrs r"rrsGI :g   / 0CIcNN T  J 93DDDD  % ;!   KK0'1; G G G IIaLLL sAAB7'AB22B7cg}|s|S|jD]"}||r||#|Sr) hasChildNodes childNodesr])node filter_funcretchilds r" find_childrCs[ C       ;u    JJu    Jr!ctj|}|jjdkrt d|jst dd}t |jd}t|dkrt di}t |dd}|D]G}|j |d j }|j |d j }|||<H|S) N EnvironmentzNo Environment NodezNo Child Nodesz)http://schemas.dmtf.org/ovf/environment/1c|jdkS)NPropertySection localNamens r"z get_properties..sq{6G'Gr!rzNo 'PropertySection'sc|jdkS)NPropertyrHrJs r"rLz get_properties..s AK:$=r!keyvalue) r parseStringdocumentElementrIXmlErrorr=rCr attributesgetNamedItemNSrP) rdomenvNsURI propSectionsr propElemselemrOr s r"rrs  h ' 'C $ 55,---   , , . .)'(((:H GGL <A./// EQ==Io,,Xu==Co,,Xw??Ec Lr!c|r|sdStj|D],\}}}||vr"tj||cS-dSr)r-walkr.r/)rrrA_dirsfiless r"rarasi (t gg..00eU u  7<<h// / / /  4r!ceZdZdS)rSNrr r!r"rSrSr#r!rSc6tj|tSr)rlist_from_depends datasources)dependss r"get_datasource_listrds  $Wk : ::r!c|sdStj|d|zdz}tj|rdSdS)ag Check the existence of a marker file. Presence of marker file determines whether a certain code path is to be executed. It is needed for partial guest customization in VMware. @param markerid: is an unique string representing a particular product marker. @param: marker_dir: The directory in which markers exist. F .markerfile-.txtT)r-r.r/exists)markerid marker_dir markerfiles r"rvrvsP uj.8*Cf*LMMJ w~~j!!t 5r!ctdtj|d|zdz}tj|D]I}|dr2tjtj||Jt|d dS)a" Create a new marker file. Marker files are unique to a full customization workflow in VMware environment. @param markerid: is an unique string representing a particular product marker. @param: marker_dir: The directory in which markers exist. zHandle marker creationrfrgz .markerfilewN) rZr[r-r.r/listdirrr del_fileopenclose)rirjrkrs r"rrsII&'''j.8*Cf*LMMJJ'';;   M * * ; M"',,z599 : : :S!!!!!r!ctd||ttj|t ||t jtj ||)z Raise error and send customization status to the underlying VMware Virtualization Platform. Also, cleanup the imc directory. z%s: %s) rZr[rrr|rr rqr-r.re)prefixerrorevent config_fileconfs r"rhrh,sa IIh&&&/GOOO$L--... Kr!ctd||i}d}d}ttj|}d|vr|d}|r(tj|dd}||i|fS)z Load the cloud-init meta data, user data, cfg and network from the given files @return: 4-tuple of configuration metadata, userdata, cfg={}, network @raises: FileNotFoundError if md_path or ud_path are absent z+load meta data from: %s: user data from: %sNr rC)rZr[rr r replace)rrrrrs r"rlrl8sII;WgNNN B BG t~g66 7 7BBY-7 ^G $ $ , ,T2 6 6 r2w r!c2|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. )rload)rOs r"rrQs!  =  r!cXd}d}d}|j}|rtjt|}tj|st d|z|j}|rVtjt|}tj|st d|znatjtd}tj|st d|d}|||fS)a\ collect all the other imc files. metadata is preferred to nics.txt configuration data. If metadata file exists because it is specified in customization configuration, then metadata is required and userdata is optional. @return a 3-tuple containing desired configuration file paths if present Expected returns: 1. user provided metadata and userdata (md_path, ud_path, None) 2. user provided metadata (md_path, None, None) 3. user-provided network config (None, None, nics_path) 4. No config found (None, None, None) Nzmeta data file is not found: %szuser data file is not found: %sznics.txtz%s does not exist.) meta_data_namer-r.r/VMWARE_IMC_DIRrhrguser_data_namerZr[) cust_confrr nics_pathmd_fileud_files r"rfrf\s GGI&G',,~w77w~~g&& #1G; *  gll>7;;G7>>'** '5?GLL<< w~~i((  II*I 6 6 6I GY &&r!)rrr)TFN)NNN)F)T)Irr-rrxml.domr cloudinitrrloggingrrrr +cloudinit.sources.helpers.vmware.imc.configr 9cloudinit.sources.helpers.vmware.imc.config_custom_scriptr r 0cloudinit.sources.helpers.vmware.imc.config_filer /cloudinit.sources.helpers.vmware.imc.config_nicr2cloudinit.sources.helpers.vmware.imc.config_passwdr4cloudinit.sources.helpers.vmware.imc.guestcust_errorr4cloudinit.sources.helpers.vmware.imc.guestcust_eventrri4cloudinit.sources.helpers.vmware.imc.guestcust_stater3cloudinit.sources.helpers.vmware.imc.guestcust_utilrrrrr getLoggerrrZrzr{rrprr*r%rrbrdrrrtr\rXr rrrCrrarSDEP_FILESYSTEM DEP_NETWORKrbrdrvrrhrlrrfr r!r"rs $$$$$$333333333333>>>>>>HGGGGGKKKKKKg!!#. )@&&     i   U$U$U$U$U$G&U$U$U$p 44444}444<.C$@D1111&>   $.$.$.R$$$$N$B     y   W+-..0CDE ;;; $"""$   2('('('('('r!