+
    ˜qgj 2  ã                   ó°  € ^ RI t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIH	t	 ^ RI
HtHtHtHt ^ RIHtHtHt ^ RIHtHt ^ RIHt ^ R	IHtHtHt ]P8                  ! ]4      tR
RRRR/RRRRRRR/RRRRRRRRRRRR./t ! R R]	4      t  ! R  R!]PB                  4      t" ! R" R#]"4      t#]#]PH                  33]"]PH                  ]PJ                  33.t&R$ R% lt'R# )&é    N)Ú	b64decode)Úsuppress)ÚEnum)ÚAnyÚListÚTupleÚUnion)ÚsourcesÚ
url_helperÚutil)Úfind_fallback_nicÚget_interfaces_by_mac)ÚEphemeralIPNetwork)Úget_dmi_configÚget_local_instance_idÚis_on_akamaiÚ	base_urlsÚipv4zhttp://169.254.169.254Úipv6zhttp://[fd00:a9fe:a9fe::1]ÚpathsÚtokenz	/v1/tokenÚmetadataz/v1/instanceÚuserdataz/v1/user-dataÚallow_local_stageTÚallow_init_stageÚ
allow_dhcpÚ
allow_ipv4Ú
allow_ipv6Úpreferred_mac_prefixeszf2:3c                   ó&   € ] tR t^-tRt^ t^t^tRtR# )ÚMetadataAvailabilityResultz^
Used to indicate how this instance should behave based on the availability
of metadata to it
© N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚNOT_AVAILABLEÚ	AVAILABLEÚDEFERÚ__static_attributes__r"   ó    ÚD/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceAkamai.pyr!   r!   -   s   † ñð
 €MØ€IØ„Er,   r!   c                   óÆ   a € ] tR t^8t o RtRtR tRV 3R lR lltV 3R lR ltV 3R lR	 lt	V 3R
 lR lt
V 3R lR ltRV 3R lR lltV 3R lR ltV 3R lR ltRtV tR# )ÚDataSourceAkamaiÚAkamaiFc                ó  € \         P                  R 4       \        P                  P	                  WW#4       \        4       V n        \        P                  ! \        4       \        P                  ! VRR./ 4      \        .4      V n        R# )zSetting up Akamai DataSourceÚ
datasourcer0   N)ÚLOGÚdebugr
   Ú
DataSourceÚ__init__Údictr   r   Úmergemanydictr   Úget_cfg_by_pathÚBUILTIN_DS_CONFIGÚds_cfg)ÚselfÚsys_cfgÚdistror   s   &&&&r-   r6   ÚDataSourceAkamai.__init__<   sn   € Ü�	‰	Ð0Ô1Ü×Ñ×#Ñ# D°6ÔAÜ›ˆŒô ×(Ò(äÓ Ü×$Ò$ØØ! 8Ð,Øóô
 "ðó

ˆŽr,   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[ /# )é   Ú	path_nameÚuse_v6Úreturn)ÚstrÚbool)ÚformatÚ__classdict__s   "€r-   Ú__annotate__ÚDataSourceAkamai.__annotate__N   s"   ø€ ÷ -ñ -¡Cð -±ð -Á#ñ -r,   c                ó8  € WP                   R,          9  d   \        RP                  V4      4      hRpV'       g   V P                   R,          '       g   RpV P                   R,          V,          pV P                   R,          V,          pRP                  WE4      # )z»
Looks up the path for a given name and returns a full url for it.  If
use_v6 is passed in, the IPv6 base url is used; otherwise the IPv4 url
is used unless IPv4 is not allowed in ds_cfg
r   zUnknown path name {}r   r   r   r   z{}{})r;   Ú
ValueErrorrG   )r<   rB   rC   Úversion_keyÚbase_urlÚpaths   &&&   r-   Ú
_build_urlÚDataSourceAkamai._build_urlN   sz   € ð ŸK™K¨Õ0Ô0ÜÐ3×:Ñ:¸9ÓEÓFÐFàˆß˜Ÿ™ \×2Ô2Ø ˆKà—;‘;˜{Õ+¨KÕ8ˆØ�{‰{˜7Õ# IÕ.ˆà�}‰}˜XÓ,Ð,r,   c                ó    <€ V ^8„  d   QhRS[ /# ©rA   rD   ©r!   )rG   rH   s   "€r-   rI   rJ   `   s   ø€ ÷ 5ñ 5Ñ$>ñ 5r,   c                óx  € V P                   R,          '       g   V P                   R,          '       d3   V P                   R,          '       g?   V P                   R,          '       g&   \        P                  R4       \        P                  # V P
                  '       d   V P                  4       # V P                  4       # )z‡
Returns whether metadata should be retrieved at this stage, at the next
stage, or never, in the form of a MetadataAvailabilityResult.
r   r   r   r   z*Configuration prohibits fetching metadata.)r;   r3   Úinfor!   r(   Úlocal_stageÚ_should_fetch_data_localÚ_should_fetch_data_network©r<   s   &r-   Ú_should_fetch_dataÚ#DataSourceAkamai._should_fetch_data`   s†   € ð —‘˜L×)Ô)°$·+±+¸l×2KÔ2Kà—‘Ð/×0Ô0Ø—K‘KÐ 2×3Ô3ô �H‰HÐAÔBÜ-×;Ñ;Ð;à××ÐØ×0Ñ0Ó2Ð2à×2Ñ2Ó4Ð4r,   c                ó    <€ V ^8„  d   QhRS[ /# rS   rT   )rG   rH   s   "€r-   rI   rJ   t   s   ø€ ÷ 4ñ 4Ñ*Dñ 4r,   c                óL  € V P                   R,          '       g&   \        P                  R4       \        P                  # V P                   R,          '       g?   V P                   R,          '       g&   \        P                  R4       \        P                  # \        P
                  # )zo
Returns whether metadata should be retrieved during the local stage, or
if it should wait for the init stage.
r   z)Configuration prohibits local stage setupr   r   z9Configuration does not allow for ephemeral network setup.©r;   r3   rV   r!   r*   r)   rZ   s   &r-   rX   Ú)DataSourceAkamai._should_fetch_data_localt   su   € ð
 �{‰{Ð.×/Ô/ä�H‰HÐ@ÔAÜ-×3Ñ3Ð3à�{‰{˜<×(Ô(°·±¸\×1JÔ1Jô �H‰HØKôô .×3Ñ3Ð3ä)×3Ñ3Ð3r,   c                ó    <€ V ^8„  d   QhRS[ /# rS   rT   )rG   rH   s   "€r-   rI   rJ   ‰   s   ø€ ÷ 	4ñ 	4Ñ,Fñ 	4r,   c                óž   € V P                   R,          '       g&   \        P                  R4       \        P                  # \        P
                  # )zC
Returns whether metadata should be fetched during the init stage.
r   z1Configuration does not allow for init stage setupr_   rZ   s   &r-   rY   Ú+DataSourceAkamai._should_fetch_data_network‰   s9   € ð �{‰{Ð-×.Ô.ä�H‰HÐHÔIÜ-×3Ñ3Ð3ä)×3Ñ3Ð3r,   c                ó\   <€ V ^8„  d   QhRS[ S[S[S[S[3,          S[3,          ,          /# rS   )r   r   r	   r   r   rF   )rG   rH   s   "€r-   rI   rJ   ”   s2   ø€ ÷ M(ñ M(á	‰e‘E™#Ñ1Ð1Õ2±DÐ8Õ9Õ	:ñM(r,   c           	     ój  € . pV P                   '       Ed1   \        4       pRpV P                  R,          pVP                  4        F8  w  rV\	        V Uu. uF  quP                  V4      NK  	  up4      '       g   K6  Tp M	  Vf    \        P                  R4       \        4       p. pV P                  R,          '       d+   VP                  \        V P                  VRRR7      R34       V P                  R,          '       dC   V P                  R	,          '       d*   VP                  \        V P                  VRR
7      R34       V# V P                  R,          '       d   VP                  \        4       R34       V P                  R,          '       d   VP                  \        4       R34       V# u upi )z¿
Returns a list of context managers which should be tried when setting
up a network context.  If we're running in init mode, this return a
noop since networking should already be configured.
Nr   zGFailed to find default interface, attempting DHCP on fallback interfacer   FT)r   r   r   r   )r   )rW   r   r;   ÚitemsÚanyÚ
startswithr3   Úwarningr   Úappendr   r>   Únoop)r<   Únetwork_context_managersÚ
interfacesÚ	interfaceÚpreferred_prefixesÚmacÚinfÚprefixs   &       r-   Ú_get_network_context_managersÚ.DataSourceAkamai._get_network_context_managers”   s£  € ð ð 	!ð ××Ñô
 /Ó0ˆJØˆIØ!%§¡Ð-EÕ!FÐØ&×,Ñ,Ö.‘�äÙ:LÓMÑ:L°—^‘^ FÖ+Ñ:LÑM÷ô ð !$�IÙñ /ð Ò Ü—‘ð)ôô .Ó/�	à')Ð$à�{‰{˜<×(Ô(Ø(×/Ñ/ä*Ø ŸK™KØ%Ø!&Ø!%ô	ð ðô
ð �{‰{˜<×(Ô(¨T¯[©[¸×-FÔ-FØ(×/Ñ/ä*Ø ŸK™KØ%Ø!%ôð
 ðô	ð6 (Ð'ð! �{‰{˜<×(Ô(Ø(×/Ñ/ä›Øðôð �{‰{˜<×(Ô(Ø(×/Ñ/ä›Øðôð (Ð'ùòo Ns   ÁF0
c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )rA   rC   rD   ©rF   )rG   rH   s   "€r-   rI   rJ   ã   s   ø€ ÷ Bñ B¡dð B±tñ Br,   c           
     ó6  €  \         P                  ! V P                  RVR7      R^^^RR/R7      pVP                  ^È8w  d#   \        P                  RVP                  4       R# \        V4      p\         P                  ! V P                  R	VR7      ^^^R
RRV/R7      p\        P                  ! \        V4      4      V n	        \         P                  ! V P                  RVR7      ^^^RV/R7      p\        V4      V n
         \        V P                  4      V n
        R#   \        P                   d"   p\        P                  RT4        Rp?R# Rp?ii ; i  \         P                   d-   p\        P                  RT'       d   RMRT4        Rp?R# Rp?ii ; i)z–
Runs through the sequence of requests necessary to retrieve our
metadata and user data, creating a token for use in doing so, capturing
the results.
r   ©rC   ÚPUTzMetadata-Token-Expiry-SecondsÚ300)Úrequest_methodÚtimeoutÚsec_betweenÚretriesÚheadersz-Fetching token returned %s; not fetching dataTr   ÚAcceptzapplication/jsonzMetadata-Token)r|   r}   r~   r   r   z*Failed to base64 decode userdata due to %sNz1Failed to retrieve metadata using IPv%s due to %sÚ6Ú4F)r   ÚreadurlrP   Úcoder3   rV   rE   ÚjsonÚloadsr   Úuserdata_rawr   ÚbinasciiÚErrorri   ÚUrlError)r<   rC   Útoken_responser   r   r   Úes   &&     r-   Ú_fetch_metadataÚ DataSourceAkamai._fetch_metadataã   sŠ  € ð:	ä'×/Ò/Ø—‘ °�Ó7Ø$ØØØà3°Uðô	ˆNð ×"Ñ" cÔ)Ü—‘ØCØ"×'Ñ'ôñ ä˜Ó'ˆEô "×)Ò)Ø—‘ 
°6�Ó:ØØØàÐ0Ø$ eðô	ˆHô !ŸJšJ¤s¨8£}Ó5ˆDŒMô "×)Ò)Ø—‘ 
°6�Ó:ØØØà$ eðôˆHô !$ H£ˆDÔðMÜ$-¨d×.?Ñ.?Ó$@�Ô!ñ øô —>‘>ô MÜ—‘ÐHÈ!×LÐLñ ûðMûä×"Ñ"ô 		ô �K‰KØCß‘ 3Øôõ
 ûð		úsC   ‚A E Á$BE ÄD ÄEÄ3EÅ	E ÅEÅE ÅFÅ,!FÆFc                ó    <€ V ^8„  d   QhRS[ /# rS   rv   )rG   rH   s   "€r-   rI   rJ   '  s   ø€ ÷ 2ñ 2™4ñ 2r,   c                óÂ  € \         P                  R4       \        4       '       g   \         P                  R4       R# \	        4       pRV/V n        V P                  4       pV\        P                  8w  dD   V\        P                  8X  d   \         P                  R4       R# \         P                  R4       R# V P                  4       pV Fh  w  rET;_uu_ 4        V P                  VR7      pV'       d6   V P
                  P                  R	V4      V P
                  R&    R
R
R
4        R#  R
R
R
4       Kj  	  \         P                  R4       R#   + '       g   i     K”  ; i)zG
Overrides _get_data in the DataSource class to actually retrieve data
z#Getting data from Akamai DataSourcez#Not running on Akamai, not running.Fzinstance-idz5Metadata is not available, returning local data only.TzFConfigured not to fetch data at this stage; waiting for a later stage.rx   ÚidNzHFailed to contact metadata service, falling back to local metadata only.)r3   r4   r   rV   r   r   r[   r!   r)   r(   rs   r�   Úgetri   )r<   Úlocal_instance_idÚavailabilityrl   ÚmanagerrC   Údones   &      r-   Ú	_get_dataÚDataSourceAkamai._get_data'  s0  € ô 	�	‰	Ð7Ô8ä�~Š~Ü�H‰HÐ:Ô;Ùä1Ó3ÐàÐ,ð
ˆŒð ×.Ñ.Ó0ˆàÔ5×?Ñ?Ô?ØÔ9×GÑGÔGÜ—‘ØKôñ ä�H‰Hð!ôñ à#'×#EÑ#EÓ#GÐ Û7‰OˆGß’Ø×+Ñ+°6Ð+Ó:�ßà37·=±=×3DÑ3DØØ)ó4�D—M‘M -Ñ0ð ÷ �ñ& ð# ÷ ‘ñ  8ô �K‰Kð!ôñ
 ÷' —�ús   ÃAEÅEc                ó    <€ V ^8„  d   QhRS[ /# rS   rv   )rG   rH   s   "€r-   rI   rJ   [  s   ø€ ÷ 
ñ 
©Dñ 
r,   c                óL   € \         P                  ! V P                  4       R4      # )zR
A local-only check to see if the instance id matches the id we see on
the system
zsystem-serial-number)r
   Úinstance_id_matches_system_uuidÚget_instance_id)r<   r=   s   &&r-   Úcheck_instance_idÚ"DataSourceAkamai.check_instance_id[  s&   € ô
 ×6Ò6Ø× Ñ Ó"Ð$:ó
ð 	
r,   )r;   r   r‡   N)F)r#   r$   r%   r&   ÚdsnamerW   r6   rP   r[   rX   rY   rs   r�   r—   r�   r+   Ú__classdictcell__)rH   s   @r-   r/   r/   8   sk   ø‡ € Ø€FØ€Kò
÷$-ò -÷$5ð 5÷(4ð 4÷*	4ð 	4÷M(ð M(÷^Bò B÷H2ð 2÷h
ö 
r,   r/   c                   ó   € ] tR tRtRtRtRtR# )ÚDataSourceAkamaiLocalie  z½
A subclass of DataSourceAkamai that runs the same functions, but during the
init-local stage.  This allows configuring networking via cloud-init, as
networking hasn't been configured yet.
Tr"   N)r#   r$   r%   r&   r'   rW   r+   r"   r,   r-   r¢   r¢   e  s   † ñð „Kr,   r¢   c                óN   € V ^8„  d   QhR\         \        P                  ,          /# rS   )r   r
   r5   )rG   s   "r-   rI   rI     s   € ÷ ;ñ ;¤D¬×);Ñ);Õ$<ñ ;r,   c                 ó8   € \         P                  ! V \        4      # )N)r
   Úlist_from_dependsÚdatasources)Údependss   &r-   Úget_datasource_listr¨     s   € Ü×$Ò$ W¬kÓ:Ð:r,   )(rˆ   r…   ÚloggingÚbase64r   Ú
contextlibr   rk   Úenumr   Útypingr   r   r   r	   Ú	cloudinitr
   r   r   Úcloudinit.netr   r   Úcloudinit.net.ephemeralr   Ú cloudinit.sources.helpers.akamair   r   r   Ú	getLoggerr#   r3   r:   r!   r5   r/   r¢   ÚDEP_FILESYSTEMÚDEP_NETWORKr¦   r¨   r"   r,   r-   Ú<module>rµ      s  ðÛ Û Û Ý Ý 'Ý ß *Ó *ç /Ñ /ß BÝ 6÷ñ ð ×Ò˜Ó!€ð ØÐ(ØÐ,ðð Ø�Ø�NØ�Oðð ˜Ø˜Ø�$Ø�$Ø�$ð Øðð%Ð ô0 ô ôj
�w×)Ñ)ô j
ôZ	Ð,ô ð ˜W×3Ñ3Ð5Ð6ð 	à×"Ñ"Ø×Ñð	
ðð	€÷ ;r,   