Your IP : 216.73.217.13


Current Path : /usr/lib/python3/dist-packages/cloudinit/sources/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/cloudinit/sources/__pycache__/DataSourceRbxCloud.cpython-38.pyc

U

�AdU�@s�dZddlZddlZddlZddlZddlmZddlmZ	ddlm
Z
mZmZddl
mZmZe	�e�ZdZdd	�Zeed
�dd�Zejed
�dd�Zdd�Zdd�Zdd�Zdd�Zdd�ZGdd�de
j�Z e e
j!ffgZ"dd�Z#dS)zr
This file contains code used to gather the user data passed to an
instance on rootbox / hyperone cloud platforms
�N)�IPv4Address)�log)�sources�subp�util)�
EventScope�	EventTypez
/etc/hostscCs.tjtdd�}|r t�d�dSt�d�dS)NT)�quietz5/etc/hosts exists - setting manage_etc_hosts to FalseFz=/etc/hosts does not exists - setting manage_etc_hosts to True)r�	load_file�	ETC_HOSTS�LOG�debug)Zhosts�r�F/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceRbxCloud.py�get_manage_etc_hostss

r)�inc�returncCstttt|��|��S�N)�strr�int)�addrrrrr�increment_ip#sr)rcCs|t|d�t|d�gS)z�Return a list of 3 IP addresses: [addr, addr + 2, addr + 3]

    @param addr: an object that is passed to IPvAddress
    @return: list of strings
    ��)r)rrrr�
get_three_ips's�rcCst�dg|�S)z�
    Uses the preferred cloud-init subprocess def of subp.subp
    and runs arping.  Breaking this to a separate function
    for later use in mocking and unittests
    Zarping)r)�cmdrrr�_sub_arp4srcCs|d}|jdkrd}|D]`}ztdd||d|dg�Wqtjk
rt}zt�d|d|d|�W5d}~XYqXqdS)	Nz-S)ZfedoraZcentosZrhelz-sz-c�2�source�destinationz&Failed to arping from "%s" to "%s": %s)�namerrZProcessExecutionErrorrZwarning)�items�distroZsource_param�item�errorrrr�gratuitous_arp=s
��r%cCs�tt�d�t�d��}|s dS|D]�}z(tj|tdddgd�}|rN|WSWq$tk
r�}z|jtjkrp�W5d}~XYq$tjk
r�t�	t
d	|�Yq$Xq$t
�d
d�|��dS)zAReturns False (not found or error) or a dictionary with metadata.z
LABEL=CLOUDMDz
LABEL=cloudmdFZvfatZfatZmsdosfs)�device�callbackZmtypeNz-Failed to mount %s when looking for user dataz0Did not find RbxCloud data, searched devices: %s�,)
�setrZfind_devs_withZmount_cb�read_user_data_callback�OSError�errnoZENOENTZMountFailedError�logexcrr
�join)Zdevicesr&�rbx_data�errrrr�get_mdRs<�����r1cCsddd�t|�D�d�S)z�Generate network configuration

    @param netadps: A list of network adapter settings

    @returns: A dict containing network config
    �csBg|]:\}�dd�t|���d���fdd��dD�d��qS)Zphysicalzeth{}Z
macaddressc	s>g|]6}d|d�ddd�dd�dddd��qS)	Zstatic�address�network�netmask�auto�gatewayZdnsZnameservers)�typer3r5Zcontrolr7Zdns_nameserversr)�.0�ip��netadprr�
<listcomp>s�


��z6generate_network_config.<locals>.<listcomp>.<listcomp>r:)r8r Zmac_addressZsubnets)�formatr�lower)r9�irr;rr=zs�

��z+generate_network_config.<locals>.<listcomp>)�versionZconfig)�	enumerate)Znetadpsrrr�generate_network_configqs
��rCc
Cstjtjtj�|d�dd�d�}tjtj�|d�dd�}d|ksHd	|krXt�td
�dS|�di��d
�}|�di��dg�}d}|�di��d�r�|ddd}t	|d	�}||dd|ddgd�dd�|d	D�ddd||dg|d|d�i|t
�d�d�}t�d�t�|�|S)aThis callback will be applied by util.mount_cb() on the mounted
    drive.

    @param mount_dir: String representing path of directory where mounted drive
    is available

    @returns: A dict containing userdata, metadata and cfg based on metadata.
    z
cloud.jsonF)�fname�decode)�textz	user.dataT)rDr	Zvmr<z(Failed to load metadata. Invalid format.NZadditionalMetadata�usernameZsshKeysZpasswordZsha512Z_idr )zinstance-idzlocal-hostname�public-keyscSs>g|]6}|dD](}t|dd�D]}|d|d��q$qqS)r:r4r7r3)rr)r)r9r<r:�targetrrrr=�s
�z+read_user_data_callback.<locals>.<listcomp>Zdefault_userzALL=(ALL) NOPASSWD:ALL)r ZgecosZsudoZpasswdZlock_passwdZssh_authorized_keys)Z
ssh_pwauthZdisable_rootZsystem_info�network_configZmanage_etc_hosts)�userdata�metadatar%�cfgzreturning DATA object:)rZ	load_jsonr
�os�pathr.r-r�getrCrr
)Z	mount_dirZ	meta_dataZ	user_datarGZssh_keys�hashr4�datarrrr*�sZ	���

����
��

r*c@sjeZdZdZejejejej	hiZ
dd�Zdd�Zdd�Z
edd	��Zd
d�Zdd
�Zdd�Zdd�ZdS)�DataSourceRbxCloudZRbxCloudcCstj�||||�d|_dSr)r�
DataSource�__init__�seed)�selfZsys_cfgr"�pathsrrrrU�szDataSourceRbxCloud.__init__cCstj�|�}d||jfS)Nz%s [seed=%s])rrT�__str__rV)rW�rootrrrrY�szDataSourceRbxCloud.__str__cCs>t�}|dkrdS|d|_|d|_|d|_|d|_dS)zw
        Metadata is passed to the launching instance which
        is used to perform instance configuration.
        FrKrLr%rMT)r1�userdata_rawrLr%rM)rWr/rrr�	_get_data�s



zDataSourceRbxCloud._get_datacCs
|jdS)NrJ�rM�rWrrrrJ�sz!DataSourceRbxCloud.network_configcCs
|jdS)NrH)rLr^rrr�get_public_ssh_keys�sz&DataSourceRbxCloud.get_public_ssh_keyscCs|jSr)r[r^rrr�get_userdata_raw�sz#DataSourceRbxCloud.get_userdata_rawcCs|jSrr]r^rrr�get_config_obj�sz!DataSourceRbxCloud.get_config_objcCst|j|j�dSr)r%r")rWrMZis_new_instancerrr�activateszDataSourceRbxCloud.activateN)�__name__�
__module__�__qualname__ZdsnamerZNETWORKrZBOOT_NEW_INSTANCEZBOOTZBOOT_LEGACYZdefault_update_eventsrUrYr\�propertyrJr_r`rarbrrrrrS�s ��
rScCst�|t�Sr)rZlist_from_depends�datasources)Zdependsrrr�get_datasource_listsrh)$�__doc__r,rN�os.path�typingZ	ipaddressrZ	cloudinitrZloggingrrrZcloudinit.eventrrZ	getLoggerrcrrrrrrZListrrr%r1rCr*rTrSZDEP_FILESYSTEMrgrhrrrr�<module>s,
	
	!B3
�