Add ability to specify multiple search domains
Especially when deploying in an environment where we are deploying
into a subdomain, we need the ability to specify multiple search
domains to be added to /etc/resolv.conf.
Related-Bug: #1828854
Change-Id: I45231fc53c24e1aad3f4a0026696954096430586
(cherry picked from commit 98e561a4d2
)
This commit is contained in:
parent
45e3f0437f
commit
6c4bd92405
|
@ -589,7 +589,10 @@ class IfcfgNetConfig(os_net_config.NetConfig):
|
|||
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
|
||||
if type(base_opt.domain) == list:
|
||||
data += "DOMAIN=\"%s\"\n" % ' '.join(base_opt.domain)
|
||||
else:
|
||||
data += "DOMAIN=%s\n" % base_opt.domain
|
||||
return data
|
||||
|
||||
def _add_routes(self, interface_name, routes=[]):
|
||||
|
|
|
@ -117,6 +117,14 @@ definitions:
|
|||
pattern: >-
|
||||
^(?=^.{1,255}$)(?!.*\.\..*)(.{1,63}\.)+(.{0,63}\.?)|(?!\.)(?!.*\.\..*)(^.{1,63}$)|(^\.$)$
|
||||
|
||||
list_of_domain_name_string_or_domain_name_string:
|
||||
oneOf:
|
||||
- type: array
|
||||
items:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
minItems: 0
|
||||
- $ref: "#/definitions/domain_name_string"
|
||||
|
||||
# os-net-config derived types
|
||||
address:
|
||||
type: object
|
||||
|
@ -256,7 +264,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- name
|
||||
|
@ -302,10 +310,10 @@ definitions:
|
|||
$ref: "#/definitions/bool_or_param"
|
||||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
link_mode:
|
||||
$ref: "#/definitions/sriov_link_mode_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- name
|
||||
|
@ -365,7 +373,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- device
|
||||
|
@ -408,12 +416,12 @@ definitions:
|
|||
$ref: "#/definitions/bool_or_param"
|
||||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
ovs_options:
|
||||
$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
|
||||
|
@ -470,7 +478,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- name
|
||||
|
@ -527,7 +535,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- name
|
||||
|
@ -580,7 +588,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- name
|
||||
|
@ -630,7 +638,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- name
|
||||
|
@ -679,7 +687,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- name
|
||||
|
@ -729,7 +737,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- name
|
||||
|
@ -787,7 +795,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- name
|
||||
|
@ -831,7 +839,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- name
|
||||
|
@ -874,7 +882,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
members:
|
||||
type: array
|
||||
items:
|
||||
|
@ -1029,7 +1037,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- name
|
||||
|
@ -1079,7 +1087,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- name
|
||||
|
@ -1127,7 +1135,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- name
|
||||
|
@ -1171,7 +1179,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- members
|
||||
|
@ -1214,7 +1222,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- vlan_id
|
||||
|
@ -1260,7 +1268,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- options
|
||||
|
@ -1304,7 +1312,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- vlan_id
|
||||
|
@ -1347,7 +1355,7 @@ definitions:
|
|||
onboot:
|
||||
$ref: "#/definitions/bool_or_param"
|
||||
domain:
|
||||
$ref: "#/definitions/domain_name_string"
|
||||
$ref: "#/definitions/list_of_domain_name_string_or_domain_name_string"
|
||||
required:
|
||||
- type
|
||||
- name
|
||||
|
|
|
@ -1173,7 +1173,7 @@ DNS2=5.6.7.8
|
|||
"""
|
||||
self.assertEqual(em1_config, self.get_interface_config('em1'))
|
||||
|
||||
def test_interface_domain(self):
|
||||
def test_interface_single_domain(self):
|
||||
interface1 = objects.Interface('em1', dns_servers=['1.2.3.4'],
|
||||
domain='openstack.local')
|
||||
self.provider.add_interface(interface1)
|
||||
|
@ -1185,6 +1185,38 @@ NM_CONTROLLED=no
|
|||
BOOTPROTO=none
|
||||
DNS1=1.2.3.4
|
||||
DOMAIN=openstack.local
|
||||
"""
|
||||
self.assertEqual(em1_config, self.get_interface_config('em1'))
|
||||
|
||||
def test_interface_single_domain_in_list(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'))
|
||||
|
||||
def test_interface_multiple_domains(self):
|
||||
interface1 = objects.Interface(
|
||||
'em1',
|
||||
dns_servers=['1.2.3.4'],
|
||||
domain=['openstack.local', 'subdomain.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 subdomain.openstack.local"
|
||||
"""
|
||||
self.assertEqual(em1_config, self.get_interface_config('em1'))
|
||||
|
||||
|
|
|
@ -277,6 +277,19 @@ class TestInterface(base.TestCase):
|
|||
interface1 = objects.object_from_json(json.loads(data))
|
||||
self.assertEqual("openstack.local", interface1.domain)
|
||||
|
||||
def test_from_json_domain_list(self):
|
||||
data = """{
|
||||
"type": "interface",
|
||||
"name": "em1",
|
||||
"use_dhcp": true,
|
||||
"domain": ["openstack.local", "subdomain.openstack.local"]
|
||||
}
|
||||
"""
|
||||
interface1 = objects.object_from_json(json.loads(data))
|
||||
self.assertEqual(
|
||||
["openstack.local", "subdomain.openstack.local"],
|
||||
interface1.domain)
|
||||
|
||||
def test_from_json_dhcp_nic1(self):
|
||||
def dummy_mapped_nics(nic_mapping=None):
|
||||
return {"nic1": "em3"}
|
||||
|
|
Loading…
Reference in New Issue