%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python3/dist-packages/cloudinit/sources/__pycache__/
Upload File :
Create Path :
Current File : //lib/python3/dist-packages/cloudinit/sources/__pycache__/DataSourceLXD.cpython-312.pyc

�

���fFE�	�b�dZddlZddlZddlZddlZddlZddlmZmZddl	m
Z
ddlmZm
Z
mZmZmZmZmZddlZddlmZddlmZddlmZdd	lmZmZmZmZmZdd
l m!Z!ejDe#�Z$dZ%dZ&d
Z'ddddddd�Z(de)fd�Z*	d2deee)de
e)effd�Z+Gd�de�Z,Gd�de�Z-Gd�de�Z.de)de/fd�Z0Gd�dejb�Z2de3fd �Z4	d3d!ejjd"e)d#e3fd$�Z6	d3d!ejjd"e)d#e3dejnfd%�Z8Gd&�d'e�Z9Gd(�d)�Z:e&e9jvfd*e)d+e9de/fd,�Z<e2ejzffgZ>d-�Z?e#d.k(rSddl@Z@d/ZAe@j�eA�0�ZCeCj��eEej�e<e9jv�1���yy)4a�Datasource for LXD, reads /dev/lxd/sock representation of instance data.

Notes:
 * This datasource replaces previous NoCloud datasource for LXD.
 * Older LXD images may not have updates for cloud-init so NoCloud may
   still be detected on those images.
 * Detect LXD datasource when /dev/lxd/sock is an active socket file.
 * Info on dev-lxd API: https://documentation.ubuntu.com/lxd/en/latest/dev-lxd/
�N)�Flag�auto)�JSONDecodeError)�Any�Dict�List�Optional�Tuple�Union�cast)�HTTPAdapter)�HTTPConnection)�HTTPConnectionPool)�
atomic_helper�sources�subp�
url_helper�util)�find_fallback_nicz
/dev/lxd/sockz1.0z
http://lxd�	user-data�network-config�vendor-data)�cloud-init.user-datazcloud-init.network-config�cloud-init.vendor-data�user.user-datazuser.network-config�user.vendor-data�returnc�J�d}tjd�rS	tjdg�\}}|j�dvr't
j�dd}|dk(ry|d	k(ry
y|S#tj$r"}tj	d|�|cYd}~Sd}~wwxYw)N�eth0zsystemd-detect-virtzHUnable to run systemd-detect-virt: %s. Rendering default network config.)�kvm�qemu�uname��ppc64le�enp0s5�s390x�enc9�enp5s0)r�which�ProcessExecutionError�LOG�warning�stripr�system_info)�default_name�	virt_type�_�err�archs     �A/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceLXD.py�_get_fallback_interface_namer5/s����L��z�z�'�(�	 ��9�9�&;�%<�=�L�I�q��?�?��!
�
��#�#�%�g�.�q�1�D��y� ����������%�)�)�	 ��K�K�5��
�
 ���
	 �s�A-�-B"�B�B"�B"�nicsc��t�}|rtjd|�n t�}tjd|�dd|ddd�gd�gd	�S)
zCReturn network config V1 dict representing instance network config.zCLXD datasource generating network from discovered active device: %szVLXD datasource generating network from systemd-detect-virt platform default device: %s��physical�dhcpr)�type�control)r;�name�subnets)�version�config)rr+�debugr5)r6�primary_nics  r4�generate_network_configrCIsm��$�%�K���	�	�
��	
�3�4���	�	�
+��	
��#�#�%+��?�@�
�
�	�	�c�$��eZdZ�fd�Zd�Z�xZS)�SocketHTTPConnectionc�@��t�|�d�||_d|_y�N�	localhost)�super�__init__�socket_path�sock��selfrL�	__class__s  �r4rKzSocketHTTPConnection.__init__ps���
����%�&�����	rDc��tjtjtj�|_|jj	|j
�y�N)�socket�AF_UNIX�SOCK_STREAMrM�connectrL�rOs r4rVzSocketHTTPConnection.connectus6���M�M�&�.�.�&�2D�2D�E��	��	�	���$�*�*�+rD)�__name__�
__module__�__qualname__rKrV�
__classcell__�rPs@r4rFrFos
����
,rDrFc�$��eZdZ�fd�Zd�Z�xZS)�SocketConnectionPoolc�2��||_t�|�	d�yrH)rLrJrKrNs  �r4rKzSocketConnectionPool.__init__{s���&���
����%rDc�,�t|j�SrR)rFrLrWs r4�	_new_connzSocketConnectionPool._new_conns��#�D�$4�$4�5�5rD)rXrYrZrKrar[r\s@r4r^r^zs
���&�6rDr^c��eZdZdd�Z	dd�Zy)�LXDSocketAdapterNc� �tt�SrR)r^�LXD_SOCKET_PATH)rO�url�proxiess   r4�get_connectionzLXDSocketAdapter.get_connection�s
��#�O�4�4rDc�:�|j|j|�SrR)rhrf)rO�request�verifyrg�certs     r4�get_connection_with_tls_contextz0LXDSocketAdapter.get_connection_with_tls_context�s���"�"�7�;�;��8�8rDrR)NN)rXrYrZrhrm�rDr4rcrc�s��5�37�9rDrc�
metadata_typec��t|t�r|S|�iS	tj|�}|�&tjdj||����|S#t$r,}tjdj||���|�d}~wwxYw)a6Convert raw instance data from str, bytes, YAML to dict

    :param metadata_type: string, one of as: meta-data, vendor-data, user-data
        network-config

    :param metadata_value: str, bytes or dict representing or instance-data.

    :raises: InvalidMetaDataError on invalid instance-data content.
    NzAInvalid {md_type}. Expected str, bytes or dict but found: {value})�md_type�valuez:Invalid {md_type} format. Expected YAML but found: {value})�
isinstance�dictr�	load_yaml�AttributeErrorr�InvalidMetaDataException�format)ro�metadata_value�parsed_metadata�excs    r4�_raw_instance_data_to_dictr|�s����.�$�'������	���.�.��8�����.�.�
��v�m�>�v�J�
�	
�������.�.�
��v�m�>�v�J�
��	���s�A�	B� 'B�Bc�&��eZdZUdZej
Zeee	fe
d<ej
Zeeee	fe
d<ejjdzZee	dfe
d<dZded	d
f�fd�Zed	efd��Zd	efd
�Zd	e	fd�Zd	e	fd�Zed	efd��Z�xZS)�
DataSourceLXD�LXD�_network_config�_crawled_metadata)�user.meta-datarrrr.�sensitive_metadata_keysT�ci_pkl_versionrNc�2��t�|�|�d|_y)NT)rJ�	_unpickle�skip_hotplug_detect)rOr�rPs  �r4r�zDataSourceLXD._unpickle�s���
���.�)�#'�� rDc��t�S)z@Check platform environment to report if this datasource may run.)�is_platform_viablernrDr4�	ds_detectzDataSourceLXD.ds_detect�s
��"�#�#rDc�@�tjtjdt��|_t
d|j
jd��|_|j
jdi�}|jdi�}|r%|jjt
d|��d|j
vr|j
d|_
d|j
vrt
d|j
d�|_d|j
vr|j
d|_y	)
z=Crawl LXD socket API instance data and return True on successzCrawl of metadata service)�logfunc�msg�func�	meta-datar@r�rrrT)
r�log_timer+rA�
read_metadatar�r|�get�metadata�update�userdata_rawr��vendordata_raw)rOr@�
user_metadatas   r4�	_get_datazDataSourceLXD._get_data�s��!%����I�I�+��"
���
3���/�/�3�3�K�@�
��
��'�'�+�+�H�b�9���
�
�#3�R�8�
���M�M� � �*�+;�]�K�
��$�0�0�0� $� 6� 6�{� C�D���t�5�5�5�#=� �$�"8�"8�9I�"J�$�D� ��D�2�2�2�"&�"8�"8��"G�D��rDc�8�djtt��S)z.Return subplatform details for this datasourcez"LXD socket API v. {ver} ({socket}))�verrS)rx�LXD_SOCKET_API_VERSIONrerWs r4�_get_subplatformzDataSourceLXD._get_subplatform�s��3�:�:�&��;�
�	
rDc��ttj��}|jdi�}t	|t
�st
j|�}|jd�|jjd�k(S)z%Return True if instance_id unchanged.��
metadata_keysr�zinstance-id)	r��MetaDataKeys�	META_DATAr�rsrtrrur�)rO�sys_cfg�response�mds    r4�check_instance_idzDataSourceLXD.check_instance_id�s]�� �|�/E�/E�F��
�\�\�+�r�
*���"�d�#�����#�B��v�v�m�$��
�
�(9�(9�-�(H�H�HrDc���|jtjk(r�|jtjk(r|j	�t|jt�r�|jjd�r*tjd�|jd|_nb|jjd�rG|jdj�D��cgc]\}}|ddk(r|��}}}t|�|_|jtjk(r$tjd�t�|_tt|j�Scc}}w)z�Network config read from LXD socket config/user.network-config.

        If none is present, then we generate fallback configuration.
        rz,LXD datasource using provided network config�devicesr;�nicz8LXD datasource generating network config using fallback.)
r�r�UNSETr�r�rsrtr�r+rA�itemsrCr)rO�k�vr�s    r4�network_configzDataSourceLXD.network_config�s)�����7�=�=�0��%�%����6���� ��$�0�0�$�7��)�)�-�-�.>�?��I�I�L�M�+/�+A�+A�(�,�D�(��+�+�/�/�	�:�
%)�$:�$:�9�$E�$K�$K�$M�*� �A�q��V�9��-��*�G�*�
,C�7�+K�D�(����7�=�=�0��I�I�J�
�$;�#<�D� ��D�$�.�.�/�/��*s�%E')rXrYrZ�dsnamerr�r�rr�str�__annotations__r�r	�
DataSourcer�r
r��intr��staticmethod�boolr�r�r�r��propertyrtr�r[r\s@r4r~r~�s����
�F�(/�
�
�O�U�4��9�%�5�4;�M�M��x��d�C�i� 0�1�A�	���2�2�
�	
��U�3��8�_�	���(��(��(��$�t�$��$��4��4
�#�
�I�C�I��0��0��0rDr~c��tjjt�r6t	j
tjt�j�Sy)z=Return True when this platform appears to have an LXD socket.F)�os�path�existsre�stat�S_ISSOCK�lstat�st_modernrDr4r�r�s3��	�w�w�~�~�o�&��}�}�R�X�X�o�6�>�>�?�?�rD�sessionrf�do_raisec	�r�t|||�}|js=tjd||j|j
j
d��iS	|j�S#t$rE}tjdj||j
j
d����|�d}~wwxYw)N�Skipping %s on [HTTP:%d]:%s�utf-8zFUnable to process LXD config at {url}. Expected JSON but found: {resp})rf�resp)�_do_request�okr+rA�status_code�content�decode�jsonrrrwrx)r�rfr��url_responser{s     r4�_get_json_responser�s����w��X�6�L��?�?��	�	�)���$�$�� � �'�'��0�		
��	��� � �"�"�����.�.�
/�/5�v��l�2�2�9�9�'�B�06�0�
�
�	���s�A(�(	B6�1AB1�1B6c	���tddd�D][}|j|�}d|jk(r8tjd�t
j
d|j||��[nt
jdj|�|rV|jsJtjdj|j||jjd	��
���|S)N�r���i�g�������?z,[GET] [HTTP:%d] %s, retrying %d more time(s)z[GET] [HTTP:%d] %sz3Invalid HTTP response [{code}] from {route}: {resp}r�)�code�router�)�ranger�r��time�sleepr+r,rAr�rrwrxr�r�)r�rfr��retriesr�s     r4r�r�1s�����Q��#�
���;�;�s�#���(�&�&�&�
�J�J�s�O��K�K�>��$�$���	
�
�
��I�I�"�H�$8�$8�#�>������.�.�A�H�H��)�)���%�%�,�,�W�5�
I�
�
�	
��OrDc�T�eZdZe�Ze�Ze�Ze�ZeezezZy)r�N)	rXrYrZr�NONE�CONFIG�DEVICESr��ALLrnrDr4r�r�Ns-���6�D�
�V�F��f�G���I�
�7�
�Y�
&�CrDr�c�P�eZdZefdefd�Zdejdefd�Z	de
defd�Zy)	�_MetaDataReader�api_versionc�d�||_tjt|j�|_yrR)r�r�combine_url�LXD_URL�_version_url)rOr�s  r4rKz_MetaDataReader.__init__Ws%��&���&�2�2�7�D�<L�<L�M��rDr�rc
�4�dii}tj|jd�}t||�}t	|�D]�}tjt
|�}t
||d��}|jjd�}|js#tjd||j|��u|jd�d}	||d|	<|	tvs��t|	|vr
||t|	<��tjd|	|	j!d	d
d����|S)a�Iterate on LXD API config items. Promoting CONFIG_KEY_ALIASES

        Any CONFIG_KEY_ALIASES which affect cloud-init behavior are promoted
        as top-level configuration keys: user-data, network-data, vendor-data.

        LXD's cloud-init.* config keys override any user.* config keys.
        Log debug messages if any user.* keys are overridden by the related
        cloud-init.* key.
        r@F�r�r�r��/r�z,Ignoring LXD config %s in favor of %s value.�userz
cloud-initr8)rr�r�r��sortedr�r�r�r�r�r+rAr��
rpartition�CONFIG_KEY_ALIASESr,�replace)
rOr�r@�
config_url�
config_routes�config_route�config_route_url�config_route_response�
response_text�cfg_keys
          r4�_process_configz_MetaDataReader._process_config[s+��!�"�~���+�+�D�,=�,=�x�H�
�+�7�J�?�
�
#�=�1� 	�L�)�5�5�g�|�L��$/��)�E�%�!�2�9�9�@�@��I�M�(�+�+��	�	�1�$�)�5�5�!�	��"�-�-�c�2�2�6�G�)6�F�8��W�%��,�,�&�g�.�f�<�:G�F�-�g�6�7��K�K�F�������a�@��9 	�B�
rDr�c�d�tj�5}|j|jt	��d|j
i}tj|vrHtj|jd�}t||�jjd�|d<tj|vr |j|j|��tj |vr5tj|jd�}t#||d��}|r||d<|cddd�S#1swYyxYw)N�_metadata_api_versionr�r�r�Fr�)�requests�Session�mountr�rcr�r�r�rr�r�r�r�r�r�r�r�r�)rOr�r�r��md_routerfr�s       r4�__call__z_MetaDataReader.__call__�s��
�
�
�
�	�7��M�M�$�+�+�-=�-?�@�/��1A�1A�B�B��%�%��6�%�1�1��%�%�{���#.��X�#��'�&�&��/��;���"�"�m�3��	�	�$�.�.�w�7�8��#�#�}�4� �,�,�T�->�->�	�J��,�W�c�E�J���$+�B�y�M��%	�	�	�s�DD&�&D/N)rXrYrZr�r�rKr�r�rtr�r�r�rnrDr4r�r�Vs@��*@�N�C�N�4�x�'7�'7�4�D�4�l���$�rDr�r�r�c�(�t|��|��S)a8Fetch metadata from the /dev/lxd/socket routes.

    Perform a number of HTTP GETs on known routes on the devlxd socket API.
    Minimally all containers must respond to <LXD_SOCKET_API_VERSION>/meta-data
    when the LXD configuration setting `security.devlxd` is true.

    When `security.devlxd` is false, no /dev/lxd/socket file exists. This
    datasource will return False from `is_platform_viable` in that case.

    Perform a GET of <LXD_SOCKET_API_VERSION>/config` and walk all `user.*`
    configuration keys, storing all keys and values under a dict key
        LXD_SOCKET_API_VERSION: config {...}.

    In the presence of the following optional user config keys,
    create top level aliases:
      - user.user-data -> user-data
      - user.vendor-data -> vendor-data
      - user.network-config -> network-config

    :param api_version:
        LXD API version to operated with.
    :param metadata_keys:
        Instance of `MetaDataKeys` indicating what keys to fetch.
    :return:
        A dict with the following optional keys: meta-data, user-data,
        vendor-data, network-config, network_mode, devices.

        Below <LXD_SOCKET_API_VERSION> is a dict representation of all raw
        configuration keys and values provided to the container surfaced by
        the socket under the /1.0/config/ route.
    )r�r�)r�)r�r�s  r4r�r��s��F4�?�{�3�#��rDc�6�tj|t�SrR)r�list_from_depends�datasources)�dependss r4�get_datasource_listr��s���$�$�W�k�:�:rD�__main__z*Query LXD metadata and emit a JSON object.)�descriptionr�rR)T)G�__doc__�loggingr�rSr�r��enumrr�json.decoderr�typingrrrr	r
rrr��requests.adaptersr
�urllib3.connectionr�urllib3.connectionpoolr�	cloudinitrrrrr�
cloudinit.netr�	getLoggerrXr+rer�r�r�r�r5rCrFr^rcrtr|r�r~r�r�r�r��Responser�r�r�r�r��DEP_FILESYSTEMr�r��argparser��ArgumentParser�parser�
parse_args�print�
json_dumpsrnrDr4�<module>rs,����	�
����(�@�@�@��)�.�5�D�D�+��g����!��!����
��(�!1�+�!�+�%�
���c��6!%�#�
�4��9�
�#�	�#�s�(�^�#�L,�>�,�6�-�6�	9�{�	9��c��d��:d0�G�&�&�d0�N�D��;?��
�
�
��$'��37��0;?��
�
�
��$'��37��
����:'�4�'�N�N�d.�".�"2�"2�%��%��%�
�%�T�W�+�+�-�.���;��z���B�K�
$�X�
$�
$��
=�F�
����	� �
� � ��\�=M�=M�!N�O��
rD

Zerion Mini Shell 1.0