ó
    x[hO3  ã                   óf  • S r SSKrSSKrSSKrSSKrSSKJr  SSKrSSKJ	r	J
r
Jr  \R                  " \5      r " S S\	R                  5      r " S S\5      rSS	 jrS
 rS rSS jrS rS rS rS rS r " S S\5      r\\	R:                  44\\	R:                  \	R<                  444rS r S r!g)zZCloud-Init DataSource for OVF

This module provides a cloud-init datasource for OVF data.
é    N)Úminidom)ÚsourcesÚsubpÚutilc                   óL   • \ rS rSrSrS rS rS rS rS r	S r
\S	 5       rS
rg)ÚDataSourceOVFé   ÚOVFc                 óè   • [         R                  R                  XX#5        S U l        [        R
                  R                  UR                  S5      U l        S U l        0 U l	        SU l
        S U l        g )NÚovf)Ú/zfile://)r   Ú
DataSourceÚ__init__ÚseedÚosÚpathÚjoinÚseed_dirÚenvironmentÚcfgÚsupported_seed_startsÚ_network_config©ÚselfÚsys_cfgÚdistroÚpathss       ÚA/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOVF.pyr   ÚDataSourceOVF.__init__    sX   € Ü×Ñ×#Ñ# D°6ÔAØˆŒ	ÜŸ™Ÿ™ U§^¡^°UÓ;ˆŒØˆÔØˆŒØ%5ˆÔ"Ø#ˆÕó    c                 óh   • [         R                  R                  U 5      nU< SU R                  < S3$ )Nz [seed=Ú])r   r   Ú__str__r   )r   Úroots     r   r#   ÚDataSourceOVF.__str__)   s'   € Ü×!Ñ!×)Ñ)¨$Ó/ˆÛ!% t§y¤yÐ1Ð1r    c                 ó  • / n0 nSnSnSS0n[        U R                  R                  5      u  pgU(       aZ  [        R                  R                  U R                  R                  U5      n[        U5      u  p#n	Xpl        UR                  U5        OtS[        4S[        4/n
S nU
 H  u  p¼U" 5       nU(       d  M    O   U(       a@  [        US5      u  p#n	Xpl        SU;   a  US   (       a
  US   U l        UR                  U5        U(       d  gS	U;   a´  US	   (       aª  US	   nSnU R                   H  nUR                  U5      (       d  M  Un  O   U(       d  [        R                  S
XÐ5        g[         R"                  " US S9u  np4n[        R                  SU5        [         R$                  " UU/5      nUR                  U5        [         R$                  " X%/5      nSR                  U5      U l        X l        X0l        X@l        W	U l        g)NÚ úinstance-idz	iid-dsovfzcom.vmware.guestInfoÚisoTúnetwork-configFÚseedfromz Seed from %s not supported by %s)ÚtimeoutzUsing seeded cache data from %sÚ,)Úget_ovf_envr   r   r   r   r   Úread_ovf_environmentr   ÚappendÚtransport_vmware_guestinfoÚtransport_iso9660r   r   Ú
startswithÚLOGÚdebugr   Úread_seededÚmergemanydictr   ÚmetadataÚuserdata_rawÚvendordata_rawr   )r   ÚfoundÚmdÚudÚvdÚdefaultsÚseedfileÚcontentsr   r   ÚnpÚnameÚ	transfuncr+   Ú	seedfoundÚprotoÚmd_seedÚ_s                     r   Ú	_get_dataÚDataSourceOVF._get_data-   sê  € ØˆØˆØˆØˆð ˜;ð
ˆô  +¨4¯:©:×+>Ñ+>Ó?Ñˆæä—7‘7—<‘< §
¡
× 3Ñ 3°XÓ>ˆDÜ0°Ó:‰MˆR�SØ'ÔØ�L‰L˜Õð (Ô)CÐDØÔ)Ð*ðˆBð ˆDÛ#%‘�Ù$›;�ß�8Ùñ $&ö Ü 4°X¸tÓ D‘�˜Ø#+Ô Ø# rÓ)¨bÐ1A×.BØ+-Ð.>Ñ+?�DÔ(Ø—‘˜TÔ"ö Øà˜Ó  :§Ø˜*‘~ˆHØˆIØ×3Ô3�Ø×&Ñ& u×-Ó-Ø %�IÙñ 4ö Ü—	‘	Ð<¸hÔMØä#'×#3Ò#3°HÀdÑ#KÑ ˆW�b˜aÜ�I‰IÐ7¸ÔBä×#Ò# R¨ MÓ2ˆBØ�L‰L˜Ô"ô ×Ò  Ó/ˆà—H‘H˜U“OˆŒ	ØŒØÔØ ÔØˆŒØr    c                 ó    • SU R                   -  $ )Nzovf (%s))r   ©r   s    r   Ú_get_subplatformÚDataSourceOVF._get_subplatformo   s   € Ø˜DŸI™IÑ%Ð%r    c                 óx   • SU R                   ;  a  / $ U R                   S   n[        U[        5      (       a  U$ U/$ )Núpublic-keys)r8   Ú
isinstanceÚlist)r   Úpkss     r   Úget_public_ssh_keysÚ!DataSourceOVF.get_public_ssh_keysr   s:   € Ø §¡Ó-ØˆIØ�m‰m˜MÑ*ˆÜ�cœD×"Ñ"ØˆJà�5ˆLr    c                 ó   • U R                   $ ©N)r   rL   s    r   Úget_config_objÚDataSourceOVF.get_config_obj~   s   € Ø�x‰xˆr    c                 ó   • U R                   $ rW   )r   rL   s    r   Únetwork_configÚDataSourceOVF.network_config�   s   € à×#Ñ#Ð#r    )	r   r   r   r8   r   r   r   r9   r:   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Údsnamer   r#   rI   rM   rT   rX   Úpropertyr[   Ú__static_attributes__© r    r   r   r      s;   † Ø€Fò$ò2ò@òD&òòð ñ$ó ó$r    r   c                   ó   • \ rS rSrS rSrg)ÚDataSourceOVFNeté†   c                 óœ   • [         R                  XX#5        [        R                  R	                  UR
                  S5      U l        SU l        g )Nzovf-net)zhttp://zhttps://)r   r   r   r   r   r   r   r   s       r   r   ÚDataSourceOVFNet.__init__‡   s4   € Ü×Ñ˜t¨fÔ<ÜŸ™Ÿ™ U§^¡^°YÓ?ˆŒØ%<ˆÕ"r    )r   r   N)r]   r^   r_   r`   r   rc   rd   r    r   rf   rf   †   s   † õ=r    rf   c                 ó4  • [        U 5      n0 n0 nS nS/n/ SQnS/nUR                  5        HŸ  u  pšU	S:X  a  Sn	X—;   a  X£U	'   M  X–;   a  X¤U	'   M#  X˜;   aJ  U(       aC   [        R                  " U
R	                  5       5      n[        U5      R                  S5      X9'   Mr  U	S:X  d  Mz   [        R                  " U
R	                  5       5      nM¡     X5U4$ ! [         a    [        R                  S5         MÉ  f = f! [         a    U
R	                  5       n Mê  f = f)	NÚpassword)r+   úlocal-hostnamerP   r(   r*   Úhostnamerl   Únetworkz%Ignore network-config in wrong formatz	user-data)
Úget_propertiesÚitemsÚbase64Ú	b64decodeÚencodeÚsafeload_yaml_or_dictÚgetÚ	Exceptionr4   r5   )rA   Úread_networkÚpropsr<   r   r=   Ú	cfg_propsÚmd_propsÚnetwork_propsÚpropÚvalr[   s               r   r/   r/   �   s  € Ü˜8Ó$€EØ	€BØ
€CØ	€BØ�€IÚK€HØ%Ð&€MØ—[‘[–]‰	ˆØ�:ÓØ#ˆDØÓØˆt‹HØÓØ�‹IØÓ"¦|ðCÜ!'×!1Ò!1°#·*±*³,Ó!?�Ü0°Ó@×DÑDÀYÓO�“ð �[Õ ð"Ü×%Ò% c§j¡j£lÓ3’ñ #ð$ �Cˆ=Ðøô ó CÜ—	‘	ÐA×BðCûô
 ó "Ø—Z‘Z“\“ð"ús%   ÁA CÂ'$C9ÃC6Ã5C6Ã9DÄDc                 ó2  • SnU Hb  n[         R                  R                  X5      n[         R                  R                  U5      (       d  MH   [        R
                  " U5      nX$4s  $    g! [         a     [        R                  " [        SU5         M�  f = f)N)zovf-env.xmlzovf_env.xmlzOVF_ENV.XMLzOVF-ENV.XMLzFailed loading ovf file %s)NF)	r   r   r   Úisfiler   Úload_text_filerv   Úlogexcr4   )ÚdirnameÚ	env_namesÚfnameÚfull_fnrA   s        r   r.   r.   ®   s~   € ØL€IÛˆÜ—'‘'—,‘,˜wÓ.ˆÜ�7‰7�>‰>˜'×"Ó"ðHÜ×.Ò.¨wÓ7�ØÐ(Ò(ñ ð øô ó HÜ—’œCÐ!=¸w×GðHús   ÁA,Á,&BÂBc                 ó  • U (       d  g[        U [        5      (       d  [        SU -  5      e[        R                  R                  U 5      n U R                  S5      (       a  U R                  S5      S   n U R                  S5      (       a  U R                  S5      S   n OU R                  S5      S:”  a  gU (       d  gSn[        R                  R                  SU5      n[        R                  " U5      nUR                  U 5      S	L$ )
zëTest 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   r   z^(sr[0-9]+|hd[a-z]|xvd.*)ÚCLOUD_INIT_CDROM_DEV_REGEXN)rQ   ÚstrÚ
ValueErrorr   r   Únormpathr3   Ú	partitionÚsplitÚcountÚenvironru   ÚreÚcompileÚmatch)ÚdevnameÚdefault_regexÚdevname_regexÚcdmatchs       r   Úmaybe_cdrom_devicer—   »   sæ   € ö ØÜ˜¤×%Ñ%ÜÐ;¸gÑEÓFÐFô �g‰g×Ñ˜wÓ'€Gð ×Ñ˜'×"Ñ"à×#Ñ# GÓ,¨RÑ0ˆð ×Ñ˜#×ÑØ—-‘- Ó$ RÑ(‰Ø	�‰�sÓ	˜aÓ	Øö Øð 1€MÜ—J‘J—N‘NÐ#?ÀÓO€MÜ�jŠj˜Ó'€Gà�=‰=˜Ó!¨Ð-Ð-r    c                 óL  • [         R                  " 5       nUR                  5        HF  u  p#US   nUS:w  a	  U (       a  M  [        U5      (       d  M+  US   n[	        U5      u  pgUSLd  MD  Us  $    U (       a  SnOS n[         R
                  " U(       a  SU-  OS 5       Vs/ s H  n[        U5      (       d  M  UPM     n	nU	 H)  n [         R                  " U[        US9u  pgUSLd  M'  Us  $    g s  snf ! [         R                   a    [        R                  SU5         M`  f = f)NÚfstypeÚiso9660Ú
mountpointFzTYPE=%s)Úmtypez%s not mountable as iso9660)
r   Úmountsrp   r—   r.   Úfind_devs_withÚmount_cbÚMountFailedErrorr4   r5   )
Úrequire_isor�   ÚdevÚinfor™   ÚmpÚ_fnamerA   rœ   Údevss
             r   r2   r2   ä   s  € ä�[Š[‹]€FØ—\‘\–^‰	ˆØ�h‘ˆØ�YÓ¦;ÙÜ! #×&Ñ&ÙØ�,ÑˆÜ(¨›_ÑˆØ˜5Ô ØŠOñ $ö Ø‰àˆô
 ×&Ò&¾E y°5Ò'8ÀtÔLóâLˆCÜ˜c×"÷ 	ÙLð 	ð ó
 ˆð	Ü!%§¢¨s´KÀuÑ!MÑˆVð
 ˜5Ô ØŠOñ ð ùòøô ×$Ñ$ó 	Ü�I‰IÐ3°SÔ9Úð	ús   Â C0Â8C0ÃC5Ã5*D#Ä"D#c                 ó@   • X/n[         R                   " U5      u  p4X#U4$ rW   ©r   ©ÚrpctoolÚargÚcmdÚstdoutÚstderrs        r   Úexec_vmware_rpctoolr¯   
  s$   € Øˆ.€CÜ—y’y “~Ñ€VØ˜Ð Ð r    c                 óD   • U SU/n[         R                   " U5      u  p4X#U4$ )Nz--cmdr¨   r©   s        r   Úexec_vmtoolsdr±     s)   € Ø�G˜SÐ
!€CÜ—y’y “~Ñ€VØ˜Ð Ð r    c                  ó8  • Su  p[         R                  " S5      n[         R                  " S5      nU(       a  U[        p[        R	                  SU5        U(       a$  U(       d  U[
        p[        R	                  SU5        U (       d  [        R	                  S5        g S n U" X5      $ ! [         R                   aÜ  nU(       a6  X:X  a1  UR                  S:w  a  [        R                  " [        S	U5         S nAg U(       d  [        R                  S
5         S nAg  [        R                  S5        U" U[
        5      s S nA$ ! [         R                   a:  nUR                  S:w  a  [        R                  " [        S	U5         S nA S nAg S nAff = fS nAff = f)N)NNÚvmtoolsdzvmware-rpctoolzdiscovered vmware-rpctool: %szdiscovered vmtoolsd: %szno rpctool discoveredc                 ó$  • [         R                  SU 5         U" U S5      u  p#nU(       a  U$ [         R                  SU5        g ! [        R                   a7  nUR
                  S:w  a   [         R                  SXR
                  5        UeS nAff = f)Nzquery guestinfo.ovfEnv with %szinfo-get guestinfo.ovfEnvz!cmd %s exited 0 with empty stdouté   z%s exited with code %d)r4   r£   r5   r   ÚProcessExecutionErrorÚ	exit_codeÚwarning)rª   Ú
rpctool_fnr¬   r­   rH   Úerrors         r   Úquery_guestinfoÚ3transport_vmware_guestinfo.<locals>.query_guestinfo-  s{   € Ü�‰Ð1°7Ô;ð		Ù'¨Ð1LÓM‰NˆC˜ÞØ�Ü�I‰IÐ9¸3Ô?ØøÜ×)Ñ)ó 	Ø�‰ !Ó#Ü—‘Ð4°g¿¹ÔOØˆKûð	ús   ˜A ­A ÁBÁ2B
Â
Brµ   z+vmtoolsd failed to get guestinfo.ovfEnv: %sz$vmtoolsd fallback option not presentzfallback to vmtoolsd)r   Úwhichr¯   r4   r5   r±   r¶   r·   r   r�   r£   )rª   r¹   r³   Úvmware_rpctoolr»   rº   s         r   r1   r1     s?  € Ø$Ñ€GÜ�zŠz˜*Ó%€HÜ—Z’ZÐ 0Ó1€Nö Ø,Ô.A�Ü�	‰	Ð1°>ÔBæö Ø"*¬M�ZÜ�	‰	Ð+¨XÔ6ö Ü�	‰	Ð)Ô*Øòðñ ˜wÓ3Ð3øÜ×%Ñ%ó ö ˜Ó+à�‰ !Ó#Ü—’ÜÐFÈôô æÜ�H‰HÐ;Ô<Üð	Ü�H‰HÐ+Ô,Ù" 8¬]Ó;Õ;øÜ×)Ñ)ó 	à�‰ !Ó#Ü—’ÜÐFÈôÿð ûð	þð+úsH   Â!B) Â)FÂ=8FÃ:FÄ!EÄ=FÅFÅ,FÆFÆFÆFÆFc                 óž   • / nU R                  5       (       d  U$ U R                   H#  nU" U5      (       d  M  UR                  U5        M%     U$ rW   )ÚhasChildNodesÚ
childNodesr0   )ÚnodeÚfilter_funcÚretÚchilds       r   Ú
find_childrÆ   ]  sG   € Ø
€CØ×Ñ×ÑØˆ
Ø—”ˆÙ�u×ÓØ�J‰J�uÖñ !ð €Jr    c                 óü  • [         R                  " U 5      nUR                  R                  S:w  a  [	        S5      eUR                  R                  5       (       d  [	        S5      eSn[        UR                  S 5      nU(       d  [	        S5      e0 n[        US   S 5      nU HS  nUR                  R                  US	5      R                  nUR                  R                  US
5      R                  nX„U'   MU     U$ )NÚEnvironmentzNo Environment NodezNo Child Nodesz)http://schemas.dmtf.org/ovf/environment/1c                 ó    • U R                   S:H  $ )NÚPropertySection©Ú	localName©Úns    r   Ú<lambda>Ú get_properties.<locals>.<lambda>t  s   €  q§{¡{Ð6GÒ'Gr    zNo 'PropertySection'sr   c                 ó    • U R                   S:H  $ )NÚPropertyrË   rÍ   s    r   rÏ   rÐ   |  s   €  A§K¡K°:Ò$=r    ÚkeyÚvalue)
r   ÚparseStringÚdocumentElementrÌ   ÚXmlErrorrÀ   rÆ   Ú
attributesÚgetNamedItemNSrÔ   )	rA   ÚdomÚenvNsURIÚpropSectionsrx   Ú	propElemsÚelemrÓ   r}   s	            r   ro   ro   g  sì   € Ü
×
Ò
˜hÓ
'€CØ
×Ñ×$Ñ$¨Ó5ÜÐ,Ó-Ð-à×Ñ×,Ñ,×.Ñ.ÜÐ'Ó(Ð(à:€Hô Ø×ÑÑGó€Lö ÜÐ.Ó/Ð/à€EÜØ�Q‰Ñ=ó€Ió ˆØ�o‰o×,Ñ,¨X°uÓ=×CÑCˆØ�o‰o×,Ñ,¨X°wÓ?×EÑEˆØˆc‹
ñ ð
 €Lr    c                   ó   • \ rS rSrSrg)r×   i‡  rd   N)r]   r^   r_   r`   rc   rd   r    r   r×   r×   ‡  s   † Úr    r×   c                 ó8   • [         R                  " U [        5      $ rW   )r   Úlist_from_dependsÚdatasources)Údependss    r   Úget_datasource_listrä   “  s   € Ü×$Ò$ W¬kÓ:Ð:r    c                 ó@   • U (       d  0 $ [         R                  " U 5      $ )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    r   rt   rt   —  s   € ö Øˆ	Ü�>Š>˜$ÓÐr    )F)T)"Ú__doc__rq   Úloggingr   r�   Úxml.domr   ræ   Ú	cloudinitr   r   r   Ú	getLoggerr]   r4   r   r   rf   r/   r.   r—   r2   r¯   r±   r1   rÆ   ro   rv   r×   ÚDEP_FILESYSTEMÚDEP_NETWORKrâ   rä   rt   rd   r    r   Ú<module>rð      sÐ   ðñó
 Û Û 	Û 	Ý ã ç )Ñ )à×Ò˜Ó!€ôf$�G×&Ñ&ô f$ôR=�}ô =ôò>
ò$.ôR#òL!ò!òDòNòô@	ˆyô 	ð �W×+Ñ+Ð-Ð.Ø˜×.Ñ.°×0CÑ0CÐDÐEð€ò;ó r    