3 \�me@ � @ s� U d Z ddlZddlZddlmZ ddlmZmZmZ ddl m Z ddlmZ ddl mZmZ ddlmZ dd lmZmZ dd lmZ ddd ed �egeed�ed�gg d�Zeee�Z eje�ZdZdZeee edd�dd�ZdS )z3Install hotplug udev rules if supported and enabled� N)�dedent)�stages�subp�util)�Cloud)�Config)� MetaSchema�get_meta_doc)�ALL_DISTROS)� EventScope� EventType)�PER_INSTANCEZcc_install_hotplugzInstall 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�title�descriptionZdistrosZ frequencyZexamplesZactivate_by_schema_keysz2/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|ko6d|d ko6d|d d ko6d|d d d k}t j|jjt jg�jtjt� �k}tj |j|t jtjd�}|ox|s�t jjt �r�tjd� tjt � tjddd g� n|r�tjd � n tjd� d S tjd�s�tjd� d S d }t jj|�s�d}tjt tj|d�d� tjddd g� d S )NZupdatesZnetworkZwhenZhotplug)� datasourcer Zevent_source_typeZscopez!Uninstalling hotplug, not enabledZudevadmZcontrolz--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)�filenameZcontent)r ZHOTPLUGr Zget_supported_events�getr ZNETWORK�setr Zupdate_event_enabled�os�path�exists�HOTPLUG_UDEV_PATH�LOG�debugr Zdel_filer ZwarningZwhichZ write_file�HOTPLUG_UDEV_RULES_TEMPLATE�format)r r r r Znetwork_hotplug_enabledZhotplug_supportedZhotplug_enabledr � r# �(/usr/lib/python3.6/cc_install_hotplug.py�handleH s@ r% ) �__doc__Zloggingr �textwrapr Z cloudinitr r r Zcloudinit.cloudr Zcloudinit.configr Zcloudinit.config.schemar r Zcloudinit.distrosr Zcloudinit.eventr r Zcloudinit.settingsr �metaZ getLogger�__name__r r r! �str�listr% r# r# r# r$ �<module> s6