File: //lib/python3/dist-packages/cloudinit/sources/__pycache__/DataSourceLXD.cpython-310.pyc
o
�Ad�D � @ sV d Z ddlZddlZddlZddlZddlmZmZ ddlm Z ddl
mZmZm
Z
mZmZmZmZ ddlZddlmZ ddlmZ ddlmZ dd lmZ dd
lmZmZmZmZ ddl m!Z! e�"e#�Z$dZ%d
Z&dZ'ddddddd�Z(de)fdd�Z* d<dee
e) dee)ef fdd�Z+G dd� de�Z,G dd� de�Z-G dd� de�Z.de)de/fd d!�Z0G d"d#� d#ej1�Z2de3fd$d%�Z4 &d=d'ej5d(e)d)e3fd*d+�Z6 &d=d'ej5d(e)d)e3dej7fd,d-�Z8G d.d/� d/e�Z9G d0d1� d1�Z:e&e9j;fd2e)d3e9de/fd4d5�Z<e2ej=ffgZ>d6d7� Z?e#d8k�r)ddl@Z@d9ZAe@jBeAd:�ZCeC�D� eEe�Fe<e9j;d;��� dS dS )>a� 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://linuxcontainers.org/lxd/docs/master/dev-lxd
� N)�Flag�auto)�JSONDecodeError)�Any�Dict�List�Optional�Tuple�Union�cast)�HTTPAdapter)�HTTPConnection)�HTTPConnectionPool)�log)�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
C s� d} t �d�rIz
t � dg�\}}W n t jy, } zt�d|� | W Y d }~S d }~ww |�� dv rIt�� d d }|dkrAdS |d krGd
S dS | S )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�arch� r2 �A/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceLXD.py�_get_fallback_interface_name/ s(
���r4 �nicsc C sF t � }|rt�d|� n t� }t�d|� 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)r9 �name�subnets)�version�config)r r) �debugr4 )r5 �primary_nicr2 r2 r3 �generate_network_configI s$ ��
���rA c �$ e Zd Z� fdd�Zdd� Z� ZS )�SocketHTTPConnectionc s t � �d� || _d S �N� localhost)�super�__init__�socket_path��selfrH �� __class__r2 r3 rG p �
zSocketHTTPConnection.__init__c C s$ t � t jt j�| _| j�| j� d S �N)�socket�AF_UNIX�SOCK_STREAM�sock�connectrH �rJ r2 r2 r3 rS t s zSocketHTTPConnection.connect)�__name__�
__module__�__qualname__rG rS �
__classcell__r2 r2 rK r3 rC o � rC c rB )�SocketConnectionPoolc s || _ t� �d� d S rD )rH rF rG rI rK r2 r3 rG z s zSocketConnectionPool.__init__c C s
t | j�S rN )rC rH rT r2 r2 r3 � _new_conn~ s
zSocketConnectionPool._new_conn)rU rV rW rG r[ rX r2 r2 rK r3 rZ y rY rZ c @ s e Zd Zddd�ZdS )�LXDSocketAdapterNc C s t t�S rN )rZ �LXD_SOCKET_PATH)rJ �url�proxiesr2 r2 r3 �get_connection� s zLXDSocketAdapter.get_connectionrN )rU rV rW r` r2 r2 r2 r3 r\ � s r\ �
metadata_typec
C sx t |t�r|S |du r
i S zt�|�}W n ty+ } zt�dj| |d��|�d}~ww |du r:t�dj| |d���|S )a6 Convert 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)ra �metadata_value�parsed_metadata�excr2 r2 r3 �_raw_instance_data_to_dict� s.
�������rm c s� e Zd ZU dZejZeee f e
d<