name : cc_lxd.cpython-39.pyc
a

'�Dg�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�;/usr/lib/python3.9/site-packages/cloudinit/config/cc_lxd.py�supplemental_schema_validation!s:
��
��
����rcCs�d}gd�}|D]2}|�|�r|�d|�dd�t||�fg�qzt�|�WnRtjy�|ddkrp�t�d�t�gd	��d
d�|D�}t�|�Yn0dS)
z�Set up lxd if init config is given.

    :param init_cfg: dict of lxd init configuration options to provide
        to `lxd init --auto`
    )�network_addressZnetwork_port�storage_backendZstorage_create_deviceZstorage_create_loop�storage_poolZtrust_password)r
�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�defaultr#zlvm.use_thinpool=falsecSsg|]}|�d�s|�qS)z--storage-backend)�
startswith)�.0�xrrr�
<listcomp>q�z#handle_init_cfg.<locals>.<listcomp>N)�get�extend�replacerr�ProcessExecutionError�LOG�info)rZ	init_keys�cmd�kZnew_cmdrrr�handle_init_cfgDs$

&��r4)�name�cfg�cloud�args�returnc
Cs�|�d�}|st�d|�dSt|t�s>tdt|�j�d���t�	|�|�di�}|�dd�}|�di�}t
|||�t�d�s�zt�gd	��Wn4tj
y�}ztd
|�|�WYd}~n
d}~00t||�}	t|	��r(z|j�|	�Wn8tj
�y&}
zt�d|	|
�WYd}
~
dSd}
~
00t�gd��|�rRtjgd
�|d�dS|�r`t|�d}|�r�|�dt�}tj�d��rt�|��rt|�}
z<t�d|�d�dd�|
��D��d}tjdg|d�Wn$t�y�t�td|�Yn0t�d�t�d�t�gd��nht|�\}}t |t!|�t!|�t!|�d�|�rft�dd�|��t"|�|�r�t�dd�|��t"|�n|�r�td|��dS)Nr
z8Skipping module named %s, not present or disabled by cfgz*lxd config must be a dictionary. found a 'r
r Zpreseed�Zbridge)Zsnap�installr
z#Failed to install lxd from snap: %sz!failed to install packages %s: %s)r
Z	waitreadyz
--timeout=300)r
r z	--preseed)�datazdebconf-communicater5z/etc/default/lxd-bridgezSetting lxd debconf via %s�
cSsg|]\}}d||f�qS)z	set %s %sr)r(r3�vrrrr*�r+zhandle.<locals>.<listcomp>zFailed to run '%s' for lxd withz Running dpkg-reconfigure for lxd)zdpkg-reconfigurer
z--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,r0�debugrrrrrrZwait_for_snap_seededrr�whichr/�RuntimeError�get_required_packages�lenZdistroZinstall_packages�warningr4�_DEFAULT_NETWORK_NAME�os�path�exists�bridge_to_debconfr�items�	ExceptionZlogexcZdel_file�
bridge_to_cmd�maybe_cleanup_default�bool�_lxc)r5r6r7r8Zlxd_cfgrrr�e�packages�excZ
dconf_commr?�debconfr<�
cmd_create�
cmd_attachrrr�handlexs�
�
��

��

�����


�
�
�rZcCs`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-bridger:zlxd/bridge-name�existing�truezlxd/use-existing-bridger5�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,rE)rrWrrrrM�sJ

����rMcCs�|�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)#Nr[r\)NNr5�networkzattach-profiler&�eth0r]r_rir%r`razipv4.address=%s/%srdr^z
ipv4.nat=truerbrcz%s-%szipv4.dhcp.ranges=%szipv4.address=nonererfzipv6.address=%s/%srgz
ipv6.nat=truezipv6.address=nonerhz
dns.domain=%s�mtu���zbridge.mtu=)r,rIrEr)rZbridge_namerXrYZ
dhcp_rangerlrrrrPsT
��
��
��

rPcCsBdtj�dd�tj�dd�d�}tjdgt|�dg|d	�dS)
N�C�HOMEz/root�USER�root)�LC_ALLrorpr$z
--force-local)Z
update_env)rJ�environr,r�list)r2�envrrrrSJs
�rSr&rkc

Cs&|tks|sdSd}d}|r�d}z$tdd||g�t�||||�WnDtjy�}	z*|	jdkrd|	�t�||||�WYd}	~	n*d}	~	00d}tdd	|g�t�|||�|�r"d
}z&tddd
||g�t�||||�WnFtj�y }	z*|	jdkr�|	�t�||||�WYd}	~	n
d}	~	00dS)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' %srjzdetach-profile�zDeletion of lxd network '%s' %s�deletez+Removal of device '%s' from profile '%s' %s�profileZdevice�remove)rIrSr0rCrr/Z	exit_code)
r?r@r%rArxZnic_nameZfail_assume_enoentZ	succeeded�msgrTrrrrQSs2

&
rQ)rrr9c
Cs�g}g}i}d|vr"|�|d�|rbd|vrbzt�|�}Wn$tjttfy`t�d�Yn0|�dg�D]}|�d�rn|�|d�qnd|vr�t	�
d�s�|�d�d|vr�t	�
d�s�|�d	�d
|vr�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�	TypeErrorrr0rHr,rrD)rrrUZstorage_driversZpreseed_cfgrrrrrF{s,�




rF)r&rk)#�__doc__ZloggingrJ�typingrrr{Z	cloudinitrrZcloudinit.cloudrZcloudinit.configrZcloudinit.config.schemarZcloudinit.settingsr	Z	getLoggerrr0rIr�__annotations__rr4rrtrZrMrPrSrQrrFrrrr�<module>s2
�#4e1<
�
(

© 2025 Cubjrnet7