Enable setting domain parameter for interfaces

This enables the setting of a static domain that will be used to aid DNS
queries.

Related-Bug: #1828854
Change-Id: I284691444b2f10cc831d4b3148d41100f6c7796d
(cherry-picked from commit fc9fbd4461)
This commit is contained in:
Juan Antonio Osorio Robles 2019-02-12 14:34:11 +02:00 committed by Ade Lee
parent cd0aa7db4f
commit 14690ffc1b
7 changed files with 213 additions and 74 deletions

View File

@ -588,6 +588,8 @@ class IfcfgNetConfig(os_net_config.NetConfig):
data += "DNS2=%s\n" % base_opt.dns_servers[1]
if len(base_opt.dns_servers) > 2:
logger.warning('ifcfg format supports max 2 resolvers.')
if base_opt.domain:
data += "DOMAIN=%s\n" % base_opt.domain
return data
def _add_routes(self, interface_name, routes=[]):

View File

@ -254,7 +254,8 @@ class _BaseOpts(object):
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None,
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
dns_servers=None, nm_controlled=False, onboot=True):
dns_servers=None, nm_controlled=False, onboot=True,
domain=None):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
@ -290,6 +291,7 @@ class _BaseOpts(object):
self.defroute = defroute
self.dhclient_args = dhclient_args
self.dns_servers = dns_servers
self.domain = domain
self.nm_controlled = nm_controlled
self.onboot = onboot
self.bridge_name = None # internal
@ -327,6 +329,7 @@ class _BaseOpts(object):
mtu = json.get('mtu', None)
dhclient_args = json.get('dhclient_args')
dns_servers = json.get('dns_servers')
domain = json.get('domain')
nm_controlled = strutils.bool_from_string(str(json.get('nm_controlled',
False)))
onboot = strutils.bool_from_string(str(json.get('onboot',
@ -361,11 +364,11 @@ class _BaseOpts(object):
if include_primary:
return (use_dhcp, use_dhcpv6, addresses, routes, mtu, primary,
nic_mapping, persist_mapping, defroute, dhclient_args,
dns_servers, nm_controlled, onboot)
dns_servers, nm_controlled, onboot, domain)
else:
return (use_dhcp, use_dhcpv6, addresses, routes, mtu,
nic_mapping, persist_mapping, defroute, dhclient_args,
dns_servers, nm_controlled, onboot)
dns_servers, nm_controlled, onboot, domain)
class Interface(_BaseOpts):
@ -375,7 +378,7 @@ class Interface(_BaseOpts):
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
dns_servers=None, nm_controlled=False, onboot=True,
ethtool_opts=None, hotplug=False):
domain=None, ethtool_opts=None, hotplug=False):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
@ -383,7 +386,7 @@ class Interface(_BaseOpts):
routes, mtu, primary, nic_mapping,
persist_mapping, defroute,
dhclient_args, dns_servers,
nm_controlled, onboot)
nm_controlled, onboot, domain)
self.ethtool_opts = ethtool_opts
self.hotplug = hotplug
@ -408,7 +411,7 @@ class Vlan(_BaseOpts):
addresses=None, routes=None, mtu=None, primary=False,
nic_mapping=None, persist_mapping=False, defroute=True,
dhclient_args=None, dns_servers=None, nm_controlled=False,
onboot=True, ovs_options=None, ovs_extra=None):
onboot=True, domain=None, ovs_options=None, ovs_extra=None):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
@ -416,7 +419,7 @@ class Vlan(_BaseOpts):
super(Vlan, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
routes, mtu, primary, nic_mapping,
persist_mapping, defroute, dhclient_args,
dns_servers, nm_controlled, onboot)
dns_servers, nm_controlled, onboot, domain)
self.vlan_id = int(vlan_id)
self.ovs_options = ovs_options
ovs_extra = ovs_extra or []
@ -448,7 +451,7 @@ class IvsInterface(_BaseOpts):
addresses=None, routes=None, mtu=1500, primary=False,
nic_mapping=None, persist_mapping=False, defroute=True,
dhclient_args=None, dns_servers=None, nm_controlled=False,
onboot=True):
onboot=True, domain=None):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
@ -458,7 +461,7 @@ class IvsInterface(_BaseOpts):
nic_mapping, persist_mapping,
defroute, dhclient_args,
dns_servers, nm_controlled,
onboot)
onboot, domain)
self.vlan_id = int(vlan_id)
@staticmethod
@ -476,7 +479,7 @@ class NfvswitchInternal(_BaseOpts):
use_dhcpv6=False, addresses=None, routes=None, mtu=1500,
primary=False, nic_mapping=None, persist_mapping=False,
defroute=True, dhclient_args=None, dns_servers=None,
nm_controlled=False, onboot=True):
nm_controlled=False, onboot=True, domain=None):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
@ -486,7 +489,7 @@ class NfvswitchInternal(_BaseOpts):
mtu, primary, nic_mapping,
persist_mapping, defroute,
dhclient_args, dns_servers,
nm_controlled, onboot)
nm_controlled, onboot, domain)
self.vlan_id = int(vlan_id)
@staticmethod
@ -504,7 +507,8 @@ class OvsBridge(_BaseOpts):
routes=None, mtu=None, members=None, ovs_options=None,
ovs_extra=None, nic_mapping=None, persist_mapping=False,
defroute=True, dhclient_args=None, dns_servers=None,
nm_controlled=False, onboot=True, fail_mode=None):
nm_controlled=False, onboot=True, domain=None,
fail_mode=None):
addresses = addresses or []
routes = routes or []
members = members or []
@ -513,7 +517,7 @@ class OvsBridge(_BaseOpts):
routes, mtu, False, nic_mapping,
persist_mapping, defroute,
dhclient_args, dns_servers,
nm_controlled, onboot)
nm_controlled, onboot, domain)
self.members = members
self.ovs_options = ovs_options
ovs_extra = ovs_extra or []
@ -561,7 +565,7 @@ class OvsBridge(_BaseOpts):
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute,
dhclient_args, dns_servers,
nm_controlled, onboot) = _BaseOpts.base_opts_from_json(
nm_controlled, onboot, domain) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
ovs_options = json.get('ovs_options')
ovs_extra = json.get('ovs_extra', [])
@ -578,7 +582,7 @@ class OvsBridge(_BaseOpts):
persist_mapping=persist_mapping, defroute=defroute,
dhclient_args=dhclient_args, dns_servers=dns_servers,
nm_controlled=nm_controlled, onboot=onboot,
fail_mode=fail_mode)
domain=domain, fail_mode=fail_mode)
class OvsUserBridge(_BaseOpts):
@ -588,13 +592,14 @@ class OvsUserBridge(_BaseOpts):
routes=None, mtu=None, members=None, ovs_options=None,
ovs_extra=None, nic_mapping=None, persist_mapping=False,
defroute=True, dhclient_args=None, dns_servers=None,
nm_controlled=False, onboot=True, fail_mode=None):
nm_controlled=False, onboot=True, domain=None,
fail_mode=None):
super(OvsUserBridge, self).__init__(name, use_dhcp, use_dhcpv6,
addresses, routes, mtu, False,
nic_mapping, persist_mapping,
defroute, dhclient_args,
dns_servers, nm_controlled,
onboot)
onboot, domain)
self.members = members or []
self.ovs_options = ovs_options
ovs_extra = ovs_extra or []
@ -622,7 +627,7 @@ class OvsUserBridge(_BaseOpts):
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute,
dhclient_args, dns_servers,
nm_controlled, onboot) = _BaseOpts.base_opts_from_json(
nm_controlled, onboot, domain) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
ovs_options = json.get('ovs_options')
ovs_extra = json.get('ovs_extra', [])
@ -640,7 +645,7 @@ class OvsUserBridge(_BaseOpts):
defroute=defroute, dhclient_args=dhclient_args,
dns_servers=dns_servers,
nm_controlled=nm_controlled, onboot=onboot,
fail_mode=fail_mode)
domain=domain, fail_mode=fail_mode)
class LinuxBridge(_BaseOpts):
@ -649,7 +654,8 @@ class LinuxBridge(_BaseOpts):
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=None,
routes=None, mtu=None, members=None, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
dns_servers=None, nm_controlled=False, onboot=True):
dns_servers=None, nm_controlled=False, onboot=True,
domain=None):
addresses = addresses or []
routes = routes or []
members = members or []
@ -658,7 +664,7 @@ class LinuxBridge(_BaseOpts):
addresses, routes, mtu, False,
nic_mapping, persist_mapping,
defroute, dhclient_args, dns_servers,
nm_controlled, onboot)
nm_controlled, onboot, domain)
self.members = members
for member in self.members:
member.linux_bridge_name = name
@ -677,7 +683,8 @@ class LinuxBridge(_BaseOpts):
name = _get_required_field(json, 'name', 'LinuxBridge')
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
dns_servers, nm_controlled, onboot) = _BaseOpts.base_opts_from_json(
dns_servers, nm_controlled,
onboot, domain) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
members = _update_members(json, nic_mapping, persist_mapping)
@ -688,7 +695,8 @@ class LinuxBridge(_BaseOpts):
persist_mapping=persist_mapping, defroute=defroute,
dhclient_args=dhclient_args,
dns_servers=dns_servers,
nm_controlled=nm_controlled, onboot=onboot)
nm_controlled=nm_controlled, onboot=onboot,
domain=domain)
class IvsBridge(_BaseOpts):
@ -708,7 +716,7 @@ class IvsBridge(_BaseOpts):
addresses=None, routes=None, mtu=1500, members=None,
nic_mapping=None, persist_mapping=False, defroute=True,
dhclient_args=None, dns_servers=None, nm_controlled=False,
onboot=True):
onboot=True, domain=None):
addresses = addresses or []
routes = routes or []
members = members or []
@ -717,7 +725,7 @@ class IvsBridge(_BaseOpts):
addresses, routes, mtu, False,
nic_mapping, persist_mapping,
defroute, dhclient_args, dns_servers,
nm_controlled, onboot)
nm_controlled, onboot, domain)
self.members = members
for member in self.members:
if isinstance(member, OvsBond) or isinstance(member, LinuxBond):
@ -732,7 +740,8 @@ class IvsBridge(_BaseOpts):
name = 'ivs'
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
dns_servers, nm_controlled, onboot) = _BaseOpts.base_opts_from_json(
dns_servers, nm_controlled,
onboot, domain) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
members = _update_members(json, nic_mapping, persist_mapping)
@ -743,7 +752,7 @@ class IvsBridge(_BaseOpts):
persist_mapping=persist_mapping, defroute=defroute,
dhclient_args=dhclient_args,
dns_servers=dns_servers, nm_controlled=nm_controlled,
onboot=onboot)
onboot=onboot, domain=domain)
class NfvswitchBridge(_BaseOpts):
@ -758,7 +767,7 @@ class NfvswitchBridge(_BaseOpts):
addresses=None, routes=None, mtu=1500, members=None,
nic_mapping=None, persist_mapping=False, defroute=True,
dhclient_args=None, dns_servers=None, nm_controlled=False,
onboot=True, options=""):
onboot=True, domain=None, options=""):
addresses = addresses or []
routes = routes or []
members = members or []
@ -768,7 +777,7 @@ class NfvswitchBridge(_BaseOpts):
nic_mapping, persist_mapping,
defroute, dhclient_args,
dns_servers, nm_controlled,
onboot)
onboot, domain)
self.options = options
self.members = members
for member in self.members:
@ -784,7 +793,8 @@ class NfvswitchBridge(_BaseOpts):
name = 'nfvswitch'
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
dns_servers, nm_controlled, onboot) = _BaseOpts.base_opts_from_json(
dns_servers, nm_controlled,
onboot, domain) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
members = _update_members(json, nic_mapping, persist_mapping)
@ -801,7 +811,7 @@ class NfvswitchBridge(_BaseOpts):
defroute=defroute, dhclient_args=dhclient_args,
dns_servers=dns_servers,
nm_controlled=nm_controlled, onboot=onboot,
options=options)
domain=domain, options=options)
class LinuxTeam(_BaseOpts):
@ -811,7 +821,7 @@ class LinuxTeam(_BaseOpts):
routes=None, mtu=None, primary=False, members=None,
bonding_options=None, nic_mapping=None, persist_mapping=False,
defroute=True, dhclient_args=None, dns_servers=None,
nm_controlled=False, onboot=True):
nm_controlled=False, onboot=True, domain=None):
addresses = addresses or []
routes = routes or []
members = members or []
@ -820,7 +830,7 @@ class LinuxTeam(_BaseOpts):
routes, mtu, primary, nic_mapping,
persist_mapping, defroute,
dhclient_args, dns_servers,
nm_controlled, onboot)
nm_controlled, onboot, domain)
self.members = members
self.bonding_options = bonding_options
for member in self.members:
@ -839,7 +849,8 @@ class LinuxTeam(_BaseOpts):
name = _get_required_field(json, 'name', 'LinuxTeam')
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
dns_servers, nm_controlled, onboot) = _BaseOpts.base_opts_from_json(
dns_servers, nm_controlled,
onboot, domain) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
bonding_options = json.get('bonding_options')
@ -851,7 +862,8 @@ class LinuxTeam(_BaseOpts):
nic_mapping=nic_mapping,
persist_mapping=persist_mapping, defroute=defroute,
dhclient_args=dhclient_args, dns_servers=dns_servers,
nm_controlled=nm_controlled, onboot=onboot)
nm_controlled=nm_controlled, onboot=onboot,
domain=domain)
class LinuxBond(_BaseOpts):
@ -861,7 +873,7 @@ class LinuxBond(_BaseOpts):
routes=None, mtu=None, primary=False, members=None,
bonding_options=None, nic_mapping=None, persist_mapping=False,
defroute=True, dhclient_args=None, dns_servers=None,
nm_controlled=False, onboot=True):
nm_controlled=False, onboot=True, domain=None):
addresses = addresses or []
routes = routes or []
members = members or []
@ -870,7 +882,7 @@ class LinuxBond(_BaseOpts):
routes, mtu, primary, nic_mapping,
persist_mapping, defroute,
dhclient_args, dns_servers,
nm_controlled, onboot)
nm_controlled, onboot, domain)
self.members = members
self.bonding_options = bonding_options
for member in self.members:
@ -911,7 +923,8 @@ class LinuxBond(_BaseOpts):
name = _get_required_field(json, 'name', 'LinuxBond')
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
dns_servers, nm_controlled, onboot) = _BaseOpts.base_opts_from_json(
dns_servers, nm_controlled,
onboot, domain) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
bonding_options = json.get('bonding_options')
@ -923,7 +936,8 @@ class LinuxBond(_BaseOpts):
nic_mapping=nic_mapping,
persist_mapping=persist_mapping, defroute=defroute,
dhclient_args=dhclient_args, dns_servers=dns_servers,
nm_controlled=nm_controlled, onboot=onboot)
nm_controlled=nm_controlled, onboot=onboot,
domain=domain)
class OvsBond(_BaseOpts):
@ -933,7 +947,8 @@ class OvsBond(_BaseOpts):
routes=None, mtu=None, primary=False, members=None,
ovs_options=None, ovs_extra=None, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
dns_servers=None, nm_controlled=False, onboot=True):
dns_servers=None, nm_controlled=False,
onboot=True, domain=None):
addresses = addresses or []
routes = routes or []
members = members or []
@ -941,7 +956,8 @@ class OvsBond(_BaseOpts):
super(OvsBond, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
routes, mtu, primary, nic_mapping,
persist_mapping, defroute, dhclient_args,
dns_servers, nm_controlled, onboot)
dns_servers, nm_controlled, onboot,
domain)
self.members = members
self.ovs_options = ovs_options
self.ovs_extra = format_ovs_extra(self, ovs_extra)
@ -986,7 +1002,8 @@ class OvsBond(_BaseOpts):
name = _get_required_field(json, 'name', 'OvsBond')
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
dns_servers, nm_controlled, onboot) = _BaseOpts.base_opts_from_json(
dns_servers, nm_controlled,
onboot, domain) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
ovs_options = json.get('ovs_options')
ovs_extra = json.get('ovs_extra', [])
@ -1001,7 +1018,8 @@ class OvsBond(_BaseOpts):
ovs_extra=ovs_extra, nic_mapping=nic_mapping,
persist_mapping=persist_mapping, defroute=defroute,
dhclient_args=dhclient_args, dns_servers=dns_servers,
nm_controlled=nm_controlled, onboot=onboot)
nm_controlled=nm_controlled, onboot=onboot,
domain=domain)
class OvsTunnel(_BaseOpts):
@ -1011,7 +1029,8 @@ class OvsTunnel(_BaseOpts):
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
dns_servers=None, nm_controlled=False, onboot=True,
tunnel_type=None, ovs_options=None, ovs_extra=None):
domain=None, tunnel_type=None, ovs_options=None,
ovs_extra=None):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
@ -1019,7 +1038,7 @@ class OvsTunnel(_BaseOpts):
routes, mtu, primary, nic_mapping,
persist_mapping, defroute,
dhclient_args, dns_servers,
nm_controlled, onboot)
nm_controlled, onboot, domain)
self.tunnel_type = tunnel_type
self.ovs_options = ovs_options or []
self.ovs_extra = format_ovs_extra(self, ovs_extra)
@ -1045,7 +1064,7 @@ class OvsPatchPort(_BaseOpts):
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
dns_servers=None, nm_controlled=False, onboot=True,
bridge_name=None, peer=None, ovs_options=None,
domain=None, bridge_name=None, peer=None, ovs_options=None,
ovs_extra=None):
addresses = addresses or []
routes = routes or []
@ -1054,7 +1073,8 @@ class OvsPatchPort(_BaseOpts):
addresses, routes, mtu, primary,
nic_mapping, persist_mapping,
defroute, dhclient_args,
dns_servers, nm_controlled, onboot)
dns_servers, nm_controlled,
onboot, domain)
self.bridge_name = bridge_name
self.peer = peer
self.ovs_options = ovs_options or []
@ -1082,7 +1102,7 @@ class IbInterface(_BaseOpts):
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
dns_servers=None, nm_controlled=False, onboot=True,
ethtool_opts=None):
domain=None, ethtool_opts=None):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
@ -1090,7 +1110,7 @@ class IbInterface(_BaseOpts):
addresses, routes, mtu, primary,
nic_mapping, persist_mapping,
defroute, dhclient_args, dns_servers,
nm_controlled, onboot)
nm_controlled, onboot, domain)
self.ethtool_opts = ethtool_opts
@staticmethod
@ -1108,14 +1128,15 @@ class OvsDpdkPort(_BaseOpts):
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
dns_servers=None, nm_controlled=False, onboot=True,
members=None, driver='vfio-pci', ovs_options=None,
ovs_extra=None, rx_queue=None):
domain=None, members=None, driver='vfio-pci',
ovs_options=None, ovs_extra=None, rx_queue=None):
super(OvsDpdkPort, self).__init__(name, use_dhcp, use_dhcpv6,
addresses, routes, mtu, primary,
nic_mapping, persist_mapping,
defroute, dhclient_args,
dns_servers, nm_controlled, onboot)
dns_servers, nm_controlled,
onboot, domain)
self.members = members or []
self.ovs_options = ovs_options or []
self.ovs_extra = format_ovs_extra(self, ovs_extra)
@ -1148,7 +1169,7 @@ class OvsDpdkPort(_BaseOpts):
(use_dhcp, use_dhcpv6, addresses, routes, mtu, primary, nic_mapping,
persist_mapping, defroute, dhclient_args,
dns_servers, nm_controlled,
onboot) = _BaseOpts.base_opts_from_json(json)
onboot, domain) = _BaseOpts.base_opts_from_json(json)
driver = json.get('driver')
if not driver:
@ -1199,7 +1220,7 @@ class OvsDpdkPort(_BaseOpts):
dhclient_args=dhclient_args,
dns_servers=dns_servers,
nm_controlled=nm_controlled, onboot=onboot,
members=members, driver=driver,
domain=domain, members=members, driver=driver,
ovs_options=ovs_options,
ovs_extra=ovs_extra, rx_queue=rx_queue)
@ -1211,7 +1232,7 @@ class SriovVF(_BaseOpts):
addresses=None, routes=None, mtu=None, primary=False,
nic_mapping=None, persist_mapping=False, defroute=True,
dhclient_args=None, dns_servers=None, nm_controlled=False,
onboot=True, vlan_id=0, qos=0, spoofcheck=None,
onboot=True, domain=None, vlan_id=0, qos=0, spoofcheck=None,
trust=None, state=None, macaddr=None, promisc=None):
addresses = addresses or []
routes = routes or []
@ -1227,7 +1248,7 @@ class SriovVF(_BaseOpts):
routes, mtu, primary, nic_mapping,
persist_mapping, defroute,
dhclient_args, dns_servers,
nm_controlled, onboot)
nm_controlled, onboot, domain)
self.vfid = int(vfid)
self.device = device
self.vlan_id = int(vlan_id)
@ -1287,7 +1308,8 @@ class SriovPF(_BaseOpts):
addresses=None, routes=None, mtu=None, primary=False,
nic_mapping=None, persist_mapping=False, defroute=True,
dhclient_args=None, dns_servers=None, nm_controlled=False,
onboot=True, members=None, promisc=None, link_mode='legacy'):
onboot=True, domain=None, members=None, promisc=None,
link_mode='legacy'):
addresses = addresses or []
routes = routes or []
dns_servers = dns_servers or []
@ -1295,7 +1317,7 @@ class SriovPF(_BaseOpts):
routes, mtu, primary, nic_mapping,
persist_mapping, defroute,
dhclient_args, dns_servers,
nm_controlled, onboot)
nm_controlled, onboot, domain)
self.numvfs = int(numvfs)
mapped_nic_names = mapped_nics(nic_mapping)
if name in mapped_nic_names:
@ -1338,12 +1360,12 @@ class OvsDpdkBond(_BaseOpts):
ovs_options=None, ovs_extra=None, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
dns_servers=None, nm_controlled=False, onboot=True,
rx_queue=None):
domain=None, rx_queue=None):
super(OvsDpdkBond, self).__init__(name, use_dhcp, use_dhcpv6,
addresses, routes, mtu, primary,
nic_mapping, persist_mapping,
defroute, dhclient_args, dns_servers,
nm_controlled, onboot)
nm_controlled, onboot, domain)
self.members = members or []
self.ovs_options = ovs_options
self.ovs_extra = format_ovs_extra(self, ovs_extra)
@ -1368,7 +1390,8 @@ class OvsDpdkBond(_BaseOpts):
name = _get_required_field(json, 'name', 'OvsDpdkBond')
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
dns_servers, nm_controlled, onboot) = _BaseOpts.base_opts_from_json(
dns_servers, nm_controlled,
onboot, domain) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
rx_queue = json.get('rx_queue', None)
ovs_options = json.get('ovs_options')
@ -1403,7 +1426,7 @@ class OvsDpdkBond(_BaseOpts):
defroute=defroute, dhclient_args=dhclient_args,
dns_servers=dns_servers,
nm_controlled=nm_controlled, onboot=onboot,
rx_queue=rx_queue)
domain=domain, rx_queue=rx_queue)
class VppInterface(_BaseOpts):
@ -1434,14 +1457,15 @@ class VppInterface(_BaseOpts):
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
dns_servers=None, nm_controlled=False, onboot=True,
uio_driver='vfio-pci', options=None):
domain=None, uio_driver='vfio-pci', options=None):
addresses = addresses or []
super(VppInterface, self).__init__(name, use_dhcp, use_dhcpv6,
addresses, routes, mtu, primary,
nic_mapping, persist_mapping,
defroute, dhclient_args,
dns_servers, nm_controlled, onboot)
dns_servers, nm_controlled,
onboot, domain)
self.uio_driver = uio_driver
self.options = options
# pci_dev contains pci address for the interface, it will be populated
@ -1466,7 +1490,7 @@ class VppBond(_BaseOpts):
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
dns_servers=None, nm_controlled=False, onboot=True,
members=None, bonding_options=None):
domain=None, members=None, bonding_options=None):
addresses = addresses or []
members = members or []
@ -1474,7 +1498,8 @@ class VppBond(_BaseOpts):
addresses, routes, mtu, primary,
nic_mapping, persist_mapping,
defroute, dhclient_args,
dns_servers, nm_controlled, onboot)
dns_servers, nm_controlled, onboot,
domain)
self.members = members
self.bonding_options = bonding_options
@ -1485,7 +1510,8 @@ class VppBond(_BaseOpts):
(use_dhcp, use_dhcpv6, addresses, routes, mtu, nic_mapping,
persist_mapping, defroute, dhclient_args,
dns_servers, nm_controlled, onboot) = _BaseOpts.base_opts_from_json(
dns_servers, nm_controlled,
onboot, domain) = _BaseOpts.base_opts_from_json(
json, include_primary=False)
members = []
@ -1512,7 +1538,8 @@ class VppBond(_BaseOpts):
persist_mapping=persist_mapping,
defroute=defroute, dhclient_args=dhclient_args,
dns_servers=dns_servers, nm_controlled=nm_controlled,
onboot=onboot, bonding_options=bonding_options)
onboot=onboot, domain=domain,
bonding_options=bonding_options)
class ContrailVrouter(_BaseOpts):
@ -1528,7 +1555,7 @@ class ContrailVrouter(_BaseOpts):
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
dns_servers=None, nm_controlled=False, onboot=True,
members=None):
domain=None, members=None):
addresses = addresses or []
super(ContrailVrouter, self).__init__(name, use_dhcp, use_dhcpv6,
@ -1536,7 +1563,7 @@ class ContrailVrouter(_BaseOpts):
primary, nic_mapping,
persist_mapping, defroute,
dhclient_args, dns_servers,
nm_controlled, onboot)
nm_controlled, onboot, domain)
self.members = members or []
@staticmethod
@ -1545,7 +1572,8 @@ class ContrailVrouter(_BaseOpts):
(_use_dhcp, _use_dhcpv6, _addresses, _routes, _mtu, _primary,
nic_mapping, persist_mapping, _defroute, _dhclient_args, _dns_servers,
_nm_controlled, _onboot) = opts = _BaseOpts.base_opts_from_json(json)
_nm_controlled, _onboot,
_domain) = opts = _BaseOpts.base_opts_from_json(json)
members = _update_members(json, nic_mapping, persist_mapping)
return ContrailVrouter(name, *opts, members=members)
@ -1568,7 +1596,7 @@ class ContrailVrouterDpdk(_BaseOpts):
routes=None, mtu=None, primary=False, nic_mapping=None,
persist_mapping=False, defroute=True, dhclient_args=None,
dns_servers=None, nm_controlled=False, onboot=True,
members=None, bond_mode=None, bond_policy=None,
domain=None, members=None, bond_mode=None, bond_policy=None,
driver=None, cpu_list='0-31', vlan_id=None):
addresses = addresses or []
@ -1577,7 +1605,8 @@ class ContrailVrouterDpdk(_BaseOpts):
primary, nic_mapping,
persist_mapping, defroute,
dhclient_args, dns_servers,
nm_controlled, onboot)
nm_controlled, onboot,
domain)
self.members = members or []
self.bond_mode = bond_mode
@ -1597,7 +1626,8 @@ class ContrailVrouterDpdk(_BaseOpts):
(_use_dhcp, _use_dhcpv6, _addresses, _routes, _mtu, _primary,
nic_mapping, persist_mapping, _defroute, _dhclient_args, _dns_servers,
_nm_controlled, _onboot) = opts = _BaseOpts.base_opts_from_json(json)
_nm_controlled, _onboot,
_domain) = opts = _BaseOpts.base_opts_from_json(json)
members = _update_members(json, nic_mapping, persist_mapping)
return ContrailVrouterDpdk(name, *opts, members=members,

View File

@ -112,6 +112,10 @@ definitions:
required:
- list_join
additionalProperties: False
domain_name_string:
type: string
pattern: >-
^(?=^.{1,255}$)(?!.*\.\..*)(.{1,63}\.)+(.{0,63}\.?)|(?!\.)(?!.*\.\..*)(^.{1,63}$)|(^\.$)$
# os-net-config derived types
address:
@ -238,6 +242,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- name
@ -285,6 +291,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
link_mode:
$ref: "#/definitions/sriov_link_mode_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- name
@ -343,6 +351,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- device
@ -389,6 +399,8 @@ definitions:
$ref: "#/definitions/ovs_options_string_or_param"
ovs_extra:
$ref: "#/definitions/ovs_extra_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- vlan_id
@ -444,6 +456,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- name
@ -499,6 +513,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- name
@ -550,6 +566,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- name
@ -598,6 +616,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- name
@ -645,6 +665,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- name
@ -693,6 +715,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- name
@ -749,6 +773,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- name
@ -791,6 +817,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- name
@ -832,6 +860,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
members:
type: array
items:
@ -982,6 +1012,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- name
@ -1030,6 +1062,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- name
@ -1076,6 +1110,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- name
@ -1118,6 +1154,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- members
@ -1159,6 +1197,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- vlan_id
@ -1203,6 +1243,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- options
@ -1245,6 +1287,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- vlan_id
@ -1286,6 +1330,8 @@ definitions:
$ref: "#/definitions/bool_or_param"
onboot:
$ref: "#/definitions/bool_or_param"
domain:
$ref: "#/definitions/domain_name_string"
required:
- type
- name

View File

@ -1140,6 +1140,21 @@ NM_CONTROLLED=no
BOOTPROTO=none
DNS1=1.2.3.4
DNS2=5.6.7.8
"""
self.assertEqual(em1_config, self.get_interface_config('em1'))
def test_interface_domain(self):
interface1 = objects.Interface('em1', dns_servers=['1.2.3.4'],
domain='openstack.local')
self.provider.add_interface(interface1)
em1_config = """# This file is autogenerated by os-net-config
DEVICE=em1
ONBOOT=yes
HOTPLUG=no
NM_CONTROLLED=no
BOOTPROTO=none
DNS1=1.2.3.4
DOMAIN=openstack.local
"""
self.assertEqual(em1_config, self.get_interface_config('em1'))

View File

@ -248,6 +248,17 @@ class TestInterface(base.TestCase):
interface1 = objects.object_from_json(json.loads(data))
self.assertEqual(["1.2.3.4"], interface1.dns_servers)
def test_from_json_domain(self):
data = """{
"type": "interface",
"name": "em1",
"use_dhcp": true,
"domain": "openstack.local"
}
"""
interface1 = objects.object_from_json(json.loads(data))
self.assertEqual("openstack.local", interface1.domain)
def test_from_json_dhcp_nic1(self):
def dummy_mapped_nics(nic_mapping=None):
return {"nic1": "em3"}

View File

@ -144,6 +144,35 @@ class TestBaseTypes(base.TestCase):
self.assertTrue(v.is_valid("fe80::1/64"))
self.assertFalse(v.is_valid("193.168.0.1"))
def test_domain_name_string(self):
schema = validator.get_schema_for_defined_type("domain_name_string")
v = jsonschema.Draft4Validator(schema)
self.assertTrue(v.is_valid('localdomain'))
self.assertTrue(v.is_valid('openstack.local'))
self.assertTrue(v.is_valid('999.local'))
self.assertTrue(v.is_valid('_foo.bar'))
self.assertTrue(v.is_valid('_foo.bar.domain'))
self.assertTrue(v.is_valid('trailing.dot.domain.'))
self.assertTrue(v.is_valid('.'))
self.assertFalse(v.is_valid('.com'))
self.assertFalse(v.is_valid('..'))
self.assertFalse(v.is_valid('foo..bar'))
# Label too long
domain = ('123456789-123456789-123456789-123456789-123456789-'
'123456789-1234.com')
self.assertFalse(v.is_valid(domain))
domain = ('123456789-123456789-123456789-123456789-123456789-'
'123456789-12345678')
self.assertFalse(v.is_valid(domain))
domain = ('123456789.123456789.123456789.123456789.123456789.'
'123456789.123456789.123456789.123456789.123456789.'
'123456789.123456789.123456789.123456789.123456789.'
'123456789.123456789.123456789.123456789.123456789.'
'123456789.123456789.123456789.123456789.123456789.'
'aa.com')
self.assertEqual(len(domain), 256)
self.assertFalse(v.is_valid(domain))
class TestDerivedTypes(base.TestCase):
@ -198,6 +227,7 @@ class TestDeviceTypes(base.TestCase):
"defroute": False,
"dhclient_args": "--foobar",
"dns_servers": ["1.2.3.4"],
"domain": "openstack.local",
"mtu": 1501,
"ethtool_opts": "speed 1000 duplex full",
"hotplug": True,

View File

@ -0,0 +1,5 @@
---
features:
- |
A key called "domain" is now available for interfaces. This allows the
setting of a domain for an ifcfg configuration, which will aide DNS search.