ph2ddlmZddlmZddlmZddlmZmZddl m Z ddl m Z ej eZGddZGd d e jZdd Zd e fdZd S)) OrderedDict)Optional)log)subputil)renderer) NetworkStatec,eZdZdZdZdZdZdZdS) CfgParserc >tggggggid|_dS)N)MatchLinkNetworkDHCPv4DHCPv6AddressRoute)r conf_dict)selfs 8/usr/lib/python3/dist-packages/cloudinit/net/networkd.py__init__zCfgParser.__init__s6$     cb|jD]}||kr|j||dzt|zt t |j||j|<|j|dS)N=rkeysappendstrlistdictfromkeyssort)rseckeyvalks rupdate_sectionzCfgParser.update_section#s$$&& ) )ACxxq!((sSXX)=>>>$(t~a7H)I)I$J$Jq!q!&&(((  ) )rc|jD]}||kr||j|vrg|j||<|j|||dzt|zt t |j|||j||<|j||dS)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 $$&& . .ACxxdnQ///-/DN1%c*q!#&--cCi#c((.BCCC)-MM$."3C"899**q!#&q!#&++--- . .rcd}t|jD]\}}|s|dkr+t|D]}|d|zdzz }||dzz }|dz }9|dkrCt|D]2}|d|zdzz }t||D]}||dzz }|dz }3|d|zdzz }t|D] }||dzz } |dz }|S)Nr[z]  r)sortedritems)rcontentsr&vens rget_final_confzCfgParser.get_final_conf;sC4>//1122 ! !DAq I~~%%Aa%/HD(H$HH%g))Aa%/H#AaD\\)) AH, D()) C!GeO+))AD(HHD rc|stddS|}td|t j||dS)NzTarget file not givenzFinal content: %s)LOGwarningr5debugr write_file)r target_fnr1s r dump_datazCfgParser.dump_dataSs`  KK/ 0 0 0 F&&(( %x000  8,,,,,rN)__name__ __module__ __qualname__rr'r*r5r<rrr r s_    )))... 0-----rr ceZdZdZddZdefdZdefdZdefdZdefdZ defd Z ded e fd Z defd Z d Z dde deeddfdZd e defdZdS)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. Ncz|si}|dd|_|dd|_dS)Nresolve_conf_fnz/etc/systemd/resolved.confnetwork_conf_dirz/etc/systemd/network/)getrDrE)rconfigs rrzRenderer.__init__esO F%zz ;  !'  7! ! rcfgcd}dddd}|sdS|D].\}}||vr%||r|||||/|dS)Nr NameDriver MACAddress)namedriver mac_addressrM)r0r')rifacerHr# match_dictr&r2s rgenerate_match_sectionzRenderer.generate_match_sectionos'    F$$&& 5 5DAqEzzeAhz""358444V}rcld}|sdSd|vr'|dr!||d|ddSdSdS)NrmtuMTUBytes)r')rrPrHr#s rgenerate_link_sectionzRenderer.generate_link_sectionsR  F E>>eEl>   sJe = = = = = >>>rcd}dddd}d}d|vrdt|dz}|D]3\}}||vr |d kr||z }||||||4d S) 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/r\N)rr0r*) rr)confrHr# route_cfg_mapr^r&r2s r parse_routeszRenderer.parse_routess  $   t  3tH~...FJJLL D DDAq %%I~~V   $ $S#}Q/? C C C C  D Drc d}d}d}|dgD]G}|d}|dks|dkr|dkrd}n |d krd }n|d kr|dkrd }n|dkrd }d |vr2|d r*|d D]!}|d ||||dz}"d|vrddddd} |D]\} } | dkr=d|vr| dt|dzz } |d| | | H| dkr'|dd|| | | |dz}u| dks| dkr0||| | d| I||d||dvrFt|dd tr||d!|d|S)"Nnorrsubnetstypedhcp4dhcpipv4ipv6yesdhcp6routesraddressrrXDNSDomains)rpr[dns_nameservers dns_searchr^r_r[rarsrt DHCP)rjrkz accept-rar, IPv6AcceptRA) rFrbr0rr'r*join isinstancebool) rrPrHrhr#r)r3tisubnet_cfg_mapr&r2s r parse_subnetszRenderer.parse_subnetssX9b))& P& PA& AG||qF{{4<<!DDV^^ Dg4<<!DDV^^ D1}}8}8""A%%i#iiC888'CCA~~((',"+ "" GGII P PDAqI~~#q==s1X;'7'7!77A**9nQ6GKKKKi00#YYYq0A1"Ag///1 3D3D**3q0A388A;;OOO 3--- ? " "z IIk2 & &( ( "   sNE+4F G G G rcJdD]}||vrt||} tj|}|rdnd}n3#t$r&|dkrt d|d}YnwxYw|dkrd}nd}||d |dS) N) dhcp4domain dhcp6domainrkrdroutezInvalid dhcp4domain value - %srrr UseDomains)rcasefoldrtranslate_bool ValueErrorr7r8r')rdrHitemretsections r dhcp_domainzRenderer.dhcp_domains2 ; ;D1}}ag,,''))C )#..",ee   '>>KK @#FFFC }$$""   w c : : : : ; ;sA  -A=<A=nsc Dd}dddd}|d}|s|jdkr|j|jd}n|s |jdkrdS|D]A\}}||vr8||r0|||d ||BdS) Nrrrrq)search nameservers addressesdnsro)rrrv)rFversiondns_searchdomainsrsr0r'ry) rrPrHrr# dns_cfg_maprr&r2s r parse_dnszRenderer.parse_dnss    ii rzQ.!1CC q F%%'' = =DAqCxxCFx""3388CF+;+;<<< = =rcddddd}|dkr|ddd d d d d |d|vrS|dd|fvrL|d |d}|D]-\}}||vr |d||||*dSdSdS)Nzuse-dns use-domainsz use-hostnamezuse-ntp)UseDNSr UseHostnameUseNTP4z send-hostnamehostnamez route-metriczuse-mtuz use-routes) SendHostnameHostname RouteMetricUseMTU UseRoutesrh -overridesrkipvDHCPv)updater0r') rrHdevicerhrdhcp_config_mapsdhcp_overridesr&r2s rparse_dhcp_overrideszRenderer.parse_dhcp_overridess')    c>>  # #$3 *#1'!-     &' % % % / /D  'OO= 5 5 $$>7$>$>$>?N(..00 P P1&&&&'8w'8'8!^A=NOOO 0 /5 5  P Prcd}td||dz|zdz}tj||tj|||dS)Nzsystemd-networkz Setting Networking Config for %sz10-cloud-init-z.network)r7r9rr: chownbyname)rlinkr`nwk_dir net_fn_ownernet_fns rcreate_network_filezRenderer.create_network_files^(  4d;;;++d2Z? %%% |<<<<r?__doc__rr rRrVrbrrr rrrrr rrr@rrrBrB]ss    "> >>>>D9DDDD03 3333l;);;;;$=I=<====,P PPPP8===%) 88#8D>8  8888 8,84888888rrBNcTddg}ddg}|D]}tj|||sdSdS)Nip systemctlz /usr/sbinz/bin)rrFT)rwhich)rexpectedrps r availablerosOk"H6 "F z!F6::: 55  4rrc@ti}|j|Sr)rBr)rrs rnetwork_state_to_networkdrxs ||H #8 #B ' ''rr) collectionsrtypingr cloudinitrloggingrr cloudinit.netrcloudinit.net.network_stater getLoggerr=r7r rBrrr@rrrs+$#####$$$$$$ """"""444444g!!E-E-E-E-E-E-E-E-POOOOOx OOOd(,((((((r