HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //proc/self/root/lib/python3/dist-packages/cloudinit/config/__pycache__/cc_lxd.cpython-38.pyc
U

��0h�5�@s�UdZddlZddlZddlmZmZddlZddlmZm	Z	ddl
mZddlm
Z
ddlmZddlmZe�e�Zd	Zd
dgedgd
�Zeed<dd�Zdd�Zee
eedd�dd�Zdd�Zdd�Zdd�Zd#dd�Z e!eeed �d!d"�Z"dS)$z>LXD: configure lxd with ``lxd init`` and optionally lxd-bridge�N)�List�Tuple)�subp�util)�Cloud)�Config)�
MetaSchema)�PER_INSTANCEZlxdbr0Zcc_lxdZubuntu�lxd)�idZdistrosZ	frequencyZactivate_by_schema_keys�metacCs�g}t|t�s&|�dt|�j�d��t|t�sH|�dt|�j�d��t|t�sj|�dt|�j�d��|r�|sv|r�|r�dgng}||r�dgng7}|�dd�|����|r�td	�|���d
S)z�Validate user-provided lxd network and bridge config option values.

    @raises: ValueError describing invalid values provided.
    z/lxd.init config must be a dictionary. found a '�'z1lxd.bridge config must be a dictionary. found a 'z.lxd.preseed config must be a string. found a 'zlxd.initz
lxd.bridgezMUnable to configure LXD. lxd.preseed config can not be provided with key(s): z, z. N)�
isinstance�dict�append�type�__name__�str�join�
ValueError)�init_cfg�
bridge_cfg�preseed_str�errorsZincompat_cfg�r�9/usr/lib/python3/dist-packages/cloudinit/config/cc_lxd.py�supplemental_schema_validation!s*
�
�
��rcCs�d}dddg}|D]2}|�|�r|�d|�dd�t||�fg�qzt�|�Wn\tjk
r�|dd	krt�t�d
�t�ddd
dd	dg�dd�|D�}t�|�YnXdS)z�Set up lxd if init config is given.

    :param init_cfg: dict of lxd init configuration options to provide
        to `lxd init --auto`
    )Znetwork_addressZnetwork_port�storage_backendZstorage_create_deviceZstorage_create_loop�storage_poolZtrust_passwordr
�initz--autoz--%s=%s�_�-r�lvmzqCloud-init doesn't use thinpool by default on Ubuntu due to LP #1982780. This behavior will change in the future.�lxcZstorage�create�defaultzlvm.use_thinpool=falsecSsg|]}|�d�s|�qS)z--storage-backend)�
startswith)�.0�xrrr�
<listcomp>qs
z#handle_init_cfg.<locals>.<listcomp>N)�get�extend�replacerr�ProcessExecutionError�LOG�info)rZ	init_keys�cmd�kZnew_cmdrrr�handle_init_cfgDs0


&���r2)�name�cfg�cloud�args�returnc
Cs�|�d�}|st�d|�dSt|t�s>tdt|�j�d���|�di�}|�dd�}|�di�}t|||�t	�
d�s�zt	�	d	d
dg�Wn2t	jk
r�}ztd|�|�W5d}~XYnXt
||�}	t|	��r z|j�|	�Wn:t	jk
�r}
zt�d|	|
�WY�dSd}
~
XYnXt	�	dd
dg�|�rNt	j	dddg|d�dS|�r\t|�d}|�r�|�dt�}tj�d��rt	�
|��rt|�}
z<t�d|�d�dd�|
��D��d}t	j	dg|d�Wn&tk
�r�t�td|�YnXt�d�t�d�t	�	dddg�nht|�\}}t|t |�t |�t |�d�|�rft�dd�|��t!|�|�r�t�dd�|��t!|�n|�r�td |��dS)!Nr
z8Skipping module named %s, not present or disabled by cfgz*lxd config must be a dictionary. found a 'r
rZpreseed�ZbridgeZsnap�installz#Failed to install lxd from snap: %sz!failed to install packages %s: %sZ	waitreadyz
--timeout=300z	--preseed)�datazdebconf-communicater3z/etc/default/lxd-bridgezSetting lxd debconf via %s�
cSsg|]\}}d||f�qS)z	set %s %sr)r'r1�vrrrr)�szhandle.<locals>.<listcomp>zFailed to run '%s' for lxd withz Running dpkg-reconfigure for lxdzdpkg-reconfigurez--frontend=noninteractive)�net_name�did_initr$�attachzCreating lxd bridge: %s� z!Setting up default lxd bridge: %sz*Unable to configure lxd bridge without %s.)"r*r.�debugrrrrrrr�whichr-�RuntimeError�get_required_packages�lenZdistroZinstall_packages�warningr2�_DEFAULT_NETWORK_NAME�os�path�exists�bridge_to_debconfr�items�	ExceptionrZlogexcZdel_file�
bridge_to_cmd�maybe_cleanup_default�bool�_lxc)r3r4r5r6Zlxd_cfgrrr�e�packages�excZ
dconf_commr=�debconfr:�
cmd_create�
cmd_attachrrr�handlexs�
�
�
��

�����


��
�rXcCs`i}|�d�dkr&d|d<d|d<�n6|�d�dkrVd|d<d|d	<|�d
�|d<�n|�d�dk�rJd|d<|�d
�r�|�d
�|d<|�d�r�d|d
<|�d�|d<|�d�|d<|�d�|d<|�d�|d<|�d�|d<|�dd�|d<|�d��r.d|d<|�d�|d<|�d�|d<|�dd�|d<|�d ��r\|�d �|d!<ntd"|�d���|S)#N�mode�noneZfalsezlxd/setup-bridger8zlxd/bridge-name�existing�truezlxd/use-existing-bridger3�new�ipv4_addresszlxd/bridge-ipv4zlxd/bridge-ipv4-address�ipv4_netmaskzlxd/bridge-ipv4-netmask�ipv4_dhcp_firstzlxd/bridge-ipv4-dhcp-first�ipv4_dhcp_lastzlxd/bridge-ipv4-dhcp-lastZipv4_dhcp_leaseszlxd/bridge-ipv4-dhcp-leases�ipv4_natzlxd/bridge-ipv4-nat�ipv6_addresszlxd/bridge-ipv6zlxd/bridge-ipv6-address�ipv6_netmaskzlxd/bridge-ipv6-netmask�ipv6_natzlxd/bridge-ipv6-nat�domainzlxd/bridge-domain�invalid bridge mode "%s")r*rC)rrUrrrrK�sL

����rKcCs�|�d�dkrdS|�dt�}g}dd|ddg}|�d�d	krFd|fS|�d�d
krftd|�d���dd|g}|�d
�r�|�d�r�|�d|�d
�|�d�f�|�dd�dkr�|�d�|�d�r�|�d�r�d|�d�|�d�f}|�d|�n
|�d�|�d��rT|�d��rT|�d|�d�|�d�f�|�d�dk�r^|�d�n
|�d�|�d��r~|�d|�d��|�d d!�}|d!k�r�|�d"|���||fS)#NrYrZ)NNr3�networkzattach-profiler%�eth0r[r]rgr$r^r_zipv4.address=%s/%srbr\z
ipv4.nat=truer`raz%s-%szipv4.dhcp.ranges=%szipv4.address=nonercrdzipv6.address=%s/%srez
ipv6.nat=truezipv6.address=nonerfz
dns.domain=%s�mtu���zbridge.mtu=)r*rGrCr)rZbridge_namerVrWZ
dhcp_rangerjrrrrN
sT
��
��
��

rNcCsBdtj�dd�tj�dd�d�}tjdgt|�dg|d	�dS)
N�C�HOMEz/root�USER�root)�LC_ALLrmrnr#z
--force-local)Z
update_env)rH�environr*r�list)r0�envrrrrQIs
�rQr%ric

Cs"|tks|sdSd}d}|r�d}z$tdd||g�t�||||�WnBtjk
r�}	z"|	jdkrf|	�t�||||�W5d}	~	XYn"Xd}tdd	|g�t�|||�|�rd
}z&tddd
||g�t�||||�WnDtjk
�r}	z"|	jdkr�|	�t�||||�W5d}	~	XYnXdS)aNewer versions of lxc (3.0.1+) create a lxdbr0 network when
    'lxd init --auto' is run.  Older versions did not.

    By removing any that lxd-init created, we simply leave the add/attach
    code intact.

    https://github.com/canonical/lxd/issues/4649Nz"failed. Assuming it did not exist.z
succeeded.z/Detach of lxd network '%s' from profile '%s' %srhzdetach-profile�zDeletion of lxd network '%s' %s�deletez+Removal of device '%s' from profile '%s' %s�profileZdevice�remove)rGrQr.rArr-Z	exit_code)
r=r>r$r?rvZnic_nameZfail_assume_enoentZ	succeeded�msgrRrrrrORs2

"
rO)rrr7c
Cs�g}g}i}d|kr"|�|d�|rdd|krdzt�|�}Wn&tjttfk
rbt�d�YnX|�dg�D]}|�d�rp|�|d�qpd|kr�t	�
d�s�|�d�d|kr�t	�
d�s�|�d	�d
|kr�t	�
d�s�|�d�|S)
z&identify required packages for installrZ
storage_poolsz|lxd.preseed string value is not YAML.  Unable to determine required storage driver packages to support storage_pools config.ZdriverZzfszzfsutils-linuxr"ZlvcreateZlvm2Zbtrfsz
mkfs.btrfszbtrfs-progs)r�yamlZ	safe_loadZ	YAMLError�	TypeErrorrr.rFr*rrB)rrrSZstorage_driversZpreseed_cfgrrrrrDzs,�




rD)r%ri)#�__doc__ZloggingrH�typingrrryZ	cloudinitrrZcloudinit.cloudrZcloudinit.configrZcloudinit.config.schemarZcloudinit.settingsr	Z	getLoggerrr.rGr�__annotations__rr2rrrrXrKrNrQrOrrDrrrr�<module>s4
�#4d1<
�
(