3 \me!@sddlZddlZddlmZddlmZmZmZddlm Z ddl m Z ddl m Z ddlmZejeZGdd d e jZdS) N)Optional)netsubputil) bsd_utils) ResolvConf)renderer) NetworkStatec@seZdZdZdZdZdZddZddZdd d Z d d Z d dZ ddZ d e eeddddZddZd!ddZd"ddZddZddZdS)# BSDRendererzetc/resolv.confz etc/rc.confcCs"tj|j|j}tj||ddS)N)fn)r target_pathtarget rc_conf_fnrget_rc_config_value)selfkeyr r/usr/lib/python3.6/bsd.pyrszBSDRenderer.get_rc_config_valuecCs$tj|j|j}tj|||ddS)N)r )rr rrrset_rc_config_value)rrvaluer rrrrszBSDRenderer.set_rc_config_valueNcCs,|si}d|_i|_i|_|jdd|_dS)NZpostcmdsT)rinterface_configurationsinterface_configurations_ipv6get _postcmds)rconfigrrr__init__s zBSDRenderer.__init__cCs tj}x|jD]}|jd}|jd}|r@tjd|r@q||krVtjd|nd|r|r||}||krtjd||y|j||Wqt k rtj d|}YqXn||}tjd|x:|jdgD](}|jd d krZ|jd s tj d |jd qtj d||jd |jd |jd |jd |jdpL|jdd|j |<q|jd dkr|jdstj d|jd qtj d||jd |jd|jd |jd|jdp|jdd|j |<q|jd dks|jd dkrd|j |<qWqWdS)NnameZ 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#ZdhcpZdhcp4DHCP)rZget_interfaces_by_maciter_interfacesrrematchLOGinforename_interfaceNotImplementedErrorerrordebugrr)rsettingsZ ifname_by_mac interface device_nameZ device_maccur_namesubnetrrr_ifconfig_entries&sn       "   "zBSDRenderer._ifconfig_entriesc Cs2t|j}x|jD]}|jdg}x|D]}|jddkrr|jd}|rt|jddkr|jdd|dnD|jdd kr,|jd}|rt|jd d kr|jd d |dnq,||jdg7}q,WqWx^|D]V}|jd}|stjdq|jdr|jdn|jd} |jd}|j || |qWdS)Nrrr gateway.z0.0.0.0)networkr!r6r$:z::0)r9r%r6routesr9zSkipping a bad route entryr!r%) listZ iter_routesr'rlensplitappendr*r/ set_route) rr0r=r1rr4r6Zrouter9r!rrr_route_entriesrs:            zBSDRenderer._route_entriesc Csv|j}|j}xR|jD]F}x@|jdgD]0}d|krB|j|dd|kr(|j|dq(WqWy&ttjtj |j |j }|j Wn>t k rtjtdtj |j |j td}|j YnXxDt|D]8}y|j|Wqtk rtjtd|YqXqWxFt|D]:}y|j|Wn$tk rLtjtd|YnXqWtjtj |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'rextendrrZ load_filerr rresolv_conf_fnparseIOErrorZlogexcr*setZadd_nameserver ValueErrorZadd_search_domainZ write_filestr) rr0Z nameserversZ searchdomainsr1r4Z resolvconfZserverZdomainrrr _resolve_confsD zBSDRenderer._resolve_conf) network_state templatesreturncCsH|r ||_|j|d|j|d|j|d|j|j|jddS)N)r0)run)rr5rCrL write_configstart_servicesr)rrMrNrrrrrender_network_states   z BSDRenderer.render_network_statecCs|jj}dd|DS)NcSsg|]\}}|dkr|qS)r&r).0kvrrr sz/BSDRenderer.dhcp_interfaces..)ritems)rZicrrrdhcp_interfacesszBSDRenderer.dhcp_interfacesFcCs tdS)N)r-)rrPrrrrRszBSDRenderer.start_servicescCs tdS)N)r-)rrrrrrQszBSDRenderer.write_configcCs tdS)N)r-)rr3r2rrrr,szBSDRenderer.rename_interfacecCs tdS)N)r-)rr9r!r6rrrrBszBSDRenderer.set_route)N)NN)F)N)__name__ __module__ __qualname__rFrZinterface_routesZ route_namesrrrr5rCrLr rdictrSrYrRrQr,rBrrrrr s$ L*1    r )Zloggingr(ZtypingrZ cloudinitrrrZcloudinit.distrosrZ%cloudinit.distros.parsers.resolv_confrZ cloudinit.netrZcloudinit.net.network_stater Z getLoggerrZr*ZRendererr rrrrs