Ë
    x[h©  ã            
       ó(  — U d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	ged
gdœZeed<    ej                   e«      Z eg d¢«      ZdZdZdZdefd„Zdefd„Zdedefd„Zdefd„Zdefd„Zdefd„Zd„ Z de!de	dededdf
d„Z"y) Ú	Wireguardé    N)ÚsubpÚutil)ÚCloud)ÚConfig)Ú
MetaSchema)ÚPER_INSTANCEÚcc_wireguardÚubuntuÚ	wireguard)ÚidÚdistrosÚ	frequencyÚactivate_by_schema_keysÚmeta)ÚnameÚconfig_pathÚcontenti€  ú
)é   é   Úwg_intc                 óÄ  — g }t         j                  t        | j                  «       «      «      }|r.dj	                  t        |«      «      }|j                  d|› �«       t        | j                  «       «      D ]=  \  }}|dk(  s|dk(  s|dk(  sŒt        |t        «      rŒ'|j                  d|› d|› �«       Œ? |r't        dt        › t        j	                  |«      › �«      ‚y	)
aR  Validate 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: r   r   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Úvalues         ú?/usr/lib/python3/dist-packages/cloudinit/config/cc_wireguard.pyÚsupplemental_schema_validationr,      sÔ   € ð €FÜ"×-Ñ-¬c°&·+±+³-Ó.@ÓA€GÙØ�y‰yœ ›Ó)ˆØ�‰Ð=¸d¸VÐDÔEä˜VŸ\™\›^Ó,ò ‰
ˆˆUØ�&Š=˜C =Ò0°C¸9Ó4DÜ˜e¤SÕ)Ø—‘Ø:¸3¸%¸xÈÀwÐOõðñ ÜØ8¼¸¼R¿W¹WÀV»_Ð<MÐNó
ð 	
ð ó    c           
      ó  — t         j                  d| d   «       	 t         j                  d| d   «       t        j                  | d   | d   t        ¬«       y	# t
        $ r)}t        d| d   › dt        › t        |«      › �«      |‚d	}~ww xY w)
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 %sr   z#Writing wireguard config to file %sr   r   )Úmodez-Failure writing Wireguard configuration file ú:N)	ÚLOGÚdebugr   Ú
write_fileÚWG_CONFIG_FILE_MODEÚ	ExceptionÚRuntimeErrorr&   r$   )r   Úes     r+   Úwrite_configr8   ;   s•   € ô ‡I�IÐ2°F¸6±NÔCð	Ü�	‰	Ð7¸ÀÑ9NÔOÜ�‰Ø�=Ñ! 6¨)Ñ#4Ô;Nö	
øô ò ÜðØ�}Ñ%Ð& a¬ t¬C°«F¨8ð5ó
ð ð	ûðús   ›;A Á	B	Á $BÂB	Úcloudc                 ód  — 	 t         j                  d| d   «       |j                  j                  dd| d   › �«       t         j                  d| d   «       |j                  j                  dd| d   › �«       y# t        j
                  $ r#}t        dt        › t        |«      › �«      |‚d}~ww xY w)	z­Enable and start Wireguard interface

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

    @raises: RuntimeError for issues enabling WG interface.
    zEnabling wg-quick@%s at bootr   Úenablez	wg-quick@z!Bringing up interface wg-quick@%sÚrestartz0Failed enabling/starting Wireguard interface(s):N)	r1   r2   ÚdistroÚmanage_servicer   ÚProcessExecutionErrorr6   r&   r$   )r   r9   r7   s      r+   Ú	enable_wgr@   P   s¥   € ðÜ�	‰	Ð0°&¸±.ÔAØ�‰×#Ñ# H°	¸&À¹.Ð9IÐ.JÔKÜ�	‰	Ð5°v¸f±~ÔFØ�‰×#Ñ# I°¸6À&¹>Ð:JÐ/KÕLøÜ×%Ñ%ò ÜØ>¼r¸dÄ3ÀqÃ6À(ÐKó
àð	ûðús   ‚A6A9 Á9B/ÂB*Â*B/Úwg_readinessprobesc                 óÆ   — g }d}| D ]/  }t        |t        «      rŒ|j                  d|› d|› �«       |dz  }Œ1 |r't        dt        › t        j                  |«      › �«      ‚y)z®Basic validation of user-provided probes

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

    @raises: ValueError of wrong datatype provided for probes.
    r   z(Expected a string for readinessprobe at r   é   z Invalid readinessProbe commands:N)r#   r$   r!   r%   r&   r   )rA   r'   ÚposÚcs       r+   Ú!readinessprobe_command_validationrF   b   s|   € ð €FØ
€CØò ˆÜ˜!œSÕ!Ø�M‰MØ:¸3¸%¸xÈÀsÐKôð �1‰H‰Cðñ ÜØ.¬r¨d´2·7±7¸6³?Ð2CÐDó
ð 	
ð r-   c                 óD  — g }| D ]:  }	 t         j                  dt        |«      «       t        j                  |dd¬«       Œ< |r't        dt        › t        j                  |«      › �«      ‚y# t        j                  $ r }|j                  |› d|› �«       Y d}~Œ•d}~ww xY w)z´Execute provided readiness probe(s)

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

    @raises: ProcessExecutionError for issues during execution of probes.
    zRunning readinessprobe: '%s'T©ÚcaptureÚshellz: Nz&Failed running readinessprobe command:)	r1   r2   r$   r   r?   r!   r6   r&   r   )rA   r'   rE   r7   s       r+   ÚreadinessproberK   x   sŸ   € ð €FØò 'ˆð	'Ü�I‰IÐ4´c¸!³fÔ=Ü�I‰I�a ¨TÖ2ð'ñ ÜØ4´R°D¼¿¹À»Ð8IÐJó
ð 	
ð øô ×)Ñ)ò 	'Ø�M‰M˜Q˜C˜r ! ˜+×&Ñ&ûð	'ús   ‰7A,Á,BÁ?BÂBc                 óœ  — dg}t        j                  d«      ryt        j                  «       t        k  r|j                  d«       	 | j                  j                  «        	 | j                  j                  |«       y# t        $ r t        j                  t        d«       ‚ w xY w# t        $ r t        j                  t        d«       ‚ w xY w)z�Install wireguard packages and tools

    @param cloud: Cloud object

    @raises: Exception for issues during package
    installation.
    zwireguard-toolsÚwgNr   zPackage update failedz!Failed to install wireguard-tools)r   Úwhichr   Úkernel_versionÚMIN_KERNEL_VERSIONr!   r=   Úupdate_package_sourcesr5   Úlogexcr1   Úinstall_packages)r9   Úpackagess     r+   Ú maybe_install_wireguard_packagesrU   �   s¬   € ð "Ð"€Hä‡z�z�$ÔØô ×ÑÓÔ1Ò1Ø�‰˜Ô$ðØ�‰×+Ñ+Ô-ðØ�‰×%Ñ% hÕ/øô	 ò Ü�‰”CÐ0Ô1Øðûô
 ò Ü�‰”CÐ<Ô=Øðús   ÁA> Á"B& Á>%B#Â&%Cc            	      ó~  — 	 t        j                   ddd¬«      } t        j                  d| j                  j	                  «       «      s.t
        j                  d«       t        j                   ddd¬«       yy# t         j                  $ r2}t        j                  t
        dt        › t        |«      › �«       ‚ d}~ww xY w)	zYLoad wireguard kernel module

    @raises: ProcessExecutionError for issues modprobe
    ÚlsmodTrH   r   zLoading wireguard kernel modulezmodprobe wireguardz Could not load wireguard module:N)r   ÚreÚsearchÚstdoutÚstripr1   r2   r?   r   rR   r&   r$   )Úoutr7   s     r+   Úload_wireguard_kernel_moduler]   «   s�   € ð
Ü�i‰i˜¨°TÔ:ˆÜ�y‰y˜ c§j¡j×&6Ñ&6Ó&8Ô9Ü�I‰IÐ7Ô8Ü�I‰IÐ*°DÀÖEð :øô ×%Ñ%ò Ü�‰”CÐ;¼B¸4ÄÀAÃ¸xÐHÔIØûðús   ‚A3A7 Á7B<Â
-B7Â7B<r   ÚcfgÚargsÚreturnc                 ój  — d }d|v rt         j                  d«       |d   }nt         j                  d| «       y t        |«       t        «        |d   D ]$  }t	        |«       t        |«       t        ||«       Œ& d|v r!|d   �|d   }t        |«       t        |«       y t         j                  d«       y )Nr   z!Found Wireguard section in configz<Skipping module named %s, no 'wireguard' configuration foundÚ
interfacesrK   z+Skipping readinessprobe - no checks defined)	r1   r2   rU   r]   r,   r8   r@   rF   rK   )r   r^   r9   r_   Ú
wg_sectionr   rA   s          r+   Úhandlerd   º   sÀ   € Ø€Jà�cÑÜ�	‰	Ð5Ô6Ø˜Ñ%‰
ä�	‰	ØJØô	
ð 	ô % UÔ+Ü Ô"à˜\Ñ*ò !ˆä& vÔ.ô 	�VÔô 	�&˜%Õ ð!ð 	˜JÑ&ØÐ'Ñ(Ð4à'Ð(8Ñ9ÐÜ)Ð*<Ô=ÜÐ)Õ*ä�	‰	Ð?Õ@r-   )#Ú__doc__ÚloggingrX   Ú	cloudinitr   r   Úcloudinit.cloudr   Úcloudinit.configr   Úcloudinit.config.schemar   Úcloudinit.settingsr	   r   Ú__annotations__Ú	getLoggerÚ__name__r1   Ú	frozensetr   r4   r&   rP   Údictr,   r8   r@   ÚlistrF   rK   rU   r]   r$   rd   © r-   r+   ú<module>rs      sò   ðò ã Û 	ç  Ý !Ý #Ý .Ý +ð ØˆzØØ +˜}ñ	€€jó ð €g×Ñ˜Ó!€á Ò!CÓDÐ ØÐ Ø	€ØÐ ð
¨4ó 
ð:˜ó ð*�dð  5ó ð$
¸$ó 
ð,
 tó 
ð*¨Eó ò<ð$A�ð $A˜6ð $A¨%ð $A°tð $AÀô $Ar-   