+
    iR6                       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.	

 k3''k"++,A/	
 J'/
|R*"<!YY|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)zSet 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<<??JJQYYsC%8#hk:JKLM 		#%% %&%/D	
 					
 "Kc6I)J11c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  rR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
Y4        Rp
?
R# Rp
?
ii ; iu uppi   \8         d'    \        P:                  ! \        RT,          4        ELi ; 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   ggenG		F	
 	gt$$g''(+
 	

 	e${{62&H++i,KXr*J"8E			)* %X;H
8}}	LL))(3
 	II34		.[A! 'Jz>>&*?@77>>344:
 :

 (
3G		6
CII:A--/J/$!Q1-/J   		01= MM34 II89IINO &3:%>"J
!!hJ'J'	 		3SXXj5IJZ 		7*9M Z 	  
8:E
 	
 
W %% 	II01)) 	59		 )) 	KK;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 NO 
	:	-&-"#-3)*%/^^F%;!"H NE 
	5	(&,"#>>&!!)3)?G%&>>.)))/G%&1;1OG-.1;1OG-.4>NN!5G01 4>>> 4G/0 6@^^"6G12 .8^^J-OG)*>>.)))/G%&1;1OG-.1;1OG-.-7^^G.G)* >>(##+5>>(+CG'(
 N 5
v8N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-{IvNJ~~f+Z~~f&5
v8NNOOX{3J~~n%%*..*H*H~~n-z~~n/MO	

 >>*f-7o.>>+,,2
 2
 01/0J 3j@A-.~~n%%*..*H*H~~n-z~~n/MO	

 >>*%/o. 	-.~~h/JNN8,DDE ..
#C
by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    #

vw/

vv.C
 	IIug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                  WWG4       Rp\        RRV .4       \        P                  WV4       V'       d+   R	p \        R
RRWE.4       \        P                  WWG4       R# R#   \        P
                   d4   p	T	P                  ^8w  d   T	h\        P                  YYF4        Rp	?	LwRp	?	ii ; i  \        P
                   d5   p	T	P                  ^8w  d   T	h\        P                  YYF4        Rp	?	R# Rp	?	ii ; i)zNewer 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IIcW8 4C)Xx01IIcY/;	B)XxCDIIcW8	  )) 	B{{aIIcWAA	B )) 	B{{aIIcW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 tCy 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	..5K $<H%%""<#9: = 

5(9(9()

:(>(>/!$**\*B*B&O 	:6 	KK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#   