U
    w7e@                  	   @   s   U d Z ddlZddl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 eeZdZdZeee
eddddZ dS )z3Install hotplug udev rules if supported and enabled    N)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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rtd tt tddd	g n|rtd
 n
td d S tdst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LOGdebugr   Zdel_filer   ZwarningZwhichZ
write_fileHOTPLUG_UDEV_RULES_TEMPLATEformat)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handleH   sR    
 





r%   )!__doc__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__Z	getLogger__name__r   r   r!   strlistr%   r#   r#   r#   r$   <module>   s@   +
	