x[h5 UdZddlZddlZddlmZmZddlZddlmZm Z ddl m Z ddl m Z ddlmZddlmZej$eZd Zd d ged gd Zeed<dZdZdede de deddf dZdZdZdZ ddZ de!dedeefdZ"y)z>LXD: configure lxd with ``lxd init`` and optionally lxd-bridgeN)ListTuple)subputil)Cloud)Config) MetaSchema) PER_INSTANCElxdbr0cc_lxdubuntulxd)iddistros frequencyactivate_by_schema_keysmetacg}t|ts(|jdt|jdt|ts(|jdt|jdt|t s(|jdt|jd|r8|s|r4|rdgng}||rdgngz }|jddj ||rtd j |y ) zValidate 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) isinstancedictappendtype__name__strjoin ValueError)init_cfg bridge_cfg preseed_strerrors incompat_cfgs 9/usr/lib/python3/dist-packages/cloudinit/config/cc_lxd.pysupplemental_schema_validationr$!s  F h % h(() , j$ ' j!**+1 . k3 ' k"++,A / J'/ |R *"<   !YY|45 7 6*++c d}gd}|D]H}|j|s|jd|jdddt||gJ t j|y #tj $rt|ddk7rt jd t jgd |Dcgc]}|jd r|ncc}w}}t j|Yy wxYw) zSet 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_portstorage_backendstorage_create_devicestorage_create_loop storage_pooltrust_password)rinitz--autoz--_-=r)lvmzqCloud-init doesn't use thinpool by default on Ubuntu due to LP #1982780. This behavior will change in the future.)lxcstoragecreatedefaultr2zlvm.use_thinpool=falsez--storage-backendN) getextendreplacerrProcessExecutionErrorLOGinfo startswith)r init_keyscmdkxnew_cmds r#handle_init_cfgrCDs"I $C N <<? JJQYYsC%8#hqk:JKL MN #  % % % &% /   D    "K6I)J1KKK '3s%A++A C27CCC21C2namecfgcloudargsreturnc <|jd}|stjd|yt|ts"t dt |jdtj||jdi}|jdd}|jdi}t|||tjds tjgd t||} t!| r |j"j%| tjgd |rtjgd |y|r t)|d} |r|jdt*} t,j.j1drtj| rt3|} tjd| dj5| j7Dcgc] \}}d|d|c}}dz}tjdg|tj<dtjdtjgdyt?|\}}tA| tC|tC|tC||r0tjddj5|tE||r1tjddj5|tE|yy|rtd| zy#tj$r}td |z|d}~wwxYw#tj$r!} tj'd | | Yd} ~ yd} ~ wwxYwcc}}w#t8$r!tj:td| zYwxYw)Nrz8Skipping module named %s, not present or disabled by cfgz*lxd config must be a dictionary. found a 'rr.preseedbridge)snapinstallrz#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_namedid_initr5attachzCreating lxd bridge: %sz!Setting up default lxd bridge: %sz*Unable to configure lxd bridge without %s.)#r7r;debugrrrrrrwait_for_snap_seededr$rwhichr: RuntimeErrorget_required_packageslendistroinstall_packageswarningrC_DEFAULT_NETWORK_NAMEospathexistsbridge_to_debconfritems Exceptionlogexcdel_file bridge_to_cmdmaybe_cleanup_defaultbool_lxc)rDrErFrGlxd_cfgrr repackagesexc dconf_commrSdebconfr@vrP cmd_create cmd_attachs r#handleruxsggenG  F   gt $g''( +   e${{62&H++i,KXr*J"8ZE ::e   II0 1 %X{;H 8}  LL ) )( 3  II34 .[A!'J>>&*?@ 77>>3 4 : ( 3G  6 CII:A--/J$!Q1-J  01= MM3 4 II8 9 IIN O&3:%> "J !!hJ'J'    3SXXj5IJZ  7*9MZ   8: E   O)) 59  ))  KK;Xs K  8K   :ZG sT L :L404M1$M+ 6#M1 L1L,,L14M(M##M(+M11&NNcxi}|jddk(r d|d<d|d<|S|jddk(r d|d<d|d <|jd |d<|S|jdd k(r3d|d<|jd r|jd |d<|jd r~d|d <|jd |d<|jd|d<|jd|d<|jd|d<|jd|d<|jdd|d<|jdrBd|d<|jd|d<|jd|d<|jdd|d<|jd r|jd |d!<|Std"|jdz)#Nmodenonefalsezlxd/setup-bridgerKzlxd/bridge-nameexistingtruezlxd/use-existing-bridgerDnew ipv4_addresszlxd/bridge-ipv4zlxd/bridge-ipv4-address ipv4_netmaskzlxd/bridge-ipv4-netmaskipv4_dhcp_firstzlxd/bridge-ipv4-dhcp-firstipv4_dhcp_lastzlxd/bridge-ipv4-dhcp-lastipv4_dhcp_leaseszlxd/bridge-ipv4-dhcp-leasesipv4_natzlxd/bridge-ipv4-nat ipv6_addresszlxd/bridge-ipv6zlxd/bridge-ipv6-address ipv6_netmaskzlxd/bridge-ipv6-netmaskipv6_natzlxd/bridge-ipv6-natdomainzlxd/bridge-domaininvalid bridge mode "%s")r7rY)rrqs r#rcrcsG~~f'&-"#%'!"R NO  : -&-"#-3)*%/^^F%;!"H NE  5 (&,"# >>& !)3)?G% & >>. ))/G% &1;1OG- .1;1OG- .4>NN!5G0 14>>> 4G/ 06@^^"6G1 2.8^^J-OG) * >>. ))/G% &1;1OG- .1;1OG- .-7^^G.G) * >>( #+5>>(+CG' ( N5 v8NNOOr%c|jddk(ry|jdt}g}dd|ddg}|jdd k(rd|fS|jdd k7rtd |jdzdd |g}|jd r|jdr|jd|jd d|jd|jdddk(r|jd|jdr\|jdrK|jdd|jd}|jd|zn|jd|jdrl|jdr[|jd|jdd|jd|jddk(r#|jdn|jd|jdr#|jd |jdz|jd!d"}|d"k7r|jd#|||fS)$Nrwrx)NNrDnetworkzattach-profiler6eth0rzr|rr5r}r~z ipv4.address=/rr{z ipv4.nat=truerrr0zipv4.dhcp.ranges=%szipv4.address=nonerrz ipv6.address=rz ipv6.nat=truezipv6.address=nonerz dns.domain=%smtuz bridge.mtu=)r7r_rYr)r bridge_namersrt dhcp_rangers r#rhrhs-~~f'..)>?KJ-{IvNJ~~f+Z~~f&5 v8NNOOX{3J~~n%*..*H~~n-z~~n/M O >>*f - 7   o . >>+ , 2 01/0J   3j@ A-.~~n%*..*H~~n-z~~n/M O >>* % /   o . -.~~h/JNN8,DDE .. #C byKu-. z !!r%cdtjjddtjjddd}tjdgt |zdgz| y) NCHOMEz/rootUSERroot)LC_ALLrrr3z --force-local) update_env)r`environr7rlist)r?envs r#rkrkJsS vw/ vv. C  IIugS !_$55#Fr%cJ|tk7s|syd}d}|rQd} tdd||gtj||||d}tdd|gtj||||r,d } td d d ||gtj||||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' %srzdetach-profilezDeletion of lxd network '%s' %sdeletez+Removal of device '%s' from profile '%s' %sprofiledeviceremove)r_rkr;rVrr: exit_code) rSrTr5rUrnic_namefail_assume_enoent succeededmsgrms r#ririSs-((=I ? 0 )-xA B IIc8Wi 8 4C )Xx0 1 IIc8Y / ; B )Xx(C D IIc8Wi 8 )) B{{a IIc8W.@ A A B)) B{{a IIc8W.@ A A Bs/'B)(CC&)CCD"/)DD"rr cbg}g}i}d|vr|j|d|rd|vr tj|}|jdgD](}|jds|j|d*d|vr&tjds|jdd|vr&tjds|jd d |vr&tjd s|jd |S#tjtt f$rt jdYwxYw) 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.driverzfszzfsutils-linuxr2lvcreatelvm2btrfsz mkfs.btrfsz btrfs-progs) ryaml safe_load YAMLError TypeErrorrr;r^r7rrX)rr rnstorage_drivers preseed_cfgr,s r#rZrZ{sH"$OKH$x(9:;+5 ..5K$<;   H %  " "<#9 :;  5(9()  :(>/!$**\*B & O :6  KK1  sC883D.-D.)r6r)#__doc__loggingr`typingrrr cloudinitrrcloudinit.cloudrcloudinit.configrcloudinit.config.schemar cloudinit.settingsr getLoggerrr;r_r__annotations__r$rCrrrurcrhrkrirrZr%r#rsE  !#.+g!  z %w j ,F1hb b 6b %b tb b J.b9"xGEK%BPDstCyr%