Ë
    x[h‡-  ã                   óØ  — d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
mZ ddlmZ ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ  ej<                  e«      Z dZ!dd„Z" G d„ dejF                  «      Z$ G d„ de$«      Z%de%ejL                  fiZ'd„ Z(dede)fd„Z*deddfd„Z+dd„Z,dede-fd„Z.d„ Z/edk(  r e"«       ja                  «       Z1 e/e!e1«       yy)z)Handle reconfiguration on hotplug events.é    N)Ú	reportingÚstagesÚutil)Úinstall_hotplug)Ú
EventScopeÚ	EventType)Úloggers)Úread_sys_net_safe)Úparse_net_config_data)Úevents)Ú
DataSourceÚDataSourceNotFoundException)ÚInitzhotplug-hookc                 óŽ  — | st        j                  t        t        ¬«      } t        | _        | j                  dddddg¬«       | j                  dd	¬
«      }d|_        |j                  dd¬«       |j                  dd¬«      }|j                  ddddd¬«       |j                  ddddddg¬«       |j                  dd¬«       | S )a  Build or extend an arg parser for hotplug-hook utility.

    @param parser: Optional existing ArgumentParser instance representing the
        subcommand which will be extended to support the args of this utility.

    @returns: ArgumentParser with proper argument configuration.
    )ÚprogÚdescriptionz-sz--subsystemTzsubsystem to act onÚnet)ÚrequiredÚhelpÚchoiceszHotplug ActionÚhotplug_action)ÚtitleÚdestÚqueryz0Query if hotplug is enabled for given subsystem.)r   ÚhandlezHandle the hotplug event.z-dz	--devpathÚPATHzSysfs path to hotplugged device)r   Úmetavarr   z-uz--udevactionzSpecify action to take.ÚaddÚremoveÚenablez%Enable hotplug for a given subsystem.)	ÚargparseÚArgumentParserÚNAMEÚ__doc__r   Úadd_argumentÚadd_subparsersr   Ú
add_parser)ÚparserÚ
subparsersÚparser_handles      úB/usr/lib/python3/dist-packages/cloudinit/cmd/devel/hotplug_hook.pyÚ
get_parserr,      s  € ñ Ü×(Ñ(¬dÄÔHˆä €FÔØ
×ÑØØØØ"Ø�ð ô ð ×&Ñ&ØÐ%5ð 'ó €Jð €JÔà×ÑØÐHð ô ð ×)Ñ)ØÐ2ð *ó €Mð ×ÑØØØØØ.ð ô ð ×ÑØØØØ&Ø˜Ð!ð ô ð ×ÑØÐ>ð ô ð €Mó    c                   ó    — e Zd Zd„ Zej
                  d„ «       Zeej
                  d„ «       «       Zej
                  de	fd„«       Z
d„ Zd„ Zd„ Zy	)
ÚUeventHandlerc                 óJ   — || _         || _        || _        || _        || _        y ©N)ÚidÚ
datasourceÚdevpathÚactionÚ
success_fn)Úselfr2   r3   r4   r5   r6   s         r+   Ú__init__zUeventHandler.__init__R   s%   € ØˆŒØ&0ˆŒØˆŒØˆŒØ$ˆ�r-   c                 ó   — t        «       ‚r1   ©ÚNotImplementedError©r7   s    r+   ÚapplyzUeventHandler.applyY   ó   € ä!Ó#Ð#r-   c                 ó   — t        «       ‚r1   r:   r<   s    r+   ÚconfigzUeventHandler.config]   s   € ô "Ó#Ð#r-   Úreturnc                 ó   — t        «       ‚r1   r:   r<   s    r+   Údevice_detectedzUeventHandler.device_detectedb   r>   r-   c                 óÖ   — d }| j                   dk(  rd}n*| j                   dk(  rd}nt        d| j                   z  «      ‚|| j                  «       k7  rt        d| j                  z  «      ‚y )Nr   Tr   FzUnknown action: %sz'Failed to detect %s in updated metadata)r5   Ú
ValueErrorrC   ÚRuntimeErrorr2   )r7   Údetect_presences     r+   Údetect_hotplugged_devicez&UeventHandler.detect_hotplugged_devicef   sm   € ØˆØ�;‰;˜%ÒØ"‰OØ�[‰[˜HÒ$Ø#‰OäÐ1°D·K±KÑ?Ó@Ð@à˜d×2Ñ2Ó4Ò4ÜØ9¸D¿G¹GÑCóð ð 5r-   c                 ó"   — | j                  «       S r1   )r6   r<   s    r+   ÚsuccesszUeventHandler.successt   s   € Ø�‰Ó Ð r-   c                 ó°   — | j                   j                  t        j                  g«      }|s)t	        d| j                   ›dt        j                  ›�«      ‚|S )NzDatasource z not updated for event )r3   Úupdate_metadata_if_supportedr   ÚHOTPLUGrF   )r7   Úresults     r+   Úupdate_metadatazUeventHandler.update_metadataw   sO   € Ø—‘×=Ñ=Ü×ÑÐó
ˆñ Ýà—?“?¤I×$5Ò$5ð7óð ð ˆr-   N)Ú__name__Ú
__module__Ú__qualname__r8   ÚabcÚabstractmethodr=   Úpropertyr@   ÚboolrC   rH   rJ   rO   © r-   r+   r/   r/   Q   ss   „ ò%ð 	×Ññ$ó ð$ð Ø×Ññ$ó ó ð$ð 	×Ñð$ ò $ó ð$òò!ó	r-   r/   c                   ó@   ‡ — e Zd Zˆ fd„Zd„ Zed„ «       Zdefd„Zˆ xZ	S )Ú
NetHandlerc                 ó~   •— t        t        j                  j                  |«      d«      }t        ‰| �  |||||«       y )NÚaddress)r
   ÚosÚpathÚbasenameÚsuperr8   )r7   r3   r4   r5   r6   r2   Ú	__class__s         €r+   r8   zNetHandler.__init__„   s3   ø€ äœrŸw™w×/Ñ/°Ó8¸)ÓDˆÜ‰Ñ˜˜Z¨°&¸*ÕEr-   c                 ó  — | j                   j                  j                  | j                  d¬«       t        j
                  j                  | j                  «      }| j                   j                  j                  «       }| j                  dk(  r6|j                  |«      s$t        dj                  | j                  «      «      ‚y | j                  dk(  r6|j                  |«      s$t        dj                  | j                  «      «      ‚y y )NF)Úbring_upr   zFailed to bring up device: {}r   zFailed to bring down device: {})r3   ÚdistroÚapply_network_configr@   r\   r]   r^   r4   Únetwork_activatorr5   Úbring_up_interfacerF   ÚformatÚbring_down_interface)r7   Úinterface_nameÚ	activators      r+   r=   zNetHandler.apply‰   sà   € Ø�‰×Ñ×3Ñ3Ø�K‰KØð 	4ô 	
ô Ÿ™×)Ñ)¨$¯,©,Ó7ˆØ—O‘O×*Ñ*×<Ñ<Ó>ˆ	Ø�;‰;˜%ÒØ×/Ñ/°Ô?Ü"Ø3×:Ñ:¸4¿<¹<ÓHóð ð @ð �[‰[˜HÒ$Ø×1Ñ1°.ÔAÜ"Ø5×<Ñ<¸T¿\¹\ÓJóð ð Bð %r-   c                 ó.   — | j                   j                  S r1   )r3   Únetwork_configr<   s    r+   r@   zNetHandler.config›   s   € à�‰×-Ñ-Ð-r-   rA   c                 ó
  — t        | j                  «      }|j                  «       D �cg c]"  }|j                  d«      | j                  k(  r|‘Œ$ }}t
        j                  d| j                  |«       t        |«      dkD  S c c}w )NÚmac_addresszIfaces with ID=%s : %sr   )r   r@   Úiter_interfacesÚgetr2   ÚLOGÚdebugÚlen)r7   ÚnetstateÚifaceÚfounds       r+   rC   zNetHandler.device_detectedŸ   sw   € Ü(¨¯©Ó5ˆð "×1Ñ1Ó3ö
àØ�y‰y˜Ó'¨4¯7©7Ò2ò ð
ˆð 
ô
 	�	‰	Ð*¨D¯G©G°UÔ;Ü�5‹z˜A‰~Ðùò
s   ¨'B )
rP   rQ   rR   r8   r=   rU   r@   rV   rC   Ú__classcell__)r`   s   @r+   rY   rY   ƒ   s.   ø„ ôFò
ð$ ñ.ó ð.ð ÷ r-   rY   r   c                 óê   — 	 t         |   d   }t	        j
                  | j                  | j                  t        j                  |¬«      S # t        $ r }t        dj                  |«      «      |‚d }~ww xY w)Né   z4hotplug-hook: cannot handle events for subsystem: {})r3   ÚcfgÚevent_source_typeÚscope)
ÚSUBSYSTEM_PROPERTIES_MAPÚKeyErrorrF   rg   r   Úupdate_event_enabledr3   rz   r   rM   )Úhotplug_initÚ	subsystemr|   Úes       r+   Ú
is_enabledrƒ   ¯   s~   € ðÜ(¨Ñ3°AÑ6ˆô ×&Ñ&Ø×*Ñ*Ø×ÑÜ#×+Ñ+Øô	ð øô ò ÜØB×IÑIØóó
ð ð		ûðús   ‚A	 Á		A2ÁA-Á-A2r€   r�   c                 ó  — t         j                  d«       | j                  d¬«      }|j                  t        j
                  g«      st         j                  d|«       y t        | |«      st         j                  d|«       y |S )NzFetching datasourceÚtrust©Úexistingz*hotplug not supported for event of type %sz(hotplug not enabled for event of type %s)rq   rr   ÚfetchÚget_supported_eventsr   rM   rƒ   )r€   r�   r3   s      r+   Úinitialize_datasourcerŠ   Á   sm   € Ü‡I�IÐ#Ô$Ø×#Ñ#¨WÐ#Ó5€Jà×*Ñ*¬I×,=Ñ,=Ð+>Ô?Ü�	‰	Ð>À	ÔJØä�l IÔ.Ü�	‰	Ð<¸iÔHØØÐr-   rA   c                 óT  — t        | |«      }|sy t        |   d   }t        j                  d|«        ||||| j                  ¬«      }t        j
                  «       }|j                  j                  st        |||«       y t        j
                  «       |z
  |j                  j                  k  r{t        |||«       t        j                  d«       t        j                  |j                  j                  «       t        j
                  «       |z
  |j                  j                  k  rŒzy y )Nr   zCreating %s event handler)r3   r4   r5   r6   z>Gathering network configuration again due to IMDS limitations.)rŠ   r}   rq   rr   Ú_write_to_cacheÚtimeÚhotplug_retry_settingsÚforce_retryÚtry_hotplugÚsleep_totalÚsleepÚsleep_period)r€   r4   r�   Ú
udevactionr3   Úhandler_clsÚevent_handlerÚstarts           r+   Úhandle_hotplugr˜   Ï   sî   € Ü& |°YÓ?€JÙØÜ*¨9Ñ5°aÑ8€KÜ‡I�IÐ)¨9Ô5Ù#.ØØØØ×/Ñ/ô	$€Mô �I‰I‹K€EØ×,Ñ,×8Ò8Ü�I˜}¨jÔ9ØÜ
�)‰)‹+˜Ñ
 
× AÑ A× MÑ MÒ
MÜ�I˜}¨jÔ9Ü�	‰	ØLô	
ô 	�
‰
�:×4Ñ4×AÑAÔBô �)‰)‹+˜Ñ
 
× AÑ A× MÑ MÕ
Mr-   c           	      óX  — g d¢}t        d«      }t        |«      D ]È  \  }}t        j                  d| |t	        |«      «       	 t        j                  d«       |j                  «        |j                  s%t        j                  d«       |j                  «        t        j                  d«       |j                  «        t        j                  d«       |j                  «         y  |‚# t         $ r8}t        j                  d|«       t        j                  |«       |}Y d }~�Œ	d }~ww xY w)	N)ry   é   é   é
   é   z#Bug while processing hotplug event.z!subsystem=%s update attempt %s/%szRefreshing metadataz$Detecting device in updated metadatazApplying config changezUpdating cachez,Exception while processing hotplug event. %s)Ú	ExceptionÚ	enumeraterq   rr   rs   rO   Úskip_hotplug_detectrH   r=   rJ   r�   r’   )r�   r–   r3   Ú
wait_timesÚlast_exceptionÚattemptÚwaitr‚   s           r+   r�   r�   ç   sõ   € Ú"€JÜÐDÓE€NÜ" :Ó.ò ‰ˆ�Ü�	‰	Ø/ØØÜ�
‹Oô		
ð	Ü�I‰IÐ+Ô,Ø×)Ñ)Ô+Ø×1Ò1Ü—	‘	Ð@ÔAØ×6Ñ6Ô8Ü�I‰IÐ.Ô/Ø×ÑÔ!Ü�I‰IÐ&Ô'Ø×!Ñ!Ô#Ùð#ð. Ðøô ò 	Ü�I‰IÐDÀaÔHÜ�J‰J�tÔØŽNûð	ús   ÁB C(Ã(	D)Ã1-D$Ä$D)c                 ó®  — | j                  d¬«      }|syt        |   d   }t        j                  |j	                  t        j                  g«      j                  |t        «       «      v }|st        d|› �t        j                  ¬«       yt        j                  | j                  «      }|j                  |d   v r t        d|› d	�t        j                  ¬«       y
|d   j                  |j                  «       t        j                  | j                  j!                  d«      t#        j$                  |«      dd¬«       t'        |d
| j(                  ¬«       y
)Nr…   r†   Fry   z#hotplug not supported for event of )ÚfileÚscopesz)Not installing hotplug for event of type z. Reason: Already done.Tzhotplug.enabledÚwi   )ÚomodeÚmode)Únetwork_hotplug_enabledrz   )rˆ   r}   r   rM   r‰   rp   ÚsetÚprintÚsysÚstderrr   Úread_hotplug_enabled_fileÚpathsÚvalueÚappendÚ
write_fileÚ	get_cpathÚjsonÚdumpsr   rz   )r€   r�   r3   r|   Úhotplug_supportedÚhotplug_enabled_files         r+   Úenable_hotplugrº     s9  € Ø×#Ñ#¨WÐ#Ó5€JÙØÜ$ YÑ/°Ñ2€EÜ!×)Ñ)Ø×'Ñ'¬×):Ñ):Ð(;Ó<×@Ñ@ÀÌËÓNðÐñ ÜØ1°)°Ð=ÄCÇJÁJõ	
ð Ü×9Ñ9¸,×:LÑ:LÓMÐØ‡{�{Ð*¨8Ñ4Ñ4ÜØ7¸	°{ð C%ð %ä—‘õ	
ð
 à˜Ñ"×)Ñ)¨%¯+©+Ô6Ü‡O�OØ×Ñ×$Ñ$Ð%6Ó7Ü�
‰
Ð'Ó(ØØõ	ô Ø¨D°l×6FÑ6Fõð r-   c           	      óô  — t        j                  | t        d¬«      }t        g |¬«      }|j	                  «        t        j                  |j                  «       d|j                  v r.t        j                  |j                  j                  d«      «       t        j                  d| |j                  |j                  d|v r|j                  nd d|v r|j                   nd «       |5  	 |j                  dk(  r'	 t#        ||j                  «      }t'        rdnd«       nÌ|j                  dk(  r.t-        ||j                   |j                  |j                  ¬«       n�t/        j0                  «       dk7  r4t(        j2                  j5                  d«       t)        j*                  d
«       t7        ||j                  ¬«      st)        j*                  d
«       t'        d|j                  › �«       d d d «       t        j                  d«       t        j<                  «        y # t$        $ r$ t'        d	«       t)        j*                  d
«       Y �Œ:w xY w# t8        $ r t        j;                  d«       ‚ w xY w# 1 sw Y   Œ†xY w)NT)Úreporting_enabled)Úds_depsÚreporterr   zh%s called with the following arguments: {hotplug_action: %s, subsystem: %s, udevaction: %s, devpath: %s}r”   r4   r   z9Unable to determine hotplug state. No datasource detectedry   ÚenabledÚdisabledr   )r€   r4   r�   r”   r   z9Root is required. Try prepending your command with sudo.
)r€   r�   z)Enabled cloud-init hotplug for subsystem=z*Received fatal exception handling hotplug!zExiting hotplug handler)r   ÚReportEventStackr$   r   Úread_cfgr	   Úsetup_loggingrz   r   Úupdate_configurationrp   rq   rr   r   r�   r”   r4   rŠ   r   r­   r®   Úexitr˜   r\   Úgetuidr¯   Úwriterº   rž   Ú	exceptionÚflush_events)ÚnameÚargsÚhotplug_reporterr€   r3   s        r+   Úhandle_argsrÍ   '  s  € ô ×.Ñ.ØŒg¨ôÐô  Ð-=Ô>€LØ×ÑÔä×Ñ˜,×*Ñ*Ô+Ø�l×&Ñ&Ñ&Ü×&Ñ& |×'7Ñ'7×';Ñ';¸KÓ'HÔIä‡I�Ið	JàØ×ÑØ�‰Ø'¨4Ñ/ˆ�Š°TØ! TÑ)ˆ�Š¨tôð 
ñ 'ð&	Ø×"Ñ" gÒ-ð	 Ü!6Ø$ d§n¡nó"�Jô ¡:‘i°:Õ>Ø×$Ñ$¨Ò0ÜØ!-Ø ŸL™LØ"Ÿn™nØ#Ÿ™ö	ô —9‘9“; !Ò#Ü—J‘J×$Ñ$ð#ôô —H‘H˜Q”KÜ%Ø!-¸¿¹õô —H‘H˜Q”KÜð!Ø!%§¡Ð 0ð2ô÷A'ôR ‡I�IÐ'Ô(Ü×ÑÕøôG 3ò  Üð#ôô —H‘H˜Q—Kð ûô< ò 	Ü�M‰MÐFÔGØð	ú÷K'ð 'úsC   Ã%I.Ã'IÃ7HÄCIÈ)IÉIÉIÉIÉ I+É+I.É.I7Ú__main__r1   )rA   N)2r$   rS   r!   r¶   Úloggingr\   r®   r�   Ú	cloudinitr   r   r   Ú#cloudinit.config.cc_install_hotplugr   Úcloudinit.eventr   r   Úcloudinit.logr	   Úcloudinit.netr
   Úcloudinit.net.network_stater   Úcloudinit.reportingr   Úcloudinit.sourcesr   r   Úcloudinit.stagesr   Ú	getLoggerrP   rq   r#   r,   ÚABCr/   rY   ÚNETWORKr}   rƒ   ÚstrrŠ   r˜   r�   rV   rº   rÍ   Ú
parse_argsrË   rW   r-   r+   ú<module>rÞ      s	  ðñ 0Û 
Û Û Û Û 	Û 
Û ç -Ñ -Ý ?ß 1Ý !Ý +Ý =Ý &ß EÝ !à€g×Ñ˜Ó!€Ø€ó3ôl/�C—G‘Gô /ôd$�ô $ðP 
ˆJ˜
×*Ñ*Ð+ðÐ ò
ð$¨ð ¸ó ðC ð CÈ$ó Có0ð:  ð  °Tó  òFBðJ ˆzÒÙ‹<×"Ñ"Ó$€DÙ��dÕð r-   