Current File : //usr/lib/python3/dist-packages/cloudinit/sources/__pycache__/DataSourceOpenNebula.cpython-312.pyc
�

Ӈg�>��R�ddlZddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
mZmZm
Z
eje�ZdZdZdgZdZGd�dej*�ZGd	�d
e�ZGd�de�ZGd
�d�Zd�Zd�Zd�Zdd�Zdd�Zd�Z eZ!eejDffgZ#d�Z$y)�N)�
atomic_helper�net�sources�subp�utilziid-dsopennebula�nobody�
context.sh)�
EPOCHREALTIME�EPOCHSECONDS�RANDOM�LINENO�SECONDS�_�SRANDOM�__vc�@�eZdZdZd�Zd�Zd�Zd�Zed��Z	d	d�Z
y)
�DataSourceOpenNebula�
OpenNebulac���tjj||||�d|_tj
j
|jd�|_d|_y)N�
opennebula)	r�
DataSource�__init__�seed�os�path�join�seed_dir�network)�self�sys_cfg�distro�pathss    �H/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOpenNebula.pyrzDataSourceOpenNebula.__init__/sD�����#�#�D�'�6�5�A���	������U�^�^�\�B��
����c�~�tjj|�}|�d|j�d|j�d�S)Nz [seed=z	][dsmode=�])rr�__str__r�dsmode)r�roots  r#r'zDataSourceOpenNebula.__str__5s-���!�!�)�)�$�/��,0�$�)�)�T�[�[�I�Ir$c�,�dti}d}d}t}d|jvr|jjd�}|jg}|jt
��|D]�}	tjj|j�rt||j|��}nM|jd�r<tjt||j��}tj ||�}|s��|}t(j-d|�n|sy|d	}	tj.|	|g�}	|j1|jd
�|jjd�g�|_|j2t4j6k(ry||_|jd�|_|	|_|jd
�|_y#t"$rY��ut$$r}|�d}~wtj&$rt(j+d|�Y��wxYw)Nzinstance-id�	parseuser��asuserz/dev)r-r!z%s was not mountablezfound datasource in %sF�metadata�DSMODEr(�network-interfaces�userdataT) �DEFAULT_IID�DEFAULT_PARSEUSER�ds_cfg�getr�extend�find_candidate_devsrr�isdir�read_context_disk_dirr!�
startswith�	functools�partialr�mount_cb�NonContextDiskDir�BrokenContextDiskDir�MountFailedError�LOG�warning�debug�
mergemanydict�_determine_dsmoder(r�DSMODE_DISABLEDrrr.�userdata_raw)
r�defaults�resultsrr+�
candidates�cdev�partially_applied_func�exc�mds
          r#�	_get_datazDataSourceOpenNebula._get_data9s���!�;�/������&�	��$�+�+�%�������4�I��m�m�_�
����-�/�0��	�D�
:��7�7�=�=����/�3��d�k�k�)��G��_�_�V�,�.7�->�->�-�(�#�{�{�.�*�
#�m�m�D�2H�I�G�����	�	�2�D�9��5	�8���Z�
 ��
�
�
��X��
/���,�,�
�[�[��
"�D�K�K�O�O�H�$=�>�
����;�;�'�1�1�1����	��{�{�#7�8�����
�#�K�K�
�3�����?%�
��'�
��	���(�(�
:����2�D�9�
:�s%�(BG
�
	H�H�!G#�#,H�Hc�`�|j|jvrd}nd}|�d|j�d�S)z/Return the subplatform metadata source details.zseed-dirzconfig-diskz (�))rr)r�subplatform_types  r#�_get_subplatformz%DataSourceOpenNebula._get_subplatformvs-���=�=�D�I�I�%�)��,��,�d�i�i�8�8r$c�4�|j�|jSy�N)r)rs r#�network_configz#DataSourceOpenNebula.network_config~s���<�<�#��<�<��r$c��|�"|jtjk(rd}nd}tjj	|||�S)NTF)r(r�DSMODE_NETWORKr�get_hostname)r�fqdn�
resolve_ip�
metadata_onlys    r#rYz!DataSourceOpenNebula.get_hostname�s?�����{�{�g�4�4�4�!�
�"�
��!�!�.�.�t�T�:�F�Fr$N)FFF)�__name__�
__module__�__qualname__�dsnamerr'rOrS�propertyrVrY�r$r#rr+s7��
�F��J�;�z9�����Gr$rc��eZdZy)r>N�r]r^r_rbr$r#r>r>����r$r>c��eZdZy)r?Nrdrbr$r#r?r?�rer$r?c�X�eZdZdd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zdd�Z
d
�Zy)�OpenNebulaNetworkNc��||_|�t|�}tjt	|j�d���D�cgc]}|��c}�|_i|_|j�D]J\}}tjd|�}|s�|jd�|j|j�<�Lycc}w)Nc�2�tj|d�S)N�)r�natural_sort_key)�ks r#�<lambda>z,OpenNebulaNetwork.__init__.<locals>.<lambda>�s��#�"6�"6�q��t�"<�r$)�keyz
^(.+)_MAC$rk)�context�get_physical_nics_by_mac�collections�OrderedDict�sorted�items�ifaces�context_devname�re�match�group�lower)rrpr!�system_nics_by_macrm�v�ms       r#rzOpenNebulaNetwork.__init__�s�������%�!9�&�!A��!�-�-� �&�,�,�.�<��
���
�
��� "����M�M�O�	=�D�A�q������*�A��23�'�'�!�*��$�$�Q�W�W�Y�/�	=��
s�	B<c��dj|jd�ddD�cgc]}tt|d����c}�Scc}w)N�.�:��)r�split�str�int)r�mac�cs   r#�mac2ipzOpenNebulaNetwork.mac2ip�s8���x�x�#�)�)�C�.���2D�E�Q��S��B�Z��E�F�F��Es�Ac��i}|j|dd�j�}|j|jj	dd�j��|r||d<|j|dd�j�}|r||d<|S)N�dns��DNS�	addresses�
search_domain�search)�	get_fieldr�r6rpr5)r�dev�nameserversr�r�s     r#�get_nameserversz!OpenNebulaNetwork.get_nameservers�s������n�n�S�%��,�2�2�4���
�
�4�<�<�#�#�E�2�.�4�4�6�7��'*�K��$����s�O�R�@�F�F�H�
��$1�K��!��r$c�&�|j|d�S)N�mtu�r��rr�s  r#�get_mtuzOpenNebulaNetwork.get_mtu�s���~�~�c�5�)�)r$c�F�|j|d|j|��S)N�ip)r�r�)rr�r�s   r#�get_ipzOpenNebulaNetwork.get_ip�s���~�~�c�4����S�)9�:�:r$c��g}|j|d�}|r|j|�|j|d�}|r|j|�|S)N�ip6�ip6_ula)r��append)rr��
addresses6r�r�s     r#�get_ip6zOpenNebulaNetwork.get_ip6�sO���
��n�n�S�%�(������c�"��.�.��i�0������g�&��r$c�(�|j|dd�S)N�ip6_prefix_length�64r�r�s  r#�get_ip6_prefixz OpenNebulaNetwork.get_ip6_prefix�s���~�~�c�#6��=�=r$c�&�|j|d�S)N�gatewayr�r�s  r#�get_gatewayzOpenNebulaNetwork.get_gateway�s���~�~�c�9�-�-r$c�H�|j|d|j|d��S)N�ip6_gateway�gateway6r�r�s  r#�get_gateway6zOpenNebulaNetwork.get_gateway6�s'���~�~������s�J� ?�
�	
r$c�(�|j|dd�S)N�maskz
255.255.255.0r�r�s  r#�get_maskzOpenNebulaNetwork.get_mask�s���~�~�c�6�?�;�;r$c��|jjdj||f�j��}|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�)rpr5r�upper)rr��name�default�vals     r#r�zOpenNebulaNetwork.get_field�sL��
�l�l����H�H����
�
�e�g�

����+�w�4��4r$c��i}d|d<i|d<i}|jj�D�]J\}}|j�}|jj	||�}i}d|i|d<g|d<|j|�}t
tj|��}|dj|j||�dz|z�|j|�}	|	r9|j|�}
|dj|	D�cgc]
}|dz|
z��c}�|j|�}|r||d<|j|�}
|
r|
|d	<|j!|�}|r||d
<|j#|�}|r||d<|||<��M||d<|Scc}w)Nr��version�	ethernets�
macaddressryr��/�gateway4r�r�r�)rvrur{rwr5r�r�r�ipv4_mask_to_net_prefixr�r�r�r�r6r�r�r�r�)r�netconfr�r�r��c_dev�devconfr��prefixr��prefix6�ir�r�r�r�s                r#�gen_confzOpenNebulaNetwork.gen_conf�s�������	��!�����	����)�)�+�.	%�H�C���)�)�+�C��(�(�,�,�S�#�6�E��G�!-�c�2�G�G��$&�G�K� ��=�=��'�D���4�4�T�:�;�F��K� �'�'����E�3�(?�#�(E��(N�O����e�,�J���-�-�e�4����$�+�+�0:�;�1�Q��W�w�&�;��
�&�&�u�-�G��&-��
�#��(�(��/�H��&.��
�#��.�.�u�5�K��)4��
�&��,�,�u�%�C��!$����$�I�c�N�].	%�` )�������5<s�9E>
rU)r]r^r_rr�r�r�r�r�r�r�r�r�r�r�rbr$r#rhrh�s?��=�,G�	�*�;��>�.�
�<�5� 7r$rhc��g}dD]D}tj|�}|j�|D]}||vs�|j|���F|S)zE
    Return a list of devices that may contain the context disk.
    )z
LABEL=CONTEXTzLABEL=CDROMzTYPE=iso9660)r�find_devs_with�sortr�)�combined�f�devs�ds    r#r7r7&s[���H�
=�#���"�"�1�%���	�	���	#�A��� �����"�	#�#��Or$c��dd|gS)N�sudoz-urb��users r#�switch_user_cmdr�5s���D�$��r$c�,�tjd�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�dedentrbr$r#�
varprinterr�9s���?�?�	��r$c���d|j�vrtjd�t�d|zzt�zdz}g}|�t	|�}|jddg�t
j||��j}i}|jd	�d
d}|d|d}}td
�tj|�D��}	td�tj|�D��}
t|	j��jt|
j���D]9}|tvr�|
j|�}|�� ||	j|�k7s�5|||<�;|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_rkrr�c3�BK�|]}|jdd�����y�w��=rk)�maxsplitN�r���.0�variables  r#�	<genexpr>z%parse_shell_config.<locals>.<genexpr>}s"�����,4����s�Q��'����c3�BK�|]}|jdd�����y�wr�r�r�s  r#r�z%parse_shell_config.<locals>.<genexpr>�s"�����,4����s�Q��'��r�)�encoderArBr�r�r6r�stdoutr��dict�shlex�set�keys�union�
EXCLUDED_VARSr5)
�contentr-�bcmd�cmd�output�ret�sections�before�after�pre_env�post_envro�values
             r#�parse_shell_configr�Fsr������)�)����
-�	
�$	��
'�'�
1�	2�
�,�	��	�	�
�C�
���f�%���J�J��d�|��
�Y�Y�s��
&�
-�
-�F�
�C��|�|�M�*�1�2�.�H�
�Q�K��!��E�F���8=���F�8K���G���8=���E�8J���H��7�<�<�>�"�(�(��X�]�]�_�)=�>����-������S�!�����'�+�+�c�*:�!:��C��H���Jr$c�H�i}tD]G}tjj||�}tjj	|�s�C|||<�I|st|�dd����i}did�}d|vr\|�	t
j|�	tjj|d�}	tj|	�}
t|
|��}ntd��|s|S||d<d}d
|vrd
}nd|vrd}|rS|j#|�j%�}|D�
cgc]"}
t'|
�s�|
j)d�r�!|
��$c}
|dd<dD]}||vs�|||dd<nd|vr	|d|d<nd|vr|d|d<d|vrB|j#d|j#d��}|dk(r	t+j,|d�|d<|D�cgc]}t5j6d|�s�|��}}|rt9||�}|j;�|d<|S#t$r!}tdj|���|�d}~wwxYw#tj$r}td	|z�|�d}~wt $r}td
|z�|�d}~wwxYwcc}
w#t.$rt0j3d�Y��wxYwcc}w)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: zno files foundN)r1r.r	z'configured user '{user}' does not existr�r,zError processing context.sh: %szError reading context.sh: %szMissing context.shr.�SSH_KEY�SSH_PUBLIC_KEY�#zpublic-keys)�SET_HOSTNAME�HOSTNAME�	PUBLIC_IP�	IP_PUBLIC�ETH0_IPzlocal-hostname�	USER_DATAr1�USERDATA�USERDATA_ENCODING�USER_DATA_ENCODING�base64z"Failed base64 decoding of userdataz
^ETH\d+_IP.*$r0)�CONTEXT_DISK_FILESrrr�isfiler>�pwd�getpwnam�KeyErrorr?�formatr�load_text_filer�r�ProcessExecutionError�IOErrorr5�
splitlines�lenr:r�b64d�	TypeErrorrArBrxryrhr�)�
source_dirr!r-�found�af�fnrprI�err��ssh_key_var�lines�linerm�encoding�ipaddr_keys�onets                  r#r9r9�s���
�E� ���
�W�W�\�\�*�b�
)��
�7�7�>�>�"���E�"�I��
��J�8H� I�J�J��G��R�0�G��u����
����V�$�	��7�7�<�<�
�L�9�D��)�)�$�/�G�(���@�G� � 4�5�5����!�G�J���K��G����	�W�	$�&������K�(�3�3�5��"�.
��c�$�i�����8L�D�.
��
��M�*�O�����<�4;�A�J�G�J�� 0�1����g��%�k�2��
��	�w�	�%�j�1��
���W���;�;�����-A�!B�
���x��
B�&3�&8�&8���9L�&M��
�#�&�G�����2B�A�)F�1�G�K�G�� ��&�1��(,�
�
���$�%��N��O�
�*�=�D�D�#�E����	��
���)�)�	�&�1�Q�7���
���	�#�.�!�4���
��	��*.
��2�
B����@�A�
B��Hsm�3H�	AH1�I6�%I6�7I6� I;�?J�J�	H.�
H)�)H.�1I3�I�I3�I.�.I3�;J�Jc	���tj�}t|j�D��cgc]%\}}|jj|�s�"||f��'c}}�Scc}}wrU)r�get_interfaces_by_macr�ru�
networking�is_physical)r!r�r~�ns    r#rqrq�sO���$�$�&�D�� �J�J�L�M�D�A�q�F�,=�,=�,I�,I�!�,L�!�Q��M����Ms�#A
�A
c�6�tj|t�SrU)r�list_from_depends�datasources)�dependss r#�get_datasource_listr&�s���$�$�W�k�:�:r$rU)%rrr;�loggingrrrxr�r��	cloudinitrrrrr�	getLoggerr]rAr2r3rr�rr�	Exceptionr>r?rhr7r�r�r�r9rq�DataSourceOpenNebulaNet�DEP_FILESYSTEMr$r&rbr$r#�<module>r-s������	�
�	���=�=��g����!�� ����"�^��	�
�`G�7�-�-�`G�F	�	�	�	�9�	�M�M�`� �
�D�N]�@�/���G�2�2�4�5���;r$