+
    ˜qgjõ   ã                   ó¼  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHtH	t	 ^ RI
HtH
t
 ^ RIHtHtHtHtHt ^ RIHt ^ RIHt ^ RIHtHtHtHtHtHt ^ R	IHt ^ R
I H!t!H"t" ]PF                  ! ]$4      t%Rt&Rt'Rt(Rt)Rt*]PV                  ! RRRR7      t,]! R4      t-R R lt.].R 4       t/].R 4       t0RR/R R llt1R t2].R 4       t3]R 4       t4].RRR ^R!^/R" R# ll4       t5R$ R% lt6 ! R& R'4      t7 ! R( R)]84      t9 ! R* R+4      t: ! R, R-4      t; ! R. R/4      t< ! R0 R14      t=].R<R2 R3 ll4       t>].R4 R5 l4       t?R6 R7 lt@ ! R8 R9]84      tA ! R: R;4      tBR# )=é    N)Úcontextmanager)ÚdatetimeÚtimezone)ÚsleepÚtime)ÚCallableÚListÚOptionalÚTypeVarÚUnion)ÚElementTree)Úescape)ÚdistrosÚsubpÚ
temp_utilsÚ
url_helperÚutilÚversion)Úevents)ÚcertsÚerrorsz168.63.129.16úboot-telemetryzsystem-infoÚ
diagnosticÚ
compressedzazure-dsz initialize reporter for azure dsT)ÚnameÚdescriptionÚreporting_enabledÚTc                ód   € V ^8„  d   QhR\         R\        3,          R\         R\        3,          /# )é   Úfunc.Úreturn)r   r   )Úformats   "ÚA/usr/lib/python3/dist-packages/cloudinit/sources/helpers/azure.pyÚ__annotate__r%   (   s,   € ÷ 	ñ 	¤h¨s´A¨vÕ&6ð 	¼8ÀCÌÀFÕ;Kñ 	ó    c                 ó   a € V 3R  lpV# )c                  óÄ   <€ \         P                  ! SP                  SP                  \        R 7      ;_uu_ 4        S! V / VB uuRRR4       #   + '       g   i     R# ; i)©r   r   ÚparentN)r   ÚReportEventStackÚ__name__Úazure_ds_reporter)ÚargsÚkwargsr!   s   *,€r$   ÚimplÚ)azure_ds_telemetry_reporter.<locals>.impl)   sK   ø€ Ü×$Ò$Ø—‘ØŸ™Ü$÷
ö 
ñ
 ˜Ð( Ñ(÷
÷ 
÷ 
ó 
ús   »AÁA	© )r!   r0   s   f r$   Úazure_ds_telemetry_reporterr3   (   s   ø€ õ)ð €Kr&   c                 óô  € \         P                  ! 4       '       g   \        R4      h\        P	                  R4        \        \        4       4      \        \        P                  ! 4       4      ,
          p  \        P                  ! . RORR7      w  r#RpT'       d    RT9   d   TP                  R4      ^,          pT'       g   \        R4      hT \        T4      R	,          ,           p \        P                  ! . RORR7      w  r#RpT'       d    RT9   d   TP                  R4      ^,          pT'       g   \        R4      hT \        T4      R	,          ,           p\        P                  ! \        RR\         P"                  ! T \$        P&                  4      P)                  4       : R\         P"                  ! T\$        P&                  4      P)                  4       : R\         P"                  ! T\$        P&                  4      P)                  4       : 2\        P*                  4      p\        P,                  ! T4       T#   \         d   p\        R4      ThRp?ii ; i  \        P                   d   p\        R
T,          4      ThRp?i\         d   p\        RT,          4      ThRp?ii ; i  \        P                   d   p\        RT,          4      ThRp?i\         d   p\        RT,          4      ThRp?ii ; i)zWReport timestamps related to kernel initialization and systemd
activation of cloud-initz1distro not using systemd, skipping boot telemetryzCollecting boot telemetryz*Failed to determine kernel start timestampNT)ÚcaptureÚ=z8Failed to parse UserspaceTimestampMonotonic from systemdi@B z-Failed to get UserspaceTimestampMonotonic: %sz<Failed to parse UserspaceTimestampMonotonic from systemd: %sz;Failed to parse InactiveExitTimestampMonotonic from systemdz0Failed to get InactiveExitTimestampMonotonic: %sz?Failed to parse InactiveExitTimestampMonotonic from systemd: %sr   zkernel_start=z user_start=z cloudinit_activation=)Ú	systemctlÚshowú-pÚUserspaceTimestampMonotonic)r7   r8   zcloud-init-localr9   ÚInactiveExitTimestampMonotonic)r   Úuses_systemdÚRuntimeErrorÚLOGÚdebugÚfloatr   r   ÚuptimeÚ
ValueErrorr   ÚsplitÚProcessExecutionErrorr   ÚReportingEventÚBOOT_EVENT_TYPEr   Úfromtimestampr   ÚutcÚ	isoformatÚDEFAULT_EVENT_ORIGINÚreport_event)Úkernel_startÚeÚoutÚ_ÚtsmÚ
user_startÚcloudinit_activationÚevts           r$   Úget_boot_telemetryrT   4   s†  € ô ×Ò×!Ò!ÜÐNÓOÐOä‡I�IÐ)Ô*ðPÜœT›V“}¤u¬T¯[ª[«]Ó';Õ;ˆðÜ—’ÚFØô
‰ˆð ˆß�3˜#”:Ø—)‘)˜C“. Õ#ˆCçÜØJóð ð "¤U¨3£Z°'Õ%9Õ:ˆ
ðÜ—’òð ô	
‰ˆð ˆß�3˜#”:Ø—)‘)˜C“. Õ#ˆCßÜØMóð ð  ,¬u°S«z¸GÕ/CÕDÐô ×
Ò
ÜÙô ×"Ò" <´·±Ó>×HÑHÖJÜ×"Ò" :¬x¯|©|Ó<×FÑFÖHÜ×"Ò"Ø$¤h§l¡lóç‰i‹kñð		
ô 	×#Ñ#ó€Cô ×Ò˜Ôð €JøôS ô PÜÐGÓHÈaÐOûðPûô$ ×%Ñ%ô ÜØ;¸aÕ?ó
àð	ûô ô ÜØJÈQÕNó
àð	ûðûô2 ×%Ñ%ô ÜØ>ÀÕBó
àð	ûô ô ÜØMØõó
ð ð	ûðúsy   ½6H9 Á4AI Ã$I Ã&AJ) Ä3$J) È9IÉIÉIÉJ&É-J Ê J&ÊJ&ÊJ!Ê!J&Ê)K7Ê>KËK7ËK7ËK2Ë2K7c                 óŽ  € \         P                  ! 4       p \        P                  ! \        RR\
        P                  ! 4       : RV R,          : RV R,          : RV R,          ^ ,          : R	V R,          ^,          : R
V R,          ^,          : RV R,          : 2\        P                  4      p\        P                  ! V4       V# )z%Collect and report system informationzsystem informationzcloudinit_version=z, kernel_version=Úreleasez
, variant=Úvariantz, distro_name=Údistz, distro_version=z	, flavor=z, python_version=Úpython)	r   Úsystem_infor   rE   ÚSYSTEMINFO_EVENT_TYPEr   Úversion_stringrJ   rK   )ÚinforS   s     r$   Úget_system_infor^   Š   s�   € ô ×ÒÓ€DÜ
×
Ò
ÜÙô
 ×"Ò"Ö$Ø��OˆOØ��OˆOØ��L˜�OˆOØ��L˜�OˆOØ��L˜�OˆOØ��Nð	
ô 	×#Ñ#ó€Cô" ×Ò˜Ôð €Jr&   Úlogger_funcc                óD   € V ^8„  d   QhR\         R\        P                  /# )r    Úmsgr"   )Ústrr   rE   )r#   s   "r$   r%   r%   ¥   s"   € ÷ ñ Ü	ðä×Ññr&   c               óÀ   € \        V4      '       d	   V! V 4       \        P                  ! \        RV \        P                  4      p\        P
                  ! VR0R7       V# )zReport a diagnostic eventzdiagnostic messageÚlog©Úexcluded_handler_types)Úcallabler   rE   ÚDIAGNOSTIC_EVENT_TYPErJ   rK   )ra   r_   rS   s   &$ r$   Úreport_diagnostic_eventri   ¥   sT   € ô �×ÒÙ�CÔÜ
×
Ò
ÜØØÜ×#Ñ#ó	€Cô ×Ò˜°U°GÕ<ð €Jr&   c                ó6  € \         P                  ! \        P                  ! V4      4      pRRRVP	                  R4      /p\
        P                  ! \        V \        P                  ! V4      \
        P                  4      p\
        P                  ! V0 RmR7       V# )zReport a compressed eventÚencodingzgz+b64ÚdataÚasciire   >   rd   ÚprintÚwebhook)Úbase64ÚencodebytesÚzlibÚcompressÚdecoder   rE   ÚCOMPRESSED_EVENT_TYPEÚjsonÚdumpsrJ   rK   )Ú
event_nameÚevent_contentÚcompressed_dataÚ
event_datarS   s   &&   r$   Úreport_compressed_eventr|   ·   s�   € ä×(Ò(¬¯ª°}Ó)EÓF€Oà�HØ�×&Ñ& wÓ/ð€Jô ×
Ò
ÜØÜ�
Š
�:ÓÜ×#Ñ#ó	€Cô ×ÒØÒ$?õð
 €Jr&   c                 ó
  € \         P                  R4        \        P                  ! R.RRR7      w  r\        RV 4       R#   \         d7   p\        R\        T4      ,          \         P                  R7        Rp?R# Rp?ii ; i)	zReport dmesg to KVP.zDumping dmesg log to KVPÚdmesgFT)rt   r5   z$Exception when dumping dmesg log: %s©r_   N)r>   r?   r   r|   Ú	Exceptionri   ÚreprÚwarning)rN   rO   Úexs      r$   Úreport_dmesg_to_kvpr„   Ì   sf   € ô ‡I�IÐ(Ô)ð
Ü—’˜G˜9¨U¸DÔA‰ˆÜ ¨Ö-øÜô 
ÜØ2´T¸"³XÕ=ÜŸ™÷	
ó 	
ûð
ús   —(A ÁBÁ+A=Á=Bc              #   ó
  "  € \         P                  ! 4       p\         P                  ! \         P                  P	                  V 4      4        R x € \         P                  ! V4       R #   \         P                  ! T4       i ; i5i©N)ÚosÚgetcwdÚchdirÚpathÚ
expanduser)ÚnewdirÚprevdirs   & r$   ÚcdrŽ   Ú   sK   é € ä�iŠi‹k€GÜ‡H‚HŒR�W‰W×Ñ Ó'Ô(ðÛä
�Š�ÖøŒ�Š�Õüs   ‚A	BÁA( ÁBÁ(B Â Brl   Úretry_sleepÚtimeout_minutesc                óŠ   € V ^8„  d   QhR\         R\        R\        \        ,          R\        R\        R\
        P                  /# )r    ÚurlÚheadersrl   r�   r�   r"   )rb   Údictr
   ÚbytesÚintr   ÚUrlResponse)r#   s   "r$   r%   r%   å   sP   € ÷ 3ñ 3Ü	ð3ô ð3ô ”5�/ð	3ô
 ð3ô ð3ô ×Ññ3r&   c          	     óú  € V^<,          \        4       ,           p^ pRpV'       g%   V^,          p \        P                  ! WVRR7      p \	        RW3,          \        P                  R7       V#   \        P                   dk   p\	        RYYˆP
                  TP                  3,          \        P                  R7       \        4       T,           T8¼  g   R\        T4      9   d   h  Rp?MRp?ii ; i\        T4       Kà  )zÈReadurl wrapper for querying wireserver.

:param retry_sleep: Time to sleep before retrying.
:param timeout_minutes: Retry up to specified number of minutes.
:raises UrlError: on error fetching data.
N)r“   rl   ÚtimeoutzdFailed HTTP request with Azure endpoint %s during attempt %d with exception: %s (code=%r headers=%r)r   zNetwork is unreachablez@Successful HTTP request with Azure endpoint %s after %d attempts)é   é<   )r   r   ÚreadurlÚUrlErrorri   Úcoder“   r>   r?   rb   r   )	r’   r“   rl   r�   r�   r™   ÚattemptÚresponserM   s	   &$$$$    r$   Úhttp_with_retriesr¡   ä   sè   € ð  Õ"¤T£VÕ+€Gà€GØ€HßØ�1�ˆð	Ü!×)Ò)Ø¨4¸ôˆHð ô, ð	Ø˜õ	'ä—I‘Iõð
 €Oøô5 ×"Ñ"ô 	Ü#ðEà §F¡F¨A¯I©IÐ6õ7ô  ŸI™Iõ	ô “˜Õ$¨Ô/Ø+¬s°1«vÔ5àô 6ûð	úô& 	ˆkÖs   ¯A. Á.C-ÂA C(Ã(C-c                óŠ   € V ^8„  d   QhR\         \        ,          R\         \        ,          R\         \        ,          R\        /# )r    ÚusernameÚhostnameÚdisable_ssh_password_authr"   )r
   rb   Úboolr•   )r#   s   "r$   r%   r%     s>   € ÷ -ñ -ä”s�mð-ô ”s�mð-ô  (¬�~ð	-ô
 ñ-r&   c           	      óÖ   € V '       d   R V  R2pMRpVf   RpMR\        V4      P                  4        R2pRV R2p\        P                  ! RV RV RV R	24      P	                  R
4      # )z<ns1:UserName>z</ns1:UserName>Ú z&<ns1:DisableSshPasswordAuthentication>z'</ns1:DisableSshPasswordAuthentication>z<ns1:HostName>z</ns1:HostName>aÐ          <ns0:Environment xmlns:ns0="http://schemas.dmtf.org/ovf/environment/1"
         xmlns:ns1="http://schemas.microsoft.com/windowsazure"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <ns1:ProvisioningSection>
            <ns1:Version>1.0</ns1:Version>
            <ns1:LinuxProvisioningConfigurationSet>
              <ns1:ConfigurationSetType>LinuxProvisioningConfiguration
              </ns1:ConfigurationSetType>
              z
              a‡  
            </ns1:LinuxProvisioningConfigurationSet>
          </ns1:ProvisioningSection>
          <ns1:PlatformSettingsSection>
            <ns1:Version>1.0</ns1:Version>
            <ns1:PlatformSettings>
              <ns1:ProvisionGuestAgent>true</ns1:ProvisionGuestAgent>
            </ns1:PlatformSettings>
          </ns1:PlatformSettingsSection>
        </ns0:Environment>
        úutf-8)rb   ÚlowerÚtextwrapÚdedentÚencode)r£   r¤   r¥   Úns_usernameÚns_disable_ssh_password_authÚns_hostnames   $$$   r$   Úbuild_minimal_ovfr±     s¤   € ÷ Ø& x j°Ð@‰àˆà Ò(Ø')Ñ$ð 5ÜÐ,Ó-×3Ñ3Ó5Ð6Ø5ð6ð 	%ð # 8 *¨OÐ<€Kä�?Š?ð	ð ˆmð Ø+Ð,ð -Øˆmð 
	ð	ó÷. �fˆWƒoð/r&   c                   ó^   a € ] tR tRt o RRRR/tR tRV 3R lR lltRV 3R
 lR lltRtV t	R	# )ÚAzureEndpointHttpClientiK  zx-ms-agent-nameÚWALinuxAgentzx-ms-versionz
2012-11-30c                ó   € R RRV/V n         R# )zx-ms-cipher-nameÚDES_EDE3_CBCz!x-ms-guest-agent-public-x509-certN©Úextra_secure_headers©ÚselfÚcertificates   &&r$   Ú__init__Ú AzureEndpointHttpClient.__init__Q  s   € à Ø/°ð%
ˆÖ!r&   c                ó4   <€ V ^8„  d   QhRS[ P                  /# ©r    r"   )r   r—   )r#   Ú__classdict__s   "€r$   r%   Ú$AzureEndpointHttpClient.__annotate__W  s   ø€ ÷ 7ñ 7©
×(>Ñ(>ñ 7r&   c                ó¬   € V P                   pV'       d6   V P                   P                  4       pVP                  V P                  4       \	        WR 7      # ))r“   )r“   ÚcopyÚupdater¸   r¡   )rº   r’   Úsecurer“   s   &&& r$   ÚgetÚAzureEndpointHttpClient.getW  s=   € Ø—,‘,ˆßØ—l‘l×'Ñ'Ó)ˆGØ�N‰N˜4×4Ñ4Ô5Ü  Ô6Ð6r&   Nc                óJ   <€ V ^8„  d   QhRS[ S[,          RS[P                  /# )r    rl   r"   )r
   r•   r   r—   )r#   rÀ   s   "€r$   r%   rÁ   ^  s+   ø€ ÷ Bñ BÙ!¡%�ðBá	×	Ñ	ñBr&   c                ó’   € V P                   pVe,   V P                   P                  4       pVP                  V4       \        WVR7      # )N)rl   r“   )r“   rÃ   rÄ   r¡   )rº   r’   rl   Úextra_headersr“   s   &&&& r$   ÚpostÚAzureEndpointHttpClient.post^  s>   € ð —,‘,ˆØÒ$Ø—l‘l×'Ñ'Ó)ˆGØ�N‰N˜=Ô)Ü  ¸ÔAÐAr&   r·   )F©NN)
r,   Ú
__module__Ú__qualname__Ú__firstlineno__r“   r¼   rÆ   rË   Ú__static_attributes__Ú__classdictcell__©rÀ   s   @r$   r³   r³   K  s7   ø‡ € à˜>Ø˜ð€Gò

÷7ò 7÷B÷ Bð Br&   r³   c                   ó   € ] tR tRtRtRtR# )ÚInvalidGoalStateXMLExceptionih  z9Raised when GoalState XML is invalid or has missing data.r2   N)r,   rÎ   rÏ   rÐ   Ú__doc__rÑ   r2   r&   r$   rÕ   rÕ   h  s   † ÝCr&   rÕ   c                   ó<   a € ] tR tRt o RV 3R lR lltR tRtV tR# )Ú	GoalStateil  c                óF   <€ V ^8„  d   QhRS[ S[S[3,          RS[RS[RR/# )r    Úunparsed_xmlÚazure_endpoint_clientÚneed_certificater"   N)r   rb   r•   r³   r¦   )r#   rÀ   s   "€r$   r%   ÚGoalState.__annotate__m  s<   ø€ ÷ 5ñ 5á™C¡˜JÕ'ð5ñ  7ð5ñ ð	5ð
 
ñ5r&   c                ó8  € W n          \        P                  ! V4      V n        T P                  R4      T n	        T P                  R4      T n
        T P                  R4      T n        R F?  p\        Y4      e   K  RT,          p\        T\        P                  R7       \        T4      h	  RT n        T P                  R4      pTe�   T'       dw   \        P                   ! R	R
\"        R7      ;_uu_ 4        T P                   P%                  TRR7      P&                  T n        T P                  f   \        R4      h RRR4       R# R# R#   \        P                   d)   p\        RT,          \        P                  R7       h Rp?ii ; i  + '       g   i     R# ; i)a@  Parses a GoalState XML string and returns a GoalState object.

@param unparsed_xml: string representing a GoalState XML.
@param azure_endpoint_client: instance of AzureEndpointHttpClient.
@param need_certificate: switch to know if certificates is needed.
@return: GoalState object representing the GoalState XML string.
z!Failed to parse GoalState XML: %sr   Nz./Container/ContainerIdz4./Container/RoleInstanceList/RoleInstance/InstanceIdz./IncarnationzMissing %s in GoalState XMLzD./Container/RoleInstanceList/RoleInstance/Configuration/Certificateszget-certificates-xmlzget certificates xmlr)   T)rÅ   z/Azure endpoint returned empty certificates xml.)Úcontainer_idÚinstance_idÚincarnation)rÛ   ÚETÚ
fromstringÚrootÚ
ParseErrorri   r>   r‚   Ú_text_from_xpathrß   rà   rá   ÚgetattrrÕ   Úcertificates_xmlr   r+   r-   rÆ   Úcontents)rº   rÚ   rÛ   rÜ   rM   Úattrra   r’   s   &&&&    r$   r¼   ÚGoalState.__init__m  s‚  € ð &;Ô"ð	ÜŸš lÓ3ˆDŒIð !×1Ñ1Ð2KÓLˆÔØ×0Ñ0ØBó
ˆÔð  ×0Ñ0°ÓAˆÔãBˆDÜ�tÓ"Ô*Ø3°dÕ:�Ü'¨¼¿¹ÕEÜ2°3Ó7Ð7ñ	 Cð !%ˆÔØ×#Ñ#ð*ó
ˆð Š?×/Ü×(Ò(Ø+Ø2Ü(÷ö ð
 )-×(BÑ(B×(FÑ(FØ ð )Gó )ç‘(ð Ô%ð ×(Ñ(Ò0Ü6ØIóð ð 1÷ñ ñ  0‰?øô1 �}‰}ô 	Ü#Ø3°aÕ7ÜŸK™Kõð ûð	ú÷2÷ ð ús$   ˆE Ã3AFÅFÅ#F Æ FÆF	c                ó\   € V P                   P                  V4      pVe   VP                  # R # r†   )rä   ÚfindÚtext)rº   ÚxpathÚelements   && r$   ræ   ÚGoalState._text_from_xpath¤  s'   € Ø—)‘)—.‘. Ó'ˆØÒØ—<‘<ÐÙr&   )rÛ   rè   rß   rá   rà   rä   N)T)r,   rÎ   rÏ   rÐ   r¼   ræ   rÑ   rÒ   rÓ   s   @r$   rØ   rØ   l  s   ø‡ € ÷5ò 5÷nð r&   rØ   c                   óÖ   a € ] tR tRt o RRRR/tR tR t]R 4       t]P                  R	 4       t]
R
 4       t]]
R 4       4       t]
R 4       t]
R 4       t]
R 4       t]
R 4       tRtV tR# )ÚOpenSSLManageri«  Úprivate_keyzTransportPrivate.pemr»   zTransportCert.pemc                óh   € \         P                  ! 4       V n        R V n        V P	                  4        R # r†   )r   ÚmkdtempÚtmpdirÚ_certificateÚgenerate_certificate©rº   s   &r$   r¼   ÚOpenSSLManager.__init__±  s&   € Ü ×(Ò(Ó*ˆŒØ ˆÔØ×!Ñ!Ö#r&   c                óF   € \         P                  ! V P                  4       R # r†   )r   Údel_dirr÷   rú   s   &r$   Úclean_upÚOpenSSLManager.clean_up¶  s   € Ü�Š�T—[‘[Ö!r&   c                ó   € V P                   # r†   ©rø   rú   s   &r$   r»   ÚOpenSSLManager.certificate¹  s   € à× Ñ Ð r&   c                ó   € Wn         R # r†   r  )rº   Úvalues   &&r$   r»   r  ½  s   € à!Ör&   c                óh  € \         P                  R 4       V P                  e   \         P                  R4       R# \        V P                  4      ;_uu_ 4        \
        P
                  ! RRRRRRR	R
RRRV P                  R,          RV P                  R,          .4       Rp\        P                  ! V P                  R,          4      P                  4        F"  pRV9  g   K  WP                  4       ,          pK$  	  Wn        RRR4       \         P                  R4       R#   + '       g   i     L'; i)z7Generating certificate for communication with fabric...NzCertificate already generated.ÚopensslÚreqz-x509z-nodesz-subjz/CN=LinuxTransportz-daysÚ32768z-newkeyzrsa:3072z-keyoutrô   z-outr»   r¨   ÚCERTIFICATEzNew certificate generated.)r>   r?   r»   rŽ   r÷   r   Úcertificate_namesr   Úload_text_fileÚ
splitlinesÚrstrip)rº   r»   Úlines   &  r$   rù   Ú#OpenSSLManager.generate_certificateÁ  sû   € ä�	‰	ÐKÔLØ×ÑÒ'Ü�I‰IÐ6Ô7ÙÜ�—‘�_�_Ü�IŠIàØØØØØ(ØØØØØØ×*Ñ*¨=Õ9ØØ×*Ñ*¨=Õ9ðôð$ ˆKÜ×+Ò+Ø×&Ñ& }Õ5óç‰j‹lò�ð !¨Ö,Ø§;¡;£=Õ0’Kñ	ð
  +Ô÷3 ô4 	�	‰	Ð.Ö/÷5 �_ús   ÁBD!Ã" D!Ä!D1	c                óD   € R RRV .p\         P                   ! W!R7      w  r4V# )r  Úx509z-noout)rl   )r   )ÚactionÚcertÚcmdÚresultrO   s   &&   r$   Ú_run_x509_actionÚOpenSSLManager._run_x509_actionã  s'   € ð ˜& (¨FÐ3ˆÜ—I’I˜cÔ-‰	ˆØˆr&   c                ó.   € \         P                  ! V4      # r†   )r   Úconvert_x509_to_opensshr¹   s   &&r$   Ú_get_ssh_key_from_certÚ%OpenSSLManager._get_ssh_key_from_certê  s   € ä×,Ò,¨[Ó9Ð9r&   c                óž   € V P                  RV4      pVP                  R4      pW#^,           R P                  R4      pRP                  V4      # )zÛopenssl x509 formats fingerprints as so:
'SHA1 Fingerprint=07:3E:19:D1:4D:1C:79:92:24:C6:A0:FD:8D:DA:\
B6:A8:BF:27:D4:73\n'

Azure control plane passes that fingerprint as so:
'073E19D14D1C799224C6A0FD8DDAB6A8BF27D473'
z-fingerprintr6   Ú:r¨   éÿÿÿÿ)r  rí   rC   Újoin)rº   r»   Úraw_fpÚeqÚoctetss   &&   r$   Ú_get_fingerprint_from_certÚ)OpenSSLManager._get_fingerprint_from_certî  sK   € ð ×&Ñ& ~°{ÓCˆØ�[‰[˜ÓˆØ˜Q� Ð$×*Ñ*¨3Ó/ˆØ�w‰w�v‹Ðr&   c           	     ó’  € \         P                  ! V4      P                  R4      pVP                  pRRRRRVP	                  R4      .p\        V P                  4      ;_uu_ 4        \        P                  ! RP                  ! R/ V P                  B R	R
P                  V4      R7      w  rVRRR4       V#   + '       g   i     X# ; i)z�Decrypt the certificates XML document using the our private key;
return the list of certs and private keys contained in the doc.
z.//Datas   MIME-Version: 1.0s<   Content-Disposition: attachment; filename="Certificates.p7m"s?   Content-Type: application/x-pkcs7-mime; name="Certificates.p7m"s!   Content-Transfer-Encoding: base64r&   r©   zuopenssl cms -decrypt -in /dev/stdin -inkey {private_key} -recip {certificate} | openssl pkcs12 -nodes -password pass:Tó   
)Úshellrl   Nr2   )râ   rã   rí   rî   r­   rŽ   r÷   r   r#   r
  r  )rº   rè   ÚtagÚcertificates_contentÚlinesrN   rO   s   &&     r$   Ú_decrypt_certs_from_xmlÚ&OpenSSLManager._decrypt_certs_from_xmlü  s»   € ô
 �mŠmÐ,Ó-×2Ñ2°9Ó=ˆØ"Ÿx™xÐà ØKØNØ0ØØ ×'Ñ'¨Ó0ð
ˆô �—‘�_�_Ü—Y’Yð#ç#)¡6ð*ñ Dà,0×,BÑ,BñDð Ø—Z‘Z Ó&ô‰FˆC÷ ð ˆ
÷ Ž_ð ˆ
ús   Á&AB5Â5C	c                ó²   € V P                  V4      p/ p\        P                  ! V4       F)  pV P                  V4      pV P	                  V4      pWSV&   K+  	  V# )zxGiven the Certificates XML document, return a dictionary of
fingerprints and associated SSH keys derived from the certs.)r+  r   Úextract_x509_certificatesr  r#  )rº   rè   rN   Úkeysr»   Ússh_keyÚfingerprints   &&     r$   Úparse_certificatesÚ!OpenSSLManager.parse_certificates  s_   € ð ×*Ñ*Ð+;Ó<ˆØˆä ×:Ò:¸3Ö?ˆKØ×1Ñ1°+Ó>ˆGØ×9Ñ9¸+ÓFˆKØ '�Óñ @ð
 ˆr&   )rø   r»   r÷   N)r,   rÎ   rÏ   rÐ   r
  r¼   rþ   Úpropertyr»   Úsetterr3   rù   Ústaticmethodr  r  r#  r+  r2  rÑ   rÒ   rÓ   s   @r$   ró   ró   «  sÒ   ø‡ € àÐ-ØÐ*ðÐò
$ò
"ð ñ!ó ð!ð ×Ññ"ó ð"ð !ñ0ó !ð0ðB Ø ñó !ó ðð
 !ñ:ó !ð:ð !ñó !ðð !ñó !ðð0 !ñó !ör&   ró   c                   óô   a € ] tR tRt o ]P
                  ! R4      t]P
                  ! R4      tRtRt	Rt
RtV 3R lR	 lt]V 3R
 lR l4       t]V 3R lR l4       tRV 3R lR llt]V 3R lR l4       tRtV tR# )ÚGoalStateHealthReporteri$  a           <?xml version="1.0" encoding="utf-8"?>
        <Health xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:xsd="http://www.w3.org/2001/XMLSchema">
          <GoalStateIncarnation>{incarnation}</GoalStateIncarnation>
          <Container>
            <ContainerId>{container_id}</ContainerId>
            <RoleInstanceList>
              <Role>
                <InstanceId>{instance_id}</InstanceId>
                <Health>
                  <State>{health_status}</State>
                  {health_detail_subsection}
                </Health>
              </Role>
            </RoleInstanceList>
          </Container>
        </Health>
        z›        <Details>
          <SubStatus>{health_substatus}</SubStatus>
          <Description>{health_description}</Description>
        </Details>
        ÚReadyÚNotReadyÚProvisioningFailedi   c                ó0   <€ V ^8„  d   QhRS[ RS[RS[RR/# )r    Ú
goal_staterÛ   Úendpointr"   N)rØ   r³   rb   )r#   rÀ   s   "€r$   r%   Ú$GoalStateHealthReporter.__annotate__J  s3   ø€ ÷ "ñ "áð"ñ  7ð"ñ ð	"ð
 
ñ"r&   c                ó*   € Wn         W n        W0n        R# )a÷  Creates instance that will report provisioning status to an endpoint

@param goal_state: An instance of class GoalState that contains
    goal state info such as incarnation, container id, and instance id.
    These 3 values are needed when reporting the provisioning status
    to Azure
@param azure_endpoint_client: Instance of class AzureEndpointHttpClient
@param endpoint: Endpoint (string) where the provisioning status report
    will be sent to
@return: Instance of class GoalStateHealthReporter
N)Ú_goal_stateÚ_azure_endpoint_clientÚ	_endpoint)rº   r=  rÛ   r>  s   &&&&r$   r¼   Ú GoalStateHealthReporter.__init__J  s   € ð" &ÔØ&;Ô#Ø!Žr&   c                ó   <€ V ^8„  d   QhRR/# )r    r"   Nr2   )r#   rÀ   s   "€r$   r%   r?  `  s   ø€ ÷ 4ñ 4 4ñ 4r&   c                ó¢  € V P                  V P                  P                  V P                  P                  V P                  P                  V P
                  R 7      p\        P                  R4        V P                  VR7       \        P                  R4       R#   \         d)   p\        RT,          \        P                  R7       h Rp?ii ; i))rá   rß   rà   Ústatusz Reporting ready to Azure fabric.©Údocumentz#exception while reporting ready: %sr   NzReported ready to Azure fabric.)Úbuild_reportrA  rá   rß   rà   ÚPROVISIONING_SUCCESS_STATUSr>   r?   Ú_post_health_reportr€   ri   Úerrorr]   )rº   rI  rM   s   &  r$   Úsend_ready_signalÚ)GoalStateHealthReporter.send_ready_signal_  s¯   € à×$Ñ$Ø×(Ñ(×4Ñ4Ø×)Ñ)×6Ñ6Ø×(Ñ(×4Ñ4Ø×3Ñ3ð	 %ó 
ˆô 	�	‰	Ð4Ô5ð	Ø×$Ñ$¨hÐ$Ô7ô 	�‰Ð2Ö3øô ô 	Ü#Ø5¸Õ9ÜŸI™Iõð ûð	ús   Á2B ÂCÂ&#C	Ã	Cc                ó$   <€ V ^8„  d   QhRS[ RR/# ©r    r   r"   N©rb   )r#   rÀ   s   "€r$   r%   r?  t  s   ø€ ÷ 9ñ 9©sð 9°tñ 9r&   c           	     ó”  € V P                  V P                  P                  V P                  P                  V P                  P                  V P
                  V P                  VR 7      p V P                  VR7       \        P                  R4       R#   \         d+   pRT,          p\        T\        P                  R7       h Rp?ii ; i))rá   rß   rà   rG  Ú	substatusr   rH  z%exception while reporting failure: %sr   Nz!Reported failure to Azure fabric.)rJ  rA  rá   rß   rà   ÚPROVISIONING_NOT_READY_STATUSÚPROVISIONING_FAILURE_SUBSTATUSrL  r€   ri   r>   rM  r‚   )rº   r   rI  rM   ra   s   &&   r$   Úsend_failure_signalÚ+GoalStateHealthReporter.send_failure_signals  s«   € à×$Ñ$Ø×(Ñ(×4Ñ4Ø×)Ñ)×6Ñ6Ø×(Ñ(×4Ñ4Ø×5Ñ5Ø×9Ñ9Ø#ð %ó 
ˆð	Ø×$Ñ$¨hÐ$Ô7ô 	�‰Ð7Ö8øô ô 	Ø9¸AÕ=ˆCÜ# C´S·Y±YÕ?Øûð	ús   Á)B ÂCÂ%CÃCNc          
      ó8   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ RS[/# )r    rá   rß   rà   rG  r"   )rb   r•   )r#   rÀ   s   "€r$   r%   r?  †  s=   ø€ ÷ -ñ -áð-ñ ð-ñ ð	-ñ
 ð-ñ 
ñ-r&   c                óB  € R pVe=   V P                   P                  \        V4      \        VRV P                   4      R7      pV P                  P                  \        \        V4      4      \        V4      \        V4      \        V4      VR7      pVP                  R4      # )r¨   N)Úhealth_substatusÚhealth_description)rá   rß   rà   Úhealth_statusÚhealth_detail_subsectionr©   )Ú%HEALTH_DETAIL_SUBSECTION_XML_TEMPLATEr#   r   Ú"HEALTH_REPORT_DESCRIPTION_TRIM_LENÚHEALTH_REPORT_XML_TEMPLATErb   r­   )	rº   rá   rß   rà   rG  rT  r   Úhealth_detailÚhealth_reports	   &&&&&&&  r$   rJ  Ú$GoalStateHealthReporter.build_report†  s£   € ð ˆØÒ Ø ×FÑF×MÑMÜ!'¨	Ó!2Ü#)ØÐ I $×"IÑ"IÐJó$ð Nó ˆMð ×7Ñ7×>Ñ>Üœs ;Ó/Ó0Ü Ó-Ü˜{Ó+Ü  ›.Ø%2ð ?ó 
ˆð ×#Ñ# GÓ,Ð,r&   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r    rI  r"   N©r•   )r#   rÀ   s   "€r$   r%   r?  £  s   ø€ ÷ Eñ E©Eð E°dñ Er&   c                óæ   € \        ^ 4       \        P                  R4       RP                  V P                  4      pV P
                  P                  VVRR/R7       \        P                  R4       R# )r   z&Sending health report to Azure fabric.zhttp://{}/machine?comp=healthzContent-Typeztext/xml; charset=utf-8)rl   rÊ   z/Successfully sent health report to Azure fabricN)r   r>   r?   r#   rC  rB  rË   )rº   rI  r’   s   && r$   rL  Ú+GoalStateHealthReporter._post_health_report¢  sc   € ô( 	ˆaŒä�	‰	Ð:Ô;Ø-×4Ñ4°T·^±^ÓDˆØ×#Ñ#×(Ñ(ØØØ)Ð+DÐEð 	)ô 	
ô
 	�	‰	ÐCÖDr&   )rB  rC  rA  rÍ   )r,   rÎ   rÏ   rÐ   r«   r¬   ra  r_  rK  rU  rV  r`  r¼   r3   rN  rW  rJ  rL  rÑ   rÒ   rÓ   s   @r$   r8  r8  $  s›   ø‡ € Ø!)§¢ð	ó"Ðð, -5¯OªOð	ó-Ð)ð #*ÐØ$.Ð!Ø%9Ð"à),Ð&÷"ð "ð* !÷4ó !ð4ð& !÷9ó !ð9÷$-ò -ð8 !÷Eó !öEr&   r8  c                   ó  a € ] tR tRt o V 3R lR ltR t]V 3R lR l4       t]RV 3R lR	 ll4       t]V 3R
 lR l4       t	]V 3R lR l4       t
]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       tRtV tR# )ÚWALinuxAgentShimiÂ  c                ó    <€ V ^8„  d   QhRS[ /# )r    r>  rR  )r#   rÀ   s   "€r$   r%   ÚWALinuxAgentShim.__annotate__Ã  s   ø€ ÷ Mñ M¡ñ Mr&   c                ó.   € Wn         R V n        R V n        R # r†   )r>  Úopenssl_managerrÛ   )rº   r>  s   &&r$   r¼   ÚWALinuxAgentShim.__init__Ã  s   € Ø ŒØ9=ˆÔØHLˆÖ"r&   c                óZ   € V P                   e   V P                   P                  4        R # R # r†   )rn  rþ   rú   s   &r$   rþ   ÚWALinuxAgentShim.clean_upÈ  s%   € Ø×ÑÒ+Ø× Ñ ×)Ñ)Ö+ñ ,r&   c                ó8   <€ V ^8„  d   QhRS[ P                  RR/# )r    Údistror"   N)r   ÚDistro)r#   rÀ   s   "€r$   r%   rl  Í  s   ø€ ÷ ñ ©¯©ð ¸Dñ r&   c                óÊ   € \         P                  R 4        VP                  V4       R#   \         d.   p\	        RT,          \         P
                  R7        Rp?R# Rp?ii ; i)zEjecting the provisioning isoz(Failed ejecting the provisioning iso: %sr   N)r>   r?   Úeject_mediar€   ri   rM  )rº   Úiso_devrs  rM   s   &&& r$   Ú	eject_isoÚWALinuxAgentShim.eject_isoÌ  sN   € ä�	‰	Ð1Ô2ð	Ø×Ñ˜wÖ'øÜô 	Ü#Ø:¸QÕ>ÜŸI™I÷ó ûð	ús   —* ªA"µ"AÁA"Nc                óZ   <€ V ^8„  d   QhRS[ P                  RS[S[S[,          ,          /# )r    rs  r"   )r   rt  r
   r	   rb   )r#   rÀ   s   "€r$   r%   rl  Ø  s*   ø€ ÷ #ñ #Ù—n‘nð#á	‘$‘s•)Õ	ñ#r&   c                ó–  € RpV P                   f*   Ve&   \        4       V n         V P                   P                  pV P                  f   \	        V4      V n        V P                  VRJR7      pRpVe   V P                  WR4      p\        WPP                  V P                  4      pVe   V P                  W1R7       VP                  4        V# )a±  Gets the VM's GoalState from Azure, uses the GoalState information
to report ready/send the ready signal/provisioning complete signal to
Azure, and then uses pubkey_info to filter and obtain the user's
pubkeys from the GoalState.

@param pubkey_info: List of pubkey values and fingerprints which are
    used to filter and obtain the user's pubkey values from the
    GoalState.
@return: The list of user's authorized pubkey values.
N©rÜ   )rs  )rn  ró   r»   rÛ   r³   Ú_fetch_goal_state_from_azureÚ_get_user_pubkeysr8  r>  rx  rN  )rº   rs  Úpubkey_inforw  Úhttp_client_certificater=  Ússh_keysÚhealth_reporters   &&&&    r$   Ú"register_with_azure_and_fetch_dataÚ3WALinuxAgentShim.register_with_azure_and_fetch_data×  sÐ   € ð #'ÐØ×ÑÒ'¨KÒ,CÜ#1Ó#3ˆDÔ Ø&*×&:Ñ&:×&FÑ&FÐ#Ø×%Ñ%Ò-Ü)@Ø'ó*ˆDÔ&ð ×6Ñ6Ø4¸DÐ@ð 7ó 
ˆ
ð ˆØÒ"Ø×-Ñ-¨jÓFˆHÜ1Ø×2Ñ2°D·M±Mó
ˆð ÒØ�N‰N˜7ˆNÔ2à×)Ñ)Ô+Øˆr&   c                ó$   <€ V ^8„  d   QhRS[ RR/# rQ  rR  )r#   rÀ   s   "€r$   r%   rl  þ  s   ø€ ÷ Eñ EÁ#ð EÈ$ñ Er&   c                óÊ   € V P                   f   \        R4      V n         V P                  RR7      p\        W P                   V P                  4      pVP                  VR7       R# )zÁGets the VM's GoalState from Azure, uses the GoalState information
to report failure/send provisioning failure signal to Azure.

@param: user visible error description of provisioning failure.
NFr|  ©r   )rÛ   r³   r}  r8  r>  rW  )rº   r   r=  r‚  s   &&  r$   Ú&register_with_azure_and_report_failureÚ7WALinuxAgentShim.register_with_azure_and_report_failureý  s\   € ð ×%Ñ%Ò-Ü)@ÀÓ)FˆDÔ&Ø×6Ñ6ÈÐ6ÓNˆ
Ü1Ø×2Ñ2°D·M±Mó
ˆð 	×+Ñ+¸Ð+ÖDr&   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r    rÜ   r"   )r¦   rØ   )r#   rÀ   s   "€r$   r%   rl    s   ø€ ÷ 
ñ 
Ù $ð
á	ñ
r&   c                óD   € V P                  4       pV P                  W!4      # )zàFetches the GoalState XML from the Azure endpoint, parses the XML,
and returns a GoalState object.

@param need_certificate: switch to know if certificates is needed.
@return: GoalState object representing the GoalState XML
)Ú"_get_raw_goal_state_xml_from_azureÚ_parse_raw_goal_state_xml)rº   rÜ   Úunparsed_goal_state_xmls   && r$   r}  Ú-WALinuxAgentShim._fetch_goal_state_from_azure  s)   € ð #'×"IÑ"IÓ"KÐØ×-Ñ-Ø#ó
ð 	
r&   c                ó    <€ V ^8„  d   QhRS[ /# r¿   rf  )r#   rÀ   s   "€r$   r%   rl    s   ø€ ÷ !ñ !±Eñ !r&   c                óÊ  € \         P                  R4       RP                  V P                  4      p \        P
                  ! RR\        R7      ;_uu_ 4        V P                  P                  V4      pRRR4       \         P                  R	4       XP                  #   + '       g   i     L1; i  \         d)   p\        RT,          \         P                  R7       h Rp?ii ; i)
zrFetches the GoalState XML from the Azure endpoint and returns
the XML as a string.

@return: GoalState XML string
zRegistering with Azure...z!http://{}/machine/?comp=goalstatezgoalstate-retrievalzretrieve goalstater)   Nz9failed to register with Azure and fetch GoalState XML: %sr   z#Successfully fetched GoalState XML.)r>   r]   r#   r>  r   r+   r-   rÛ   rÆ   r€   ri   r‚   r?   ré   )rº   r’   r    rM   s   &   r$   rŒ  Ú3WALinuxAgentShim._get_raw_goal_state_xml_from_azure  s¹   € ô 	�‰Ð,Ô-Ø1×8Ñ8¸¿¹ÓGˆð	Ü×(Ò(Ø*Ø0Ü(÷ö ð
  ×5Ñ5×9Ñ9¸#Ó>�÷ô 	�	‰	Ð7Ô8Ø× Ñ Ð ÷÷ ûô ô 	Ü#ØKØõäŸK™Kõð
 ûð	ús5   ²%B/ ÁBÁ3B/ ÂB,	Â'B/ Â,B/ Â/C"Â:#CÃC"c                óB   <€ V ^8„  d   QhRS[ S[S[3,          RS[RS[/# )r    rŽ  rÜ   r"   )r   rb   r•   r¦   rØ   )r#   rÀ   s   "€r$   r%   rl  7  s2   ø€ ÷ ñ á!&¡s©E zÕ!2ðñ ðñ 
ñ	r&   c                óf  €  \        VV P                  V4      pRP                  RTP                  ,          RTP                  ,          RTP                  ,          .4      p\        T\        P                  R7       T#   \         d)   p\        RT,          \        P
                  R7       h Rp?ii ; i)zðParses a GoalState XML string and returns a GoalState object.

@param unparsed_goal_state_xml: GoalState XML string
@param need_certificate: switch to know if certificates is needed.
@return: GoalState object representing the GoalState XML
z"Error processing GoalState XML: %sr   Nz, zGoalState XML container id: %szGoalState XML instance id: %szGoalState XML incarnation: %s)rØ   rÛ   r€   ri   r>   r‚   r  rß   rà   rá   r?   )rº   rŽ  rÜ   r=  rM   ra   s   &&&   r$   r�  Ú*WALinuxAgentShim._parse_raw_goal_state_xml6  s£   € ð	Ü"Ø'Ø×*Ñ*Ø óˆJð �i‰ià0°:×3JÑ3JÕJØ/°*×2HÑ2HÕHØ/°*×2HÑ2HÕHðó
ˆô 	  ´·±Õ;ØÐøô ô 	Ü#Ø4°qÕ8ÜŸK™Kõð ûð	ús   ‚A= Á=B0Â#B+Â+B0c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r    r=  r  r"   )rØ   Úlist)r#   rÀ   s   "€r$   r%   rl  Y  s%   ø€ ÷ 'ñ 'Ù#ð'Ù26ð'á	ñ'r&   c                óà   € . pVP                   e^   VeZ   V P                  eL   \        P                  R4       V P                  P	                  VP                   4      pV P                  WB4      pV# )aÓ  Gets and filters the VM admin user's authorized pubkeys.

The admin user in this case is the username specified as "admin"
when deploying VMs on Azure.
See https://docs.microsoft.com/en-us/cli/azure/vm#az-vm-create.
cloud-init expects a straightforward array of keys to be dropped
into the admin user's authorized_keys file. Azure control plane exposes
multiple public keys to the VM via wireserver. Select just the
admin user's key(s) and return them, ignoring any other certs.

@param goal_state: GoalState object. The GoalState object contains
    a certificate XML, which contains both the VM user's authorized
    pubkeys and other non-user pubkeys, which are used for
    MSI and protected extension handling.
@param pubkey_info: List of VM user pubkey dicts that were previously
    obtained from provisioning data.
    Each pubkey dict in this list can either have the format
    pubkey['value'] or pubkey['fingerprint'].
    Each pubkey['fingerprint'] in the list is used to filter
    and obtain the actual pubkey value from the GoalState
    certificates XML.
    Each pubkey['value'] requires no further processing and is
    immediately added to the return list.
@return: A list of the VM user's authorized pubkey values.
z/Certificate XML found; parsing out public keys.)rè   rn  r>   r?   r2  Ú_filter_pubkeys)rº   r=  r  r�  Úkeys_by_fingerprints   &&&  r$   r~  Ú"WALinuxAgentShim._get_user_pubkeysX  sl   € ð: ˆà×'Ñ'Ò3ØÒ'Ø×$Ñ$Ò0ä�I‰IÐGÔHØ"&×"6Ñ"6×"IÑ"IØ×+Ñ+ó#Ðð ×+Ñ+Ð,?ÓMˆHØˆr&   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r    rš  r  r"   )r”   r—  )r#   rÀ   s   "€r$   r%   rl  ƒ  s"   ø€ ÷ !ñ !©Tð !Áð !Éñ !r&   c                óT  € . pV FŸ  pRV9   d*   VR,          '       d   VP                  VR,          4       K3  RV9   dP   VR,          '       dA   VR,          pW@9   d   VP                  W,          4       Kq  \        P                  RV4       K‰  \        P                  RV4       K¡  	  V# )að  Filter and return only the user's actual pubkeys.

@param keys_by_fingerprint: pubkey fingerprint -> pubkey value dict
    that was obtained from GoalState Certificates XML. May contain
    non-user pubkeys.
@param pubkey_info: List of VM user pubkeys. Pubkey values are added
    to the return list without further processing. Pubkey fingerprints
    are used to filter and obtain the actual pubkey values from
    keys_by_fingerprint.
@return: A list of the VM user's authorized pubkey values.
r  r1  zIovf-env.xml specified PublicKey fingerprint %s not found in goalstate XMLzFovf-env.xml specified PublicKey with neither value nor fingerprint: %s)Úappendr>   r‚   )rš  r  r/  Úpubkeyr1  s   &&   r$   r™  Ú WALinuxAgentShim._filter_pubkeys‚  s–   € ð ˆÛ!ˆFØ˜&Ô  V¨G§_¤_Ø—‘˜F 7�OÖ,Ø &Ô(¨V°M×-BÔ-BØ$ ]Õ3�ØÔ5Ø—K‘KÐ 3Õ @ÖAä—K‘Kð8à#öô —‘ð0àöñ "ð( ˆr&   )rÛ   r>  rn  rÍ   )r,   rÎ   rÏ   rÐ   r¼   rþ   r3   rx  rƒ  rˆ  r}  rŒ  r�  r~  r6  r™  rÑ   rÒ   rÓ   s   @r$   rj  rj  Â  sÀ   ø‡ € ÷Mð Mò
,ð !÷ó !ðð !÷#ñ #ó !ð#ðJ !÷Eó !ðEð !÷
ó !ð
ð !÷!ó !ð!ð4 !÷ó !ððB !÷'ó !ð'ðR ÷!ó ö!r&   rj  c          	      óž   € V ^8„  d   QhR\         R\        P                  R\        \        \         ,          ,          R\        \         ,          /# )r    r>  rs  r  rw  )rb   r   rt  r
   r	   )r#   s   "r$   r%   r%   ¨  sA   € ÷ ñ Üðä�N‰Nðô œ$œs�)Õ$ðô ”c�]ñ	r&   c                 óŒ   € \        V R 7      p VP                  WVR7      VP                  4        #   TP                  4        i ; i)©r>  )rs  r  rw  )rj  rƒ  rþ   )r>  rs  r  rw  Úshims   &&&& r$   Úget_metadata_from_fabricr¥  §  s@   € ô  XÔ.€DðØ×6Ñ6Ø¸Gð 7ó 
ð 	�‰�øˆ�‰�ús	   Ž1 ±Ac                ó0   € V ^8„  d   QhR\         R\         /# )r    r>  Úencoded_reportrR  )r#   s   "r$   r%   r%   ¸  s   € ÷ ñ ¤sð ¼sñ r&   c                óŽ   € \        V R 7      p VP                  VR7       VP                  4        R#   TP                  4        i ; i)r£  r‡  N)rj  rˆ  rþ   )r>  r§  r¤  s   &$ r$   Úreport_failure_to_fabricr©  ·  s5   € ä XÔ.€DðØ×3Ñ3ÀÐ3ÔOà�‰Žøˆ�‰�ús	   Ž2 ²Ac                ó@   € V ^8„  d   QhR\         R\         R\         RR/# )r    Ú	interfacerN   Úerrr"   NrR  )r#   s   "r$   r%   r%   À  s(   € ÷ ñ œ3ð ¤Sð ¬sð °tñ r&   c                 óŠ   € \        R V  RV 2\        P                  R7       \        RV  RV 2\        P                  R7       R# )z!dhcp client stdout for interface=z: r   z!dhcp client stderr for interface=N)ri   r>   r?   )r«  rN   r¬  s   &&&r$   Údhcp_log_cbr®  À  sB   € ÜØ
+¨I¨;°b¸¸Ð>Ü—I‘Iõô Ø
+¨I¨;°b¸¸Ð>Ü—I‘I÷r&   c                   ó   € ] tR tRtRtR# )ÚNonAzureDataSourceiË  r2   N)r,   rÎ   rÏ   rÐ   rÑ   r2   r&   r$   r°  r°  Ë  s   † Ûr&   r°  c                   óÒ   a € ] tR tRt o RRRR/tRRRRR	RR
RRRRRRRRRRR/	V 3R lR lltV 3R lR lt]V 3R lR l4       tRV 3R lR llt	R V 3R lR llt
R tR tR tRtV tR# )!Ú	OvfEnvXmliÏ  Úovfz)http://schemas.dmtf.org/ovf/environment/1Úwaz)http://schemas.microsoft.com/windowsazurer£   NÚpasswordr¤   Úcustom_datar¥   Úpublic_keysÚpreprovisioned_vmFÚpreprovisioned_vm_typeÚprovision_guest_proxy_agentc                óÔ   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          RS[ S[,          RS[ S[,          RS[ S[,          RS[ S[S[,          ,          RS[RS[ S[,          R	S[R
R/
# )r    r£   rµ  r¤   r¶  r¥   r·  r¸  r¹  rº  r"   N)r
   rb   r•   r¦   r	   r”   )r#   rÀ   s   "€r$   r%   ÚOvfEnvXml.__annotate__Õ  sž   ø€ ÷ Gñ Gñ ™3•-ðGñ ™3•-ð	Gñ
 ™3•-ðGñ ™e•_ðGñ $,©D¥>ðGñ ™d¡4�jÕ)ðGñ  ðGñ !)©¥ðGñ &*ðGð 
ñGr&   c       	        óˆ   € Wn         W n        W0n        W@n        WPn        T;'       g    . V n        Wpn        W€n        W�n        R # r†   )	r£   rµ  r¤   r¶  r¥   r·  r¸  r¹  rº  )
rº   r£   rµ  r¤   r¶  r¥   r·  r¸  r¹  rº  s
   &$$$$$$$$$r$   r¼   ÚOvfEnvXml.__init__Õ  sA   € ð !ŒØ ŒØ ŒØ&ÔØ)BÔ&Ø'2×'8Ð'8°bˆÔØ!2ÔØ&<Ô#Ø+FÖ(r&   c                ó    <€ V ^8„  d   QhRS[ /# r¿   )r¦   )r#   rÀ   s   "€r$   r%   r¼  ì  s   ø€ ÷ /ñ /™tñ /r&   c                ó4   € V P                   VP                   8H  # r†   )Ú__dict__)rº   Úothers   &&r$   Ú__eq__ÚOvfEnvXml.__eq__ì  s   € Ø�}‰} §¡Ñ.Ð.r&   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r    Úovf_env_xmlr"   r²  rR  )r#   rÀ   s   "€r$   r%   r¼  ð  s   ø€ ÷ ñ ¡Sð ¨[ñ r&   c                óH  €  \         P                  ! V4      pTP                  RT P                  4      f   \        R4      h\        4       pTP                  T4       TP                  T4       T#   \         P                   d   p\        P                  ! TR7      ThRp?ii ; i)z·Parser for ovf-env.xml data.

:raises NonAzureDataSource: if XML is not in Azure's format.
:raises errors.ReportableErrorOvfParsingException: if XML is
        unparsable or invalid.
)Ú	exceptionNz./wa:ProvisioningSectionz=Ignoring non-Azure ovf-env.xml: ProvisioningSection not found)râ   rã   rå   r   Ú"ReportableErrorOvfParsingExceptionrí   Ú
NAMESPACESr°  r²  Ú&_parse_linux_configuration_set_sectionÚ _parse_platform_settings_section)ÚclsrÆ  rä   rM   Úinstances   &&   r$   Ú
parse_textÚOvfEnvXml.parse_textï  s“   € ð	PÜ—=’= Ó-ˆDð
 �9‰9Ð/°·±Ó@ÒHÜ$ØOóð ô “;ˆØ×7Ñ7¸Ô=Ø×1Ñ1°$Ô7àˆøô �}‰}ô 	PÜ×;Ò;ÀaÔHÈaÐOûð	Pús   ‚A/ Á/B!ÂBÂB!c                ó,   <€ V ^8„  d   QhRS[ RS[RS[ /# )r    r   ÚrequiredÚ	namespace©rb   r¦   )r#   rÀ   s   "€r$   r%   r¼    s+   ø€ ÷ ñ ñ ðñ ð	ñ
 ñr&   c                ó`  € VP                  R V: RV: 2\        P                  4      pV'       g?   RV,          p\        P	                  V4       V'       d   \
        P                  ! V4      hR# \        V4      ^8”  d)   \
        P                  ! RV\        V4      3,          4      hV^ ,          # )z./r  úmissing configuration for %rNú*multiple configuration matches for %r (%d))Úfindallr²  rÊ  r>   r?   r   Ú!ReportableErrorOvfInvalidMetadataÚlen)rº   Únoder   rÒ  rÓ  Úmatchesra   s   &&&&&  r$   Ú_findÚOvfEnvXml._find  s’   € ð —,’,Û"¢DÐ)¬9×+?Ñ+?ó
ˆ÷ Ø0°4Õ7ˆCÜ�I‰I�cŒNßÜ×>Ò>¸sÓCÐCÙÜ�‹\˜AÔÜ×:Ò:Ø<Øœ˜W›Ð&õ'óð ð
 �q�zÐr&   c                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# )r    r   rÒ  Údecode_base64Ú
parse_boolrÔ  )r#   rÀ   s   "€r$   r%   r¼     s5   ø€ ÷ #ñ #ñ ð#ñ ð	#ñ
 ð#ñ ñ#r&   c                ó<  € VP                  R V,           \        P                  4      pV'       g?   RV,          p\        P	                  V4       V'       d   \
        P                  ! V4      hV# \        V4      ^8”  d)   \
        P                  ! RV\        V4      3,          4      hV^ ,          P                  p	V	f   Tp	V'       d8   V	e4   \        P                  ! RP                  V	P                  4       4      4      p	V'       d   \        P                  ! V	4      p	V	# )z./wa:rÖ  r×  r¨   )rØ  r²  rÊ  r>   r?   r   rÙ  rÚ  rî   rp   Ú	b64decoder  rC   r   Útranslate_bool)
rº   rÛ  r   rÒ  rà  rá  ÚdefaultrÜ  ra   r  s
   &&&&&&&   r$   Ú_parse_propertyÚOvfEnvXml._parse_property   sÜ   € ð —,‘,˜w¨�~¬y×/CÑ/CÓDˆßØ0°4Õ7ˆCÜ�I‰I�cŒNßÜ×>Ò>¸sÓCÐCØˆNäˆw‹<˜!ÔÜ×:Ò:Ø<Øœ˜W›Ð&õ'óð ð
 ˜•
—‘ˆð Š=ØˆEç˜UÒ.Ü×$Ò$ R§W¡W¨U¯[©[«]Ó%;Ó<ˆEçÜ×'Ò'¨Ó.ˆEàˆr&   c                óv  € V P                  VR RR7      pV P                  VRRR7      pV P                  VRRRR7      V n        V P                  VRRR7      V n        V P                  VRRR7      V n        V P                  VR	RR7      V n        V P                  VR
RRR7      V n        V P                  V4       R# )ÚProvisioningSectionT©rÒ  Ú!LinuxProvisioningConfigurationSetÚ
CustomDataF)rà  rÒ  ÚUserNameÚUserPasswordÚHostNameÚ DisableSshPasswordAuthentication)rá  rÒ  N)rÝ  ræ  r¶  r£   rµ  r¤   r¥   Ú_parse_ssh_section)rº   rä   Úprovisioning_sectionÚ
config_sets   &&  r$   rË  Ú0OvfEnvXml._parse_linux_configuration_set_sectionE  sø   € Ø#Ÿz™zØÐ'°$ð  *ó  
Ðð —Z‘ZØ Ø/Øð  ó 
ˆ
ð  ×/Ñ/ØØØØð	 0ó 
ˆÔð ×,Ñ,Ø˜
¨Uð -ó 
ˆŒð ×,Ñ,Ø˜°ð -ó 
ˆŒð ×,Ñ,Ø˜
¨Tð -ó 
ˆŒð *.×)=Ñ)=ØØ.ØØð	 *>ó *
ˆÔ&ð 	×Ñ 
Ö+r&   c                óô   € V P                  VR RR7      pV P                  VRRR7      pV P                  VRRRRR7      V n        V P                  VRRR7      V n        V P                  VRRRRR7      V n        R	# )
ÚPlatformSettingsSectionTrê  ÚPlatformSettingsÚPreprovisionedVmF)rá  rå  rÒ  ÚPreprovisionedVMTypeÚProvisionGuestProxyAgentN)rÝ  ræ  r¸  r¹  rº  )rº   rä   Úplatform_settings_sectionÚplatform_settingss   &&  r$   rÌ  Ú*OvfEnvXml._parse_platform_settings_sectiong  s²   € Ø$(§J¡JØÐ+°dð %/ó %
Ð!ð !ŸJ™JØ%Ð'9ÀDð 'ó 
Ðð "&×!5Ñ!5ØØØØØð "6ó "
ˆÔð '+×&:Ñ&:ØØ"Øð ';ó '
ˆÔ#ð
 ,0×+?Ñ+?ØØ&ØØØð ,@ó ,
ˆÖ(r&   c                óŠ  € . V n         V P                  VR RR7      pVf   R# V P                  VRRR7      pVf   R# VP                  R\        P                  4       Fc  pV P                  VRRR7      pV P                  VRRR7      pV P                  VRR	RR
7      pRVRVRV/pV P                   P                  V4       Ke  	  R# )ÚSSHFrê  NÚ
PublicKeysz./wa:PublicKeyÚFingerprintÚPathÚValuer¨   )rå  rÒ  r1  rŠ   r  )r·  rÝ  rØ  r²  rÊ  ræ  rž  )	rº   ró  Ússh_sectionÚpublic_keys_sectionÚ
public_keyr1  rŠ   r  r0  s	   &&       r$   rñ  ÚOvfEnvXml._parse_ssh_sectionƒ  sð   € ØˆÔà—j‘j ¨U¸U�jÓCˆØÒÙà"Ÿj™jØ˜°ð )ó 
Ðð Ò&Ùà-×5Ñ5Øœi×2Ñ2ö
ˆJð ×.Ñ.Ø˜M°Eð /ó ˆKð ×'Ñ'¨
°FÀUÐ'ÓKˆDØ×(Ñ(Ø˜G¨R¸%ð )ó ˆEð ˜{Ø˜Ø˜ðˆGð
 ×Ñ×#Ñ# GÖ,ó
r&   )	r¶  r¥   r¤   rµ  r¸  r¹  rº  r·  r£   )r´  )FFN)r,   rÎ   rÏ   rÐ   rÊ  r¼   rÃ  ÚclassmethodrÏ  rÝ  ræ  rË  rÌ  rñ  rÑ   rÒ   rÓ   s   @r$   r²  r²  Ï  sÏ   ø‡ € àÐ:ØÐ9ð€Jð
Gð #'ðGð #'ð	Gð
 #'ðGð (,ðGð 59ðGð -1ðGð #(ðGð 15ðGð -2÷Gò G÷./ð /ð ÷ó ð÷0ò ÷0#ò #òJ ,òD
÷8-ð -r&   r²  rÍ   )Crp   rv   Úloggingr‡   r«   rr   Ú
contextlibr   r   r   r   r   Útypingr   r	   r
   r   r   Ú	xml.etreer   râ   Úxml.sax.saxutilsr   Ú	cloudinitr   r   r   r   r   r   Úcloudinit.reportingr   Úcloudinit.sources.azurer   r   Ú	getLoggerr,   r>   ÚDEFAULT_WIRESERVER_ENDPOINTrF   r[   rh   ru   r+   r-   r   r3   rT   r^   ri   r|   r„   rŽ   r¡   r±   r³   r€   rÕ   rØ   ró   r8  rj  r¥  r©  r®  r°  r²  r2   r&   r$   Ú<module>r     sÄ  ðó
 Û Û Û 	Û Û Ý %ß 'ß ß ;Õ ;Ý 'Ý #ç J× JÝ &ß 1à×Ò˜Ó!€ð .Ð à"€Ø%Ð Ø$Ð Ø$Ð Ø×+Ò+Ø	Ø2ØôÐ ñ ˆCƒL€õ	ð ñRó ðRðj ñó ðð4Ø!÷ò$ð* ñ

ó ð

ð ñó ðð ð3ð !ð	3ð
 ð3ð ö3ó ð3õl-÷`Bñ Bô:D 9ô D÷<ñ <÷~vñ v÷r[Eñ [E÷|bñ bðJ öó ðð ôó ðõô	˜ô 	÷P-ó P-r&   