U
    Ad=                  	   @   s   U d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	 ddl
mZ ddlmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZ ddd edegeededgg dZeed< eeZ dZdZeeeeeddddZdS )z3Install hotplug udev rules if supported and enabled    N)Logger)dedent)stagessubputil)Cloud)Config)
MetaSchemaget_meta_doc)ALL_DISTROS)
EventScope	EventType)PER_INSTANCEZcc_install_hotplugzInstall Hotplugas          This module will install the udev rules to enable hotplug if
        supported by the datasource and enabled in the userdata. The udev
        rules will be installed as
        ``/etc/udev/rules.d/10-cloud-init-hook-hotplug.rules``.

        When hotplug is enabled, newly added network devices will be added
        to the system by cloud-init. After udev detects the event,
        cloud-init will referesh the instance metadata from the datasource,
        detect the device in the updated metadata, then apply the updated
        network configuration.

        Currently supported datasources: Openstack, EC2
    z            # Enable hotplug of network devices
            updates:
              network:
                when: ["hotplug"]
        z            # Enable network hotplug alongside boot event
            updates:
              network:
                when: ["boot", "hotplug"]
        )idnametitleZdescriptionZdistrosZ	frequencyZexamplesZactivate_by_schema_keysmetaz2/etc/udev/rules.d/10-cloud-init-hook-hotplug.rulesz# Installed by cloud-init due to network hotplug userdata
ACTION!="add|remove", GOTO="cloudinit_end"
LABEL="cloudinit_hook"
SUBSYSTEM=="net", RUN+="{libexecdir}/hook-hotplug"
LABEL="cloudinit_end"
)r   cfgcloudlogargsreturnc           	      C   s   d|ko6d|d ko6d|d d ko6d|d d d k}t j|jt jgtjt k}tj	|j|t jtjd}|rz|st
jtr|d tt tddd	g n|r|d
 n
|d d S tds|d d S d}t
j|sd}tjttj|dd tddd	g d S )NZupdatesZnetworkZwhenZhotplug)
datasourcer   Zevent_source_typeZscopez!Uninstalling hotplug, not enabledZudevadmZcontrolz--reload-ruleszOHotplug is unsupported by current datasource. Udev rules will NOT be installed.z%Skipping hotplug install, not enabledz+Skipping hotplug install, udevadm not foundz/usr/libexec/cloud-initz/usr/lib/cloud-init)
libexecdir)filenameZcontent)r   ZHOTPLUGr   Zget_supported_eventsgetr   ZNETWORKsetr   Zupdate_event_enabledospathexistsHOTPLUG_UDEV_PATHdebugr   Zdel_filer   ZwarningZwhichZ
write_fileHOTPLUG_UDEV_RULES_TEMPLATEformat)	r   r   r   r   r   Znetwork_hotplug_enabledZhotplug_supportedZhotplug_enabledr    r$   E/usr/lib/python3/dist-packages/cloudinit/config/cc_install_hotplug.pyhandleG   sR    
 





r&   )__doc__r   Zloggingr   textwrapr   Z	cloudinitr   r   r   Zcloudinit.cloudr   Zcloudinit.configr   Zcloudinit.config.schemar	   r
   Zcloudinit.distrosr   Zcloudinit.eventr   r   Zcloudinit.settingsr   r   __annotations__r    r"   strlistr&   r$   r$   r$   r%   <module>   sJ   +
    