name : DataSourceOpenNebula.cpython-39.pyc
a

'�Dg�>�@s
ddlZddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
mZmZm
Z
e�e�ZdZdZdgZdZGdd�dej�ZGd	d
�d
e�ZGdd�de�ZGd
d�d�Zdd�Zdd�Zdd�Zddd�Zddd�Zdd�Z eZ!eej"ffgZ#dd�Z$dS)�N)�
atomic_helper�net�sources�subp�utilziid-dsopennebulaZnobody�
context.sh)Z
EPOCHREALTIMEZEPOCHSECONDSZRANDOMZLINENOZSECONDS�_ZSRANDOMZ__vc@sFeZdZdZdd�Zdd�Zdd�Zdd	�Zed
d��Z	dd
d�Z
dS)�DataSourceOpenNebulaZ
OpenNebulacCs4tj�||||�d|_tj�|jd�|_d|_dS)NZ
opennebula)	r�
DataSource�__init__�seed�os�path�join�seed_dir�network)�selfZsys_cfg�distro�paths�r�J/usr/lib/python3.9/site-packages/cloudinit/sources/DataSourceOpenNebula.pyr/szDataSourceOpenNebula.__init__cCstj�|�}d||j|jfS)Nz%s [seed=%s][dsmode=%s])rr
�__str__r�dsmode)r�rootrrrr5szDataSourceOpenNebula.__str__c
Cs�dti}d}d}t}d|jvr*|j�d�}|jg}|�t��|D]�}zLtj�	|j�rht
||j|d�}n(|�d�r�t
jt
||jd�}t�||�}WnZty�YqBYnFty�}z|�WYd}~n(d}~0tjy�t�d|�Yn0|rB|}t�d|��q
qB|�sdS|d	}	t�|	|g�}	|�|�d
�|j�d�g�|_|jtjk�rZdS||_|�d�|_|	|_|�d
�|_dS)Nzinstance-id�	parseuser��asuserz/dev)rrz%s was not mountablezfound datasource in %sF�metadataZDSMODEr�network-interfaces�userdataT) �DEFAULT_IID�DEFAULT_PARSEUSERZds_cfg�getr�extend�find_candidate_devsr
r�isdir�read_context_disk_dirr�
startswith�	functools�partialrZmount_cb�NonContextDiskDir�BrokenContextDiskDirZMountFailedError�LOG�warning�debugZ
mergemanydictZ_determine_dsmoderrZDSMODE_DISABLEDrrrZuserdata_raw)
r�defaults�resultsrrZ
candidatesZcdevZpartially_applied_func�excZmdrrr�	_get_data9sZ
�
��zDataSourceOpenNebula._get_datacCs$|j|jvrd}nd}d||jfS)z/Return the subplatform metadata source details.zseed-dirzconfig-diskz%s (%s))rr)rZsubplatform_typerrr�_get_subplatformvsz%DataSourceOpenNebula._get_subplatformcCs|jdur|jSdSdS�N)r)rrrr�network_config~s
z#DataSourceOpenNebula.network_configFcCs.|dur|jtjkrd}nd}tj�|||�S)NTF)rrZDSMODE_NETWORKr
�get_hostname)rZfqdnZ
resolve_ipZ
metadata_onlyrrrr6�s
z!DataSourceOpenNebula.get_hostnameN)FFF)�__name__�
__module__�__qualname__Zdsnamerrr2r3�propertyr5r6rrrrr	+s=
r	c@seZdZdS)r*N�r7r8r9rrrrr*�sr*c@seZdZdS)r+Nr;rrrrr+�sr+c@speZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zddd�Z
dd�ZdS)�OpenNebulaNetworkNcCs|||_|durt|�}t�dd�t|��dd�d�D��|_i|_|��D],\}}t�	d|�}|rJ|�
d�|j|��<qJdS)NcSsg|]}|�qSrr��.0�krrr�
<listcomp>�s�z.OpenNebulaNetwork.__init__.<locals>.<listcomp>cSst�|d�S)N�)rZnatural_sort_key)r?rrr�<lambda>��z,OpenNebulaNetwork.__init__.<locals>.<lambda>)�keyz
^(.+)_MAC$rA)�context�get_physical_nics_by_mac�collections�OrderedDict�sorted�items�ifaces�context_devname�re�match�group�lower)rrErZsystem_nics_by_macr?�v�mrrrr�s ���zOpenNebulaNetwork.__init__cCs"d�dd�|�d�dd�D��S)N�.cSsg|]}tt|d���qS)�)�str�int)r>�crrrr@�rCz,OpenNebulaNetwork.mac2ip.<locals>.<listcomp>�:�)r�split)r�macrrr�mac2ip�szOpenNebulaNetwork.mac2ipcCs\i}|�|dd���}|�|j�dd����|r:||d<|�|dd���}|rX||d<|S)N�dns�ZDNS�	addresses�
search_domain�search)�	get_fieldrZr#rEr")r�dev�nameserversr]r`rrr�get_nameservers�sz!OpenNebulaNetwork.get_nameserverscCs|�|d�S)N�mtu�rb�rrcrrr�get_mtu�szOpenNebulaNetwork.get_mtucCs|�|d|�|��S)N�ip)rbr\)rrcr[rrr�get_ip�szOpenNebulaNetwork.get_ipcCs<g}|�|d�}|r|�|�|�|d�}|r8|�|�|S)N�ip6�ip6_ula)rb�append)rrc�
addresses6rlrmrrr�get_ip6�s

zOpenNebulaNetwork.get_ip6cCs|�|dd�S)NZip6_prefix_lengthZ64rgrhrrr�get_ip6_prefix�sz OpenNebulaNetwork.get_ip6_prefixcCs|�|d�S)N�gatewayrgrhrrr�get_gateway�szOpenNebulaNetwork.get_gatewaycCs|�|d|�|d��S)NZip6_gateway�gateway6rgrhrrr�get_gateway6�s�zOpenNebulaNetwork.get_gateway6cCs|�|dd�S)N�maskz
255.255.255.0rgrhrrr�get_mask�szOpenNebulaNetwork.get_maskcCs*|j�d�||f����}|dvr&|S|S)z�return the field name in context for device dev.

        context stores <dev>_<NAME> (example: eth0_DOMAIN).
        an empty string for value will return default.r)Nr^)rEr"r�upper)rrc�name�default�valrrrrb�s���	zOpenNebulaNetwork.get_fieldcs6i}d|d<i|d<i}|j��D�]\}}|��}|j�||�}i}d|i|d<g|d<|�|�}tt�|��}|d�	|�
||�d|�|�|�}	|	r�|�|��|d�
�fdd	�|	D��|�|�}
|
r�|
|d
<|�|�}|r�||d<|�|�}|�r||d<|�|�}
|
�r |
|d
<|||<q"||d<|S)NrY�version�	ethernetsZ
macaddressrNr_�/csg|]}|d��qS)r~r)r>�i�Zprefix6rrr@	rCz.OpenNebulaNetwork.gen_conf.<locals>.<listcomp>Zgateway4rtrdrf)rKrJrPrLr"rwrUrZipv4_mask_to_net_prefixrnrkrprqr#rsrureri)rZnetconfr}r[rcZc_devZdevconfrv�prefixrorrrtrdrfrr�r�gen_conf�sD


�




zOpenNebulaNetwork.gen_conf)N)N)r7r8r9rr\rerirkrprqrsrurwrbr�rrrrr<�s


r<cCs@g}dD]2}t�|�}|��|D]}||vr"|�|�q"q|S)zE
    Return a list of devices that may contain the context disk.
    )z
LABEL=CONTEXTzLABEL=CDROMzTYPE=iso9660)rZfind_devs_with�sortrn)Zcombined�f�devs�drrrr$&s
r$cCs
dd|gS)NZsudoz-ur��userrrr�switch_user_cmd5sr�cCs
t�d�S)zDprint the shell environment variables within delimiters to be parsedz�
        printf "%s\0" _start_
        [ $0 != 'sh' ] && set -o posix
        set
        [ $0 != 'sh' ] && set +o posix
        printf "%s\0" _start_
        )�textwrap�dedentrrrr�
varprinter9s�r�c
Csd|��vrt�d�t�d|t�d}g}|durBt|�}|�ddg�tj||d�j}i}|�d	�d
d�}|d|d}}t	d
d�t
�|�D��}	t	dd�t
�|�D��}
t|	����
t|
����D]6}|tvr�q�|
�|�}|dur�||	�|�kr�|||<q�|S)a<run content and return environment variables which changed

    WARNING: the special variable _start_ is used to delimit content

    a context.sh that defines this variable might break in unexpected
    ways

    compatible with posix shells such as dash and ash and any shell
    which supports `set -o posix`
    s_start_zYUser defined _start_ variable in context.sh, this may breakcloud-init in unexpected ways.z{
%s

:
} > /dev/null
�
N�shz-e)�dataz_start_rArrYcss|]}|jddd�VqdS��=rA)�maxsplitN�rZ�r>�variablerrr�	<genexpr>}sz%parse_shell_config.<locals>.<genexpr>css|]}|jddd�VqdSr�r�r�rrrr��s)�encoder,r-r�r�r#r�stdoutrZ�dict�shlex�set�keys�union�
EXCLUDED_VARSr")
�contentrZbcmd�cmd�output�retZsections�beforeZafterZpre_envZpost_envrD�valuerrr�parse_shell_configFsB�������

r�c
Cs�i}tD]&}tj�||�}tj�|�r|||<q|sDtd|df��i}did�}d|v�r>|dur�zt�|�Wn6ty�}zt	dj
|d��|�WYd}~n
d}~00z(tj�|d�}	t�|	�}
t
|
|d�}Wnhtj�y}zt	d	|�|�WYd}~n<d}~0t�y:}ztd
|�|�WYd}~n
d}~00ntd��|�sP|S||d<d}d
|v�rld
}nd|v�rzd}|�r�|�|���}dd�|D�|dd<dD]&}
|
|v�r�||
|dd<�qАq�d|v�r�|d|d<nd|v�r�|d|d<d|v�rZ|�d|�d��}|dk�rZzt�|d�|d<Wnt�yXt�d�Yn0dd�|D�}|�r�t||�}|��|d<|S)z�
    read_context_disk_dir(source_dir):
    read source_dir and return a tuple with metadata dict and user-data
    string populated.  If not a valid dir, raise a NonContextDiskDir
    z%s: %szno files foundN)rrrz'configured user '{user}' does not existr�rzError processing context.sh: %szError reading context.sh: %szMissing context.shrZSSH_KEYZSSH_PUBLIC_KEYcSs"g|]}t|�r|�d�s|�qS)�#)�lenr')r>�linerrrr@�sz)read_context_disk_dir.<locals>.<listcomp>zpublic-keys)ZSET_HOSTNAMEZHOSTNAMEZ	PUBLIC_IPZ	IP_PUBLICZETH0_IPzlocal-hostnameZ	USER_DATArZUSERDATAZUSERDATA_ENCODINGZUSER_DATA_ENCODING�base64z"Failed base64 decoding of userdatacSsg|]}t�d|�r|�qS)z
^ETH\d+_IP.*$)rMrNr=rrrr@�rCr)�CONTEXT_DISK_FILESr
rr�isfiler*�pwd�getpwnam�KeyErrorr+�formatrZload_text_filer�rZProcessExecutionError�IOErrorr"�
splitlinesrZb64d�	TypeErrorr,r-r<r�)Z
source_dirrr�found�af�fnrEr0�err�Zssh_key_var�linesr?�encodingZipaddr_keysZonetrrrr&�s�


���
����

�





�

r&cs"t��}t�fdd�|��D��S)Ncs$g|]\}}�j�|�r||f�qSr)Z
networkingZis_physical)r>rR�n�rrrr@�rCz,get_physical_nics_by_mac.<locals>.<listcomp>)rZget_interfaces_by_macr�rJ)rr�rr�rrF�s�rFcCst�|t�Sr4)rZlist_from_depends�datasources)Zdependsrrr�get_datasource_list�sr�)N)N)%rGr(Zloggingr
r�rMr�r�Z	cloudinitrrrrrZ	getLoggerr7r,r r!r�r�r
r	�	Exceptionr*r+r<r$r�r�r�r&rFZDataSourceOpenNebulaNetZDEP_FILESYSTEMr�r�rrrr�<module>s8
c
G
`
�

© 2025 Cubjrnet7