܍~c#dZddlZddlZddlZddlZddlZddlmZmZm Z ddl m Z m Z ddl mZddlmZddlmZddlmZmZdd lmZejeZd Zdd ZGd d ejZGddeZdee j fiZ!dZ"dede#fdZ$defdZ%dZ&edkr*e'Z(e&ee(dSdS)z)Handle reconfiguration on hotplug events.N)log reportingstages) EventScope EventType)read_sys_net_safe)parse_net_config_data)events) DataSourceDataSourceNotFoundException)Initz hotplug-hookc|s tjtt}t|_|dddddg|dd }d|_|d d |dd }|ddddd|ddddddg|S)aBuild 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 --subsystemTzsubsystem to act onnet)requiredhelpchoiceszHotplug Actionhotplug_action)titledestqueryz0Query if hotplug is enabled for given subsystem.)rhandlezHandle the hotplug event.z-dz --devpathPATHzSysfs path to hotplugged device)rmetavarrz-uz --udevactionzSpecify action to take.addremove) argparseArgumentParserNAME__doc__r add_argumentadd_subparsersr add_parser)parser subparsers parser_handles B/usr/lib/python3/dist-packages/cloudinit/cmd/devel/hotplug_hook.py get_parserr)s1 I(dHHH F   " &&%5'JJH))2*M  .   &!  MceZdZdZejdZeejdZejde fdZ dZ dZ dZ d S) UeventHandlercL||_||_||_||_||_dSN)id datasourcedevpathaction success_fn)selfr/r0r1r2r3s r(__init__zUeventHandler.__init__Js)&0  $r*ctr.NotImplementedErrorr4s r(applyzUeventHandler.applyQ!###r*ctr.r7r9s r(configzUeventHandler.configUs"###r*returnctr.r7r9s r(device_detectedzUeventHandler.device_detectedZr;r*cd}|jdkrd}n%|jdkrd}ntd|jz||krtd|jzdS)NrTrFzUnknown action: %sz'Failed to detect %s in updated metadata)r2 ValueErrorr@ RuntimeErrorr/)r4detect_presences r(detect_hotplugged_devicez&UeventHandler.detect_hotplugged_device^s ;%  "OO [H $ $#OO1DK?@@ @ d2244 4 49DGC  5 4r*c*|Sr.)r3r9s r(successzUeventHandler.successls   r*c|jtjg}|s$t d|jdtj|S)Nz Datasource z not updated for event )r0update_metadata_if_supportedrHOTPLUGrC)r4results r(update_metadatazUeventHandler.update_metadataos]==      ,???I$5$57  r*N)__name__ __module__ __qualname__r5abcabstractmethodr:propertyr=boolr@rErGrLr*r(r,r,Is%%% $$$$$X$ $$$$$   !!!     r*r,cFeZdZfdZdZedZdefdZxZ S) NetHandlercttj|d}t |||||dS)Naddress)rospathbasenamesuperr5)r4r0r1r2r3r/ __class__s r(r5zNetHandler.__init__|sH rw//88) D D Z&*EEEEEr*c|jj|jdtj|j}|jj}|j dkr>| |s'td |jdS|j dkr<| |s)td |jdSdS)NF)bring_uprzFailed to bring up device: {}rzFailed to bring down device: {})r0distroapply_network_configr=rYrZr[r1network_activatorr2bring_up_interfacerCformatbring_down_interface)r4interface_name activators r(r:zNetHandler.applys  33 K 4   ))$,77O*<<>> ;%  //?? "3::4<HH  [H $ $11.AA "5<ctj}fd|D}tdj|t |dkS)NcPg|]"}|djk |#S) mac_address)getr/).0ifacer4s r( z.NetHandler.device_detected..s<   yy''4722 222r*zIfaces with ID=%s : %sr)r r=iter_interfacesLOGdebugr/len)r4netstatefounds` r(r@zNetHandler.device_detectedsq(55    !1133    *DGU;;;5zzA~r*) rMrNrOr5r:rRr=rSr@ __classcell__)r]s@r(rVrV{sFFFFF $..X.r*rVrc t|d}n5#t$r(}td||d}~wwxYwt j|j|jtj |S)Nz4hotplug-hook: cannot handle events for subsystem: {})r0cfgevent_source_typescope) SUBSYSTEM_PROPERTES_MAPKeyError Exceptionrdrupdate_event_enabledr0rzrrJ) hotplug_init subsystemr|es r( is_enabledrs' 215  B I I        &*  #+    s A#AArrc:td|d}|tjgstd|dSt ||std|dS|S)NzFetching datasourcetrust)existingz*hotplug not supported for event of type %sz(hotplug not enabled for event of type %s)rrrsfetchget_supported_eventsrrJr)rrr0s r(initialize_datasourcersII#$$$##W#55J  * *I,=+> ? ? > JJJ lI . . >>L\%&&&l&&&&|'7';';K'H'HIIIII J   '4//T!T)) t  "g--  !6$dn""JJ3   #HQKKKKK  :=ii:>>>>!- L"n#      MMF G G G  +2II'((( sNF EC54E5-D%"E$D%%9EF&FFFF__main__r.))r!rPrrYrr cloudinitrrrcloudinit.eventrr cloudinit.netrcloudinit.net.network_stater cloudinit.reportingr cloudinit.sourcesr r cloudinit.stagesr getLoggerrMrrr r)ABCr,rVNETWORKr}rstrrrr parse_argsrrTr*r(rs 0/  ,,,,,,,,,,11111111++++++======&&&&&&EEEEEEEE!!!!!!cmH////d/////CG///d$$$$$$$$P J * + $      %%%%%P222j z :<< " " $ $DKdr*