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

Ӈg�5�
��UdZddlZddlZddlmZmZddlZddlmZm	Z	ddl
mZddlm
Z
ddlmZddlmZej$e�Zd	Zd
dgedgd
�Zeed<d�Zd�Zdede
dededdf
d�Zd�Zd�Zd�Z	dd�Z de!dedeefd�Z"y)z>LXD: configure lxd with ``lxd init`` and optionally lxd-bridge�N)�List�Tuple)�subp�util)�Cloud)�Config)�
MetaSchema)�PER_INSTANCE�lxdbr0�cc_lxd�ubuntu�lxd)�id�distros�	frequency�activate_by_schema_keys�metac��g}t|t�s(|jdt|�j�d��t|t�s(|jdt|�j�d��t|t
�s(|jdt|�j�d��|r8|s|r4|rdgng}||rdgngz
}|jddj
|����|rtd	j
|���y
)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�errors�incompat_cfgs     �9/usr/lib/python3/dist-packages/cloudinit/config/cc_lxd.py�supplemental_schema_validationr$!s��
�F��h��%��
�
���h��(�(�)��
,�	
�
�j�$�'��
�
���j�!�*�*�+�1�
.�	
�
�k�3�'��
�
���k�"�+�+�,�A�
/�	
���J�'/�
�|�R���*���"�<���
�
�
�!�Y�Y�|�4�5�
7�	
������6�*�+�+��c
���d}gd�}|D]H}|j|�s�|jd|jdd��dt||���g��J	t	j|�y#tj
$rt|ddk7r�tjd	�t	jgd
��|D�cgc]}|jd�r�|��ncc}w}}t	j|�YywxYw)
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_address�network_port�storage_backend�storage_create_device�storage_create_loop�storage_pool�trust_password)r�initz--autoz--�_�-�=r)�lvmzqCloud-init doesn't use thinpool by default on Ubuntu due to LP #1982780. This behavior will change in the future.)�lxc�storage�create�defaultr2zlvm.use_thinpool=falsez--storage-backendN)	�get�extend�replacerr�ProcessExecutionError�LOG�info�
startswith)r�	init_keys�cmd�k�x�new_cmds      r#�handle_init_cfgrCDs���"�I�$�C�
�N���<�<��?��J�J�Q�Y�Y�s�C�%8�#�h�q�k�:J�K�L�M�N���	�	�#����%�%���%�&�%�/�����
D�	
�	
�	�	�
�		
�"�K�����6I�)J�1�K��K��K�	
�	�	�'��3�s%�A+�+AC2�7C�C�C2�1C2�name�cfg�cloud�args�returnc
�<�|jd�}|stjd|�yt|t�s"tdt
|�j�d���tj|�|jdi�}|jdd�}|jdi�}t|||�tjd�s	tjgd	��t||�}	t!|	�r	|j"j%|	�tjgd��|rtjgd
�|��y|rt)|�d}|�r�|jdt*�}t,j.j1d�r�tj|�r�t3|�}
	tjd|�dj5|
j7�D��cgc]
\}}d|�d|����c}}�dz}tjdg|��tj<d�tjd�tjgd��yt?|�\}}tA|tC|�tC|�tC|���|r0tjddj5|��tE|�|r1tjddj5|��tE|�yy|rtd|z��y#tj$r}td
|z�|�d}~wwxYw#tj$r!}
tj'd|	|
�Yd}
~
yd}
~
wwxYwcc}}w#t8$r!tj:td|z�Y���wxYw)Nrz8Skipping module named %s, not present or disabled by cfgz*lxd config must be a dictionary. found a 'rr.�preseed��bridge)�snap�installrz#Failed to install lxd from snap: %sz!failed to install packages %s: %s)r�	waitreadyz
--timeout=300)rr.z	--preseed)�datazdebconf-communicaterDz/etc/default/lxd-bridgezSetting lxd debconf via %s�
zset � zFailed to run '%s' for lxd withz Running dpkg-reconfigure for lxd)zdpkg-reconfigurerz--frontend=noninteractive)�net_name�did_initr5�attachzCreating lxd bridge: %sz!Setting up default lxd bridge: %sz*Unable to configure lxd bridge without %s.)#r7r;�debugrrrrrr�wait_for_snap_seededr$r�whichr:�RuntimeError�get_required_packages�len�distro�install_packages�warningrC�_DEFAULT_NETWORK_NAME�os�path�exists�bridge_to_debconfr�items�	Exception�logexc�del_file�
bridge_to_cmd�maybe_cleanup_default�bool�_lxc)rDrErFrG�lxd_cfgrr r�e�packages�exc�
dconf_commrS�debconfr@�vrP�
cmd_create�
cmd_attachs                   r#�handleruxs���g�g�e�n�G���	�	�F��	
�	��g�t�$����g��'�'�(��
+�
�	
�
	���e�$��{�{�6�2�&�H��+�+�i��,�K����X�r�*�J�"�8�Z��E��:�:�e��	��I�I�0�1�
%�X�{�;�H�
�8�}�	��L�L�)�)�(�3�
	�I�I�3�4���	�	�.�[�A�����!�'�J���>�>�&�*?�@��
�7�7�>�>�3�4�����:
�
(�
�3�G�
��	�	�6�
�C��I�I�:A�-�-�/�J�$�!�Q��1�-�J������	�	�0�1��=�
�M�M�3�4�
�I�I�8�9��I�I�N�O�&3�:�%>�"�J�
�!�!��h���J�'��J�'�	
���	�	�3�S�X�X�j�5I�J��Z� ���	�	�7����*�9M���Z� �	�
��8�:�E�
�	
�
��O�)�)�	��5��9���
��	���)�)�	��K�K�;�X�s�K���	��8K��
�
�����:�Z�G��
�sT�L
�:L4�04M1�$M+
�6#M1�
L1�L,�,L1�4M(�M#�#M(�+M1�1&N�Nc�x�i}|jd�dk(rd|d<d|d<|S|jd�dk(r d|d<d|d	<|jd
�|d<|S|jd�dk(�r3d|d<|jd
�r|jd
�|d<|jd�r~d|d
<|jd�|d<|jd�|d<|jd�|d<|jd�|d<|jd�|d<|jdd�|d<|jd�rBd|d<|jd�|d<|jd�|d<|jdd�|d<|jd �r|jd �|d!<|Std"|jd�z��)#N�mode�none�falsezlxd/setup-bridgerKzlxd/bridge-name�existing�truezlxd/use-existing-bridgerD�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-last�ipv4_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")r7rY)rrqs  r#rcrc�s����G��~�~�f���'�&-��"�#�%'��!�"�R�N�O
����	�:�	-�&-��"�#�-3��)�*�%/�^�^�F�%;��!�"�H�N�E
����	�5�	(�&,��"�#��>�>�&�!�)3����)?�G�%�&��>�>�.�)�)/�G�%�&�1;����1O�G�-�.�1;����1O�G�-�.�4>�N�N�!�5�G�0�1�4>�>�>� �4�G�/�0�6@�^�^�"�6�G�1�2�.8�^�^�J��-O�G�)�*��>�>�.�)�)/�G�%�&�1;����1O�G�-�.�1;����1O�G�-�.�-7�^�^��G�.�G�)�*��>�>�(�#�+5�>�>�(�+C�G�'�(�
�N��5�
���v�8N�N�O�Or%c��|jd�dk(ry|jdt�}g}dd|ddg}|jd�d	k(rd|fS|jd�d
k7rtd|jd�z��dd|g}|jd
�r�|jd�r�|jd|jd
��d|jd����|jdd�dk(r|jd�|jd�r\|jd�rK|jd��d|jd���}|jd|z�n|jd�|jd�rl|jd�r[|jd|jd��d|jd����|jd�dk(r#|jd�n|jd�|jd�r#|jd |jd�z�|jd!d"�}|d"k7r|jd#|���||fS)$Nrwrx)NNrD�networkzattach-profiler6�eth0rzr|r�r5r}r~z
ipv4.address=�/r�r{z
ipv4.nat=truerr�r0zipv4.dhcp.ranges=%szipv4.address=noner�r�z
ipv6.address=r�z
ipv6.nat=truezipv6.address=noner�z
dns.domain=%s�mtu���zbridge.mtu=)r7r_rYr)r�bridge_namersrt�
dhcp_ranger�s      r#rhrhs-���~�~�f���'���.�.��)>�?�K��J��-�{�I�v�N�J��~�~�f���+��Z����~�~�f���&��5�
���v�8N�N�O�O��X�{�3�J��~�~�n�%�*�.�.��*H�����~�~�n�-�z�~�~�n�/M�
O�	
�
�>�>�*�f�-��7����o�.��>�>�+�,�����2
����0�1����/�0��J�
���3�j�@�A����-�.��~�~�n�%�*�.�.��*H�����~�~�n�-�z�~�~�n�/M�
O�	
�
�>�>�*�%��/����o�.�	���-�.��~�~�h�����/�J�N�N�8�,D�D�E��.�.���
#�C�
�b�y����K��u�-�.��z�!�!r%c���dtjjdd�tjjdd�d�}tjdgt	|�zdgz|�	�y)
N�C�HOMEz/root�USER�root)�LC_ALLr�r�r3z
--force-local)�
update_env)r`�environr7r�list)r?�envs  r#rkrkJsS����
�
���v�w�/��
�
���v�v�.��C�
	�I�I�u�g��S�	�!�_�$5�5�#�Fr%c�J�|tk7s|syd}d}|rQd}	tdd||g�tj||||�d}tdd|g�tj|||�|r,d
}	tddd
||g�tj||||�yy#tj
$r3}	|	jd	k7r|	�tj||||�Yd}	~	�pd}	~	wwxYw#tj
$r3}	|	jd	k7r|	�tj||||�Yd}	~	yd}	~	wwxYw)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' %sr�zdetach-profilezDeletion of lxd network '%s' %s�delete�z+Removal of device '%s' from profile '%s' %s�profile�device�remove)r_rkr;rVrr:�	exit_code)
rSrTr5rUr��nic_name�fail_assume_enoent�	succeeded�msgrms
          r#ririSs-���(�(���=���I�
�?��
	0��)�-�x��A�B��I�I�c�8�W�i�8�4�C��)�X�x�0�1��I�I�c�8�Y�/�
�;��	B��)�X�x��(�C�D��I�I�c�8�W�i�8�	���)�)�	B��{�{�a�����I�I�c�8�W�.@�A�A��	B���)�)�	B��{�{�a�����I�I�c�8�W�.@�A�A��	B�s/�'B�)(C�C�&)C�C�D"�/)D�D"rr c�b�g}g}i}d|vr|j|d�|rd|vr	tj|�}|jdg�D](}|jd�s�|j|d��*d|vr&tjd�s|jd�d|vr&tjd�s|jd	�d
|vr&tjd�s|jd�|S#tjtt
f$rtjd�Y��wxYw)
z&identify required packages for installr)�
storage_poolsz|lxd.preseed string value is not YAML.  Unable to determine required storage driver packages to support storage_pools config.�driver�zfszzfsutils-linuxr2�lvcreate�lvm2�btrfsz
mkfs.btrfszbtrfs-progs)r�yaml�	safe_load�	YAMLError�	TypeErrorrr;r^r7rrX)rr rn�storage_drivers�preseed_cfgr,s      r#rZrZ{s���H�"$�O��K��H�$����x�(9�:�;���+�5�	��.�.��5�K�$�����<�;�����H�%��"�"�<��#9�:�;�
����
�
�5�(9����(�)�����
�
�:�(>�������/�!�$�*�*�\�*B����
�&��O�����	�:�6�	��K�K�1�
�	�s�C8�83D.�-D.)r6r�)#�__doc__�loggingr`�typingrrr��	cloudinitrr�cloudinit.cloudr�cloudinit.configr�cloudinit.config.schemar	�cloudinit.settingsr
�	getLoggerrr;r_r�__annotations__r$rCrr�rurcrhrkrirrZ�r%r#�<module>r�s���E��	��� �!�#�.�+��g����!�� ����z�� %�w�	��j�� ,�F1�hb
��b
�6�b
�%�b
�t�b
��b
�J.�b9"�xG�EK�%B�P�D��s��t�C�y�r%