+
    ˜qgjR6  ã                   ó  a € R t 0 t R t^ RIt^ RIt^ RIHtHt ^ RIt^ RIH	t	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ RIHt ]P&                  ! ]4      tRtR	R
RR.R]RR./t] ^ k R tR tR R ltR tR tR tRR ltR R ltR# )z>LXD: configure lxd with ``lxd init`` and optionally lxd-bridgeN)ÚListÚTuple)ÚsubpÚutil)ÚCloud)ÚConfig)Ú
MetaSchema)ÚPER_INSTANCEÚlxdbr0ÚidÚcc_lxdÚdistrosÚubuntuÚ	frequencyÚactivate_by_schema_keysÚlxdc                óx  € . p\        V \        4      '       g)   VP                  R\        V 4      P                   R24       \        V\        4      '       g)   VP                  R\        V4      P                   R24       \        V\
        4      '       g)   VP                  R\        V4      P                   R24       V'       dT   V '       g	   V'       dD   V '       d   R.M. pYA'       d   R.M. ,          pVP                  RRP                  V4       24       V'       d   \        R	P                  V4      4      hR
# )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 'zlxd.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           
     ó0  € R
p. ROpV FU  pV P                  V4      '       g   K  VP                  RVP                  RR4      : R\        W,          4      : 2.4       KW  	   \        P                  ! V4       R	#   \        P
                   d†    T R,          R8w  d   h \        P                  R4       \        P                  ! . RO4       T Uu. uF  qDP                  R4      '       d   K  TNK  	  Mu upi pp\        P                  ! T4        R	# i ; i)z�Set up lxd if init config is given.

:param init_cfg: dict of lxd init configuration options to provide
    to `lxd init --auto`
Ústorage_backendz--Ú_Ú-Ú=ÚlvmzqCloud-init doesn't use thinpool by default on Ubuntu due to LP #1982780. This behavior will change in the future.z--storage-backendN)Únetwork_addressÚnetwork_portr%   Ústorage_create_deviceÚstorage_create_loopÚstorage_poolÚtrust_password)r   Úinitz--auto)ÚlxcÚstorageÚcreateÚdefaultr)   zlvm.use_thinpool=false)	ÚgetÚextendÚreplacer   r   ÚProcessExecutionErrorÚLOGÚinfoÚ
startswith)r   Ú	init_keysÚcmdÚkÚxÚnew_cmds   &     r!   Úhandle_init_cfgrA   D   sÛ   € ð"€Iò $€CÛˆØ�<‰<˜�?Œ?Ø�JŠJ Q§Y¡Y¨s°CÖ%8¼#¸h½kÕ:JÐKÐLÖMñ ðÜ�	Š	�#ŽøÜ×%Ñ%ô ØÐ%Õ&¨%Ô/ØÜ�‰ðDô	
ô 	�	Š	òô		
ñ "ÓK™c˜¯©Ð6I×)J—1�1šcùÒKˆÐKô 	�	Š	�'×ð3ús%   Á#A; Á;ADÃC4Ã-C4Ã3DÄDc          
      óL   € V ^8„  d   QhR\         R\        R\        R\        RR/# )é   ÚnameÚcfgÚcloudÚargsÚreturnN)r   r   r   Úlist)Úformats   "r!   Ú__annotate__rK   x   s6   € ÷ e
ñ e
”ð e
œ6ð e
¬%ð e
´tð e
Àñ e
r#   c           
      óL  € VP                  R 4      pV'       g   \        P                  RV 4       R# \        V\        4      '       g#   \        R\        V4      P                   R24      h\        P                  ! V4       VP                  R/ 4      pVP                  RR4      pVP                  R/ 4      p\        WWV4        \        P                  ! . RO4       \        YV4      p	\        T	4      '       d    TP                   P#                  T	4       \        P                  ! . RO4       T'       d   \        P                  ! . ROTR7       R# T'       d   \'        T4       RpT'       EdÆ   TP                  R\(        4      p\*        P,                  P/                  R4      '       dß   \        P0                  ! T4      '       dÃ   \3        T4      p \        P                  RT4       RP5                  TP7                  4        UUu. uF  w  rïRT: RT: 2NK  	  upp4      R,           p\        P                  ! R.TR7       \        P<                  ! R4       \        P                  R4       \        P                  ! . RO4       R# \?        T4      w  pp\A        T\C        T4      \C        T4      \C        T4      R7       T'       d1   \        P                  RRP5                  T4      4       \E        T4       T'       d3   \        P                  RRP5                  T4      4       \E        T4       R# R# T'       d   \        RT,           4      hR#   \        P                   dN     \        P                  ! . RO4        EL¤  \        P                   d   p\        R	T,          4      ThRp?ii ; ii ; i  \        P                   d"   p
\        P%                  R
Yš4        Rp
?
R# Rp
?
ii ; iu uppi   \8         d'    \        P:                  ! \        RT,          4        ELái ; i)r   z8Skipping module named %s, not present or disabled by cfgNz*lxd config must be a dictionary. found a 'r   r0   ÚpreseedÚ Úbridgez#Failed to install lxd from snap: %sz!failed to install packages %s: %s)Údatazdebconf-communicaterD   z/etc/default/lxd-bridgezSetting lxd debconf via %sÚ
zset Ú zFailed to run '%s' for lxd withz Running dpkg-reconfigure for lxd)Únet_nameÚdid_initr3   ÚattachzCreating lxd bridge: %sz!Setting up default lxd bridge: %sz*Unable to configure lxd bridge without %s.)ÚsnaprI   r   )rV   Úinstallr   )r   Ú	waitreadyz--timeout=300)r   r0   z	--preseed)zdpkg-reconfigurer   z--frontend=noninteractive)#r5   r9   Údebugr   r   r   r   r   r   Úwait_for_snap_seededr"   r   r8   ÚRuntimeErrorÚget_required_packagesÚlenÚdistroÚinstall_packagesÚwarningrA   Ú_DEFAULT_NETWORK_NAMEÚosÚpathÚexistsÚwhichÚbridge_to_debconfr   ÚitemsÚ	ExceptionÚlogexcÚdel_fileÚbridge_to_cmdÚmaybe_cleanup_defaultÚboolÚ_lxc)rD   rE   rF   rG   Úlxd_cfgr   r   r   ÚeÚpackagesÚexcÚ
dconf_commrS   Údebconfr>   ÚvrP   Ú
cmd_createÚ
cmd_attachs   &&&&               r!   Úhandlerx   x   sE  € à�g‰g�e‹n€GßÜ�	‰	ØFÈô	
ñ 	Ü�gœt×$Ò$ÜðÜ�g“×'Ñ'Ð(¨ð+ó
ð 	
ô
 	×Ò˜eÔ$à�{‰{˜6 2Ó&€HØ—+‘+˜i¨Ó,€KØ—‘˜X rÓ*€JÜ" 8¸ÔEð	Ü�	Š	Ò)Ô*ô % XÓ;€HÜ
ˆ8‡}‚}ð	Ø�L‰L×)Ñ)¨(Ô3ô
 	‡I‚IÒ3Ô4ßÜ�	Š	Ò.°[ÕAÙçÜ˜Ô!ð '€Jß€zØ—>‘> &Ô*?Ó@ˆÜ�7‰7�>‰>Ð3×4Ò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ó
ð 	
ñ 
øôW ×%Ñ%ô ð	Ü�IŠIÒ0×1øÜ×)Ñ)ô 	ÜØ5¸Õ9óàðûð	úð	ûô ×)Ñ)ô 	Ü�K‰KÐ;¸XÔKÝûð	üó8 Køô
 ô Ü—’ÜÐ:¸ZÕG÷ðúsf   ÃM Ã8N3 Ç4O2 ÈO,
È(O2 ÍN0Í$M?Í?N,ÎN'Î'N,Î,N0Î3O)ÏO$Ï$O)Ï,O2 Ï2-P#Ð"P#c                 ó¼  € / pV P                  R 4      R8X  d   RVR&   RVR&   V# V P                  R 4      R8X  d!   RVR&   RVR&   V P                  R	4      VR&   V# V P                  R 4      R
8X  EdL   RVR&   V P                  R	4      '       d   V P                  R	4      VR&   V P                  R4      '       d   RVR&   V P                  R4      VR&   V P                  R4      VR&   V P                  R4      VR&   V P                  R4      VR&   V P                  R4      VR&   V P                  RR4      VR&   V P                  R4      '       dC   RVR&   V P                  R4      VR&   V P                  R4      VR&   V P                  RR4      VR&   V P                  R4      '       d   V P                  R4      VR &   V# \        R!V P                  R 4      ,          4      h)"ÚmodeÚnoneÚfalsezlxd/setup-bridgerN   zlxd/bridge-nameÚexistingÚtruezlxd/use-existing-bridgerD   ÚnewÚipv4_addresszlxd/bridge-ipv4zlxd/bridge-ipv4-addressÚipv4_netmaskzlxd/bridge-ipv4-netmaskÚipv4_dhcp_firstzlxd/bridge-ipv4-dhcp-firstÚipv4_dhcp_lastzlxd/bridge-ipv4-dhcp-lastÚipv4_dhcp_leaseszlxd/bridge-ipv4-dhcp-leasesÚipv4_natzlxd/bridge-ipv4-natÚipv6_addresszlxd/bridge-ipv6zlxd/bridge-ipv6-addressÚipv6_netmaskzlxd/bridge-ipv6-netmaskÚipv6_natzlxd/bridge-ipv6-natÚdomainzlxd/bridge-domainúinvalid bridge mode "%s")r5   r[   )r   rt   s   & r!   rf   rf   à   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                 óL  € V P                  R 4      R8X  d   R"# V P                  R\        4      p. pRRVRR.pV P                  R 4      R8X  d   RV3# V P                  R 4      R	8w  d"   \        R
V P                  R 4      ,          4      hRRV.pV P                  R4      '       då   V P                  R4      '       dÎ   VP                  RV P                  R4      : RV P                  R4      : 24       V P                  RR4      R8X  d   VP                  R4       V P                  R4      '       dW   V P                  R4      '       d@   V P                  R4      : RV P                  R4      : 2pVP                  RV,          4       MVP                  R4       V P                  R4      '       dw   V P                  R4      '       d`   VP                  RV P                  R4      : RV P                  R4      : 24       V P                  R4      R8X  d   VP                  R4       MVP                  R4       V P                  R4      '       d(   VP                  RV P                  R4      ,          4       V P                  R R#4      pVR#8w  d   VP                  R!V 24       W#3# )$rz   r{   NrD   Únetworkzattach-profiler4   Úeth0r}   r   rŠ   r3   r€   r�   zipv4.address=Ú/r…   r~   zipv4.nat=truer‚   rƒ   r'   zipv4.dhcp.ranges=%szipv4.address=noner†   r‡   zipv6.address=rˆ   zipv6.nat=truezipv6.address=noner‰   zdns.domain=%sÚmtuzbridge.mtu=)NNéÿÿÿÿ)r5   ra   r[   r   )r   Úbridge_namerv   rw   Ú
dhcp_ranger�   s   &     r!   rk   rk     sG  € Ø‡~�~�fÓ Ô'ØÐà—.‘. Ô)>Ó?€KØ€JØÐ-¨{¸IÀvÐN€Jà‡~�~�fÓ Ô+Ø�ZÐÐà‡~�~�fÓ Ô&ÜÐ5¸
¿¹ÀvÓ8NÕNÓOÐOà˜X {Ð3€Jà‡~�~�n×%Ò%¨*¯.©.¸×*HÒ*HØ×Òà�~‰~˜nÖ-¨z¯~©~¸nÕ/MðOô	
ð
 �>‰>˜* fÓ-°Ô7Ø×Ñ˜oÔ.à�>‰>Ð+×,Ò,°·±Ø÷2
ò 2
ð —‘Ð0Ö1Ø—‘Ð/Õ0ðˆJð ×ÑÐ3°jÕ@ÔAøà×ÑÐ-Ô.à‡~�~�n×%Ò%¨*¯.©.¸×*HÒ*HØ×Òà�~‰~˜nÖ-¨z¯~©~¸nÕ/MðOô	
ð
 �>‰>˜*Ó%¨Ô/Ø×Ñ˜oÔ.øð 	×ÑÐ-Ô.à‡~�~�h×ÒØ×Ñ˜/¨J¯N©N¸8Ó,DÕDÔEð �.‰.˜ Ó
#€CØ
ˆb„yØ×Ñ˜K¨ uÐ-Ô.àÐ!Ð!r#   c           	      óð   € R RR\         P                  P                  RR4      R\         P                  P                  RR4      /p\        P                  ! R.\	        V 4      ,           R.,           VR7       R	# )
ÚLC_ALLÚCÚHOMEz/rootÚUSERÚrootr1   z--force-local)Ú
update_envN)rb   Úenvironr5   r   rI   )r=   Úenvs   & r!   rn   rn   M  sY   € à�#Ø”—
‘
—‘˜v wÓ/Ø”—
‘
—‘˜v vÓ.ð€Cô
 	‡I‚Iˆuˆgœ˜S›	Õ! _Ð$5Õ5À#×Fr#   c                ót  € V \         8w  g	   V'       g   R# RpRpV'       dN   Rp \        RRW.4       \        P                  W€WG4       Rp\        RRV .4       \        P                  W€V4       V'       d+   R	p \        R
RRWE.4       \        P                  W…WG4       R# R#   \        P
                   d4   p	T	P                  ^8w  d   T	h\        P                  Y€YF4        Rp	?	LwRp	?	ii ; i  \        P
                   d5   p	T	P                  ^8w  d   T	h\        P                  Y…YF4        Rp	?	R# Rp	?	ii ; i)zðNewer 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Œ   zdetach-profilezDeletion of lxd network '%s' %sÚdeletez+Removal of device '%s' from profile '%s' %sÚprofileÚdeviceÚremove)ra   rn   r9   rY   r   r8   Ú	exit_code)
rS   rT   r3   rU   rž   Únic_nameÚfail_assume_enoentÚ	succeededÚmsgrp   s
   &&&&&&    r!   rl   rl   V  s  € ð Ô(Ô(·Ùà=ÐØ€IßØ?ˆð
	0Ü�)Ð-¨xÐAÔBÜ�I‰I�c WÔ8ð 4ˆCÜ�)˜X xÐ0Ô1Ü�I‰I�c YÔ/çØ;ˆð	BÜ�)˜X x°ÐCÔDÜ�I‰I�c WÖ8ñ	 øô ×)Ñ)ô 	BØ�{‰{˜aÔØ�Ü�I‰I�c W×AÑAûð	Bûô ×)Ñ)ô 	BØ�{‰{˜aÔØ�Ü�I‰I�c W×AÒAûð	Bús/   ¥$B# Á:%C. Â#C+Â8)C&Ã&C+Ã.D7Ä)D2Ä2D7c                óR   € V ^8„  d   QhR\         R\        R\        \        ,          /# )rC   r   r   rH   )r   r   r   )rJ   s   "r!   rK   rK   ~  s%   € ÷ ñ ¤Dð ´sð ¼tÄC½yñ r#   c                óà  € . p. p/ pRV 9   d   VP                  V R,          4       V'       d   RV9   d    \        P                  ! V4      pVP                  R. 4       F4  pVP                  R4      '       g   K  VP                  VR,          4       K6  	  RV9   d.   \        P                  ! R4      '       g   VP                  R4       RV9   d.   \        P                  ! R4      '       g   VP                  R	4       R
V9   d.   \        P                  ! R4      '       g   VP                  R4       V#   \        P                  \        \
        3 d    \        P                  R4        EL i ; i)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Úzfszzfsutils-linuxr)   ÚlvcreateÚlvm2Úbtrfsz
mkfs.btrfszbtrfs-progs)r   ÚyamlÚ	safe_loadÚ	YAMLErrorÚ	TypeErrorr   r9   r`   r5   r   re   )r   r   rq   Ústorage_driversÚpreseed_cfgr.   s   &&    r!   r\   r\   ~  s"  € à€Hð "$€OØ€KØ˜HÔ$Ø×Ñ˜xÐ(9Õ:Ô;ß�¨+Ô5ð	ÜŸ.š.¨Ó5ˆKð $Ÿ™¨¸Ö<ˆØ×Ñ˜H×%Ô%Ø×"Ñ" <°Õ#9Ö:ñ =ð �Ô¬¯
ª
°5×(9Ò(9Ø�‰Ð(Ô)Ø�Ô¬¯
ª
°:×(>Ò(>Ø�‰˜ÔØ�/Ô!¬$¯*ª*°\×*BÒ*BØ�‰˜Ô&Ø€Oøô —‘¤	¬:Ð6ô 	Ü�K‰Kð1÷ð	ús   ¶D4 Ä45E-Å,E-c                ó@   € V ^8„  d   Qh/ ^ \         9   d
   \        ;R&   # )rC   Úmeta)Ú__conditional_annotations__r   )rJ   s   "r!   rK   rK      s   € × DÑ D÷$ò „jñ ò% Er#   )r4   r�   )!r¶   Ú__doc__Úloggingrb   Útypingr   r   r®   Ú	cloudinitr   r   Úcloudinit.cloudr   Úcloudinit.configr   Úcloudinit.config.schemar   Úcloudinit.settingsr	   Ú	getLoggerr   r9   ra   rµ   r"   rA   rx   rf   rk   rn   rl   r\   rK   )r¶   s   @r!   Ú<module>rÀ      s”   øðö Eã Û 	ß ã ç  Ý !Ý #Ý .Ý +à×Ò˜Ó!€à Ð ð 	ˆ(Ø�ˆzØ�Ø ˜wð	€ó ò ,òF1õhe
òP.òb9"òxGô%B÷Pr#   