Merge "Undercloud - support ctlplane subnet host routes"
This commit is contained in:
commit
b8a8941278
releasenotes/notes
tripleoclient
config
tests
v1
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
A new option ``host_routes`` are now available for subnet defenitions in
|
||||||
|
``undercloud.conf``.
|
||||||
|
|
||||||
|
- Host routes specified for the *local_subnet* will be added to
|
||||||
|
the routing table on the Undercloud.
|
||||||
|
- Host routes for all subnets are passed to tripleo-heat-templates so that
|
||||||
|
the *host_routes* property of the ctlplane subnets are set accordingly
|
||||||
|
when installing the Undercloud.
|
@ -47,6 +47,10 @@ GATEWAY_HELP_STR = _(
|
|||||||
'on this network.')
|
'on this network.')
|
||||||
MASQUERADE_HELP_STR = _(
|
MASQUERADE_HELP_STR = _(
|
||||||
'The network will be masqueraded for external access.')
|
'The network will be masqueraded for external access.')
|
||||||
|
HOST_ROUTES_HELP_STR = _(
|
||||||
|
'Host routes for the Neutron-managed subnet for the Overcloud instances '
|
||||||
|
'on this network. The host routes on the local_subnet will also be '
|
||||||
|
'configured on the undercloud.')
|
||||||
|
|
||||||
# Deprecated options
|
# Deprecated options
|
||||||
_deprecated_opt_network_gateway = [cfg.DeprecatedOpt(
|
_deprecated_opt_network_gateway = [cfg.DeprecatedOpt(
|
||||||
@ -370,6 +374,13 @@ class UndercloudConfig(StandaloneConfig):
|
|||||||
cfg.BoolOpt('masquerade',
|
cfg.BoolOpt('masquerade',
|
||||||
default=False,
|
default=False,
|
||||||
help=MASQUERADE_HELP_STR),
|
help=MASQUERADE_HELP_STR),
|
||||||
|
cfg.ListOpt('host_routes',
|
||||||
|
item_type=cfg.types.Dict(bounds=True),
|
||||||
|
bounds=True,
|
||||||
|
default=[],
|
||||||
|
sample_default=('[{destination: 10.10.10.0, '
|
||||||
|
'nexthop: 192.168.24.1}]'),
|
||||||
|
help=HOST_ROUTES_HELP_STR),
|
||||||
]
|
]
|
||||||
return self.sort_opts(_subnets_opts)
|
return self.sort_opts(_subnets_opts)
|
||||||
|
|
||||||
@ -393,6 +404,11 @@ class UndercloudConfig(StandaloneConfig):
|
|||||||
cfg.BoolOpt('masquerade',
|
cfg.BoolOpt('masquerade',
|
||||||
default=False,
|
default=False,
|
||||||
help=MASQUERADE_HELP_STR),
|
help=MASQUERADE_HELP_STR),
|
||||||
|
cfg.ListOpt('host_routes',
|
||||||
|
item_type=cfg.types.Dict(bounds=True),
|
||||||
|
bounds=True,
|
||||||
|
default=[],
|
||||||
|
help=HOST_ROUTES_HELP_STR),
|
||||||
]
|
]
|
||||||
return self.sort_opts(_subnets_opts)
|
return self.sort_opts(_subnets_opts)
|
||||||
|
|
||||||
|
@ -147,6 +147,7 @@ class TestUndercloudConfig(base.TestCase):
|
|||||||
'dhcp_exclude',
|
'dhcp_exclude',
|
||||||
'dhcp_start',
|
'dhcp_start',
|
||||||
'gateway',
|
'gateway',
|
||||||
|
'host_routes',
|
||||||
'inspection_iprange',
|
'inspection_iprange',
|
||||||
'masquerade']
|
'masquerade']
|
||||||
|
|
||||||
|
@ -141,7 +141,10 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
cfg.ListOpt('dhcp_exclude'),
|
cfg.ListOpt('dhcp_exclude'),
|
||||||
cfg.StrOpt('inspection_iprange'),
|
cfg.StrOpt('inspection_iprange'),
|
||||||
cfg.StrOpt('gateway'),
|
cfg.StrOpt('gateway'),
|
||||||
cfg.BoolOpt('masquerade')]
|
cfg.BoolOpt('masquerade'),
|
||||||
|
cfg.ListOpt('host_routes',
|
||||||
|
item_type=cfg.types.Dict(bounds=True),
|
||||||
|
bounds=True,)]
|
||||||
self.conf.register_opts(self.opts, group=self.grp0)
|
self.conf.register_opts(self.opts, group=self.grp0)
|
||||||
self.grp1 = cfg.OptGroup(name='subnet1', title='subnet1')
|
self.grp1 = cfg.OptGroup(name='subnet1', title='subnet1')
|
||||||
self.grp2 = cfg.OptGroup(name='subnet2', title='subnet2')
|
self.grp2 = cfg.OptGroup(name='subnet2', title='subnet2')
|
||||||
@ -152,6 +155,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
inspection_iprange='192.168.24.100,192.168.24.120',
|
inspection_iprange='192.168.24.100,192.168.24.120',
|
||||||
gateway='192.168.24.1',
|
gateway='192.168.24.1',
|
||||||
masquerade=False,
|
masquerade=False,
|
||||||
|
host_routes=[],
|
||||||
group='ctlplane-subnet')
|
group='ctlplane-subnet')
|
||||||
|
|
||||||
def test_default(self):
|
def test_default(self):
|
||||||
@ -170,6 +174,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
'ctlplane-subnet': {
|
'ctlplane-subnet': {
|
||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.24.5', 'end': '192.168.24.24'}],
|
{'start': '192.168.24.5', 'end': '192.168.24.24'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.24.0/24',
|
'NetworkCidr': '192.168.24.0/24',
|
||||||
'NetworkGateway': '192.168.24.1'}}}
|
'NetworkGateway': '192.168.24.1'}}}
|
||||||
self.assertEqual(expected, env)
|
self.assertEqual(expected, env)
|
||||||
@ -203,6 +208,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.24.4', 'end': '192.168.24.99'},
|
{'start': '192.168.24.4', 'end': '192.168.24.99'},
|
||||||
{'start': '192.168.24.121', 'end': '192.168.24.254'}],
|
{'start': '192.168.24.121', 'end': '192.168.24.254'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.24.0/24',
|
'NetworkCidr': '192.168.24.0/24',
|
||||||
'NetworkGateway': '192.168.24.1'}}}
|
'NetworkGateway': '192.168.24.1'}}}
|
||||||
self.assertEqual(expected, env)
|
self.assertEqual(expected, env)
|
||||||
@ -228,6 +234,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.10.2', 'end': '192.168.10.99'},
|
{'start': '192.168.10.2', 'end': '192.168.10.99'},
|
||||||
{'start': '192.168.10.121', 'end': '192.168.10.254'}],
|
{'start': '192.168.10.121', 'end': '192.168.10.254'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.10.0/24',
|
'NetworkCidr': '192.168.10.0/24',
|
||||||
'NetworkGateway': '192.168.10.1'}}}
|
'NetworkGateway': '192.168.10.1'}}}
|
||||||
self.assertEqual(expected, env)
|
self.assertEqual(expected, env)
|
||||||
@ -257,6 +264,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
{'start': '192.168.10.51', 'end': '192.168.10.79'},
|
{'start': '192.168.10.51', 'end': '192.168.10.79'},
|
||||||
{'start': '192.168.10.90', 'end': '192.168.10.99'},
|
{'start': '192.168.10.90', 'end': '192.168.10.99'},
|
||||||
{'start': '192.168.10.121', 'end': '192.168.10.254'}],
|
{'start': '192.168.10.121', 'end': '192.168.10.254'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.10.0/24',
|
'NetworkCidr': '192.168.10.0/24',
|
||||||
'NetworkGateway': '192.168.10.1'}}}
|
'NetworkGateway': '192.168.10.1'}}}
|
||||||
self.assertEqual(expected, env)
|
self.assertEqual(expected, env)
|
||||||
@ -281,6 +289,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.24.4', 'end': '192.168.24.99'},
|
{'start': '192.168.24.4', 'end': '192.168.24.99'},
|
||||||
{'start': '192.168.24.121', 'end': '192.168.24.254'}],
|
{'start': '192.168.24.121', 'end': '192.168.24.254'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.24.0/24',
|
'NetworkCidr': '192.168.24.0/24',
|
||||||
'NetworkGateway': '192.168.24.1'}}}
|
'NetworkGateway': '192.168.24.1'}}}
|
||||||
self.assertEqual(expected, env)
|
self.assertEqual(expected, env)
|
||||||
@ -305,6 +314,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.24.10', 'end': '192.168.24.99'},
|
{'start': '192.168.24.10', 'end': '192.168.24.99'},
|
||||||
{'start': '192.168.24.121', 'end': '192.168.24.254'}],
|
{'start': '192.168.24.121', 'end': '192.168.24.254'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.24.0/24',
|
'NetworkCidr': '192.168.24.0/24',
|
||||||
'NetworkGateway': '192.168.24.1'}}
|
'NetworkGateway': '192.168.24.1'}}
|
||||||
}
|
}
|
||||||
@ -330,6 +340,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.24.4', 'end': '192.168.24.99'},
|
{'start': '192.168.24.4', 'end': '192.168.24.99'},
|
||||||
{'start': '192.168.24.121', 'end': '192.168.24.220'}],
|
{'start': '192.168.24.121', 'end': '192.168.24.220'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.24.0/24',
|
'NetworkCidr': '192.168.24.0/24',
|
||||||
'NetworkGateway': '192.168.24.1'}}
|
'NetworkGateway': '192.168.24.1'}}
|
||||||
}
|
}
|
||||||
@ -347,6 +358,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
dhcp_exclude=[],
|
dhcp_exclude=[],
|
||||||
inspection_iprange='192.168.10.100,192.168.10.189',
|
inspection_iprange='192.168.10.100,192.168.10.189',
|
||||||
gateway='192.168.10.254',
|
gateway='192.168.10.254',
|
||||||
|
host_routes=[],
|
||||||
masquerade=True,
|
masquerade=True,
|
||||||
group='subnet1')
|
group='subnet1')
|
||||||
self.conf.config(cidr='192.168.20.0/24',
|
self.conf.config(cidr='192.168.20.0/24',
|
||||||
@ -355,6 +367,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
dhcp_exclude=[],
|
dhcp_exclude=[],
|
||||||
inspection_iprange='192.168.20.100,192.168.20.189',
|
inspection_iprange='192.168.20.100,192.168.20.189',
|
||||||
gateway='192.168.20.254',
|
gateway='192.168.20.254',
|
||||||
|
host_routes=[],
|
||||||
masquerade=True,
|
masquerade=True,
|
||||||
group='subnet2')
|
group='subnet2')
|
||||||
env = {}
|
env = {}
|
||||||
@ -393,16 +406,19 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
'ctlplane-subnet': {
|
'ctlplane-subnet': {
|
||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.24.5', 'end': '192.168.24.24'}],
|
{'start': '192.168.24.5', 'end': '192.168.24.24'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.24.0/24',
|
'NetworkCidr': '192.168.24.0/24',
|
||||||
'NetworkGateway': '192.168.24.1'},
|
'NetworkGateway': '192.168.24.1'},
|
||||||
'subnet1': {
|
'subnet1': {
|
||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.10.10', 'end': '192.168.10.99'}],
|
{'start': '192.168.10.10', 'end': '192.168.10.99'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.10.0/24',
|
'NetworkCidr': '192.168.10.0/24',
|
||||||
'NetworkGateway': '192.168.10.254'},
|
'NetworkGateway': '192.168.10.254'},
|
||||||
'subnet2': {
|
'subnet2': {
|
||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.20.10', 'end': '192.168.20.99'}],
|
{'start': '192.168.20.10', 'end': '192.168.20.99'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.20.0/24',
|
'NetworkCidr': '192.168.20.0/24',
|
||||||
'NetworkGateway': '192.168.20.254'}
|
'NetworkGateway': '192.168.20.254'}
|
||||||
}
|
}
|
||||||
@ -419,6 +435,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
dhcp_exclude=[],
|
dhcp_exclude=[],
|
||||||
inspection_iprange='192.168.10.100,192.168.10.189',
|
inspection_iprange='192.168.10.100,192.168.10.189',
|
||||||
gateway='192.168.10.254',
|
gateway='192.168.10.254',
|
||||||
|
host_routes=[],
|
||||||
group='subnet1')
|
group='subnet1')
|
||||||
self.conf.config(cidr='192.168.20.0/24',
|
self.conf.config(cidr='192.168.20.0/24',
|
||||||
dhcp_start='192.168.20.10',
|
dhcp_start='192.168.20.10',
|
||||||
@ -426,6 +443,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
dhcp_exclude=[],
|
dhcp_exclude=[],
|
||||||
inspection_iprange='192.168.20.100,192.168.20.189',
|
inspection_iprange='192.168.20.100,192.168.20.189',
|
||||||
gateway='192.168.20.254',
|
gateway='192.168.20.254',
|
||||||
|
host_routes=[],
|
||||||
group='subnet2')
|
group='subnet2')
|
||||||
env = {}
|
env = {}
|
||||||
undercloud_config._process_network_args(env)
|
undercloud_config._process_network_args(env)
|
||||||
@ -454,16 +472,19 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
'ctlplane-subnet': {
|
'ctlplane-subnet': {
|
||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.24.5', 'end': '192.168.24.24'}],
|
{'start': '192.168.24.5', 'end': '192.168.24.24'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.24.0/24',
|
'NetworkCidr': '192.168.24.0/24',
|
||||||
'NetworkGateway': '192.168.24.1'},
|
'NetworkGateway': '192.168.24.1'},
|
||||||
'subnet1': {
|
'subnet1': {
|
||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.10.10', 'end': '192.168.10.99'}],
|
{'start': '192.168.10.10', 'end': '192.168.10.99'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.10.0/24',
|
'NetworkCidr': '192.168.10.0/24',
|
||||||
'NetworkGateway': '192.168.10.254'},
|
'NetworkGateway': '192.168.10.254'},
|
||||||
'subnet2': {
|
'subnet2': {
|
||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.20.10', 'end': '192.168.20.99'}],
|
{'start': '192.168.20.10', 'end': '192.168.20.99'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.20.0/24',
|
'NetworkCidr': '192.168.20.0/24',
|
||||||
'NetworkGateway': '192.168.20.254'}
|
'NetworkGateway': '192.168.20.254'}
|
||||||
}
|
}
|
||||||
@ -477,6 +498,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
dhcp_exclude=[],
|
dhcp_exclude=[],
|
||||||
inspection_iprange='192.168.10.200,192.168.10.254',
|
inspection_iprange='192.168.10.200,192.168.10.254',
|
||||||
gateway='192.168.10.254',
|
gateway='192.168.10.254',
|
||||||
|
host_routes=[],
|
||||||
masquerade=False,
|
masquerade=False,
|
||||||
group='subnet1')
|
group='subnet1')
|
||||||
env = {}
|
env = {}
|
||||||
@ -501,11 +523,13 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
'ctlplane-subnet': {
|
'ctlplane-subnet': {
|
||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.24.5', 'end': '192.168.24.24'}],
|
{'start': '192.168.24.5', 'end': '192.168.24.24'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.24.0/24',
|
'NetworkCidr': '192.168.24.0/24',
|
||||||
'NetworkGateway': '192.168.24.1'},
|
'NetworkGateway': '192.168.24.1'},
|
||||||
'subnet1': {
|
'subnet1': {
|
||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.10.1', 'end': '192.168.10.199'}],
|
{'start': '192.168.10.1', 'end': '192.168.10.199'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.10.0/24',
|
'NetworkCidr': '192.168.10.0/24',
|
||||||
'NetworkGateway': '192.168.10.254'}
|
'NetworkGateway': '192.168.10.254'}
|
||||||
}
|
}
|
||||||
@ -519,6 +543,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
dhcp_exclude=[],
|
dhcp_exclude=[],
|
||||||
inspection_iprange='192.168.10.100,192.168.10.199',
|
inspection_iprange='192.168.10.100,192.168.10.199',
|
||||||
gateway='192.168.10.222',
|
gateway='192.168.10.222',
|
||||||
|
host_routes=[],
|
||||||
masquerade=False,
|
masquerade=False,
|
||||||
group='subnet1')
|
group='subnet1')
|
||||||
env = {}
|
env = {}
|
||||||
@ -543,6 +568,7 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
'ctlplane-subnet': {
|
'ctlplane-subnet': {
|
||||||
'AllocationPools': [
|
'AllocationPools': [
|
||||||
{'start': '192.168.24.5', 'end': '192.168.24.24'}],
|
{'start': '192.168.24.5', 'end': '192.168.24.24'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.24.0/24',
|
'NetworkCidr': '192.168.24.0/24',
|
||||||
'NetworkGateway': '192.168.24.1'},
|
'NetworkGateway': '192.168.24.1'},
|
||||||
'subnet1': {
|
'subnet1': {
|
||||||
@ -550,12 +576,88 @@ class TestNetworkSettings(base.TestCase):
|
|||||||
{'start': '192.168.10.1', 'end': '192.168.10.99'},
|
{'start': '192.168.10.1', 'end': '192.168.10.99'},
|
||||||
{'start': '192.168.10.200', 'end': '192.168.10.221'},
|
{'start': '192.168.10.200', 'end': '192.168.10.221'},
|
||||||
{'start': '192.168.10.223', 'end': '192.168.10.254'}],
|
{'start': '192.168.10.223', 'end': '192.168.10.254'}],
|
||||||
|
'HostRoutes': [],
|
||||||
'NetworkCidr': '192.168.10.0/24',
|
'NetworkCidr': '192.168.10.0/24',
|
||||||
'NetworkGateway': '192.168.10.222'}
|
'NetworkGateway': '192.168.10.222'}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.assertEqual(expected, env)
|
self.assertEqual(expected, env)
|
||||||
|
|
||||||
|
def test_additional_host_routes(self):
|
||||||
|
self.conf.config(subnets=['ctlplane-subnet', 'subnet1', 'subnet2'])
|
||||||
|
self.conf.config(host_routes=[{'destination': '10.10.10.254/32',
|
||||||
|
'nexthop': '192.168.24.1'}],
|
||||||
|
group='ctlplane-subnet')
|
||||||
|
self.conf.register_opts(self.opts, group=self.grp1)
|
||||||
|
self.conf.register_opts(self.opts, group=self.grp2)
|
||||||
|
self.conf.config(cidr='192.168.10.0/24',
|
||||||
|
dhcp_start='192.168.10.10',
|
||||||
|
dhcp_end='192.168.10.99',
|
||||||
|
dhcp_exclude=[],
|
||||||
|
inspection_iprange='192.168.10.100,192.168.10.189',
|
||||||
|
gateway='192.168.10.254',
|
||||||
|
host_routes=[{'destination': '10.10.10.254/32',
|
||||||
|
'nexthop': '192.168.10.254'}],
|
||||||
|
group='subnet1')
|
||||||
|
self.conf.config(cidr='192.168.20.0/24',
|
||||||
|
dhcp_start='192.168.20.10',
|
||||||
|
dhcp_end='192.168.20.99',
|
||||||
|
dhcp_exclude=[],
|
||||||
|
inspection_iprange='192.168.20.100,192.168.20.189',
|
||||||
|
gateway='192.168.20.254',
|
||||||
|
host_routes=[{'destination': '10.10.10.254/32',
|
||||||
|
'nexthop': '192.168.20.254'}],
|
||||||
|
group='subnet2')
|
||||||
|
env = {}
|
||||||
|
undercloud_config._process_network_args(env)
|
||||||
|
expected = {
|
||||||
|
'ControlPlaneStaticRoutes': [
|
||||||
|
{'ip_netmask': '192.168.10.0/24', 'next_hop': '192.168.24.1'},
|
||||||
|
{'ip_netmask': '192.168.20.0/24', 'next_hop': '192.168.24.1'},
|
||||||
|
{'ip_netmask': '10.10.10.254/32', 'next_hop': '192.168.24.1'}],
|
||||||
|
'DnsServers': '',
|
||||||
|
'IronicInspectorSubnets': [
|
||||||
|
{'gateway': '192.168.24.1',
|
||||||
|
'ip_range': '192.168.24.100,192.168.24.120',
|
||||||
|
'netmask': '255.255.255.0',
|
||||||
|
'tag': 'ctlplane-subnet'},
|
||||||
|
{'gateway': '192.168.10.254',
|
||||||
|
'ip_range': '192.168.10.100,192.168.10.189',
|
||||||
|
'netmask': '255.255.255.0',
|
||||||
|
'tag': 'subnet1'},
|
||||||
|
{'gateway': '192.168.20.254',
|
||||||
|
'ip_range': '192.168.20.100,192.168.20.189',
|
||||||
|
'netmask': '255.255.255.0',
|
||||||
|
'tag': 'subnet2'}
|
||||||
|
],
|
||||||
|
'MasqueradeNetworks': {},
|
||||||
|
'UndercloudCtlplaneSubnets': {
|
||||||
|
# The ctlplane-subnet subnet have defaults
|
||||||
|
'ctlplane-subnet': {
|
||||||
|
'AllocationPools': [
|
||||||
|
{'start': '192.168.24.5', 'end': '192.168.24.24'}],
|
||||||
|
'HostRoutes': [{'destination': '10.10.10.254/32',
|
||||||
|
'nexthop': '192.168.24.1'}],
|
||||||
|
'NetworkCidr': '192.168.24.0/24',
|
||||||
|
'NetworkGateway': '192.168.24.1'},
|
||||||
|
'subnet1': {
|
||||||
|
'AllocationPools': [
|
||||||
|
{'start': '192.168.10.10', 'end': '192.168.10.99'}],
|
||||||
|
'HostRoutes': [{'destination': '10.10.10.254/32',
|
||||||
|
'nexthop': '192.168.10.254'}],
|
||||||
|
'NetworkCidr': '192.168.10.0/24',
|
||||||
|
'NetworkGateway': '192.168.10.254'},
|
||||||
|
'subnet2': {
|
||||||
|
'AllocationPools': [
|
||||||
|
{'start': '192.168.20.10', 'end': '192.168.20.99'}],
|
||||||
|
'HostRoutes': [{'destination': '10.10.10.254/32',
|
||||||
|
'nexthop': '192.168.20.254'}],
|
||||||
|
'NetworkCidr': '192.168.20.0/24',
|
||||||
|
'NetworkGateway': '192.168.20.254'}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.assertEqual(expected, env)
|
||||||
|
|
||||||
|
|
||||||
class TestTLSSettings(base.TestCase):
|
class TestTLSSettings(base.TestCase):
|
||||||
def test_public_host_with_ip_should_give_ip_endpoint_environment(self):
|
def test_public_host_with_ip_should_give_ip_endpoint_environment(self):
|
||||||
|
@ -78,6 +78,7 @@ PARAMETER_MAPPING = {
|
|||||||
SUBNET_PARAMETER_MAPPING = {
|
SUBNET_PARAMETER_MAPPING = {
|
||||||
'cidr': 'NetworkCidr',
|
'cidr': 'NetworkCidr',
|
||||||
'gateway': 'NetworkGateway',
|
'gateway': 'NetworkGateway',
|
||||||
|
'host_routes': 'HostRoutes'
|
||||||
}
|
}
|
||||||
|
|
||||||
THT_HOME = os.environ.get('THT_HOME',
|
THT_HOME = os.environ.get('THT_HOME',
|
||||||
@ -237,6 +238,10 @@ def _generate_subnets_static_routes():
|
|||||||
continue
|
continue
|
||||||
s = CONF.get(subnet)
|
s = CONF.get(subnet)
|
||||||
env_list.append({'ip_netmask': s.cidr, 'next_hop': local_router})
|
env_list.append({'ip_netmask': s.cidr, 'next_hop': local_router})
|
||||||
|
for route in CONF.get(CONF.local_subnet).host_routes:
|
||||||
|
env_list.append({'ip_netmask': route['destination'],
|
||||||
|
'next_hop': route['nexthop']})
|
||||||
|
|
||||||
return env_list
|
return env_list
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user