f!ddlZddlZddlmZddlmZmZmZddlm Z ddl m Z ddl m Z ddlmZej eZGdd e j&Zy) N)Optional)netsubputil) bsd_utils) ResolvConf)renderer) NetworkStateceZdZdZdZdZdZdZdZddZ dZ d Z d Z dd e d eed dfdZdZddZddZdZdZy) BSDRendererzetc/resolv.confz etc/rc.confctj|j|j}t j ||yN)fn)r target_pathtarget rc_conf_fnrget_rc_config_value)selfkeyrs 3/usr/lib/python3/dist-packages/cloudinit/net/bsd.pyrzBSDRenderer.get_rc_config_values,   dkk4?? ;%%cb1ctj|j|j}t j |||yr)rrrrrset_rc_config_value)rrvaluers rrzBSDRenderer.set_rc_config_values.   dkk4?? ;%%c5R8rNcd|si}d|_i|_i|_|jdd|_y)NpostcmdsT)rinterface_configurationsinterface_configurations_ipv6get _postcmds)rconfigs r__init__zBSDRenderer.__init__s3F (*%-/*J5rc tj}|jD]}|jd}|jd}|rt j d|r?||vrt jd|n>|r7|r5||}||k7r0t jd|| |j||n||}t jd||jdgD]}|jd d k(r|jd s&t jd |jd Ot jd||jd |jd |jd |jd |jdxs|jdd|j|<|jd dk(r|jds't jd|jd %t jd||jd |jd|jd |jd|jdxs|jdd|j|<|jd dk(s|jd dk(sd|j|<y#t$rt jd|}Y;wxYw)Nname mac_addressz^lo\d+$z"Cannot find any device with MAC %sz,netif service will rename interface %s to %sz.Interface renaming is not supported on this OSzConfiguring interface %ssubnetstypestaticnetmaskz+Skipping IP %s, because there is no netmaskaddresszConfiguring dev %s with %s / %smtu)r+r*r,static6prefixz*Skipping IP %s, because there is no prefix)r+r.r,dhcpdhcp4DHCP)rget_interfaces_by_maciter_interfacesr rematchLOGinforename_interfaceNotImplementedErrorerrordebugrr)rsettings ifname_by_mac interface device_name device_maccur_namesubnets r_ifconfig_entrieszBSDRenderer._ifconfig_entries&s113 !113H HI#--/K"}5Jrxx K@.=zJ (4{*HHF # /--h D,J7 HH/ =#-- 26, H::f%1!::i0 I"JJy1!II9# 9- 9- $*::i#8#)::i#8%zz%0HIMM%4HBD11+> ZZ'94!::h/ H"JJy1!II9# 9- 8, $*::i#8"(**X"6%zz%0HIMM%4HGD66{C JJv&&0zz&)W4AGD11+>Y, H9H H"// L'/ /s%K K98K9c4t|j}|jD]}|jdg}|D]}|jddk(rF|jd}|rt |j ddk(rq|j dd|dn[|jdd k(rF|jd}|r4t |j d d kDr|j d d |dn||jdgz }|D]}|jd}|stjd,|jdr|jdn|jd} |jd}|j|| |y)Nr'r(r)gateway.z0.0.0.0)networkr*rEr-:z::0)rHr.rEroutesrHzSkipping a bad route entryr*r.) list iter_routesr3r lensplitappendr6r; set_route) rr<rLr>r'rBrErouterHr*s r_route_entrieszBSDRenderer._route_entriesrsh**,-!113 3ImmIr2G! 3::f%1$jj3G3w}}S'9#:a#? +4+4+2ZZ'94$jj3G3w}}S'9#:Q#> +/*-+2&**Xr22/ 3 36 6Eii *G 6799Y' )$YYx(  ii *G NN7GW 5 6rc :|j}|j}|jD]J}|jdgD]3}d|vr|j |dd|vs |j |d5L t t jtj|j|j}|jt!|D]} |j#|t!|D]} |j'|t j(tj|j|jt+|dy#t$rat jtdtj|j|jt d}|jYwxYw#t$$rt jtd|YwxYw#t$$rt jtd|YwxYw) Nr'dns_nameservers dns_searchz&Failed to parse %s, use new empty filer zFailed to add nameserver %szFailed to add search domain %si)rVdns_searchdomainsr3r extendrrload_text_filerrrresolv_conf_fnparseIOErrorlogexcr6setadd_nameserver ValueErroradd_search_domain write_filestr) rr< nameservers searchdomainsr>rB resolvconfserverdomains r _resolve_confzBSDRenderer._resolve_confs..  22 !113 ?I#-- 26 ?$.&&v.?'@A6)!(( )=>  ? ? ###$$T[[$2E2EFJ    +& HF H))&1 H-( KF K,,V4 K    T[[$*=*= >  O  -  KK8  d.A.AB  $BJ      H C!>G H K C!A6J Ks87AEG>G2A'GG$G/.G/2$HH network_state templatesreturnc|r||_|j||j||j||j |j |j y)N)r<)run)rrCrTrj write_configstart_servicesr!)rrkrlrs rrender_network_statez BSDRenderer.render_network_statesb  DK  6 ]3 M2  /rcz|jj}|Dcgc] \}}|dk(s |c}}Scc}}w)Nr1)ritems)rickvs rdhcp_interfaceszBSDRenderer.dhcp_interfacess3  * * 0 0 d2daa6k222s 77ctNr9)rros rrqzBSDRenderer.start_services !##rctrzr{)rrs rrpzBSDRenderer.write_configr|rctrzr{)rrAr?s rr8zBSDRenderer.rename_interfacer|rctrzr{)rrHr*rEs rrRzBSDRenderer.set_router|rrz)NN)F)__name__ __module__ __qualname__r[rinterface_routes route_namesrrr#rCrTrjr rdictrrrxrqrpr8rRrrr r s&NJK296JHX(6T, b%) 0# 0D> 0  03$$$$rr )loggingr4typingr cloudinitrrrcloudinit.distrosr%cloudinit.distros.parsers.resolv_confr cloudinit.netr cloudinit.net.network_stater getLoggerrr6Rendererr rrrrsH %%'<"4g!W$(##W$r