name : DataSourceRbxCloud.cpython-39.opt-1.pyc
a

puh��@s�dZddlZddlZddlZddlZddlZddlmZddlm	Z	m
Z
mZddlm
Z
mZe�e�ZdZdd�Zeed	�d
d�Zejed�d
d�Zdd�Zdd�Zdd�Zdd�Zdd�ZGdd�de	j�Zee	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)�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_text_file�	ETC_HOSTS�LOG�debug)�hosts�r�H/usr/lib/python3.9/site-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}|jdvrd}|D]b}ztdd||d|dg�Wqtjyv}z$t�d|d|d|�WYd}~qd}~00qdS)	Nz-S)Z	almalinuxZfedoraZcentosZ
cloudlinuxZrhelz-sz-c�2�source�destinationz&Failed to arping from "%s" to "%s": %s)�namerrZProcessExecutionErrorrZwarning)�items�distroZsource_param�item�errorrrr�gratuitous_arp=s
��r%cCs�tt�d�t�d��}|s dS|D]~}z&tj|tgd�d�}|rL|WSWq$ty�}z|jtjkrl�WYd}~q$d}~0tjy�t�	t
d|�Yq$0q$t
�dd	�|��dS)
zAReturns False (not found or error) or a dictionary with metadata.z
LABEL=CLOUDMDz
LABEL=cloudmdF)ZvfatZfatZmsdosfs)�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�errno�ENOENTZMountFailedError�logexcrr�join)Zdevicesr&�rbx_data�errrrr�get_mdRs6����
�r2cCsddd�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)�typer4r6Zcontrolr8Zdns_nameserversr)�.0�ip��netadprr�
<listcomp>s�


��z6generate_network_config.<locals>.<listcomp>.<listcomp>r;)r9r Zmac_address�subnets)�formatr�lower)r:�irr<rr>zs�

��z+generate_network_config.<locals>.<listcomp>)�versionZconfig)�	enumerate)Znetadpsrrr�generate_network_configqs
��rEc
Cstjtjtj�|d�d�d�}tjtj�|d�dd�}d|vsFd|vrVt�td	�d
S|�	di��	d�}|�	di��	d
g�}d
}|�	di��	d�r�|ddd}t
|d�}||dd|ddgd�dd�|dD�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.json)�fname)�textz	user.dataT)rFrZvmr=z(Failed to load metadata. Invalid format.NZadditionalMetadata�usernameZsshKeys�passwordZsha512Z_idr )zinstance-idzlocal-hostname�public-keyscSs>g|]6}|dD](}t|dd�D]}|d|d��q$qqS)r;r5r8r4)rr)r)r:r=r;�targetrrrr>�s�z+read_user_data_callback.<locals>.<listcomp>Zdefault_userzALL=(ALL) NOPASSWD:ALLF)r ZgecosZsudo�passwdZlock_passwdZssh_authorized_keys)Z
ssh_pwauthZdisable_rootZsystem_info�network_configZmanage_etc_hosts)�userdata�metadatar%�cfgzreturning DATA object:)
rZ	load_jsonZload_binary_file�os�pathr/r	r.r�getrErr)Z	mount_dirZ	meta_dataZ	user_datarHZssh_keys�hashr5�datarrrr*�sR	��

����
��

r*c@sjeZdZdZejejejej	hiZ
dd�Zdd�Zdd�Z
edd	��Zd
d�Zdd
�Zdd�Zdd�ZdS)�DataSourceRbxCloudZRbxCloudcCs(tj�||||�d|_d|_d|_dSr)r�
DataSource�__init__�seedr%rP)�selfZsys_cfgr"�pathsrrrrX�szDataSourceRbxCloud.__init__cCstj�|�}d||jfS)Nz%s [seed=%s])rrW�__str__rY)rZ�rootrrrr\�szDataSourceRbxCloud.__str__cCs>t�}|durdS|d|_|d|_|d|_|d|_dS)zw
        Metadata is passed to the launching instance which
        is used to perform instance configuration.
        FrNrOr%rPT)r2�userdata_rawrOr%rP)rZr0rrr�	_get_data�s



zDataSourceRbxCloud._get_datacCs
|jdS)NrM�rP�rZrrrrM�sz!DataSourceRbxCloud.network_configcCs
|jdS)NrJ)rOrarrr�get_public_ssh_keys�sz&DataSourceRbxCloud.get_public_ssh_keyscCs|jSr)r^rarrr�get_userdata_raw�sz#DataSourceRbxCloud.get_userdata_rawcCs|jSrr`rarrr�get_config_obj�sz!DataSourceRbxCloud.get_config_objcCst|j|j�dSr)r%r")rZrPZis_new_instancerrr�activateszDataSourceRbxCloud.activateN)�__name__�
__module__�__qualname__ZdsnamerZNETWORKrZBOOT_NEW_INSTANCEZBOOTZBOOT_LEGACYZdefault_update_eventsrXr\r_�propertyrMrbrcrdrerrrrrV�s ��
rVcCst�|t�Sr)rZlist_from_depends�datasources)Zdependsrrr�get_datasource_listsrk)#�__doc__r,ZloggingrQZos.path�typing�	ipaddressrZ	cloudinitrrrZcloudinit.eventrrZ	getLoggerrfrr
rrrr�Listrrr%r2rEr*rWrVZDEP_FILESYSTEMrjrkrrrr�<module>s,
	
	!@5
�

© 2025 Cubjrnet7