ó
    x[hî. ã            
       óò  • % S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKJs  J	r
  S SKJr  S SKJr  S SKJrJrJr  S SKJrJrJrJr  S SKrS SKJrJrJrJrJrJr  S SKJ r J!r!  S SK"J#r#  S S	K$J%r%J&r&J'r'  S S
K(J)r)J*r*  S SK+J,r,  S SK-J.r.J/r/J0r0J1r1  S SK2J3r3  S SK4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArA  S SKBJCrC   S SKDrD\RŠ                  " \DRˆ                  S\RŒ                  " SS9 3S9rG\\HS'   \Rž                  " \P5      rQSrRSS0rSSrTSrUSrVSrW " S S\5      rXSrY\\Z   \HS '   / S!Qr[S" r\S# r]S$\ZS%\ZS&\\Z   4S' jr^S(\ZS&\Z4S) jr_\9S&\\Z   4S* j5       r`\9S(\ZS&\\Z   4S+ j5       raS_S&\Z4S, jjrbS- rcS. rdS/ reS&\\Z   4S0 jrf\RÎ                  " 5       (       a7  S1rU\f" S25      rh\hb  \QRÓ                  S35        S4\h-   rTO\QRÓ                  S55        SrY\VS6\T0S7S7S8.rjS6S9S:/S7S;.0\US<S=./S>.rkS?\R/rlS@rmSArn " SB SC\RÞ                  5      rpSD rqSE rrSF rsSG rtSH ruS`SI jrv\9SJ 5       rw\9SK 5       rx\9\TSLSL4SM\ZSN\ZSO\ySP\y4SQ jj5       rz\9S_SR j5       r{\9SS 5       r|ST r}\9SU 5       r~\9\Y4SV j5       r\9SW 5       r€\9SX 5       r�\9SY\‚SZ\yS&\‚4S[ j5       rƒ\9S&\‚4S\ j5       r„\9S_S] j5       r…\pr†\p\GR                  44/rˆS^ r‰g! \I\J4 a:     S SKKrL\LRš                  Rœ                  Rš                  rG GNõ! \I a    S rG  GNf = ff = f)aé    N)ÚEnum)ÚPath)Ú	monotonicÚsleepÚtime)ÚAnyÚDictÚListÚOptional)ÚnetÚperformanceÚsourcesÚssh_utilÚsubpÚutil)Ú
EventScopeÚ	EventType)Údevice_driver)ÚNoDHCPLeaseErrorÚNoDHCPLeaseInterfaceErrorÚNoDHCPLeaseMissingDhclientError)ÚEphemeralDHCPv4ÚEphemeralIPv4Network)Úevents)ÚerrorsÚidentityÚimdsÚkvp)Únetlink)ÚDEFAULT_WIRESERVER_ENDPOINTÚNonAzureDataSourceÚ	OvfEnvXmlÚazure_ds_reporterÚazure_ds_telemetry_reporterÚbuild_minimal_ovfÚdhcp_log_cbÚget_boot_telemetryÚget_metadata_from_fabricÚget_system_infoÚreport_diagnostic_eventÚreport_dmesg_to_kvpÚreport_failure_to_fabric)ÚUrlErrorz$6$é   )Ústrlen)ÚsaltÚblowfish_hashc                 ó   • [        S5      e)zšRaise when called so that importing this module doesn't throw
ImportError when ds_detect() returns false. In this case, crypt
and passlib are not needed.
z/crypt and passlib not found, missing dependency)ÚImportError)Ú_s    ÚC/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceAzure.pyr1   r1   @   s   € ô
 ØAóð ó    ÚAzureúinstance-idziid-AZURE-NODEz/dev/disk/cloud/azure_resourceÚext4z/var/lib/waagentz/dev/sr0c                   ó(   • \ rS rSrSrSrSrSrSrSr	g)	ÚPPSTypeéW   ÚNoneÚPreprovisionedOSDiskÚRunningÚSavableÚUnknown© N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚNONEÚOS_DISKÚRUNNINGÚSAVABLEÚUNKNOWNÚ__static_attributes__rB   r6   r5   r;   r;   W   s   † Ø€DØ$€GØ€GØ€GØƒGr6   r;   z/sys/firmware/acpi/tables/OEM0ÚPLATFORM_ENTROPY_SOURCE)z"/etc/netplan/90-hotplug-azure.yamlz /usr/local/sbin/ephemeral_eth.shz+/etc/udev/rules.d/10-net-device-added.rulesz#/run/network/interfaces.ephemeral.dc                 óx  • U R                  5        H¦  n[        R                  " SU5      (       d  M!  UR                  5       n[	        U5      S:¼  d  MB  US   R                  S5      n[	        U5      S:¼  d  Mg  US   S:X  d  Mr  US   R                  U5      (       d  M�  US   R                  S5      nUS   s  $    g	)
z|
dev.storvsc.1.%pnpinfo:
    classid=32412632-86cb-44a2-9b5c-50d1417354f5
    deviceid=00000000-0001-8899-0000-000000000000
Úpnpinfoé   é   Ú=r   Údeviceidé   Ú.N)Ú
splitlinesÚreÚsearchÚsplitÚlenÚ
startswith)Ú
sysctl_outrS   ÚlineÚfieldsÚcolumnsÚcompss         r5   Ú"find_storvscid_from_sysctl_pnpinfora   k   sž   € ð ×%Ñ%Ö'ˆÜ�9Š9�Z ×&Ó&Ø—Z‘Z“\ˆFÜ�6‹{˜aÕØ  ™)Ÿ/™/¨#Ó.�ä˜“L AÕ%Ø ™
 jÕ0Ø ™
×-Ñ-¨h×7Ó7à" 1™IŸO™O¨CÓ0�EØ  ™8’Oñ (ð r6   c                 ó–   • U R                  5        H5  n[        R                  " X5      (       d  M   UR                  5       nUS   s  $    g)z£
scbus0 on ata0 bus 0
scbus1 on ata1 bus 0
scbus2 on blkvsc0 bus 0
scbus3 on blkvsc1 bus 0
scbus4 on storvsc2 bus 0
scbus5 on storvsc3 bus 0
scbus-1 on xpt0 bus 0
r   N)rV   rW   rX   rY   )Úcamcontrol_outÚdisk_drvr]   Úitemss       r5   Úfind_busdev_from_diskrf   �   s?   € ð ×)Ñ)Ö+ˆÜ�9Š9�X×$Ó$Ø—J‘J“LˆEØ˜‘8ŠOñ ,ð r6   rc   ÚbusdevÚreturnc                 óâ   • U R                  5        H[  n[        R                  " X5      (       d  M   UR                  S5      n[	        U5      S:X  d  MB  US   R                  S5      nUS   s  $    g)zÙ
<Msft Virtual CD/ROM 1.0>          at scbus1 target 0 lun 0 (cd0,pass0)
<Msft Virtual Disk 1.0>            at scbus2 target 0 lun 0 (da0,pass1)
<Msft Virtual Disk 1.0>            at scbus3 target 1 lun 0 (da1,pass2)
Ú(rQ   rT   Ú,r   N)rV   rW   rX   rY   rZ   )rc   rg   r]   re   Údev_passs        r5   Úfind_dev_from_busdevrm   ”   s_   € ð ×)Ñ)Ö+ˆÜ�9Š9�V×"Ó"Ø—J‘J˜s“OˆEÜ�5‹z˜Q�Ø  ™8Ÿ>™>¨#Ó.�Ø ‘{Ò"ñ ,ð r6   Úmacc           
      ó’   • [        U 5      S:X  a)  SR                  U SS U SS U SS U SS U SS U SS /5      n U R                  5       $ )	z1Normalize mac address with colons and lower-case.é   Ú:r   rQ   é   é   é   é
   )rZ   ÚjoinÚlower)rn   s    r5   Únormalize_mac_addressrx   ¥   s]   € ä
ˆ3ƒx�2ƒ~Ø�h‰hØ��1ˆX�s˜1˜Q�x  Q q ¨3¨q°¨8°S¸¸2°YÀÀBÀrÀ
ÐKó
ˆð �9‰9‹;Ðr6   c                  ó†   • [         R                  " 5        V s/ s H  n U S   S:X  d  M  [        U S   5      PM     sn $ s  sn f )z-Get Hyper-V NICs as normalized MAC addresses.rQ   Ú	hv_netvscrT   )r   Úget_interfacesrx   )Úns    r5   Úget_hv_netvsc_macs_normalizedr}   ¯   sJ   € ô
 ×#Ò#Ô%óâ%ˆAØˆQ‰4�;Ñó 	$Ô˜a ™dÖ#Ù%ñð ùò s   ˜>©>c                 ó<  • [         R                  " 5        Vs/ s H  nU [        US   5      :X  d  M  US   PM     nnSU;   a  g[        U5      S:X  a%  [	        SU < SU< 3[
        R                  S9  US   $ [	        SU < SU< 3[
        R                  S9  g	s  snf )
z0Determine the device driver to match on, if any.rT   rQ   rz   z'Assuming driver for interface with mac=z	 drivers=©Úlogger_funcr   z0Unable to specify driver for interface with mac=N)r   r{   rx   rZ   r*   ÚLOGÚdebugÚwarning)rn   ÚiÚdriverss      r5   Údetermine_device_driver_for_macr†   ¹   s¦   € ô
 ×#Ò#Ô%óâ%ˆAØÔ'¨¨!©Ó-Ñ-ó 	ˆˆ!ŒÙ%ð ð ð
 �gÓØä
ˆ7ƒ|�qÓÝã’GðäŸ	™	ò	
ð
 �q‰zÐåã’ð	ä—K‘Kòð
 ùò+s
   ˜B²	Bc                 óÆ   •  [         R                   " U 5      R                  $ ! [         R                   a*    [        R	                  SSR                  U 5      5        Us $ f = f)NzFailed to execute: %sÚ )r   ÚstdoutÚProcessExecutionErrorr�   r‚   rv   )ÚcmdÚfail_rets     r5   Úexecute_or_debugr�   Ô   sL   € ðÜ�yŠy˜‹~×$Ñ$Ð$øÜ×%Ñ%ó Ü�	‰	Ð)¨3¯8©8°C«=Ô9ØŠðús   ‚" ¢;A ÁA c                  ó   • [        SS/SS9$ )NÚsysctlzdev.storvscÚ )rŒ   ©r�   rB   r6   r5   Úget_dev_storvsc_sysctlr’   Ü   s   € Ü˜X }Ð5ÀÑCÐCr6   c                  ó   • [        / SQ5      $ )N)Ú
camcontrolÚdevlistz-br‘   rB   r6   r5   Úget_camcontrol_dev_busr–   à   s   € ÜÒ;Ó<Ð<r6   c                  ó   • [        SS/5      $ )Nr”   r•   r‘   rB   r6   r5   Úget_camcontrol_devr˜   ä   s   € Ü˜\¨9Ð5Ó6Ð6r6   c                 ó  • SnU S:”  a  SnU S-
  n S[        U 5      -   nSR                  X5      n[        5       n[        XC5      nU(       d  [        R                  S5        g [        5       n[        5       nSR                  U5      n[        Xh5      n	U	(       a&  [        Xy5      n
U
c  [        R                  S	5        g U
$ S
R                  U5      n[        Xk5      n	U	(       a&  [        Xy5      n
U
c  [        R                  S	5        g U
$ g )NÚ00000000rT   Ú00000001rQ   Ú000z{0}-{1}z#Fail to find storvsc id from sysctlz	blkvsc{0}zFail to find /dev/daXz
storvsc{0})
ÚstrÚformatr’   ra   r�   r‚   r–   r˜   rf   rm   )Úport_idÚg0Úg1Úg0g1r\   Ú	storvscidÚcamcontrol_b_outrc   ÚblkvscÚscbusxÚdevnameÚstorvscs               r5   Úget_resource_disk_on_freebsdr©   è   sù   € Ø	€BØ�ƒ{ØˆØ˜A‘+ˆØ	”�W“Ñ	€BØ×Ñ˜BÓ#€Dô (Ó)€Jä2°:ÓD€IÞÜ�	‰	Ð7Ô8Øä-Ó/ÐÜ'Ó)€Nà×Ñ 	Ó*€FÜ"Ð#3Ó<€FÞÜ& ~Ó>ˆØ‰?Ü�I‰IÐ-Ô.ØØˆà×!Ñ! )Ó,€GÜ"Ð#3Ó=€FÞÜ& ~Ó>ˆØ‰?Ü�I‰IÐ-Ô.ØØˆØr6   zfreebsd-ufsrT   zresource disk is not Noneú/dev/zresource disk is NoneÚ
ephemeral0T)Údata_dirÚdisk_aliasesÚapply_network_configÚ&apply_network_config_for_secondary_ipsÚgptéd   )Ú
table_typeÚlayoutÚ	overwritezephemeral0.1)Ú
filesystemÚdevice)Ú
disk_setupÚfs_setupÚ
datasourceÚnever_destroy_ntfsÚREDACTEDc                   óX  ^ • \ rS rSrSr\R                  \R                  \R                  10r
Sr\R                  rSrS rS\SS4U 4S	 jjrS
 rS r\S\S\4S j5       r\SSSSS.S\\   S\S\S\S\4
S jj5       r\SLS j5       rS\4S jrSLS jr\S 5       r\S\S\ 4S j5       r!SMU 4S jjr"\S 5       r#\S 5       r$S r%S  r&\S\'\   4S! j5       r(S"\)S\'\   4S# jr*S\'\   4S$ jr+S% r,S& r-SNS' jr.\S( 5       r/\ SOS)\S*\S\04S+ jj5       r1\S, 5       r2\SSS-.S.\S/\SS4S0 jj5       r3\S1 5       r4\S\5Rj                  4S2 j5       r6\S3 5       r7\SLS4 j5       r8\S5 5       r9\S6 5       r:\S\;4S7 j5       r<\ SPS8\=R|                  S9\S\4S: jj5       r?\SS;.S<\\'\      S\\'\      4S= jj5       r@S"\)S\\   4S> jrAS?\)S"\)S\B4S@ jrC\SA 5       rD\SB\)S"\)S\\'\      4SC j5       rESD rF\SE 5       rG\HSF 5       rI\SG 5       rJ\HSH 5       rK\HSI 5       rL\S"\)S\4SJ j5       rMSKrNU =rO$ )QÚDataSourceAzurei8  r7   FrT   c                 óð  • [         R                  R                  XX#5        [        R                  R                  UR                  S5      U l        0 U l        S U l        [        R                  " [        R                  " U[        0 5      [        /5      U l        S U l        S U l        S U l        SU l        SU l        [(        U l        [        R                  R                  UR,                  SS5      U l        g )NÚazureFÚdataÚreported_ready)r   Ú
DataSourceÚ__init__ÚosÚpathrv   Úseed_dirÚcfgÚseedr   ÚmergemanydictÚget_cfg_by_pathÚDS_CFG_PATHÚBUILTIN_DS_CONFIGÚds_cfgÚ_iso_devÚ_network_configÚ_ephemeral_dhcp_ctxÚ_route_configured_for_imdsÚ _route_configured_for_wireserverr    Ú_wireserver_endpointÚ	cloud_dirÚ_reported_ready_marker_file)ÚselfÚsys_cfgÚdistroÚpathss       r5   rÃ   ÚDataSourceAzure.__init__D  s¼   € Ü×Ñ×#Ñ# D°6ÔAÜŸ™Ÿ™ U§^¡^°WÓ=ˆŒØˆŒØˆŒ	Ü×(Ò(Ü×!Ò! '¬;¸Ó;Ô=NÐOó
ˆŒð ˆŒØ#ˆÔØ>BˆÔ Ø*/ˆÔ'Ø05ˆÔ-Ü$?ˆÔ!Ü+-¯7©7¯<©<Ø�O‰O˜VÐ%5ó,
ˆÕ(r6   Úci_pkl_versionrh   Nc                 óæ   >• [         TU ]  U5        S U l        S U l        SU l        SU l        [        U l        [        R                  R                  U R                  R                  SS5      U l        g )NFrÀ   rÁ   )ÚsuperÚ	_unpicklerÐ   rÎ   rÑ   rÒ   r    rÓ   rÄ   rÅ   rv   rÙ   rÔ   rÕ   )rÖ   rÛ   Ú	__class__s     €r5   rÞ   ÚDataSourceAzure._unpickleV  s^   ø€ Ü‰Ñ˜.Ô)à#'ˆÔ ØˆŒØ*/ˆÔ'Ø05ˆÔ-Ü$?ˆÔ!Ü+-¯7©7¯<©<Ø�J‰J× Ñ  &Ð*:ó,
ˆÕ(r6   c                 óh   • [         R                  R                  U 5      nU< SU R                  < S3$ )Nz [seed=Ú])r   rÂ   Ú__str__rÈ   )rÖ   Úroots     r5   rã   ÚDataSourceAzure.__str__b  s'   € Ü×!Ñ!×)Ñ)¨$Ó/ˆÛ!% t§y¤yÐ1Ð1r6   c                 óÖ   • U R                   c  SnOFU R                   R                  S5      (       a  SnO#U R                   R                  5       S:X  a  SnOSnU< SU R                   < S3$ )z/Return the subplatform metadata source details.Úunknownz/devzconfig-diskr   zseed-dirú (Ú))rÈ   r[   rw   )rÖ   Úsubplatform_types     r5   Ú_get_subplatformÚ DataSourceAzure._get_subplatformf  s[   € à�9‰9ÑØ(ÑØ�Y‰Y×!Ñ! &×)Ñ)Ø,ÑØ�Y‰Y�_‰_Ó &Ó(Ø%Ñà)ÐÛ,¨d¯i¬iÐ8Ð8r6   Úephipv4c                 ó
  • UR                   (       d  gUR                    Vs/ s H  o"S   R                  S5      S   PM     nnSU;   U l        U R                  U;   U l        U R                  =(       d    U R                  $ s  snf )NFr   Ú/z169.254.169.254)Ústatic_routesrY   rÑ   rÓ   rÒ   )rÖ   rí   ÚrÚrouted_networkss       r5   Ú_check_if_primaryÚ!DataSourceAzure._check_if_primaryr  s„   € à×$×$àà7>×7LÒ7LÓMÒ7L°!˜Q™4Ÿ:™: c›?¨1Ô-Ñ7LˆÐMð +<¸Ñ*NˆÔ'ð ×%Ñ%¨Ñ8ð 	Ô-ð
 ×+Ñ+÷ 5Ø×4Ñ4ð	
ùò Ns   ¡ B Té   )ÚifaceÚreport_failure_if_not_primaryÚretry_sleepÚtimeout_minutesrö   r÷   rø   rù   c                ó  • U R                   b  [        S5      e[        SU< S[        R                  " 5       < 3[
        R                  S9  [        U R                  U[        S9U l         Sn[        5       nXdS-  -   n[        R                  " SS	[        S
9   UcA   U R                   R                  5       nUc  [        5       U-   U:  a  [?        U5        OOUc  MA  Uc  SU l         [-        5       eUS   nXR                   l         SU;   a
  US   U l!        [E        U5      n	U R                   RF                  n
U
c  [        S5      eU RI                  U
5      n[        SU< SU< SU	< SU
RJ                  < SU
RL                  < SU< S U RN                  < S!U RP                  < S"3[
        R                  S9  U(       aA  U(       d:  U R#                  [$        RR                  " UU	U
RJ                  U
RL                  US#9SS9  UsSSS5        $ ! [         aI    [        S[
        R                   S9  U R#                  [$        R&                  " [        5       U-
  S9SS9   GN¥[(         a!    [        S[
        R*                  S9  SU l         e [,         aM    [        SU-  [
        R*                  S9  U R#                  [$        R.                  " [        5       U-
  US9SS9   GN#[0         a&  n[        SU-  [
        R*                  S9   SnAGNMSnAf[2        R4                   a[  n[        SUR6                  < SUR8                  < SUR:                  < SUR<                  < 3[
        R*                  S9   SnAGNºSnAff = f! , (       d  f       g= f)$a‡  Setup ephemeral networking.

Keep retrying DHCP up to specified number of minutes.  This does
not kill dhclient, so the timeout in practice may be up to
timeout_minutes + the system-configured timeout for dhclient.

:param timeout_minutes: Number of minutes to keep retrying for.

:raises NoDHCPLeaseError: If unable to obtain DHCP lease.

:returns: True if NIC is determined to be primary.
Nz/Bringing up networking when already configured.z,Bringing up ephemeral networking with iface=ú: r   )rö   Údhcp_log_funcé<   zobtain-dhcp-leasezobtain dhcp lease©ÚnameÚdescriptionÚparentzInterface not found for DHCP)ÚdurationT©Ú	host_onlyzdhclient executable not foundz&Failed to obtain DHCP lease (iface=%s))r  Ú	interfacezFile not found during DHCP %rzCommand failed: cmd=ú stderr=ú stdout=ú exit_code=r  zunknown-245zdhcp context missing ephipv4z!Obtained DHCP lease on interface z
 (primary=z driver=z router=z routes=z lease=z imds_routed=z wireserver_routed=ré   )r  ÚdriverÚrouterrð   Úlease)*rÐ   ÚRuntimeErrorr*   r   r{   r�   r‚   r   rØ   r&   r   r   ÚReportEventStackr#   Úobtain_leaser   rƒ   Ú_report_failurer   Ú$ReportableErrorDhcpInterfaceNotFoundr   Úerrorr   ÚReportableErrorDhcpLeaseÚFileNotFoundErrorr   rŠ   r‹   Ústderrr‰   Ú	exit_coder   rö   rÓ   r   Ú_ephipv4ró   r
  rð   rÑ   rÒ   Ú(ReportableErrorDhcpOnNonPrimaryInterface)rÖ   rö   r÷   rø   rù   r  Ú
start_timeÚdeadliner  r	  rí   Úprimarys               r5   Ú_setup_ephemeral_networkingÚ+DataSourceAzure._setup_ephemeral_networkingˆ  sG  € ð* ×#Ñ#Ñ/ÜØAóð õ 	 ã”c×(Ò(Õ*ð,äŸ	™	ò	
ô
 $3Ø�K‰KØÜ%ñ$
ˆÔ ð +/ˆÜ“[ˆ
Ø°"Ñ 4Ñ4ˆÜ×$Ò$Ø$Ø+Ü$ó
ð
 ‘-ð1Ø ×4Ñ4×AÑAÓC�Eðf ‘=¤Y£[°;Ñ%>ÀÓ%IÜ˜+Õ&àðq “-ðt ‰}Ø+/�Ô(Ü&Ó(Ð(ð ˜+Ñ&ˆEØ-2×$Ñ$Ô*ð  Ó%Ø,1°-Ñ,@�Ô)ä" 5Ó)ˆFØ×.Ñ.×7Ñ7ˆGØ‰Ü"Ð#AÓBÐBà×,Ñ,¨WÓ5ˆGÝ#ó
 ÛÛØ—N”NØ×)Ô)ÛØ×3Ô3Ø×9Ô9ðô  ŸI™Iòö" -¶WØ×$Ñ$Ü×CÒCØ"'Ø%Ø&Ÿ~™~Ø&-×&;Ñ&;Ø#ñð #ð %ñ 	ð ÷[
ñ 
øô 1ó 
ä+Ø6ÄCÇKÁKòð ×(Ñ(Ü×CÒCÜ%.£[°:Ñ%=ñð #'ð	 )ô ô 7ó ä+Ø7ÄSÇYÁYòð 04�DÔ,ØÜ'ó ä+Ø@À5ÑHÜ$'§I¡Iòð ×(Ñ(Ü×7Ò7Ü%.£[°:Ñ%=Èñð #'ð	 )ô ô )ó Ü+Ø7¸%Ñ?Ü$'§I¡I÷ð ûô ×1Ñ1ó å+ð "ŸIœIØ!ŸLœLØ!ŸLœLØ!ŸO›Oðô %(§I¡I÷
ð 
ûðú÷W
õ 
úsj   ÂM8ÂH	Â6$M8ÃD#M8È	AM5ÉM8ÉA;M5ËM8Ë	M5Ë"LË=M8ÌM5ÌAM0Í*M8Í0M5Í5M8Í8
Nc                 ó~   • SU l         SU l        U R                  c  gU R                  R                  5         SU l        g)zTeardown ephemeral networking.FN)rÑ   rÒ   rÐ   Úclean_network©rÖ   s    r5   Ú_teardown_ephemeral_networkingÚ.DataSourceAzure._teardown_ephemeral_networking  s=   € ð +0ˆÔ'Ø05ˆÔ-Ø×#Ñ#Ñ+Øà× Ñ ×.Ñ.Ô0Ø#'ˆÕ r6   c                 óf   • U R                   SL =(       d    U R                   R                  SL (       + $ )z"Check if networking is configured.N)rÐ   r  r  s    r5   Ú_is_ephemeral_networking_upÚ+DataSourceAzure._is_ephemeral_networking_up*  s5   € ð ×$Ñ$¨Ð,÷ 6Ø×'Ñ'×-Ñ-°Ð5ô
ð 	
r6   c                 ót  •  / SQn[         R                   " U5      u  p#[        SU< SU< SU< 3[        R                  S9  g! [         R                   aà  n[        UR                  [        5      (       a@  [        R                  S5        [        R                  " 5       nU R                  U5         SnAg[        SUR                  < SUR                  < S	UR                  < S
UR                  < 3[        R                  S9  [        R                   " U5      nU R                  U5         SnAgSnAff = f)a  Check if azure-proxy-agent is ready for communication with WS/IMDS.

If ProvisionGuestProxyAgent is true, query azure-proxy-agent status,
waiting up to 120 seconds for the proxy to negotiate with Wireserver
and configure an eBPF proxy.  Once azure-proxy-agent is ready,
it will exit with code 0 and cloud-init can then expect to be able to
communicate with these services.

Fail deployment if azure-proxy-agent is not found or otherwise returns
an error.

For more information, check out:
https://github.com/azure/guestproxyagent
)zazure-proxy-agentz--statusz--waitÚ120z
Executing z resulted in stderr=z with stdout=r   zGFailed to activate Azure Guest Proxy Agent: azure-proxy-agent not foundzDFailed to activate Azure Guest Proxy Agent: status check failed cmd=r  r  r  N)r   r*   r�   r‚   rŠ   Ú
isinstanceÚreasonr  r  r   Ú!ReportableErrorProxyAgentNotFoundr  r‹   r  r‰   r  Ú&ReportableErrorProxyAgentStatusFailure)rÖ   r‹   ÚoutÚerrr  Úreport_errorÚreportable_errors          r5   Ú_check_azure_proxy_agent_statusÚ/DataSourceAzure._check_azure_proxy_agent_status1  sô   € ð%	7òˆCô —y’y “~‰HˆCÝ#ã14³cº3ð@äŸI™Ióøô
 ×)Ñ)ó 	7Ü˜%Ÿ,™,Ô(9×:Ñ:Ü—	‘	ð2ôô  &×GÒGÓI�Ø×$Ñ$ \×2Ñ2å'ð
 Ÿ	œ	ØŸœØŸœØŸ›ðô !$§	¡	òô ×AÒAÀ%ÓHð !ð ×$Ñ$Ð%5×6Ñ6ûð1	7ús    ‚A A ÁD7ÁAD2Â6A7D2Ä2D7c           	      ó2  • 0 nU R                   S   nSnSS0nSSSS000nSn0 n[        U R                  U5       H¢  n UR                  S5      (       a]  [        R
                  " 5       (       a  [        R                  " U[        S	S
9u  pFpWO[        R                  " U[        5      u  pFpWX€l        O[        U5      u  pFpWUn[        SU-  [        R                  S9    O   Sn	[        U	[        R                  S9  [        U R                  5      =(       d    USL n
U
(       a  SOSn U R!                  US9  0 nU R%                  5       (       a5  UR'                  S5      (       a  U R)                  5         U R+                  SS9nU(       d&  Uc#  Sn	[        U	5        [,        R.                  " U	5      eU R1                  X\5      nU[2        R4                  :w  Ga«  [        R
                  " 5       (       a0  Sn	[        U	[        R6                  S9  [,        R.                  " U	5      eU R%                  5       (       d0  Sn	[        U	[        R6                  S9  [,        R.                  " U	5      eU[2        R8                  :X  a  U R;                  5         OZU[2        R<                  :X  a  U R?                  5         O5U[2        R@                  :X  a  U RC                  5         OU RE                  5         U RG                  5       u  pFpWUR'                  S5      (       a  U R)                  5         U R+                  SS9nU RI                  U5      nUS[2        R4                  RJ                  4;  a$  U RM                  [N        RP                  " SUS95        U RS                  US9  U=(       d    SU l*        URW                  UU[        RX                  " USU0/5      US.5        [[        U5      n[]        U5      n[_        U5      nU(       a   [        R                  SU5        XõS   S   S'   U(       a  [        R                  S U5        UUS!   S'   Ub#  [        R                  S"U5        U(       + US#   S$'   U RT                  S:X  a  US%   (       d   [a        UUUS&9nS'U0US%'   U(       d^  [e        U5      nU(       aL  [        R                  S)5         [f        Rh                  " SRk                  URm                  5       5      5      US*'   X2:X  a  [        S,U-  [        R                  S9  [o        5       nU(       a  UUS!   S-'   U Rq                  5       US!   S.'   U Rr                  S/L ak  U R%                  5       (       aV  U Ru                  X\S09n U Rw                  US19n[        R                  S2U5        U(       a  UUS!   S3'   U Ry                  5         U$ U$ ! [         a     [        SU-  [        R                  S9   GM«  [        R                   a     [        SU-  [        R                  S9   GMÝ  f = f! ["         a     GNóf = f! [b         a&  n[        S(U-  [        R                  S9   SnAGNËSnAff = f! [b         a    [        S+[        R                  S9   GN“f = f! [b         a     U$ f = f)4zîWalk all instance metadata sources returning a dict on success.

@return: A dictionary of any metadata content for this instance.
@raise: InvalidMetaDataException when the expected metadata service is
    unavailable, broken or disabled.
r¬   Núlocal-hostnamer�   Úsystem_infoÚdefault_userrÿ   rª   Úudf)Úmtypez!Found provisioning metadata in %sr   z$Did not find Azure data source in %sz%s was not mountablezŸUnable to find provisioning media, falling back to IMDS metadata. Be aware that IMDS metadata does not support admin passwords or custom-data (user-data only).é   rõ   ©rù   ÚProvisionGuestProxyAgentT)Úreport_failurezNo OVF or IMDS availablez%Free BSD is not supported for PPS VMszDHCP failed while in source PPSzextended.compute.ppsType)ÚkeyÚvalue)Úimds_mdÚIMDSr   )rÇ   ÚfilesÚmetadataÚuserdata_rawz Username retrieved from IMDS: %sz Hostname retrieved from IMDS: %sr@  z(Disable password retrieved from IMDS: %srÇ   Ú
ssh_pwauthr?  )ÚusernameÚhostnameÚdisableSshPwdúovf-env.xmlz)Failed to construct OVF from IMDS data %szRetrieved userdata from IMDSrA  zBad userdata in IMDSzusing files cached in %sÚrandom_seedr8   F)rÇ   r=  ©Úpubkey_infoznegotiating returned %súpublic-keys)=rÍ   Úlist_possible_azure_dsrÆ   r[   r   Ú
is_FreeBSDÚmount_cbÚload_azure_ds_dirrÎ   r*   r�   r‚   r!   ÚMountFailedErrorrƒ   Úboolr  r   r#  Úgetr/  Úget_metadata_from_imdsr   ÚInvalidMetaDataExceptionÚ_determine_pps_typer;   rG   r  rI   Ú_wait_for_pps_running_reuserJ   Ú_wait_for_pps_savable_reuserH   Ú_wait_for_pps_os_disk_shutdownÚ_wait_for_pps_unknown_reuseÚ_reprovisionÚ_ppstype_from_imdsr<  r  r   Ú"ReportableErrorImdsInvalidMetadataÚvalidate_imds_network_metadatarÈ   ÚupdaterÉ   Ú_username_from_imdsÚ_hostname_from_imdsÚ_disable_password_from_imdsr%   Ú	ExceptionÚ_userdata_from_imdsÚbase64Ú	b64decoderv   rY   Ú_get_random_seedÚ_iidÚ_negotiatedÚ!_determine_wireserver_pubkey_infoÚ_report_readyÚ_cleanup_markers)rÖ   Úcrawled_dataÚddirÚ
ovf_sourceÚmdrÇ   rA  r?  ÚsrcÚmsgÚrequires_imds_metadatarù   r=  Úpps_typeÚimds_ppstypeÚimds_usernameÚimds_hostnameÚimds_disable_passwordÚcontentsÚeÚimds_userdatarÈ   rI  Ússh_keyss                           r5   Úcrawl_metadataÚDataSourceAzure.crawl_metadatag  s0  € ð ˆð �{‰{˜:Ñ&ˆð ˆ
Ø Ð#ˆØ˜~°¸¨|Ð<Ð=ˆØˆØˆä)¨$¯-©-¸Ö>ˆCðØ—>‘> '×*Ñ*Ü—’×(Ñ(Ü7;·}²}ØÔ!2¸%ñ8Ñ4˜¨#¨uô 8<·}²}ØÔ!2ó8Ñ4˜¨#ð %(•Mä3DÀSÓ3IÑ0�B cà �
Ü'Ø7¸*ÑDÜ #§	¡	òñ ñ+ ?ðFCð ô
 $ C´S·[±[ÒAô "& d§m¡mÓ!4×!J¸
ÀdÐ8JÐÞ 6™"¸Aˆð	Ø×,Ñ,¸_Ð,ÑMð ˆØ×+Ñ+×-Ñ-ð �w‰wÐ1×2Ñ2Ø×4Ñ4Ô6à×1Ñ1ÀÐ1ÐFˆGæ˜:Ñ-Ø,ˆCÜ# CÔ(Ü×2Ò2°3Ó7Ð7ð ×+Ñ+¨CÓ9ˆØ”w—|‘|Ô#Ü�Š× Ñ Ø=�Ü'¨¼¿¹ÒCÜ×6Ò6°sÓ;Ð;ð ×3Ñ3×5Ñ5Ø7�Ü'¨¼¿¹ÒCÜ×6Ò6°sÓ;Ð;àœ7Ÿ?™?Ó*Ø×0Ñ0Õ2ØœWŸ_™_Ó,Ø×0Ñ0Õ2ØœWŸ_™_Ó,Ø×3Ñ3Õ5à×0Ñ0Ô2à+/×+<Ñ+<Ó+>Ñ(ˆB˜cØ�w‰wÐ1×2Ñ2Ø×4Ñ4Ô6ð ×1Ñ1ÀÐ1ÐFˆGð  ×2Ñ2°7Ó;ˆLØ D¬'¯,©,×*<Ñ*<Ð#=Ó=Ø×$Ñ$Ü×=Ò=Ø6¸lñôð 	×+Ñ+°GÐ+Ñ<à×( &ˆŒ	Ø×ÑàØÜ ×.Ò.°°V¸WÐ4EÐ/FÓGØ ,ñ	ô	
ô ,¨GÓ4ˆÜ+¨GÓ4ˆÜ ;¸GÓ DÐÞÜ�I‰IÐ8¸-ÔHØ9F�Ñ˜~Ñ.¨vÑ6ÞÜ�I‰IÐ8¸-ÔHØ9FˆL˜Ñ$Ð%5Ñ6Ø Ñ,Ü�I‰IØ:Ø%ôð 5JÔ0IˆL˜Ñ Ñ-à�9‰9˜Ó |°G×'<ðÜ,Ø*Ø*Ø"7ñ�ð
 *7¸Ð(A�˜WÑ%ö Ü/°Ó8ˆMÞÜ—	‘	Ð8Ô9ðÜ39×3CÒ3CØŸ™ × 3Ñ 3Ó 5Ó6ó4�L Ñ0ð ÓÜ#Ø*¨TÑ1¼s¿y¹yòô  Ó!ˆÞØ6:ˆL˜Ñ$ ]Ñ3Ø26·)±)³+ˆ�ZÑ  Ñ/à×Ñ˜uÒ$¨×)IÑ)I×)KÑ)Kà×@Ñ@Øð Að ˆKð
(Ø×-Ñ-¸+Ð-ÐF�ô
 —	‘	Ð3°XÔ>ÞØ>F�L Ñ,¨]Ñ;à×%Ñ%Ô'àÐˆ|ÐøôQ &ó Ü'Ø:¸SÑ@Ü #§	¡	òó Ü×(Ñ(ó Ü'Ø*¨SÑ0¼c¿i¹iòó ð	ûô,  ó 	Úð	ûôx ó Ü'Ø?À!ÑCÜ #§	¡	÷ð ûðûô  !ó Ü+Ø.¼C¿K¹Kõðûô, ó àð Ððúsf   ¾BV<Ä&X Ñ:X, Ò;6Y Õ4Z Ö<%X×%.XØXØ
X)Ø(X)Ø,
YØ6YÙYÙ"ZÚZÚ
ZÚZr:  c                 óB  • [        5       nUS-   nU R                  (       d  SnOS nS nS n [        R                  " UUS9$ ! [         ar  n[        U5      n[        5       U-
  n[        R                  " XxS9nU R                  (       d+  [        UR                  [        R                  5      (       a  Sn S nAO9S nAf[         a)  n[        U5      n[        R                  " US9n S nAOS nAff = fU R                  Xa(       + S9  [        SU-  [         R"                  S	9  0 $ )
Ni,  é   )Úmax_connection_errorsÚretry_deadline)Ú	exceptionr  F)r�  r  z!Ignoring IMDS metadata due to: %sr   )r   rÑ   r   Ú fetch_metadata_with_api_fallbackr-   r�   r   ÚReportableErrorImdsUrlErrorr'  ÚcauseÚrequestsÚConnectionErrorÚ
ValueErrorÚ+ReportableErrorImdsMetadataParsingExceptionr  r*   r�   rƒ   )	rÖ   r:  r  r€  r  Úerror_stringÚerror_reportr  r  s	            r5   rR  Ú&DataSourceAzure.get_metadata_from_imds?  s  € ä“[ˆ
Ø# cÑ)ˆð ×.×.Ø$&Ñ!à$(Ð!à&*ˆØ9=ˆð	Ü×8Ò8Ø&;Ø-ñð øô ó 	'Ü˜u›:ˆLÜ “{ ZÑ/ˆHÜ!×=Ò=ØñˆLð ×2×2´zØ—‘œX×5Ñ5÷8ñ 8ð "'�ÿøÜó 	Ü˜u›:ˆLÜ!×MÒMØñ�Lûð	úð 	×Ñ˜\Ô5GÐÑHÜØ/°,Ñ>ÜŸ™ò	
ð ˆ	s$   «A  Á 
C-Á
A(B7Â7C-ÃC(Ã(C-c                 óV   >• [         [        U ]  U5        [        R                  U l        g)z.Reset any cached class attributes to defaults.N)rÝ   r½   Úclear_cached_attrsr   ÚUNSETÚ_metadata_imds)rÖ   Úattr_defaultsrß   s     €r5   r�  Ú"DataSourceAzure.clear_cached_attrsm  s   ø€ äŒo˜tÑ7¸ÔFÜ%Ÿm™mˆÕr6   c                 óª   • [         R                  R                  5       nUb  gU R                  c  g[	        U R                  S5      R                  5       $ )zACheck platform environment to report if this datasource may
run.
TFrF  )r   ÚChassisAssetTagÚquery_systemrÆ   r   Úexists)rÖ   Úchassis_tags     r5   Ú	ds_detectÚDataSourceAzure.ds_detectr  sJ   € ô
 ×.Ñ.×;Ñ;Ó=ˆØÑ"Øð �=‰=Ñ Øä�D—M‘M =Ó1×8Ñ8Ó:Ð:r6   c                 óà  •  [        5          [	        5          U R                  5       n U R                  5         U R                  (       aD  U R                  R                  S:X  a*  U R                  R                  S5      (       a
  [        5         [         n["        R$                  R'                  U5      (       a@  [)        SU-  [        R*                  S9  [,        R.                  " US	   [0        /5      U l        O%[)        S
U-  [        R*                  S9  US	   U l        US   S   U l        [,        R.                  " US   [6        /5      U l        US   U l        [=        U R                  S   US   SS9  g! [         a!  n[        R                  SU5         SnAGNŽSnAff = f! [         a!  n[        R                  SU5         SnAGN±SnAff = f! [        R                   a+  nU R                  U5         SnAU R                  5         gSnAf[         aA  n[        R                  " U5      nU R                  U5         SnAU R                  5         gSnAff = f! U R                  5         f = f)z�Crawl and process datasource metadata caching metadata as attrs.

@return: True on success, False on error, invalid or disabled
    datasource.
z Failed to get boot telemetry: %sNz$Failed to get system information: %sFÚubuntur®   zXEphemeral resource disk '%s' exists. Merging default Azure cloud ephemeral disk configs.r   rÇ   zdEphemeral resource disk '%s' does not exist. Not merging default Azure cloud ephemeral disk configs.r@  r   rA  r¬   r?  iÀ  )ÚdirmodeT)r'   ra  r�   rƒ   r)   r{  r   ÚReportableErrorr  r   Ú!ReportableErrorUnhandledExceptionrØ   rÿ   rÍ   rQ  Ú*maybe_remove_ubuntu_network_config_scriptsÚRESOURCE_DISK_PATHrÄ   rÅ   r•  r*   r‚   r   rÉ   Ú#BUILTIN_CLOUD_EPHEMERAL_DISK_CONFIGrÇ   r�  ÚDEFAULT_METADATAr@  rA  Úwrite_files)rÖ   rx  rk  r  r.  Údevpaths         r5   Ú	_get_dataÚDataSourceAzure._get_data�  s'  € ð	?ÜÔ ð	CÜÔð
	2Ø×.Ñ.Ó0‰Lð ×/Ñ/Ô1ð �K�KØ—‘× Ñ  HÓ,Ø—‘—‘Ð 6×7Ñ7ä6Ô8ô %ˆÜ�7‰7�>‰>˜'×"Ñ"Ü#ðFàñô  ŸI™Iò	ô ×)Ò)Ø˜eÑ$Ô&IÐJóˆD�Hô $ðJàñô  ŸI™Iò	ð $ EÑ*ˆDŒHà*¨:Ñ6°vÑ>ˆÔÜ×*Ò*Ø˜*Ñ%Ô'7Ð8ó
ˆŒð )¨Ñ8ˆÔô 	Ø�K‰K˜
Ñ# \°'Ñ%:ÀEò	
ð øô} ó 	?Ü�K‰KÐ:¸A×>Ò>ûð	?ûô
 ó 	CÜ�K‰KÐ>À×BÒBûð	Cûô
 ×%Ñ%ó 	Ø× Ñ  Ô'Ûð ×/Ñ/Õ1ûô ó 	Ü%×GÒGÈÓNÐØ× Ñ Ð!1Ô2Ûà×/Ñ/Õ1ûð	ûð
 ×/Ñ/Õ1úsi   ‚
E4 �
F" ˜G Å4
FÅ>FÆFÆ"
GÆ,GÇGÇIÇ$H
Ç5I È
IÈ'IÈ>I ÉIÉI ÉI-c                 ó”   • U R                   (       a  SU R                   ;  a  U R                  5       $ [        U R                   S   5      $ )Nr8   )r@  rf  r�   r  s    r5   Úget_instance_idÚDataSourceAzure.get_instance_idÊ  s4   € Ø�}�} °T·]±]Ó BØ—9‘9“;ÐÜ�4—=‘= Ñ/Ó0Ð0r6   c                 ó>   • U R                   S   R                  U5      $ )Nr­   )rÍ   rQ  )rÖ   rÿ   s     r5   Údevice_name_to_deviceÚ%DataSourceAzure.device_name_to_deviceÏ  s   € Ø�{‰{˜>Ñ*×.Ñ.¨tÓ4Ð4r6   c                 óŠ   •  U R                  U R                  S   5      $ ! [        [        4 a     U R	                  5       $ f = f)z
Retrieve public SSH keys.
r   )Ú_get_public_keys_from_imdsr@  ÚKeyErrorr‡  Ú_get_public_keys_from_ovfr  s    r5   Úget_public_ssh_keysÚ#DataSourceAzure.get_public_ssh_keysÒ  sG   € ð
	Ø×2Ñ2°4·=±=ÀÑ3HÓIÐIøÜœ*Ð%ó 	Øà×-Ñ-Ó/Ð/ð	ús   ‚   AÁAr=  c                 óv  •  US   S    Vs/ s H  nUS   PM
     nn[	        S U 5       5      (       a%  Sn[        U[        R                  S9  [        U5      eSR                  [        U5      5      n[        U[        R                  S9  U$ s  snf ! [          a    Sn[        U[        R                  S9  e f = f)	z¨Get SSH keys from IMDS metadata.

:raises KeyError: if IMDS metadata is malformed/missing.
:raises ValueError: if key format is not supported.

:returns: List of keys.
ÚcomputeÚ
publicKeysÚkeyDataz"No SSH keys found in IMDS metadatar   c              3   ó>   #   • U  H  n[        US 9(       + v •  M     g7f))r;  N)Ú_key_is_openssh_formatted)Ú.0r;  s     r5   Ú	<genexpr>Ú=DataSourceAzure._get_public_keys_from_imds.<locals>.<genexpr>ð  s   é € ÐJÂ¸#Ô,°Ñ5×5Ñ5Âùs   ‚zKey(s) not in OpenSSH formatzRetrieved {} keys from IMDS)r®  r*   r�   r‚   Úanyr‡  rž   rZ   )rÖ   r=  Ú
public_keyrz  Úlog_msgs        r5   r­  Ú*DataSourceAzure._get_public_keys_from_imdsÞ  s¼   € ð	ð #*¨)Ñ"4°\Ò"Bóâ"B�Jð ˜9Ô%Ù"Bð ð ô ÑJÁÓJ×JÑJØ4ˆGÜ# G¼¿¹ÒCÜ˜WÓ%Ð%à/×6Ñ6´s¸8³}ÓEˆÜ ´S·Y±YÒ?Øˆùò!øô ó 	Ø:ˆGÜ# G¼¿¹ÒCØð	ús   ‚
B ŒB›B ÂB Â&B8c                 óä   • / n U R                   S   nSR                  [        U5      5      n[        U[        R
                  S9  U$ ! [         a    Sn[        U[        R
                  S9   U$ f = f)zIGet SSH keys that were fetched from wireserver.

:returns: List of keys.
rJ  zRetrieved {} keys from OVFr   zNo keys available from OVF)r@  rž   rZ   r*   r�   r‚   r®  )rÖ   rz  r½  s      r5   r¯  Ú)DataSourceAzure._get_public_keys_from_ovfù  sq   € ð
 ˆð	DØ—}‘} ]Ñ3ˆHØ2×9Ñ9¼#¸h»-ÓHˆGÜ# G¼¿¹ÒCð
 ˆøô	 ó 	DØ2ˆGÜ# G¼¿¹ÓCàˆð		Dús   „AA Á$A/Á.A/c                 ó   • U R                   $ ©N©rÇ   r  s    r5   Úget_config_objÚDataSourceAzure.get_config_obj	  s   € Ø�x‰xˆr6   c                 óJ   • [         R                  " U R                  5       5      $ rÂ  )r   Úinstance_id_matches_system_uuidr§  )rÖ   r×   s     r5   Úcheck_instance_idÚ!DataSourceAzure.check_instance_id  s   € ä×6Ò6°t×7KÑ7KÓ7MÓNÐNr6   c                 óŒ  • [         R                  R                  U R                  R	                  S5      S5      n[
        R                  " 5       n[         R                  R                  U5      (       aQ  [        R                  " U5      R                  5       n[
        R                  " U5      nUR                  5       X44;   a  U$ U$ )NrÀ   r8   )rÄ   rÅ   rv   rÙ   Ú	get_cpathr   Úquery_system_uuidr•  r   Úload_text_fileÚstripÚbyte_swap_system_uuidrw   )rÖ   ÚpreviousÚprev_iid_pathÚsystem_uuidÚ
swapped_ids        r5   rf  ÚDataSourceAzure._iid  s“   € ÜŸ™Ÿ™Ø�J‰J× Ñ  Ó(¨-ó
ˆô ×0Ò0Ó2ˆÜ�7‰7�>‰>˜-×(Ñ(Ü×*Ò*¨=Ó9×?Ñ?ÓAˆHÜ!×7Ò7¸ÓDˆJð �~‰~Ó KÐ#<Ó<Ø�ØÐr6   c                 óx  •  Sn[         R                  " SS[        S9   [        R                  " U5      nSSS5        Uc  Sn[        U[        R                  S9  g[        SU-  [        R                  S9  g! , (       d  f       NH= f! [         a'  n[        [        U5      [        R                  S9  e SnAff = f)z§Use the netlink socket provided to wait for nic detach event.
NOTE: The function doesn't close the socket. The caller owns closing
the socket and disposing it safely.
Nzwait-for-nic-detachzwait for nic detachrþ   zHPreprovisioned nic not detached as expected. Proceeding without failing.r   z%The preprovisioned nic %s is detached)r   r  r#   r   Úwait_for_nic_detach_eventr*   r�   rƒ   r‚   ÚAssertionErrorr�   r  )rÖ   Únl_sockÚifnamerp  r  s        r5   Ú_wait_for_nic_detachÚ$DataSourceAzure._wait_for_nic_detach!  s¥   € ð	ØˆFô ×(Ò(Ø*Ø1Ü(óô
 !×:Ò:¸7ÓC�÷ð ‰~ð2ð ô (¨¼¿¹ÓEä'Ø;¸fÑDÜ #§	¡	ó÷õ ûô" ó 	Ü#¤C¨£J¼C¿I¹IÒFØûð	ús3   ‚B žA7µ%B ÁB Á7
BÂB Â
B9Â"B4Â4B9rÙ  Úretriesc                 ó   • [        U5       H`  nU R                  R                  R                  U5      (       a  [	        SU-  [
        R                  S9    g US-   U:  d  MU  [        U5        Mb     [	        SXU-  4-  [
        R                  S9  g )NzThe link %s is up.r   rT   z;The link %s is not up after %f seconds, continuing anyways.)ÚrangerØ   Ú
networkingÚtry_set_link_upr*   r�   Úinfor   )rÖ   rÙ  rÜ  rø   r„   s        r5   Úwait_for_link_upÚ DataSourceAzure.wait_for_link_upA  s€   € ô �w–ˆAØ�{‰{×%Ñ%×5Ñ5°f×=Ñ=Ü'Ø(¨6Ñ1¼s¿x¹xòñ à�A‘˜Õ Ü�kÖ"ñ  ô $ØMØ [Ñ0Ð1ñ2äŸH™Hór6   c                 óø   • U R                   n[        R                  SU5        [        R                  " USR                  [        R                  " 5       [        5       S95        [        S[        R                  S9  g )Nz*Creating a marker file to report ready: %sz{pid}: {time}
)Úpidr   zRSuccessfully created reported ready marker file while in the preprovisioning pool.r   )rÕ   r�   rá  r   Ú
write_filerž   rÄ   Úgetpidr   r*   r‚   )rÖ   rÅ   s     r5   Ú_create_report_ready_markerÚ+DataSourceAzure._create_report_ready_markerU  s\   € à×/Ñ/ˆÜ�‰Ð=¸tÔDÜ�ŠØÐ#×*Ñ*¬r¯yªy«{ÄÃÐ*ÐHô	
ô 	 ð1äŸ	™	ó	
r6   )Úcreate_markerÚexpect_url_errorrê  rë  c                ój  •  U R                  5         SU l        U(       a  U R                  5         gg! [         av  nU(       a9  [        U[        5      (       a$  [	        S[
        R                  S9  SU l         SnANjSn[	        U[
        R                  S9  [        R                  " U5      UeSnAff = f)z…Report ready for PPS, creating the marker file upon completion.

:raises sources.InvalidMetaDataException: On error reporting ready.
z,Ignoring http call failure, it was expected.r   Nz9Failed reporting ready while in the preprovisioning pool.F)ri  ra  r'  r-   r*   r�   r‚   rÎ   r  r   rS  rg  rè  )rÖ   rê  rë  r  rp  s        r5   Ú_report_ready_for_ppsÚ%DataSourceAzure._report_ready_for_ppsb  s¢   € ð	GØ×ÑÔ ð, !ˆÔæØ×,Ñ,Õ.ð øô/ ó 	Gö  ¤J¨u´h×$?Ñ$?Ü'ØBÜ #§	¡	òð
 !%�—‘ð Pð ô (¨¼¿¹ÒCÜ×6Ò6°sÓ;ÀÐFûð%	Gús   ‚2 ²
B2¼;B-Á<1B-Â-B2c                 óŒ  • [         R                  S5         / nSn Sn[        R                  " SS[	        U5      -  [
        S9   [        R                  " X5      nSSS5        UR                  U5        [        SU-  [         R                  S9  U R                  U5        U(       d'  [         R                  S	U5        U R                  US
SS9nU(       a  [         R                  S5        gU R                  5         Má  ! , (       d  f       N¨= f! [         a+  n[        [        U5      [         R                  S9   SnAgSnAff = f)z6Wait until the primary nic for the vm is hot-attached.z*Waiting for primary nic to be hot-attachedFNzwait-for-nic-attachz4wait for nic attach after %d nics have been attachedrþ   zDetected nic %s attached.r   z!Checking if %s is the primary nicr7  )rö   rù   r÷   zFound primary nic for this VM.)r�   rá  r   r  rZ   r#   r   Úwait_for_nic_attach_eventÚappendr*   râ  r  r   r×  r�   r  )rÖ   rØ  Ú
nics_foundÚprimary_nic_foundrÙ  r  s         r5   Ú"_wait_for_hot_attached_primary_nicÚ2DataSourceAzure._wait_for_hot_attached_primary_nic‰  s-  € ô 	�‰Ð=Ô>ð3	GØˆJØ %Ðð Ø�Ü×,Ò,Ø.àNÜ˜j›/ñ*ô -óô %×>Ò>Øó�F÷ð ×!Ñ! &Ô)Ü'Ø/°&Ñ8ÄcÇhÁhòð ×%Ñ% fÔ-ö
 )Ü—H‘HÐ@À&ÔIØ(,×(HÑ(HØ$Ø(*Ø6;ð )Ið )Ð%ö %Ü—H‘HÐ=Ô>Øà×7Ñ7Ô9ñQ ÷õ ûôP ó 	GÜ#¤C¨£J¼C¿I¹I×Fûð	Gús6   —-D ÁC=ÁBD Ã+D Ã=
DÄD Ä
EÄ!D>Ä>Ec                 óž   •  [         R                  " 5       $ ! [         R                   a!  n[        SU 3[        R
                  S9  e S nAff = f)Nz!Failed to create netlink socket: r   )r   Úcreate_bound_netlink_socketÚNetlinkCreateSocketErrorr*   r�   r  )rÖ   r  s     r5   Ú_create_bound_netlink_socketÚ,DataSourceAzure._create_bound_netlink_socketÂ  sJ   € ð	Ü×6Ò6Ó8Ð8øÜ×/Ñ/ó 	Ü#Ø3°E°7Ð;ÜŸI™Iòð ûð	ús   ‚ —A«AÁAc                 ó�   • U R                  SS9  [        S[        R                  S9  [	        S5        [
        R                  " 5       e)z4Report ready and wait for host to initiate shutdown.F)rê  z"Waiting for host to shutdown VM...r   i€3á)rí  r*   r�   rá  r   r   ÚReportableErrorOsDiskPpsFailurer  s    r5   rW  Ú.DataSourceAzure._wait_for_pps_os_disk_shutdownÍ  s?   € ð 	×"Ñ"°Ð"Ñ7äØ0ÜŸ™ò	
ô 	ˆhŒÜ×4Ò4Ó6Ð6r6   c                 ó`  • U R                  5       n U R                  b  U R                  R                  c  [        S5      eU R                  R                  nU R	                  5         [
        R                  SU5        [        R                  " SS[        S9    [        R                  " X5        SSS5        UR                  5         U R!                  5         g! [         a%  n[        SU-  [
        R                  S9   SnANSSnAff = f! , (       d  f       Na= f! UR                  5         f = f)	z9Report ready and wait for nic link to switch upon re-use.Nzmissing ephemeral contextz#Wait for vnetswitch to happen on %sz!wait-for-media-disconnect-connectzwait for vnet switchrþ   z'Error while waiting for vnet switch: %sr   )rù  rÐ   rö   r  rí  r�   r‚   r   r  r#   r   Ú!wait_for_media_disconnect_connectr×  r*   r  Úcloser   )rÖ   rØ  rö   rx  s       r5   rU  Ú+DataSourceAzure._wait_for_pps_running_reuseÙ  sú   € ð ×3Ñ3Ó5ˆð	à×(Ñ(Ñ0Ø×+Ñ+×1Ñ1Ñ9ä"Ð#>Ó?Ð?à×,Ñ,×2Ñ2ˆEØ×&Ñ&Ô(ä�I‰IØ5Øôô ×(Ò(Ø8Ø2Ü(óð
Ü×=Ò=¸gÔM÷ð �M‰MŒOð 	×+Ñ+Õ-øô &ó Ü+ØAÀAÑEÜ$'§I¡I÷ûðú÷õ ûð �M‰M�OúsH   ’BD ÂD
ÂCÂ/D Ã
DÃ"DÃ=D
ÄDÄD
Ä

DÄD ÄD-c                 óz  • U R                  5       n U R                  SS9   U R                  5         U R                  U5        U R                  U5        UR                  5         g! [        R                   a,  n[        SU-  [        R                  S9  SU l         SnANnSnAff = f! UR                  5         f = f)z@Report ready and wait for nic(s) to be hot-attached upon re-use.T)rë  zLIgnoring failure while tearing down networking, NIC was likely unplugged: %rr   N)rù  rí  r   r   rŠ   r*   r�   rá  rÐ   rÚ  rô  r   )rÖ   rØ  rx  s      r5   rV  Ú+DataSourceAzure._wait_for_pps_savable_reuseþ  s­   € ð ×3Ñ3Ó5ˆð	Ø×&Ñ&¸Ð&Ñ=ð0Ø×3Ñ3Ô5ð ×%Ñ% gÔ.Ø×3Ñ3°GÔ<à�M‰M�Oøô ×-Ñ-ó 0Ü'ð3Ø56ñ7ä #§¡òð
 ,0�×(Ñ(ûð0ûð �M‰M�Oús3   ’B( ¢A% ²"B( Á%B%Á9"B ÂB( Â B%Â%B( Â(B:c                 ó¢   • [         R                  R                  U R                  5      (       a  gU R	                  5         U R                  5         g)z0Report ready if needed for unknown/recovery PPS.N)rÄ   rÅ   ÚisfilerÕ   rí  r   r  s    r5   rX  Ú+DataSourceAzure._wait_for_pps_unknown_reuse  s:   € ô �7‰7�>‰>˜$×:Ñ:×;Ñ;àà×"Ñ"Ô$ð 	×+Ñ+Õ-r6   c                 óÂ  • SnSnU(       dm  U R                  5       (       d  US-  n U R                  SS9  [        R                  " SS[
        S9    [        R                  " 5       n SSS5        U(       d  Mm  [        S	U-  [        R                  S
9  U$ ! [         a     Mž  f = f! [         a    U R                  5          SSS5        MÇ  f = f! , (       d  f       Nn= f)z0Poll IMDs for reprovisiondata XML document data.r   NrT   rõ   r8  zget-reprovision-data-from-imdszget reprovision data from imdsrþ   z#attempted dhcp %d times after reuser   )r#  r  r   r   r  r#   r   Úfetch_reprovision_datar-   r   r*   r�   r‚   )rÖ   Údhcp_attemptsÚreprovision_datas      r5   Ú
_poll_imdsÚDataSourceAzure._poll_imds   sä   € ð ˆØ,0ÐÞ"Ø×3Ñ3×5Ñ5Ø Ñ"�ðØ×4Ñ4ÀQÐ4ÑGô ×(Ò(Ø5Ø<Ü(óð
Ü'+×'BÒ'BÓ'DÑ$÷÷ #Ð"ô& 	 Ø1°MÑAÜŸ	™	ò	
ð  Ðøô% (ó Úðûô  ó Ø×7Ñ7Ô9Ø÷ñ ðú÷õ ús;   §B ÁCÁB'Â
B$Â#B$Â'CÃCÃCÃCÃ
Cr  r  c                 óÌ  • [        SUR                  5        3[        R                  S9  [	        5         [
        R                  " U5      nU(       a  U$ U R                  5       (       a5   [        S[        R                  S9  [        U R                  US9  SU l        g [        S[        R                  S9  U R                  5          U R                  S	S
9  [        U R                  US9  SU l        g! [         a%  n[        SU-  [        R                  S9   SnANSnAff = f! [         a     NZf = f! [         a%  n[        SU-  [        R                  S9   SnAgSnAff = f)a™  Report failure to Azure host and fabric.

For errors that may be recoverable (e.g. DHCP), host_only provides a
mechanism to report the failure that can be updated later with success.
DHCP will not be attempted if host_only=True and networking is down.

@param error: Error to report.
@param host_only: Only report to host (error may be recoverable).
@return: The success status of sending the failure signal.
z#Azure datasource failure occurred: r   z>Using cached ephemeral dhcp context to report failure to Azure)Úendpointr  Tz@Failed to report failure using cached ephemeral dhcp context: %sNz3Using new ephemeral dhcp to report failure to Azurer7  r8  z5Failed to report failure using new ephemeral dhcp: %sF)r*   Úas_encoded_reportr�   r  r+   r   Úreport_failure_to_hostr#  r‚   r,   rÓ   rg  ra  r   r  r   )rÖ   r  r  Úreportedrx  s        r5   r  ÚDataSourceAzure._report_failure>  s\  € ô 	 Ø1°%×2IÑ2IÓ2KÐ1LÐMÜŸ	™	ò	
ô 	ÔÜ×-Ò-¨eÓ4ˆÞØˆOà×+Ñ+×-Ñ-ðÜ'ð1ä #§	¡	òô
 )Ø!×6Ñ6¸eòð $(�Ô Øð	Ü#ØEÜŸI™Iòð ×/Ñ/Ô1ðØ×0Ñ0ÀÐ0ÑDô %Ø×2Ñ2¸%òð  $ˆDÔØøô- ó Ü'ð8Ø:;ñ<ä #§	¡	÷ûðûô $ó áðûô ó 	Ü#ØGÈ!ÑKÜŸI™Iöð
 ûð	úsT   Á)3C2 Â(D4 ÃD$ ÃD4 Ã2
D!Ã<DÄD!Ä$
D1Ä.D4 Ä0D1Ä1D4 Ä4
E#Ä>EÅE#rH  rI  c                ó  • [        5         [        R                  " 5          [        U R                  U R
                  U R                  US9nSU l        SU l        U$ ! [         a!  n[        SU-  [        R                  S9  e SnAff = f)zÇTells the fabric provisioning has completed.

:param pubkey_info: Fingerprints of keys to request from Wireserver.

:raises Exception: if failed to report.

:returns: List of SSH keys, if requested.
)r  rØ   Úiso_devrI  zQError communicating with Azure fabric; You may experience connectivity issues: %sr   NT)r+   r   Úreport_success_to_hostr(   rÓ   rØ   rÎ   ra  r*   r�   rƒ   rg  )rÖ   rI  rÀ   rx  s       r5   ri  ÚDataSourceAzure._report_ready€  sˆ   € ô 	ÔÜ×"Ò"Ô$ð	Ü+Ø×2Ñ2Ø—{‘{ØŸ™Ø'ñ	ˆDð ˆŒØˆÔØˆøô ó 	Ü#ð*Ø,-ñ.äŸK™Kòð
 ûð	ús   ¡*A Á
BÁ%BÂBc                 ó~   •  US   S   S   $ ! [          a%  n[        SU-  [        R                  S9   S nAg S nAff = f)NÚextendedr³  ÚppsTypez2Could not retrieve pps configuration from IMDS: %sr   )ra  r*   r�   r‚   )rÖ   r=  rx  s      r5   rZ  Ú"DataSourceAzure._ppstype_from_imds£  sH   € ð	Ø˜:Ñ& yÑ1°)Ñ<Ð<øÜó 	Ü#ØDÀqÑHÜŸI™Iòô ûð	ús   ‚
 �
<—7·<Úovf_cfgc                 ó   • [         R                  R                  U R                  5      (       a  [        R
                  nGOhUR                  SS5      [        R                  R                  :X  d-  U R                  U5      [        R                  R                  :X  a  [        R                  nOüUR                  SS5      [        R                  R                  :X  d-  U R                  U5      [        R                  R                  :X  a  [        R                  nO�UR                  S5      SL d[  UR                  SS5      [        R                  R                  :X  d-  U R                  U5      [        R                  R                  :X  a  [        R                  nO[        R                  n[        SUR                  -  [        R                  S9  U$ )z@Determine PPS type using OVF, IMDS data, and reprovision marker.ÚPreprovisionedVMTypeNÚPreprovisionedVmTzPPS type: %sr   )rÄ   rÅ   r  rÕ   r;   rK   rQ  rJ   r<  rZ  rH   rI   rG   r*   r�   rá  )rÖ   r  r=  rr  s       r5   rT  Ú#DataSourceAzure._determine_pps_type­  s/  € ä�7‰7�>‰>˜$×:Ñ:×;Ñ;Ü—‘ŠHà�K‰KÐ.°Ó5¼¿¹×9NÑ9NÓNØ×&Ñ& wÓ/´7·?±?×3HÑ3HÓHä—‘‰Hà�K‰KÐ.°Ó5¼¿¹×9NÑ9NÓNØ×&Ñ& wÓ/´7·?±?×3HÑ3HÓHä—‘‰Hà�K‰KÐ*Ó+¨tÒ3Ø�{‰{Ð1°4Ó8Ü�‰×$Ñ$ó%à×&Ñ& wÓ/´7·?±?×3HÑ3HÓHä—‘‰Hä—|‘|ˆHäØ˜XŸ^™^Ñ+¼¿¹ò	
ð ˆr6   c                 ó¶   • U R                  5       n[        R                  " SS[        S9   [	        U5      u  p#nX#USU04sSSS5        $ ! , (       d  f       g= f)zbInitiate the reprovisioning workflow.

Ephemeral networking is up upon successful reprovisioning.
zreprovisioning-read-azure-ovfz$read azure ovf during reprovisioningrþ   rF  N)r  r   r  r#   Úread_azure_ovf)rÖ   rw  rn  ÚudrÇ   s        r5   rY  ÚDataSourceAzure._reprovisionÊ  sV   € ð —?‘?Ó$ˆÜ×$Ò$Ø0Ø>Ü$ó
ô
 )¨Ó2‰KˆB�CØ˜C -°Ð!:Ð;÷
÷ 
÷ 
ús   «A
Á

ArÇ   c                óî   • Sn U R                  U5        U$ ! [        [        4 aM    UR                  SS5      nSR	                  Ub  [        U5      OS5      n[        U[        R                  S9   U$ f = f)z†Determine the fingerprints we need to retrieve from Wireserver.

:return: List of keys to request from Wireserver, if any, else None.
NÚ_pubkeysz"Retrieved {} fingerprints from OVFr   r   )	r­  r®  r‡  rQ  rž   rZ   r*   r�   r‚   )rÖ   rÇ   r=  rI  r½  s        r5   rh  Ú1DataSourceAzure._determine_wireserver_pubkey_infoÙ  s‚   € ð ,0ˆð	DØ×+Ñ+¨GÔ4ð Ðøô œ*Ð%ó 	DØŸ'™' *¨dÓ3ˆKØ:×AÑAØ$/Ñ$;”�KÔ ÀóˆGô $ G¼¿¹ÓCØÐð	Dús   „ —AA4Á3A4c                 óD   • [         R                  " U R                  5        g)zCleanup any marker files.N)r   Údel_filerÕ   r  s    r5   rj  Ú DataSourceAzure._cleanup_markersì  s   € ä�Š�d×6Ñ6Õ7r6   c                 ó¾   • U R                   R                  5       n [        UUU R                  R	                  [
        S5      S9  [        5         g ! [        5         f = f)NF)Úis_new_instanceÚpreserve_ntfs)rÙ   Úget_ipath_curÚaddress_ephemeral_resizerÍ   rQ  ÚDS_CFG_KEY_PRESERVE_NTFSr+   )rÖ   rÇ   r+  Úinstance_dirs       r5   ÚactivateÚDataSourceAzure.activateð  sO   € à—z‘z×/Ñ/Ó1ˆð	"Ü$ØØ /Ø"Ÿk™kŸo™oÔ.FÈÓNòô  Ô!Øøô  Õ!ús   œ)A ÁAc                 óx   • U R                   R                  S0 5      R                  S0 5      R                  S5      $ )Nr   r³  ÚplatformFaultDomain©r@  rQ  r  s    r5   Úavailability_zoneÚ!DataSourceAzure.availability_zoneý  s4   € ð �M‰M×Ñ˜f bÓ)ß‰S�˜BÓß‰SÐ&Ó'ð	
r6   c                 óò  • U R                   (       ao  U R                   [        R                  :w  aQ  U R                  R	                  S5      (       a1   [        U R                   S   U R                  R	                  S5      S9$  [        5       $ ! [         a)  n[        R                  S[        U5      5         SnAN9SnAff = f! [         a*  n[        R                  S[        U5      5         SnA0 $ SnAff = f)z:Generate network configuration according to configuration.r®   Únetworkr¯   )r¯   z?Failed generating network config from IMDS network metadata: %sNz-Failed generating fallback network config: %s)r�  r   rŽ  rÍ   rQ  Ú6generate_network_config_from_instance_network_metadatara  r�   r  r�   Ú-_generate_network_config_from_fallback_config)rÖ   rx  s     r5   Ú_generate_network_configÚ(DataSourceAzure._generate_network_config  sÒ   € ð
 ××Ø×#Ñ#¤w§}¡}Ó4Ø—‘—‘Ð 6×7Ñ7ðÜMØ×'Ñ'¨	Ñ2Ø;?¿;¹;¿?¹?Ø@ó<ñð ð	OÜ@ÓBÐBøô ó Ü—	‘	ð5ä˜“F÷ñ ûðûô ó 	OÜ�I‰IÐEÄsÈ1Ãv×NÐNàˆ	ûð	Oús0   Á/B Â	C Â
B?ÂB:Â:B?Ã
C6ÃC1Ã1C6c                 óº   • U R                   (       a*  U R                   [        R                  :w  a  U R                   $ U R                  5       U l         U R                   $ )z,Provide network configuration v2 dictionary.)rÏ   r   rŽ  r<  r  s    r5   Únetwork_configÚDataSourceAzure.network_config$  sG   € ð ×× D×$8Ñ$8¼G¿M¹MÓ$IØ×'Ñ'Ð'à#×<Ñ<Ó>ˆÔØ×#Ñ#Ð#r6   c                 óx   • U R                   R                  S0 5      R                  S0 5      R                  S5      $ )Nr   r³  Úlocationr5  r  s    r5   ÚregionÚDataSourceAzure.region.  s1   € à�}‰}× Ñ  ¨Ó,×0Ñ0°¸BÓ?×CÑCÀJÓOÐOr6   c                 ó¸  • [        5       n US   nUS    Vs/ s H  n[        US   5      PM     nnU Vs/ s H  ofU;  d  M
  UPM     nnU(       d  g[        SU< S	U< 3[
        R                  S9  U R                  (       a  U R                  R                  (       d  g[        R                  " U R                  R                  5      nU(       a  [        U[        5      (       d  g[        U5      nX‡;   a   [        S
U< S	U< 3[
        R                  S9  gs  snf ! [         a-    [        SUR	                  S5      -  [
        R                  S9   gf = fs  snf )z=Validate IMDS network config and report telemetry for errors.r9  r  Ú
macAddressz6IMDS network metadata has incomplete configuration: %rr   FTz8IMDS network metadata is missing configuration for NICs rû   z-IMDS network metadata is missing primary NIC )r}   rx   r®  r*   rQ  r�   rƒ   rÐ   rö   r   Úget_interface_macr'  r�   )	rÖ   r=  Ú
local_macsr?  r„   Ú	imds_macsÚmÚmissing_macsÚprimary_macs	            r5   r\  Ú.DataSourceAzure.validate_imds_network_metadata2  sA  € ô 3Ó4ˆ
ð	Ø$ YÑ/ˆNð (¨Ò4óâ4�Aô & a¨¡oÖ6Ù4ð ð ñ $.ÓD¢:˜a¸)Ñ1CŸ¡:ˆÐDÞØåãš^ð-äŸ™ò	
ð ×'×'¨t×/GÑ/G×/M×/Màä×+Ò+¨D×,DÑ,D×,JÑ,JÓKˆÞ¤*¨[¼#×">Ñ">àä+¨KÓ8ˆØÓ&Ý#ã¢ð0äŸK™Kòð ùòOøô ó 	Ü#ØHØ—+‘+˜iÓ(ñ)äŸK™Kòñ
 ð	üò Es,   ŒD ˜D°D ¶	EÁEÄD Ä4EÅE)rÐ   rÎ   r�  rg  rÏ   rÕ   rÑ   rÒ   rÓ   rÇ   rÍ   r@  rÈ   rÆ   rA  )rh   N)rB   rÂ  )r±   gš™™™™™¹?)F)PrC   rD   rE   rF   Údsnamer   ÚNETWORKr   ÚBOOT_NEW_INSTANCEÚBOOTÚdefault_update_eventsrg  r   rŽ  r�  Ú_ci_pkl_versionrÃ   ÚintrÞ   rã   rë   r$   r   rP  ró   r   r�   r  r   r#  r/  r{  r	   rR  r�  r—  r¤  r§  rª  r
   r°  Údictr­  r¯  rÄ  rÈ  rf  rÚ  Úfloatrâ  rè  rí  rô  Úsocketrù  rW  rU  rV  rX  Úbytesr  r   rœ  r  ri  rZ  r;   rT  rY  rh  rj  r1  Úpropertyr6  r<  r?  rC  r\  rL   Ú__classcell__)rß   s   @r5   r½   r½   8  sƒ  ø† Ø€Fà×ÑØ×'Ñ'Ø�N‰Nð
ðÐð €KØ—]‘]€NØ€Oò
ð$

¨ð 

°÷ 

ò2ò
9ð !ð
Ð)=ð 
À$ó 
ó !ð
ð* !ð  $Ø.2ØØ òTð ˜‰}ðTð (,ð	Tð
 ðTð ðTð 
ôTó !ðTðl !ó(ó !ð(ð
¨Tô 
ô47ðl !ñUó !ðUðn !ð+°Tð +¸dó +ó !ð+÷Z,ð
 !ñ;ó !ð;ð !ñFó !ðFòP1ò
5ð !ð	0 T¨#¡Yó 	0ó !ð	0ð°$ð ¸4À¹9ô ð6¨4°©9ô ò òOôð" !ñó !ðð> !àDGñØðØ$'ðØ<Aôó !ðð& !ñ

ó !ð

ð !ð #Ø!&ò	$/ð ð$/ð ð	$/ð
 
ô$/ó !ð$/ðL !ñ6Gó !ð6Gðp !ð¨f¯m©mó ó !ðð !ñ	7ó !ð	7ð !ó".ó !ð".ðH !ñó !ðð* !ñ	.ó !ð	.ð !ð ˜Eó  ó !ð ð: !à?Dñ?Ø×+Ñ+ð?Ø8<ð?à	ô?ó !ð?ðB !à48ò Ø& t¨C¡yÑ1ð à	�$�s‘)Ñ	ô ó !ð ðD¨$ð °8¸C±=ô ð¨4ð ¸$ð À7ô ð: !ñ<ó !ð<ð !ðØðØ%)ðà	�$�s‘)Ñ	óó !ðò$8ð !ñ
ó !ð
ð ñ
ó ð
ð !ñó !ðð< ñ$ó ð$ð ñPó ðPð !ð-°dð -¸tó -ó !ö-r6   r½   c                 ó:   •  U S   S   S   $ ! [          a     g f = f)Nr³  Ú	osProfileÚadminUsername©r®  ©Ú	imds_datas    r5   r^  r^  c  s.   € ðØ˜Ñ# KÑ0°ÑAÐAøÜó Ùðúó   ‚
 �
™c                 ó4   •  U S   S   $ ! [          a     g f = f)Nr³  ÚuserDatar^  r_  s    r5   rb  rb  j  s)   € ðØ˜Ñ# JÑ/Ð/øÜó Ùðús   ‚
 Š
–c                 ó:   •  U S   S   S   $ ! [          a     g f = f)Nr³  r\  ÚcomputerNamer^  r_  s    r5   r_  r_  q  s.   € ðØ˜Ñ# KÑ0°Ñ@Ð@øÜó Ùðúra  c                 ó@   •  U S   S   S   S:H  $ ! [          a     g f = f)Nr³  r\  ÚdisablePasswordAuthenticationÚtruer^  r_  s    r5   r`  r`  x  s;   € ðà�iÑ  Ñ-Ð.MÑNØñð	
øô ó Ùðús   ‚ �
œc                 ó¶   • SU R                  5       ;   a  g[        R                  " 5       n UR                  U 5      nUR
                  SL$ ! [         a     gf = f)z7
Validate whether or not the key is OpenSSH-formatted.
z
FN)rÎ  r   ÚAuthKeyLineParserÚparseÚ	TypeErrorÚkeytype)r;  ÚparserÚakls      r5   r·  r·  ‚  s[   € ð
 �—‘“ÓØä×'Ò'Ó)€FðØ�l‰l˜3Óˆð �;‰;˜dÐ"Ð"øô ó Ùðús   ¬A Á
AÁAc                 ó$  • S H‰  n/ n[        SU5       Hi  nX-   [        U5      -   n[        R                  R	                  U5      (       d  M9  UR                  U[        R                  R                  U5      45        Mk     U(       d  M‡  Us  $    / $ )N)z-partÚpr�   rT   )rÞ  r�   rÄ   rÅ   r•  rñ  Úrealpath)r£  ÚmaxnumÚsuffÚfoundÚpnumÚppaths         r5   Ú_partitions_on_devicerx  “  sx   € ã"ˆØˆÜ˜!˜VÖ$ˆDØ‘N¤S¨£YÑ.ˆEÜ�w‰w�~‰~˜e×$Ó$Ø—‘˜d¤B§G¡G×$4Ñ$4°UÓ$;Ð<Ö=ñ %÷ ˆ5ØŠLñ #ð €Ir6   c                 óœ   • [         R                  " SSS9n[        R                  SU5        [        R
                  R                  U 5      U;   $ )Nz	TYPE=ntfsT)Úno_cachezntfs_devices found = %s)r   Úfind_devs_withr�   r‚   rÄ   rÅ   rr  )r£  Úntfs_devicess     r5   Ú_has_ntfs_filesystemr}     s=   € ä×&Ò& {¸TÑB€LÜ‡I�IÐ'¨Ô6Ü�7‰7×Ñ˜GÓ$¨Ñ4Ð4r6   c           
      ó–  • U(       a&  SSR                  [        5      < S[        < S3nSU4$ [        R                  R                  U 5      (       d  SSU -  4$ [        R                  SU [        R                  R                  U 5      5        [        U 5      nU(       d  SSU -  4$ [        U5      nUS:”  a0  S	U < S
SR                  U Vs/ s H  oUS   PM	     sn5      < 3nSU4$ US:X  a  US   u  pgOUS   u  pg[        U5      (       d  SU< SU< SU < S3nSU4$ [        S 5       nSU< SU< SU < S3n	[        R                  " SS[        S9 n
 [         R"                  " UUSSS0SS9nUS:w  aK  S!U-  U
l        [        R+                  S"SR                  [        5      [        5        SU	S#U-  -   4sSSS5        $  SSS5        SU	S$-   4$ s  snf ! [         R$                   aM  nSU
l        S[)        U5      ;   a  SU	S-   4s SnAsSSS5        $ SU	SU< S U< 3-   4s SnAsSSS5        $ SnAff = f! , (       d  f       N~= f)%ac  Determine if the ephemeral drive at devpath should be reformatted.

A fresh ephemeral disk is formatted by Azure and will:
  a.) have a partition table (dos or gpt)
  b.) have 1 partition that is ntfs formatted, or
      have 2 partitions with the second partition ntfs formatted.
      (larger instances with >2TB ephemeral disk have gpt, and will
       have a microsoft reserved partition as part 1.  LP: #1686514)
  c.) the ntfs partition will have no files other than possibly
      'dataloss_warning_readme.txt'

User can indicate that NTFS should never be destroyed by setting
DS_CFG_KEY_PRESERVE_NTFS in dscfg.
If data is found on NTFS, user is warned to set DS_CFG_KEY_PRESERVE_NTFS
to make sure cloud-init does not accidentally wipe their data.
If cloud-init cannot mount the disk to check for data, destruction
will be allowed, unless the dscfg key is set.z#config says to never destroy NTFS (rU   z), skipping checksFzdevice %s does not existzResolving realpath of %s -> %szdevice %s was not partitionedrQ   zdevice z had 3 or more partitions: rˆ   rT   r   z
partition rè   z) on device z was not ntfs formattedc                 ó°   • [        SS/5      n[        [        R                  " U 5       Vs/ s H  o"R	                  5       U;  d  M  UPM     sn5      $ s  snf )Nzdataloss_warning_readme.txtzsystem volume information)ÚsetrZ   rÄ   Úlistdirrw   )ÚmpÚignoredÚfs      r5   Úcount_filesÚ+can_dev_be_reformatted.<locals>.count_filesã  sG   € äØ*Ð,GÐHó
ˆô œrŸzšz¨"œ~ÓJš~˜!·±³À'Ñ1I—A™~ÑJÓKÐKùÒJs   «AÁAz was ntfs formattedzmount-ntfs-and-countrþ   ÚntfsÚLANGÚC)r6  Úupdate_env_for_mountÚ	log_errorzcannot mount ntfszunknown filesystem type 'ntfs'Tz^ but this system cannot mount NTFS, assuming there are no important files. Formatting allowed.Nz but mount of z	 failed: zmounted and counted %d fileszxit looks like you're using NTFS on the ephemeral disk, to ensure that filesystem does not get wiped, set %s.%s in configz but had %d files on it.z3 and had no important files. Safe for reformatting.)rv   rË   r/  rÄ   rÅ   r•  r�   r‚   rr  rx  rZ   r}  r$   r   r  r#   r   rM  rO  r   r�   rƒ   )r£  r,  rp  Ú
partitionsÚpartition_lenrq  Ú	cand_partÚ	cand_pathr…  ÚbmsgÚevtÚ
file_countrx  s                r5   Úcan_dev_be_reformattedr“  §  s€  € ÷& à�H‰H”[Ö!ß$ð
ˆð �cˆzÐä�7‰7�>‰>˜'×"Ñ"ØÐ0°7Ñ:Ð:Ð:ä‡I�IØ(¨'´2·7±7×3CÑ3CÀGÓ3Lôô ' wÓ/€JÞØÐ5¸Ñ?Ð?Ð?ä˜
“O€MØ�qÔãØ�H‰H¡JÓ/¢J˜q˜”d¡JÑ/Õ0ð
ˆð �cˆzÐà˜ÓØ)¨!™}Ñˆ	�9à)¨!™}Ñˆ	ä 	×*Ò*ãÛÛð
ˆð
 �cˆzÐä ñLó !ñLó 	ÛÛð€Dô 
×	 Ò	 Ø#Ø*Ü ò
ð 
ð	PÜŸšØØØØ&,¨c ]ØñˆJð( ˜‹?Ø<¸zÑIˆCŒOÜ�K‰Kð'ð —‘œÓ%Ü(ôð ˜$Ð!;¸jÑ!HÑHÐH÷G
ñ 
ð4 ÷5
ðJ �ÐMÑMÐMÐMùòG 0øôV ×$Ñ$ó 	PØ1ˆCŒOØ/´3°q³6Ó9ààð  /ñ /ðô ÷!
ñ 
ð0 ™$Ã)ÊQÐ!OÑOÐOÔO÷1
ñ 
ûð	Pú÷
õ 
úsU   ÃGÅH:ÅGÅ0AH:ÇH7Ç*H2ÈH7ÈH:ÈH2È#H7È$H:È2H7È7H:È:
IFr0  r£  r+  r,  c                 óÎ  • [         R                  R                  U5      (       d  [        SU-  [        R
                  S9  g [        SU-  [        R
                  S9  SnS nU(       a  Su  pEO[        X5      u  pE[        R                  SXE5        U(       d  g S H›  n[         R                  R                  U SS	U-   5      nS
U< SU< S3n[         R                  R                  U5      (       a/   [         R                  " U5        [        R                  SU5        M…  [        R                  SU5        M�     g ! [         a!  n	[        R                  SX‰5         S n	A	MÆ  S n	A	ff = f)Nz,Ephemeral resource disk '%s' does not exist.r   z$Ephemeral resource disk '%s' exists.F)TzFirst instance boot.zreformattable=%s: %s)r·   ÚmountsÚsemÚconfig_zMarker "z" for module "Ú"z%s removed.z%s: remove failed! (%s)z%s did not exist.)rÄ   rÅ   r•  r*   r�   r‚   r“  rv   Úunlinkr  rƒ   )
r0  r£  r+  r,  Úresultrp  ÚmodÚsempathr�  rx  s
             r5   r.  r.    s   € ô �7‰7�>‰>˜'×"Ñ"ÜØ:¸WÑDÜŸ	™	ò	
ð 	äØ2°WÑ<ÜŸ	™	ò	
ð
 €FØ
€CÞØ4‰ˆ�ä,¨WÓD‰ˆä‡I�IÐ$ fÔ2ÞØã'ˆÜ—'‘'—,‘,˜|¨U°IÀ±OÓD‰Û07»Ð=ˆÜ�7‰7�>‰>˜'×"Ñ"ð@Ü—	’	˜'Ô"Ü—	‘	˜-¨Ö.ô �I‰IÐ)¨4Ö0ñ (ð øô	 %ó @Ü—‘Ð5°t×?Ò?ûð@ús   Ã0,D9Ä9
E$ÅEÅE$c                 ó  • S nU (       d  g U(       d  0 n[         R                  " X5        UR                  5        HG  u  pE[        R                  R                  X5      nSU;   a  U" XV5      n[         R                  " XeSS9  MI     g )Nc                 ó@  •  [         R                  " U 5      nUR                  5        H6  nSUR                  ;   d  M  UR                  [
        :w  d  M+  [
        Ul        M8     [         R                  " U5      $ ! [         a    [        R                  SU5        U s $ f = f)z>Azure provides the UserPassword in plain text. So we redact itÚUserPasswordz#failed to redact userpassword in %s)
ÚETÚ
fromstringÚiterÚtagÚtextÚDEF_PASSWD_REDACTIONÚtostringra  r�   Úcritical)ÚcntÚfnamerä   Úelems       r5   Ú_redact_passwordÚ%write_files.<locals>._redact_passwordF  sy   € ð	Ü—=’= Ó%ˆDØŸ	™	ž�à" d§h¡hÕ.ØŸ	™	Ô%9Õ9ä 4�D–Iñ $ô —;’;˜tÓ$Ð$øÜó 	Ü�L‰LÐ>ÀÔFØŠJð	ús   ‚7A8 ½A8 Á$A8 Á8"BÂBrF  i€  )ÚfilenameÚcontentÚmode)r   Ú
ensure_dirre   rÄ   rÅ   rv   ræ  )Údatadirr?  r›  r«  rÿ   r®  r©  s          r5   r¢  r¢  D  sg   € òö ØÞØˆÜ‡O‚O�GÔ%ØŸ™ž‰ˆÜ—‘—‘˜WÓ+ˆØ˜DÓ Ù& wÓ6ˆGÜ�Š ¸eÔDò	 'r6   c                 ót  • [         R                  " U 5      n0 n0 nUR                  =(       d    SnUR                  (       a  UR                  US'   UR                  (       a  UR                  US'   UR
                  b  UR
                  (       + US'   OUR                  (       a  SUS'   0 nUR                  (       a  UR                  US'   UR                  (       a1  SUS'   [        UR                  :w  a  [        UR                  5      US	'   U(       a  S
U0US'   UR                  US'   [        SUR                  -  [        R                  S9  UR                  US'   [        SUR                  -  [        R                  S9  UR                  US'   [        SUR                  -  [        R                  S9  X$U4$ )zÓParse OVF XML contents.

:return: Tuple of metadata, configuration, userdata dicts.

:raises NonAzureDataSource: if XML is not in Azure's format.
:raises errors.ReportableError: if XML is unparsable or invalid.
r�   r2  r%  rB  Trÿ   FÚlock_passwdÚhashed_passwdr4  r3  r  zPreprovisionedVm: %sr   r  zPreprovisionedVMType: %sr9  zProvisionGuestProxyAgent: %s)r"   Ú
parse_textÚcustom_datarD  Úpublic_keysÚdisable_ssh_password_authÚpasswordrC  r¥  Úencrypt_passÚpreprovisioned_vmr*   r�   rá  Úpreprovisioned_vm_typeÚprovision_guest_proxy_agent)rw  Úovf_envrn  rÇ   r"  Údefusers         r5   r!  r!  a  s‘  € ô ×"Ò" 8Ó,€GØ€BØ
€CØ	×	Ñ	×	" €Bà××Ø&×/Ñ/ˆÐÑà××Ø!×-Ñ-ˆˆJ‰à×(Ñ(Ñ4Ø '× AÑ AÔAˆˆLÒØ	×	×	Ø ˆˆLÑà€GØ××Ø!×*Ñ*ˆ�‰Ø××Ø!&ˆ�ÑÜ 7×#3Ñ#3Ó3Ü'3°G×4DÑ4DÓ'EˆG�OÑ$æØ,¨gÐ6ˆˆMÑà%×7Ñ7€CÐÑÜØ ×!:Ñ!:Ñ:Ü—H‘Hòð
 #*×"@Ñ"@€CÐÑÜØ" W×%CÑ%CÑCÜ—H‘Hòð
 '.×&IÑ&I€CÐ"Ñ#ÜØ&¨×)LÑ)LÑLÜ—H‘Hòð �Cˆ=Ðr6   c                 ó   • [        U 5      $ rÂ  )r1   )r¹  s    r5   rº  rº  ™  s   € Ü˜Ó"Ð"r6   c                 óÀ   •  [        U 5       nUR                  S5         SSS5        g! , (       d  f       g= f! [         a    [        R	                  SU 5         gf = f)z;Return boolean indicating path to cdrom device has content.i   NTzcdrom (%s) is not configuredF)ÚopenÚreadÚIOErrorr�   r‚   )Ú	cdrom_devÚfps     r5   Ú_check_freebsd_cdromrÇ  �  sO   € ð=Ü�)Œ_ Ø�G‰G�DŒMØ÷ �_�_ð
 ûô ó =Ü�	‰	Ð0°)Õ<Øð=ús#   ‚: �) : ©
7³: ·: º AÁAc                 ó|   • U c  g[         R                  " U SS9n[        R                  " U5      R	                  5       $ )zEReturn content random seed file if available, otherwise,
return None.NT)Úquiet)r   Úload_binary_filerc  Ú	b64encodeÚdecode)ÚsourcerÈ   s     r5   re  re  ©  s:   € ð �~ØÜ× Ò  ¨tÑ4€Dô ×Ò˜DÓ!×(Ñ(Ó*Ð*r6   c              #   óö   #   • U v •  [         v •  [        R                  " 5       (       a  Sn[        U5      (       a  Uv •  O*S H$  n[        R                  " SU-  5       S h  v•N   M&     U(       a  Uv •  g g  N7f)Nz/dev/cd0)Úiso9660r5  zTYPE=%s)ÚDEFAULT_PROVISIONING_ISO_DEVr   rL  rÇ  r{  )rÈ   Ú	cache_dirrÅ  Úfstypes       r5   rK  rK  ¾  sh   é € à
‚JÜ
&Ò&Ü‡‚×ÑØˆ	Ü 	×*Ñ*ØŠOøã(ˆFÜ×*Ò*¨9°vÑ+=Ó>×>Ò>ñ )æØ‹ð ñ ?ùs   ‚AA9Á!A7Á"A9c                 ó–  • [         R                  R                  U S5      n[         R                  R                  U5      (       d  [	        S5      e[
        R                  " S5         [        US5       nUR                  5       nS S S 5        S S S 5        [        W5      u  pEnXEUSU04$ ! , (       d  f       N+= f! , (       d  f       N4= f)NrF  zNo ovf-env file foundzReading ovf-env.xmlÚrb)
rÄ   rÅ   rv   r  r!   r   ÚTimedrÂ  rÃ  r!  )Ú
source_dirÚovf_filerÆ  rw  rn  r"  rÇ   s          r5   rN  rN  Í  s–   € ä�w‰w�|‰|˜J¨Ó6€Hä�7‰7�>‰>˜(×#Ñ#Ü Ð!8Ó9Ð9ä	×	Ò	Ð0Õ	1´4¸À$Ô3GÈ2Ø—7‘7“9ˆ÷ 4H×	1ô ! Ó*�K€BˆCØ�C˜-¨Ð2Ð3Ð3÷	 4HÕ3Gú×	1Õ	1ús$   Á&B:Á3B)ÂB:Â)
B7	Â3B:Â:
CÚnetwork_metadatar¯   c          
      ó@  • S0 S.n[        U S   5       GH…  u  p4SnSR                  US9nSUS-   S	-  0nUS
:”  a  SUS'   SUSS.nS HÑ  n	UR                  U	0 5      R                  S/ 5      n
U
(       d  [        R	                  SX”5        MD  SnU	S:X  a  SnOSnU
(       a	  SUS'   XxS'   U(       d  Mj  U
SS  H^  nXI   S   S
   R                  SU5      nUS   nUR                  S5      (       d  / US'   US   R                  SR                  XíS95        M`     MÓ     U(       a]  U(       aV  [        US   5      nUR                  SUR                  5       0US.5        [        U5      nU(       a  UUS    S!'   X‚S"   U'   GMm  [        R	                  S#UUU5        GMˆ     U$ )$zÙConvert imds network metadata dictionary to network v2 configuration.

:param: network_metadata: Dict of "network" key from instance metadata.

:return: Dictionary containing network version 2 standard configuration.
rQ   )ÚversionÚ	ethernetsr  Fzeth{idx})Úidxzroute-metricrT   r±   r   zuse-dnsT)Údhcp4zdhcp4-overridesÚdhcp6)Úipv4Úipv6Ú	ipAddresszNo %s addresses found for: %rrß  Ú24Ú128rÞ  zdhcp6-overridesNÚsubnetÚprefixÚprivateIpAddressÚ	addressesz{ip}/{prefix})Úiprå  rF  Ú
macaddress)Úmatchzset-namerê  r	  rÛ  z<No configuration for: %s (dev_config=%r) (has_ip_address=%r))
Ú	enumeraterž   rQ  r�   r‚   rñ  rx   r]  rw   r†   )rØ  r¯   Ú	netconfigrÜ  ÚintfÚhas_ip_addressÚnicnameÚdhcp_overrideÚ
dev_configÚ	addr_typerç  Údefault_prefixÚaddrÚ	netPrefixÚ	privateIprn   r	  s                    r5   r:  r:  Û  së  € ð -.¸BÑ ?€IÜÐ/°Ñ<×=‰	ˆØˆð ×#Ñ#¨Ð#Ð,ˆØ'¨#°©'°S©Ð9ˆà�‹7Ø',ˆM˜)Ñ$àØ,Øñ&
ˆ
ó
 *ˆIØŸ™ ¨BÓ/×3Ñ3°KÀÓDˆIö Ü—	‘	Ð9¸9ÔKÙØ!ˆNØ˜FÓ"Ø!%‘à!&�ÞØ*.�J˜wÑ'ð 5BÐ0Ñ1æ9Ùà! ! "›�à ™O¨HÑ5°aÑ8×<Ñ<Ø˜nó�	ð !Ð!3Ñ4�	Ø!—~‘~ k×2Ñ2Ø.0�J˜{Ñ+Ø˜;Ñ'×.Ñ.Ø#×*Ñ*¨iÐ*ÐJöó &ñ- *öB ž.Ü'¨¨\Ñ(:Ó;ˆCØ×ÑØ'¨¯©«Ð5À7ÑKôô 5°SÓ9ˆFÞØ06�
˜7Ñ# HÑ-Ø.8�kÑ" 7Ñ+Úä�	‰	ØJØØØ÷		
ñw >ðB Ðr6   c                  ó8   • [         R                  " SS9n U c  0 $ U $ )zlGenerate fallback network config.

@return: Dictionary containing network version 2 standard configuration.
T)Úconfig_driver)r   Úgenerate_fallback_configrÃ  s    r5   r;  r;  ,  s#   € ô ×
&Ò
&°TÑ
:€CØ
�{Øˆ	Ø€Jr6   c                 óÆ  • U (       d  [         n SnU  HÌ  n[        R                  R                  U5      (       d  M)  U(       dJ  [        R                  S[        R                  R                  [        R                  R                  /5        Sn[        R                  R                  U5      (       a  [        R                  " U5        M¶  [        R                  " U5        MÎ     g)aô  Remove Azure-specific ubuntu network config for non-primary nics.

@param paths: List of networking scripts or directories to remove when
    present.

In certain supported ubuntu images, static udev rules or netplan yaml
config is delivered in the base ubuntu image to support dhcp on any
additional interfaces which get attached by a customer at some point
after initial boot. Since the Azure datasource can now regenerate
network configuration as metadata reports these new devices, we no longer
want the udev rules or netplan's 90-hotplug-azure.yaml to configure
networking on eth1 or greater as it might collide with cloud-init's
configuration.

Remove the any existing extended network scripts if the datasource is
enabled to write network per-boot.
Fz|Removing Ubuntu extended network scripts because cloud-init updates Azure network configuration on the following events: %s.TN)ÚUBUNTU_EXTENDED_NETWORK_SCRIPTSrÄ   rÅ   r•  r�   rá  r   rQ  r<  ÚBOOT_LEGACYÚisdirr   Údel_dirr(  )rÙ   ÚloggedrÅ   s      r5   rž  rž  8  s”   € ö& Ü/ˆØ€FÛˆÜ�7‰7�>‰>˜$×ÓÞÜ—‘ð-ô —^‘^×)Ñ)¬9×+@Ñ+@×+FÑ+FÐGô	ð �Ü�w‰w�}‰}˜T×"Ñ"Ü—’˜TÖ"ä—’˜dÖ#ò r6   c                 ó8   • [         R                  " U [        5      $ rÂ  )r   Úlist_from_dependsÚdatasources)Údependss    r5   Úget_datasource_listr  h  s   € Ü×$Ò$ W¬kÓ:Ð:r6   rÂ  )r.   )Šrc  Ú	functoolsÚloggingrÄ   Úos.pathrW   rW  Úxml.etree.ElementTreeÚetreeÚElementTreer   Úenumr   Úpathlibr   r   r   r   Útypingr   r	   r
   r   r…  Ú	cloudinitr   r   r   r   r   r   Úcloudinit.eventr   r   Úcloudinit.netr   Úcloudinit.net.dhcpr   r   r   Úcloudinit.net.ephemeralr   r   Úcloudinit.reportingr   Úcloudinit.sources.azurer   r   r   r   Úcloudinit.sources.helpersr   Úcloudinit.sources.helpers.azurer    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   Úcloudinit.url_helperr-   ÚcryptÚpartialÚrand_strr1   Ú__annotations__r3   ÚAttributeErrorÚpasslib.hashÚpasslibÚhashÚsha512_cryptÚ	getLoggerrC   r�   ÚDS_NAMEr¡  rŸ  Ú
DEFAULT_FSÚAGENT_SEED_DIRrÐ  r;   rM   r�   rû  ra   rf   rm   rx   r}   r†   r�   r’   r–   r˜   r©   rL  Úres_diskr‚   rÌ   r   rË   r/  r¥  rÂ   r½   r^  rb  r_  r`  r·  rx  r}  r“  rP  r.  r¢  r!  rº  rÇ  re  rK  rN  rU  r:  r;  rž  ÚDataSourceAzureNetÚDEP_FILESYSTEMr  r  rB   r6   r5   Ú<module>r(     sp  ðô Û Û Û 	Û Û 	Û ß "Ð "Ý Ý ß 'Ñ 'ß ,Ó ,ã ç E× Eß 1Ý '÷ñ ÷
 JÝ &ß ?Ó ?Ý -÷÷ ÷ õ õ *ðÛà"×*Ò*Ø�‰˜C §¢°RÑ 8Ð9Ð:ñ€M�3ó ð( ×Ò˜Ó!€à
€Ø!Ð#3Ð4Ð ð 6Ð Ø€
Ø#€Ø)Ð ôˆdô ð *JÐ ˜ #™Ó Iò#Ð òò,ð&¨ð °cð ¸hÀs¹mô ð"˜sð  sô ð ð t¨C¡yó ó ðð ð¨ð °¸#±ó ó ðñ4¨Cõ òDò=ò7ð'¨X°c©]ô 'ðV ‡?‚?×ÑØ€JÙ+¨AÓ.€HØÑØ�	‰	Ð-Ô.Ø$ xÑ/Ñà�	‰	Ð)Ô*à"Ðð Ø!Ð#5Ð6Ø Ø.2ñ	Ð ð 	ØØ�eØñ
ðð !+°nÑEÐFñ	'Ð #ð ˜WÐ%€Ø/Ð ð "Ð ôh�g×(Ñ(ô hòV)òòòò#ô"
ð ñ5ó ð5ð ñmNó ðmNð` ð &Ø!Øñ	(Øð(àð(ð ð(ð ô	(ó ð(ðV óEó ðEð8 ñ4ó ð4òn#ð ñó ðð Ø3ó +ó ð+ð( ñó ðð ñ
4ó ð
4ð ðMØðMð -1ðMð 
ó	Mó ðMð` ð°tó ó ðð ó"$ó ð"$ðL %Ð ð �w×-Ò-Ð/Ð0ð€ó;øð_A 	�^Ð$ó ðÛàŸ™×1Ñ1×6Ñ6‹øØó 	ö	ð	úðús*   Â:5J4 Ê4K6Ê=$K$Ë$	K2Ë-K6Ë1K2Ë2K6