Your IP : 216.73.217.13


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

U

�Ad�?�@s�ddlZddlZddlZddlZddlZddlZddlmZddlm	Z	m
Z
mZmZe�
e�ZdZdZdgZGdd�de
j�ZGd	d
�d
e�ZGdd�de�ZGd
d�d�Zdd�Zdd�Zddd�Zddd�Zdd�ZeZee
jffgZ dd�Z!dS)�N)�log)�net�sources�subp�utilziid-dsopennebulaZnobody�
context.shc@sFeZdZdZdd�Zdd�Zdd�Zdd	�Zed
d��Z	dd
d�Z
dS)�DataSourceOpenNebulaZ
OpenNebulacCs.tj�||||�d|_tj�|jd�|_dS)NZ
opennebula)r�
DataSource�__init__�seed�os�path�join�seed_dir)�selfZsys_cfg�distro�paths�r�H/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOpenNebula.pyr
$szDataSourceOpenNebula.__init__cCstj�|�}d||j|jfS)Nz%s [seed=%s][dsmode=%s])rr	�__str__r�dsmode)r�rootrrrr)szDataSourceOpenNebula.__str__c
Cs�dti}d}d}t}d|jkr*|j�d�}|jg}|�t��|D]�}zLtj�	|j�rht
||j|d�}n(|�d�r�t
jt
||jd�}t�||�}Wn\tk
r�YqBYnFtk
r�}z|�W5d}~XYn"tjk
r�t�d|�YnX|rB|}t�d|��qqB|�sdS|d	}	t�|	|g�}	|�|�d
�|j�d�g�|_|jtjk�r\dS||_|�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�networkrZuserdata_raw)
r�defaults�resultsrrZ
candidatesZcdevZpartially_applied_func�excZmdrrr�	_get_data-s^
�
��zDataSourceOpenNebula._get_datacCs$|j|jkrd}nd}d||jfS)z/Return the subplatform metadata source details.zseed-dirzconfig-diskz%s (%s))rr)rZsubplatform_typerrr�_get_subplatformjsz%DataSourceOpenNebula._get_subplatformcCs|jdk	r|jSdSdS�N)r-)rrrr�network_configrs
z#DataSourceOpenNebula.network_configFcCs.|dkr|jtjkrd}nd}tj�|||�S)NTF)rrZDSMODE_NETWORKr	�get_hostname)rZfqdnZ
resolve_ipZ
metadata_onlyrrrr5ys
z!DataSourceOpenNebula.get_hostnameN)FFF)�__name__�
__module__�__qualname__Zdsnamer
rr1r2�propertyr4r5rrrrr s=
rc@seZdZdS)r(N�r6r7r8rrrrr(�sr(c@seZdZdS)r)Nr:rrrrr)�sr)c@s�eZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zddd�Zdd�ZdS) �OpenNebulaNetworkNcCs|||_|dkrt|�}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$r@)�context�get_physical_nics_by_mac�collections�OrderedDict�sorted�items�ifaces�context_devname�re�match�group�lower)rrDrZsystem_nics_by_macr>�v�mrrrr
�s ���zOpenNebulaNetwork.__init__cCs"d�dd�|�d�dd�D��S)N�.cSsg|]}tt|d���qS)�)�str�int)r=�crrrr?�sz,OpenNebulaNetwork.mac2ip.<locals>.<listcomp>�:�)r�split�r�macrrr�mac2ip�szOpenNebulaNetwork.mac2ipcCs|�|��d�ddS)NrRrz.0)r\�
rpartitionrZrrr�mac2network�szOpenNebulaNetwork.mac2networkcCs\i}|�|dd���}|�|j�dd����|r:||d<|�|dd���}|rX||d<|S)N�dns�ZDNS�	addresses�
search_domain�search)�	get_fieldrYr!rDr )r�dev�nameserversr_rbrrr�get_nameservers�sz!OpenNebulaNetwork.get_nameserverscCs|�|d�S)N�mtu�rd�rrerrr�get_mtu�szOpenNebulaNetwork.get_mtucCs|�|d|�|��S)NZip)rdr\�rrer[rrr�get_ip�szOpenNebulaNetwork.get_ipcCs<g}|�|d�}|r|�|�|�|d�}|r8|�|�|S)N�ip6�ip6_ula)rd�append)rre�
addresses6rnrorrr�get_ip6�s

zOpenNebulaNetwork.get_ip6cCs|�|dd�S)NZip6_prefix_lengthZ64rirjrrr�get_ip6_prefix�sz OpenNebulaNetwork.get_ip6_prefixcCs|�|d�S)N�gatewayrirjrrr�get_gateway�szOpenNebulaNetwork.get_gatewaycCs|�|d|�|d��S)NZip6_gateway�gateway6rirjrrr�get_gateway6�s

�zOpenNebulaNetwork.get_gateway6cCs|�|dd�S)N�maskz
255.255.255.0rirjrrr�get_mask�szOpenNebulaNetwork.get_maskcCs|�|d|�|��S)Nr-)rdr^rlrrr�get_network�szOpenNebulaNetwork.get_networkcCs*|j�d�||f����}|dkr&|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.�_)Nr`)rDr r�upper)rre�name�default�valrrrrd�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)NrX�version�	ethernetsZ
macaddressrMra�/csg|]}|d��qS)r�r)r=�i�Zprefix6rrr?sz.OpenNebulaNetwork.gen_conf.<locals>.<listcomp>Zgateway4rvrfrh)rJrIrOrKr ryrTrZipv4_mask_to_net_prefixrprmrrrsr!rurwrgrk)rZnetconfr�r[reZc_devZdevconfrx�prefixrqrtrvrfrhrr�r�gen_conf�sD


�




zOpenNebulaNetwork.gen_conf)N)N)r6r7r8r
r\r^rgrkrmrrrsrurwryrzrdr�rrrrr;�s


r;cCs@g}dD]2}t�|�}|��|D]}||kr"|�|�q"q|S)zE
    Return a list of devices that may contain the context disk.
    )z
LABEL=CONTEXTzLABEL=CDROMzTYPE=iso9660)rZfind_devs_with�sortrp)Zcombined�f�devs�drrrr" s
r"cCs
dd|gS)NZsudoz-ur��userrrr�switch_user_cmd/sr�c	Cs�t|t�r|g}n|dkr"ddg}|dkr.t}dd�tjdD�}|}|dkrV|}g}d�d�}dd	�}d
|||�d|d
||�d}	g}
|dk	r�||�}
|
�|�tj|
|	d�\}}d
}
i}i}d}|dd�}|�d�D]�}zT|�dd�\}}||k�r|||<n,||
k�r<||k�s4|�	|�|k�r<|||<Wq�t
k
�r~|dk�r\�|dk�rl|}n||k�rz|}Yq�Xq�|S)N�bashz-ecSsg|]}d|�qS)z${!%s*}r)r=�xrrrr?Asz&parse_shell_config.<locals>.<listcomp>r{�
)z__v="";r`cSsd�ddd�|�dddf�S)Nr�zprintf "%s\0" _start_zfor __v in %s; do� z%   printf "%s=%s\0" "$__v" "${!__v}";Zdoner`)r)Zvlistrrr�
varprinterOs��z&parse_shell_config.<locals>.varprinterz
unset IFS
z{
%s

:
} > /dev/null
)�data)Z
EPOCHREALTIMEZEPOCHSECONDSZRANDOMZLINENOZSECONDSr{ZSRANDOMZ__vr�����=r@Z_start_)�
isinstancerTr��stringZ
ascii_lettersrr!rrYr �
ValueError)�contentZkeylistr�rZswitch_user_cbZallvarsZ
keylist_inZsetupr�Zbcmd�cmd�outputZ_errorZexcludedZpresetZret�target�linerCrrrr�parse_shell_config3st
��������





��


r�c
Cs�i}tD]&}tj�||�}tj�|�r|||<q|sDtd|df��i}did�}d|k�r8|dk	r�zt�|�Wn4tk
r�}zt	dj
|d��|�W5d}~XYnXz(tj�|d�}	t�|	�}
t
|
|d�}Wndtjk
�r}zt	d	|�|�W5d}~XYn2tk
�r4}ztd
|�|�W5d}~XYnXntd��|�sJ|S||d<d}d
|k�rfd
}nd|k�rtd}|�r�|�|���}dd�|D�|dd<dD]&}
|
|k�r�||
|dd<�qʐq�d|k�r�|d|d<nd|k�r�|d|d<d|k�rV|�d|�d��}|dk�rVzt�|d�|d<Wn tk
�rTt�d�YnXdd�|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=r�rrrr?�s
z)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.*$)rLrMr<rrrr?�sr)�CONTEXT_DISK_FILESrr
r�isfiler(�pwd�getpwnam�KeyErrorr)�formatrZ	load_filer�rZProcessExecutionError�IOErrorr �
splitlinesZb64d�	TypeErrorr*r+r;r�)Z
source_dirrr�foundZaf�fnrDr/�er
r�Zssh_key_var�linesr>�encodingZipaddr_keysZonetrrrr$�s�


���
����

�




�

r$cs"t��}t�fdd�|��D��S)Ncs$g|]\}}�j�|�r||f�qSr)Z
networkingZis_physical)r=rQ�n�rrrr?sz,get_physical_nics_by_mac.<locals>.<listcomp>)rZget_interfaces_by_mac�dictrI)rr�rr�rrE�s�rEcCst�|t�Sr3)rZlist_from_depends�datasources)Zdependsrrr�get_datasource_listsr�)NNNN)N)"rFr&rr�rLr�Z	cloudinitrZloggingrrrrZ	getLoggerr6r*rrr�r	r�	Exceptionr(r)r;r"r�r�r$rEZDataSourceOpenNebulaNetZDEP_FILESYSTEMr�r�rrrr�<module>s:
b�
k
`
�