f0ddlZddlmZddlmZddlmZmZddlm Z ddl m Z eje ZGddZGd d e j Zd d Zy) N) OrderedDict)Optional)subputil)renderer) NetworkStatec$eZdZdZdZdZdZy) CfgParserc 4tggggggid|_y)N)MatchLinkNetworkDHCPv4DHCPv6AddressRoute)r conf_dict)selfs 8/usr/lib/python3/dist-packages/cloudinit/net/networkd.py__init__zCfgParser.__init__s($   cR|jjD]}||k(s |j|j|dzt|zt t j |j||j|<|j|jy)N=rkeysappendstrlistdictfromkeyssort)rseckeyvalks rupdate_sectionzCfgParser.update_section s$$& )ACxq!((sSX)=>$(t~~a7H)I$Jq!q!&&(  )rc|jjD]}||k(s ||j|vrg|j||<|j||j|dzt|zt t j |j|||j||<|j||jy)z For each route section we use rid as a key, this allows us to isolate this route from others on subsequent calls. rNr)rr"ridr#r$r%s rupdate_route_sectionzCfgParser.update_route_section(s $$& .ACxdnnQ//-/DNN1%c*q!#&--cCi#c(.BC)-MM$.."3C"89*q!#&q!#&++- .rcd}t|jjD]\}}|s |dk(r)t|D]}|d|zdzz }||dzz }|dz }7|dk(r>//12 !DAqI~%Aa%/HD(H$H%g)Aa%/H#AaD\) AH, D()) C!GeO+)AD(H)D % !(rN)__name__ __module__ __qualname__rr&r)r4rrr r s  ). rr ceZdZdZddZdefdZdefdZdefdZdefdZ defd Z ded e fd Z defd Z d Z dde deeddfdZd e defdZy)Rendererz Renders network information in /etc/systemd/network This Renderer is currently experimental and doesn't support all the use cases supported by the other renderers yet. Nch|si}|jdd|_|jdd|_y)Nresolve_conf_fnz/etc/systemd/resolved.confnetwork_conf_dirz/etc/systemd/network/)getr<r=)rconfigs rrzRenderer.__init__Ys:F%zz ; !'  7! rcfgcd}dddd}|sy|jD]&\}}||vs ||s|j||||(|dS)Nr NameDriver MACAddress)namedriver mac_addressrE)r/r&)rifacer@r" match_dictr%r1s rgenerate_match_sectionzRenderer.generate_match_sectioncsj'  $$& 5DAqEzeAh""3584 5V}rcPd}|syd|vr|dr|j|d|dyyy)Nr mtuMTUBytes)r&)rrHr@r"s rgenerate_link_sectionzRenderer.generate_link_sectionts7  E>eEl   sJe =+>rcd}dddd}d}d|vrdt|dz}|jD]+\}}||vr |d k(r||z }|j|||||-y ) zy Parse a route and use rid as a key in order to isolate the route from others in the route dict. rGateway DestinationMetric)gatewaynetworkmetricr+prefix/rTN)rr/r)) rr(confr@r" route_cfg_maprVr%r1s r parse_routeszRenderer.parse_routes}s  $  t 3tH~..FJJL DDAq %I~V   $ $S#}Q/? C  Drc d}d}d}|jdgD]}|d}|dk(s|dk(r|dk(rd}n|d k(rd }n|d k(r|dk(rd }n|dk(rd }d |vr*|d r%|d D]}|jd ||||dz}d|vsjddddd} |jD]\} } | dk(r/d|vr| dt|dzz } |j d| | | :| dk(r |j dd|| | | |dz}_| dk(s| dk(sj|j || | dj | |j |d||dvr6t|jdd tr|j |d!|d|S)"Nnorrsubnetstypedhcp4dhcpipv4ipv6yesdhcp6routesraddressrrPDNSDomains)rhrSdns_nameservers dns_searchrVrWrSrarkrl DHCP)rbrcz accept-rar+ IPv6AcceptRA) r>rZr/rr&r)join isinstancebool) rrHr@r`r"r(r2tisubnet_cfg_mapr%r1s r parse_subnetszRenderer.parse_subnetss9b)& PA& AG|qF{4<!DV^ Dg4<!DV^ D1}88"A%%#iC8'C " A~((',"+ " GGI PDAqI~#q=s1X;'7!77A**9nQ6GKi00#qYq0A1"Ag//1 3D**3q0A388A;O P3& PP 3- ? "z IIk2 &(    sNE+4F G rcdD]\}||vrt||j} tj|}|rdnd}|dk(rd}nd}|j|d |^y#t$r |dk7rt j d|d}YHwxYw) N) dhcp4domain dhcp6domainrcr\routezInvalid dhcp4domain value - %sryrr UseDomains)rcasefoldrtranslate_bool ValueErrorLOGwarningr&)rdr@itemretsections r dhcp_domainzRenderer.dhcp_domains2 ;D1}ag,'')C ))#."e }$""   w c : ; '>KK @#FC sA##&B  B nsc~d}|jd}|s)|jdk(r|j|jd}n|s|jdk(ry|jdr%|j |ddj |d|jd r&|j |d dj |d yy) Nrdnsrg)search nameserversrrjrnrri)r>versiondns_searchdomainsrkr&rq)rrHr@rr"rs r parse_dnszRenderer.parse_dnssiirzzQ..!11Cq  778    sIsxxH /F G 77= !   sE388C 4F+G H "rcddddd}|dk(r|jddd d d d d |d|vrJ|dd|fvr@|d |d}|jD]#\}}||vs |jd||||%yyy)Nzuse-dns use-domainsz use-hostnamezuse-ntp)UseDNSr| UseHostnameUseNTP4z send-hostnamehostnamez route-metriczuse-mtuz use-routes) SendHostnameHostname RouteMetricUseMTU UseRoutesr` -overridesrcipvDHCPv)updater/r&) rr@devicer`rdhcp_config_mapsdhcp_overridesr%r1s rparse_dhcp_overrideszRenderer.parse_dhcp_overridess')   c>  # #$3 *#1'!-  '* % /D 'O= 5 $d7):$>?N(..0 P1&&&wi'8!^A=NO P 5 /rcd}tjd||dz|zdz}tj||tj|||y)Nzsystemd-networkz Setting Networking Config for %sz10-cloud-init-z.network)rdebugr write_file chownbyname)rlinkrXnwk_dir net_fn_ownernet_fns rcreate_network_filezRenderer.create_network_file sK(  4d;++d2Z? % |r RuntimeErrorrrr4)rrrrHr@rr`r(r{rEdev_namedev_cfgrr exceptions rrzRenderer._render_content#s'')4 :E+C..uc:D  & &uc 2%%eS1D NN5#r *C) !!AcU)UC8Ag   zzQ&+Fm*,;)?)E)E)G"%Hg!W,";;z2d:#+D! " 299[11YY{3D9F$$VS1#- N"7)62f< -%zzD *DbI!J$(&wi@,,3957!8& #/y"9911#vtWM N OOT3#5#5#78 9i4 :lrr)NN)r5r6r7__doc__rr rJrNrZrwrrrrrrrrrr8rrr:r:Qs "> >D9D03 3l;);$III<I"P P8=%) 8#8D>8  8 8,848rr:cVddg}ddg}|D]}tj|||ryy)Nip systemctlz /usr/sbinz/bin)rrFT)rwhich)rexpectedrps r availabler^s=k"H6 "F zz!F6: rr)logging collectionsrtypingr cloudinitrr cloudinit.netrcloudinit.net.network_stater getLoggerr5rr r:rr8rrrsP# "4g!<<~Jx  JZr