o x[h!@sddlZddlZddlmZddlmZmZmZddlm Z ddl m Z ddl m Z ddlmZeeZGdd d e jZdS) N)Optional)netsubputil) bsd_utils) ResolvConf)renderer) NetworkStatec@seZdZdZdZdZdZdZddZddZ d!d d Z d d Z d dZ ddZ  d"dedeeddfddZddZd#ddZd!ddZddZdd ZdS)$ BSDRendererzetc/resolv.confz etc/rc.confcCs"t|j|j}tj||ddSN)fn)r target_pathtarget rc_conf_fnrget_rc_config_value)selfkeyr r3/usr/lib/python3/dist-packages/cloudinit/net/bsd.pyrszBSDRenderer.get_rc_config_valuecCs$t|j|j}tj|||ddSr )rrrrrset_rc_config_value)rrvaluer rrrrszBSDRenderer.set_rc_config_valueNcCs,|si}d|_i|_i|_|dd|_dS)NpostcmdsT)rinterface_configurationsinterface_configurations_ipv6get _postcmds)rconfigrrr__init__s zBSDRenderer.__init__c Cst}|D]}|d}|d}|rtd|rq||vr(td|n1|rU|rU||}||krTtd||z|||Wnt ySt d|}Ynwn||}td||dgD]}|d d kr|d s}t d |d qet d||d |d |d |d |dp|dd|j |<qe|d dkr|dst d|d qet d||d |d|d |d|dp|dd|j |<qe|d dks|d dkrd|j |<qeqdS)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_interfacesrrematchLOGinforename_interfaceNotImplementedErrorerrordebugrr)rsettings ifname_by_mac interface device_name device_maccur_namesubnetrrr_ifconfig_entries's        zBSDRenderer._ifconfig_entriesc Cs$t|}|D]X}|dg}|D]M}|ddkr7|d}|r6t|ddkr6|dd|dn"|dd krX|d}|rWt|d d krW|d d |dnq||dg7}qq |D]*}|d}|sttdqe|dr~|dn|d} |d}| || |qedS)Nr!r"r#gateway.z0.0.0.0)networkr$r>r':z::0)rAr(r>routesrAzSkipping a bad route entryr$r() list iter_routesr-rlensplitappendr0r5 set_route) rr6rEr8r!r<r>routerAr$rrr_route_entriesssN         zBSDRenderer._route_entriesc CsV|j}|j}|D]!}|dgD]}d|vr||dd|vr*||dqq zttt |j |j }| Wnt y]ttdt |j |j td}| Ynwt|D]}z||Wqbty{ttd|Yqbwt|D]}z||Wqtyttd|Yqwtt |j |j t|ddS) Nr!dns_nameservers dns_searchz&Failed to parse %s, use new empty filer zFailed to add nameserver %szFailed to add search domain %si)rNdns_searchdomainsr-rextendrrload_text_filerrrresolv_conf_fnparseIOErrorlogexcr0setadd_nameserver ValueErroradd_search_domain write_filestr) rr6 nameservers searchdomainsr8r< resolvconfserverdomainrrr _resolve_confsV        zBSDRenderer._resolve_conf network_state templatesreturncCsH|r||_|j|d|j|d|j|d||j|jddS)N)r6)run)rr=rMrb write_configstart_servicesr)rrcrdrrrrrender_network_states   z BSDRenderer.render_network_statecCs|jj}dd|DS)NcSsg|] \}}|dkr|qS)r+r).0kvrrr sz/BSDRenderer.dhcp_interfaces..)ritems)ricrrrdhcp_interfacesszBSDRenderer.dhcp_interfacesFcCtNr3)rrfrrrrhzBSDRenderer.start_servicescCrqrrrs)rrrrrrgrtzBSDRenderer.write_configcCrqrrrs)rr;r9rrrr2rtzBSDRenderer.rename_interfacecCrqrrrs)rrAr$r>rrrrKrtzBSDRenderer.set_routerr)NN)F)__name__ __module__ __qualname__rSrinterface_routes route_names route6_namesrrrr=rMrbr rdictrirprhrgr2rKrrrrr s4 L*1    r )loggingr.typingr cloudinitrrrcloudinit.distrosr%cloudinit.distros.parsers.resolv_confr cloudinit.netrcloudinit.net.network_stater getLoggerrur0Rendererr rrrrs