name : cc_wireguard.cpython-39.pyc
a

'�Dg��@s
UdZddlZddlZddlmZmZddlmZddlm	Z	ddl
mZddlm
Z
dd	ge
d
gd�Zeed<e�e�Zegd
��ZdZdZdZed�dd�Zed�dd�Zeed�dd�Zed�dd�Zed�dd�Zed�dd �Zd!d"�Z e!e	eedd#�d$d%�Z"dS)&Z	Wireguard�N)�subp�util)�Cloud)�Config)�
MetaSchema)�PER_INSTANCEZcc_wireguardZubuntu�	wireguard)�idZdistrosZ	frequencyZactivate_by_schema_keys�meta)�name�config_path�contenti��
)��)�wg_intcCs�g}t�t|����}|r8d�t|��}|�d|���t|���D]@\}}|dksd|dksd|dkrDt|t	�sD|�d|�d|���qD|r�t
dt�t�|�����d	S)
aRValidate user-provided wg:interfaces option values.

    This function supplements flexible jsonschema validation with specific
    value checks to aid in triage of invalid user-provided configuration.

    @param wg_int: Dict of configuration value under 'wg:interfaces'.

    @raises: ValueError describing invalid values provided.
    z, z%Missing required wg:interfaces keys: rrr
z$Expected a string for wg:interfaces:�. Found z*Invalid wireguard interface configuration:N)�REQUIRED_WG_INT_KEYS�
difference�set�keys�join�sorted�append�items�
isinstance�str�
ValueError�NL)r�errors�missingr�key�value�r#�A/usr/lib/python3.9/site-packages/cloudinit/config/cc_wireguard.py�supplemental_schema_validations

��r%c
Cs�t�d|d�z,t�d|d�tj|d|dtd�WnFty�}z.td|d�dt�t|����|�WYd	}~n
d	}~00d	S)
z�Writing user-provided configuration into Wireguard
    interface configuration file.

    @param wg_int: Dict of configuration value under 'wg:interfaces'.

    @raises: RuntimeError for issues writing of configuration file.
    z"Configuring Wireguard interface %srz#Writing wireguard config to file %srr
)�modez-Failure writing Wireguard configuration file �:N)	�LOG�debugrZ
write_file�WG_CONFIG_FILE_MODE�	Exception�RuntimeErrorrr)r�er#r#r$�write_config;s$�
�����r.)r�cloudc
Cs�zTt�d|d�|j�dd|d���t�d|d�|j�dd|d���Wn>tjy�}z$tdt�t|����|�WYd}~n
d}~00dS)	z�Enable and start Wireguard interface

    @param wg_int: Dict of configuration value under 'wg:interfaces'.

    @raises: RuntimeError for issues enabling WG interface.
    zEnabling wg-quick@%s at bootr�enablez	wg-quick@z!Bringing up interface wg-quick@%sZrestartz0Failed enabling/starting Wireguard interface(s):N)	r(r)�distroZmanage_servicer�ProcessExecutionErrorr,rr)rr/r-r#r#r$�	enable_wgPs��r3)�wg_readinessprobescCsZg}d}|D],}t|t�s|�d|�d|���|d7}q|rVtdt�t�|�����dS)z�Basic validation of user-provided probes

    @param wg_readinessprobes: List of readinessprobe probe(s).

    @raises: ValueError of wrong datatype provided for probes.
    rz(Expected a string for readinessprobe at r�z Invalid readinessProbe commands:N)rrrrrr)r4r�pos�cr#r#r$�!readinessprobe_command_validationbs
�
�r8cCs�g}|D]d}z$t�dt|��tj|ddd�Wqtjyj}z |�|�d|���WYd}~qd}~00q|r�tdt�t�|�����dS)z�Execute provided readiness probe(s)

    @param wg_readinessprobes: List of readinessprobe probe(s).

    @raises: ProcessExecutionError for issues during execution of probes.
    zRunning readinessprobe: '%s'T�Zcapture�shellz: Nz&Failed running readinessprobe command:)	r(r)rrr2rr,rr)r4rr7r-r#r#r$�readinessprobexs,�r;)r/cCs�dg}t�d�rdSt��tkr*|�d�z|j��Wn tyXt�	t
d��Yn0z|j�|�Wn ty�t�	t
d��Yn0dS)z�Install wireguard packages and tools

    @param cloud: Cloud object

    @raises: Exception for issues during package
    installation.
    zwireguard-toolsZwgNrzPackage update failedz!Failed to install wireguard-tools)r�whichrZkernel_version�MIN_KERNEL_VERSIONrr1Zupdate_package_sourcesr+�logexcr(Zinstall_packages)r/Zpackagesr#r#r$� maybe_install_wireguard_packages�s	

r?c
Cs�z@tjdddd�}t�d|j���s>t�d�tjdddd�WnBtjy�}z(t�	tdt
�t|�����WYd}~n
d}~00dS)	zYLoad wireguard kernel module

    @raises: ProcessExecutionError for issues modprobe
    ZlsmodTr9rzLoading wireguard kernel modulezmodprobe wireguardz Could not load wireguard module:N)r�re�search�stdout�stripr(r)r2rr>rr)�outr-r#r#r$�load_wireguard_kernel_module�s
rE)r�cfgr/�args�returncCs�d}d|vr t�d�|d}nt�d|�dSt|�t�|dD]}t|�t|�t||�qFd|vr�|ddur�|d}t|�t|�n
t�d�dS)Nrz!Found Wireguard section in configz<Skipping module named %s, no 'wireguard' configuration foundZ
interfacesr;z+Skipping readinessprobe - no checks defined)	r(r)r?rEr%r.r3r8r;)rrFr/rGZ
wg_sectionrr4r#r#r$�handle�s.

��
�
rI)#�__doc__Zloggingr@Z	cloudinitrrZcloudinit.cloudrZcloudinit.configrZcloudinit.config.schemarZcloudinit.settingsrr
�__annotations__Z	getLogger�__name__r(�	frozensetrr*rr=�dictr%r.r3�listr8r;r?rErrIr#r#r#r$�<module>s2�


© 2025 Cubjrnet7