a 'Dg!@sddlZddlZddlmZddlmZmZmZddlm Z ddl m Z ddl m Z ddlmZeeZGdd d e jZdS) N)Optional)netsubputil) bsd_utils) ResolvConf)renderer) NetworkStatec@seZdZdZdZdZdZdZddZddZ dd d Z d d Z d dZ ddZ d eeeddddZddZd!ddZd"ddZddZddZdS)# BSDRendererzetc/resolv.confz etc/rc.confcCs"t|j|j}tj||ddSN)fn)r target_pathtarget rc_conf_fnrget_rc_config_value)selfkeyr r5/usr/lib/python3.9/site-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)NZpostcmdsT)rinterface_configurationsinterface_configurations_ipv6get _postcmds)rZconfigrrr__init__s zBSDRenderer.__init__c Cst}|D]}|d}|d}|r||dd|vr$||dq$qz&ttt |j |j }| Wn<t yttdt |j |j td}| Yn0t|D]4}z||Wqtyttd|Yq0qt|D]8}z||Wn"ty6ttd|Yn0qtt |j |j t|ddS) Nrdns_nameserversZ dns_searchz&Failed to parse %s, use new empty filer zFailed to add nameserver %szFailed to add search domain %si)rDZdns_searchdomainsr'rextendrrZload_text_filerrrresolv_conf_fnparseIOErrorZlogexcr*setZadd_nameserver ValueErrorZadd_search_domainZ write_filestr) rr0Z nameserversZ searchdomainsr1r4Z resolvconfZserverdomainrrr _resolve_confsL      zBSDRenderer._resolve_conf) network_state templatesreturncCsH|r ||_|j|d|j|d|j|d||j|jddS)N)r0)run)rr5rCrM write_configstart_servicesr)rrNrOrrrrrender_network_states   z BSDRenderer.render_network_statecCs|jj}dd|DS)NcSsg|]\}}|dkr|qS)r&r).0kvrrr z/BSDRenderer.dhcp_interfaces..)ritems)rZicrrrdhcp_interfacesszBSDRenderer.dhcp_interfacesFcCs tdSNr-)rrQrrrrSszBSDRenderer.start_servicescCs tdSr\r])rrrrrrRszBSDRenderer.write_configcCs tdSr\r])rr3r2rrrr,szBSDRenderer.rename_interfacecCs tdSr\r])rr9r!r6rrrrBszBSDRenderer.set_route)N)NN)F)N)__name__ __module__ __qualname__rFrZinterface_routesZ route_namesZ route6_namesrrrr5rCrMr rdictrTr[rSrRr,rBrrrrr s. L*1   r )Zloggingr(typingrZ cloudinitrrrZcloudinit.distrosrZ%cloudinit.distros.parsers.resolv_confrZ cloudinit.netrZcloudinit.net.network_stater Z getLoggerr^r*ZRendererr rrrrs