Fix network-v2 node port idempotency
Store the 'name_upper' of the networks in the
network name id map, and use this name when
setting the port name in port definitions.
The port name is checked agains existing ports,
and since THT uses the upper case network name
when setting the port name the same (name_upper)
must be used here.
Closes-Bug: #1928711
Related: blueprint network-data-v2-ports
Change-Id: Iac7f351ce9ee965c17b6bc2956d140efe25ffcf4
(cherry picked from commit f6bb059017
)
This commit is contained in:
parent
3f20fc1dad
commit
a73d2ec0db
|
@ -476,9 +476,13 @@ def create_name_id_maps(conn):
|
||||||
net_id_map = {}
|
net_id_map = {}
|
||||||
cidr_prefix_map = {}
|
cidr_prefix_map = {}
|
||||||
for net in conn.network.networks():
|
for net in conn.network.networks():
|
||||||
|
tags = tags_to_dict(net.tags)
|
||||||
subnets = conn.network.subnets(network_id=net.id)
|
subnets = conn.network.subnets(network_id=net.id)
|
||||||
net_id_map[net.id] = net.name
|
net_id_map[net.id] = net.name
|
||||||
net_name_map[net.name] = dict(id=net.id)
|
net_name_map[net.name] = dict(
|
||||||
|
id=net.id,
|
||||||
|
name_upper=tags.get('tripleo_network_name')
|
||||||
|
)
|
||||||
subnets_map = net_name_map[net.name]['subnets'] = dict()
|
subnets_map = net_name_map[net.name]['subnets'] = dict()
|
||||||
|
|
||||||
for s in subnets:
|
for s in subnets:
|
||||||
|
|
|
@ -302,6 +302,7 @@ def generate_port_defs(net_maps, instance, inst_ports):
|
||||||
|
|
||||||
for net in instance['networks']:
|
for net in instance['networks']:
|
||||||
net_name = net['network']
|
net_name = net['network']
|
||||||
|
net_name_upper = net_maps['by_name'][net_name]['name_upper']
|
||||||
|
|
||||||
if net.get('vif', False):
|
if net.get('vif', False):
|
||||||
# VIF port's are managed by metalsmith.
|
# VIF port's are managed by metalsmith.
|
||||||
|
@ -326,7 +327,7 @@ def generate_port_defs(net_maps, instance, inst_ports):
|
||||||
|
|
||||||
fixed_ips = [{'subnet_id': subnet_id}]
|
fixed_ips = [{'subnet_id': subnet_id}]
|
||||||
|
|
||||||
port_name = '_'.join([hostname, net_name])
|
port_name = '_'.join([hostname, net_name_upper])
|
||||||
|
|
||||||
port_def = dict(name=port_name, dns_name=hostname, network_id=net_id,
|
port_def = dict(name=port_name, dns_name=hostname, network_id=net_id,
|
||||||
fixed_ips=fixed_ips)
|
fixed_ips=fixed_ips)
|
||||||
|
|
|
@ -444,12 +444,14 @@ class TestNetworkDataV2(tests_base.TestCase):
|
||||||
network1 = stubs.FakeNeutronNetwork(
|
network1 = stubs.FakeNeutronNetwork(
|
||||||
id='network1_id',
|
id='network1_id',
|
||||||
name='network1',
|
name='network1',
|
||||||
subnet_ids=['subnet1_id', 'subnet2_id']
|
subnet_ids=['subnet1_id', 'subnet2_id'],
|
||||||
|
tags=['tripleo_network_name=Network1']
|
||||||
)
|
)
|
||||||
network2 = stubs.FakeNeutronNetwork(
|
network2 = stubs.FakeNeutronNetwork(
|
||||||
id='network2_id',
|
id='network2_id',
|
||||||
name='network2',
|
name='network2',
|
||||||
subnet_ids=['subnet3_id', 'subnet4_id']
|
subnet_ids=['subnet3_id', 'subnet4_id'],
|
||||||
|
tags=['tripleo_network_name=Network2']
|
||||||
)
|
)
|
||||||
conn_mock.network.networks.return_value = self.a2g([network1,
|
conn_mock.network.networks.return_value = self.a2g([network1,
|
||||||
network2])
|
network2])
|
||||||
|
@ -459,6 +461,7 @@ class TestNetworkDataV2(tests_base.TestCase):
|
||||||
expected_by_name_map = {
|
expected_by_name_map = {
|
||||||
'network1': {
|
'network1': {
|
||||||
'id': 'network1_id',
|
'id': 'network1_id',
|
||||||
|
'name_upper': 'Network1',
|
||||||
'subnets': {
|
'subnets': {
|
||||||
'subnet1': 'subnet1_id',
|
'subnet1': 'subnet1_id',
|
||||||
'subnet2': 'subnet2_id'
|
'subnet2': 'subnet2_id'
|
||||||
|
@ -466,6 +469,7 @@ class TestNetworkDataV2(tests_base.TestCase):
|
||||||
},
|
},
|
||||||
'network2': {
|
'network2': {
|
||||||
'id': 'network2_id',
|
'id': 'network2_id',
|
||||||
|
'name_upper': 'Network2',
|
||||||
'subnets': {
|
'subnets': {
|
||||||
'subnet3': 'subnet3_id',
|
'subnet3': 'subnet3_id',
|
||||||
'subnet4': 'subnet4_id'
|
'subnet4': 'subnet4_id'
|
||||||
|
|
|
@ -38,18 +38,21 @@ FAKE_INSTANCE = {
|
||||||
FAKE_NET_NAME_MAP = {
|
FAKE_NET_NAME_MAP = {
|
||||||
'ctlplane': {
|
'ctlplane': {
|
||||||
'id': 'ctlplane_id',
|
'id': 'ctlplane_id',
|
||||||
|
'name_upper': 'ctlplane',
|
||||||
'subnets': {
|
'subnets': {
|
||||||
'ctlplane-subnet': 'ctlplane_subnet_id'
|
'ctlplane-subnet': 'ctlplane_subnet_id'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'foo': {
|
'foo': {
|
||||||
'id': 'foo_id',
|
'id': 'foo_id',
|
||||||
|
'name_upper': 'Foo',
|
||||||
'subnets': {
|
'subnets': {
|
||||||
'foo_subnet': 'foo_subnet_id',
|
'foo_subnet': 'foo_subnet_id',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'bar': {
|
'bar': {
|
||||||
'id': 'bar_id',
|
'id': 'bar_id',
|
||||||
|
'name_upper': 'Bar',
|
||||||
'subnets': {
|
'subnets': {
|
||||||
'bar_subnet': 'bar_subnet_id',
|
'bar_subnet': 'bar_subnet_id',
|
||||||
}
|
}
|
||||||
|
@ -121,11 +124,11 @@ class TestTripleoOvercloudNetworkPorts(tests_base.TestCase):
|
||||||
create_port_defs, update_port_defs = plugin.generate_port_defs(
|
create_port_defs, update_port_defs = plugin.generate_port_defs(
|
||||||
FAKE_MAPS, FAKE_INSTANCE, inst_ports)
|
FAKE_MAPS, FAKE_INSTANCE, inst_ports)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
{'name': 'instance0_foo',
|
{'name': 'instance0_Foo',
|
||||||
'dns_name': 'instance0',
|
'dns_name': 'instance0',
|
||||||
'network_id': 'foo_id',
|
'network_id': 'foo_id',
|
||||||
'fixed_ips': [{'subnet_id': 'foo_subnet_id'}]},
|
'fixed_ips': [{'subnet_id': 'foo_subnet_id'}]},
|
||||||
{'name': 'instance0_bar',
|
{'name': 'instance0_Bar',
|
||||||
'dns_name': 'instance0',
|
'dns_name': 'instance0',
|
||||||
'network_id': 'bar_id',
|
'network_id': 'bar_id',
|
||||||
'fixed_ips': [{'subnet_id': 'bar_subnet_id'}]},
|
'fixed_ips': [{'subnet_id': 'bar_subnet_id'}]},
|
||||||
|
@ -134,21 +137,21 @@ class TestTripleoOvercloudNetworkPorts(tests_base.TestCase):
|
||||||
|
|
||||||
def test_generate_port_defs_update(self):
|
def test_generate_port_defs_update(self):
|
||||||
port_foo = stubs.FakeNeutronPort(
|
port_foo = stubs.FakeNeutronPort(
|
||||||
name='instance0_foo', network_id='foo_id',
|
name='instance0_Foo', network_id='foo_id',
|
||||||
fixed_ips=[{'subnet_id': 'foo_subnet_id'}])
|
fixed_ips=[{'subnet_id': 'foo_subnet_id'}])
|
||||||
port_bar = stubs.FakeNeutronPort(
|
port_bar = stubs.FakeNeutronPort(
|
||||||
name='instance0_bar', network_id='bar_id',
|
name='instance0_Bar', network_id='bar_id',
|
||||||
fixed_ips=[{'subnet_id': 'bar_subnet_id'}])
|
fixed_ips=[{'subnet_id': 'bar_subnet_id'}])
|
||||||
inst_ports = [port_foo, port_bar]
|
inst_ports = [port_foo, port_bar]
|
||||||
create_port_defs, update_port_defs = plugin.generate_port_defs(
|
create_port_defs, update_port_defs = plugin.generate_port_defs(
|
||||||
FAKE_MAPS, FAKE_INSTANCE, inst_ports)
|
FAKE_MAPS, FAKE_INSTANCE, inst_ports)
|
||||||
self.assertEqual([], create_port_defs)
|
self.assertEqual([], create_port_defs)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
{'name': 'instance0_foo',
|
{'name': 'instance0_Foo',
|
||||||
'dns_name': 'instance0',
|
'dns_name': 'instance0',
|
||||||
'network_id': 'foo_id',
|
'network_id': 'foo_id',
|
||||||
'fixed_ips': [{'subnet_id': 'foo_subnet_id'}]},
|
'fixed_ips': [{'subnet_id': 'foo_subnet_id'}]},
|
||||||
{'name': 'instance0_bar',
|
{'name': 'instance0_Bar',
|
||||||
'dns_name': 'instance0',
|
'dns_name': 'instance0',
|
||||||
'network_id': 'bar_id',
|
'network_id': 'bar_id',
|
||||||
'fixed_ips': [{'subnet_id': 'bar_subnet_id'}]}
|
'fixed_ips': [{'subnet_id': 'bar_subnet_id'}]}
|
||||||
|
@ -156,19 +159,19 @@ class TestTripleoOvercloudNetworkPorts(tests_base.TestCase):
|
||||||
|
|
||||||
def test_generate_port_defs_create_and_update(self):
|
def test_generate_port_defs_create_and_update(self):
|
||||||
port_foo = stubs.FakeNeutronPort(
|
port_foo = stubs.FakeNeutronPort(
|
||||||
name='instance0_foo', network_id='foo_id',
|
name='instance0_Foo', network_id='foo_id',
|
||||||
fixed_ips=[{'subnet_id': 'foo_subnet_id'}])
|
fixed_ips=[{'subnet_id': 'foo_subnet_id'}])
|
||||||
inst_ports = [port_foo]
|
inst_ports = [port_foo]
|
||||||
create_port_defs, update_port_defs = plugin.generate_port_defs(
|
create_port_defs, update_port_defs = plugin.generate_port_defs(
|
||||||
FAKE_MAPS, FAKE_INSTANCE, inst_ports)
|
FAKE_MAPS, FAKE_INSTANCE, inst_ports)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
{'name': 'instance0_bar',
|
{'name': 'instance0_Bar',
|
||||||
'dns_name': 'instance0',
|
'dns_name': 'instance0',
|
||||||
'network_id': 'bar_id',
|
'network_id': 'bar_id',
|
||||||
'fixed_ips': [{'subnet_id': 'bar_subnet_id'}]},
|
'fixed_ips': [{'subnet_id': 'bar_subnet_id'}]},
|
||||||
], create_port_defs)
|
], create_port_defs)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
{'name': 'instance0_foo',
|
{'name': 'instance0_Foo',
|
||||||
'dns_name': 'instance0',
|
'dns_name': 'instance0',
|
||||||
'network_id': 'foo_id',
|
'network_id': 'foo_id',
|
||||||
'fixed_ips': [{'subnet_id': 'foo_subnet_id'}]},
|
'fixed_ips': [{'subnet_id': 'foo_subnet_id'}]},
|
||||||
|
@ -182,11 +185,11 @@ class TestTripleoOvercloudNetworkPorts(tests_base.TestCase):
|
||||||
create_port_defs, update_port_defs = plugin.generate_port_defs(
|
create_port_defs, update_port_defs = plugin.generate_port_defs(
|
||||||
FAKE_MAPS, instance, inst_ports)
|
FAKE_MAPS, instance, inst_ports)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
{'name': 'instance0_foo',
|
{'name': 'instance0_Foo',
|
||||||
'dns_name': 'instance0',
|
'dns_name': 'instance0',
|
||||||
'network_id': 'foo_id',
|
'network_id': 'foo_id',
|
||||||
'fixed_ips': [{'subnet_id': 'foo_subnet_id'}]},
|
'fixed_ips': [{'subnet_id': 'foo_subnet_id'}]},
|
||||||
{'name': 'instance0_bar',
|
{'name': 'instance0_Bar',
|
||||||
'dns_name': 'instance0',
|
'dns_name': 'instance0',
|
||||||
'network_id': 'bar_id',
|
'network_id': 'bar_id',
|
||||||
'fixed_ips': [{'subnet_id': 'bar_subnet_id'}]},
|
'fixed_ips': [{'subnet_id': 'bar_subnet_id'}]},
|
||||||
|
@ -220,11 +223,11 @@ class TestTripleoOvercloudNetworkPorts(tests_base.TestCase):
|
||||||
create_port_defs, update_port_defs = plugin.generate_port_defs(
|
create_port_defs, update_port_defs = plugin.generate_port_defs(
|
||||||
maps, instance, inst_ports)
|
maps, instance, inst_ports)
|
||||||
self.assertEqual([
|
self.assertEqual([
|
||||||
{'name': 'instance0_foo',
|
{'name': 'instance0_Foo',
|
||||||
'dns_name': 'instance0',
|
'dns_name': 'instance0',
|
||||||
'network_id': 'foo_id',
|
'network_id': 'foo_id',
|
||||||
'fixed_ips': [{'ip_address': 'baz_fixed_ip'}]},
|
'fixed_ips': [{'ip_address': 'baz_fixed_ip'}]},
|
||||||
{'name': 'instance0_bar',
|
{'name': 'instance0_Bar',
|
||||||
'dns_name': 'instance0',
|
'dns_name': 'instance0',
|
||||||
'network_id': 'bar_id',
|
'network_id': 'bar_id',
|
||||||
'fixed_ips': [{'ip_address': 'bar_fixed_ip'}]},
|
'fixed_ips': [{'ip_address': 'bar_fixed_ip'}]},
|
||||||
|
@ -353,11 +356,11 @@ class TestTripleoOvercloudNetworkPorts(tests_base.TestCase):
|
||||||
def test__provision_ports_create(self, mock_conn, mock_pre_provisioned,
|
def test__provision_ports_create(self, mock_conn, mock_pre_provisioned,
|
||||||
mock_create_ports, mock_update_ports):
|
mock_create_ports, mock_update_ports):
|
||||||
create_port_defs = [
|
create_port_defs = [
|
||||||
dict(name='instance0_foo',
|
dict(name='instance0_Foo',
|
||||||
dns_name='instance0',
|
dns_name='instance0',
|
||||||
network_id='foo_id',
|
network_id='foo_id',
|
||||||
fixed_ips=[{'subnet_id': 'foo_subnet_id'}]),
|
fixed_ips=[{'subnet_id': 'foo_subnet_id'}]),
|
||||||
dict(name='instance0_bar',
|
dict(name='instance0_Bar',
|
||||||
dns_name='instance0',
|
dns_name='instance0',
|
||||||
network_id='bar_id',
|
network_id='bar_id',
|
||||||
fixed_ips=[{'subnet_id': 'bar_subnet_id'}]),
|
fixed_ips=[{'subnet_id': 'bar_subnet_id'}]),
|
||||||
|
@ -385,23 +388,23 @@ class TestTripleoOvercloudNetworkPorts(tests_base.TestCase):
|
||||||
def test__provision_ports_update(self, mock_conn, mock_pre_provisioned,
|
def test__provision_ports_update(self, mock_conn, mock_pre_provisioned,
|
||||||
mock_create_ports, mock_update_ports):
|
mock_create_ports, mock_update_ports):
|
||||||
port_foo = stubs.FakeNeutronPort(
|
port_foo = stubs.FakeNeutronPort(
|
||||||
name='instance0_foo',
|
name='instance0_Foo',
|
||||||
dns_name='instance0',
|
dns_name='instance0',
|
||||||
network_id='foo_id',
|
network_id='foo_id',
|
||||||
fixed_ips=[{'subnet_id': 'foo_subnet_id'}],
|
fixed_ips=[{'subnet_id': 'foo_subnet_id'}],
|
||||||
tags=[])
|
tags=[])
|
||||||
port_bar = stubs.FakeNeutronPort(
|
port_bar = stubs.FakeNeutronPort(
|
||||||
name='instance0_bar',
|
name='instance0_Bar',
|
||||||
dns_name='instance0',
|
dns_name='instance0',
|
||||||
network_id='bar_id',
|
network_id='bar_id',
|
||||||
fixed_ips=[{'subnet_id': 'bar_subnet_id'}],
|
fixed_ips=[{'subnet_id': 'bar_subnet_id'}],
|
||||||
tags=[])
|
tags=[])
|
||||||
update_port_defs = [
|
update_port_defs = [
|
||||||
dict(name='instance0_foo',
|
dict(name='instance0_Foo',
|
||||||
dns_name='instance0',
|
dns_name='instance0',
|
||||||
network_id='foo_id',
|
network_id='foo_id',
|
||||||
fixed_ips=[{'subnet_id': 'foo_subnet_id'}]),
|
fixed_ips=[{'subnet_id': 'foo_subnet_id'}]),
|
||||||
dict(name='instance0_bar',
|
dict(name='instance0_Bar',
|
||||||
dns_name='instance0',
|
dns_name='instance0',
|
||||||
network_id='bar_id',
|
network_id='bar_id',
|
||||||
fixed_ips=[{'subnet_id': 'bar_subnet_id'}]),
|
fixed_ips=[{'subnet_id': 'bar_subnet_id'}]),
|
||||||
|
@ -432,19 +435,19 @@ class TestTripleoOvercloudNetworkPorts(tests_base.TestCase):
|
||||||
mock_create_ports,
|
mock_create_ports,
|
||||||
mock_update_ports):
|
mock_update_ports):
|
||||||
port_foo = stubs.FakeNeutronPort(
|
port_foo = stubs.FakeNeutronPort(
|
||||||
name='instance0_foo',
|
name='instance0_Foo',
|
||||||
dns_name='instance0',
|
dns_name='instance0',
|
||||||
network_id='foo_id',
|
network_id='foo_id',
|
||||||
fixed_ips=[{'subnet_id': 'foo_subnet_id'}],
|
fixed_ips=[{'subnet_id': 'foo_subnet_id'}],
|
||||||
tags=[])
|
tags=[])
|
||||||
create_port_defs = [
|
create_port_defs = [
|
||||||
dict(name='instance0_bar',
|
dict(name='instance0_Bar',
|
||||||
dns_name='instance0',
|
dns_name='instance0',
|
||||||
network_id='bar_id',
|
network_id='bar_id',
|
||||||
fixed_ips=[{'subnet_id': 'bar_subnet_id'}]),
|
fixed_ips=[{'subnet_id': 'bar_subnet_id'}]),
|
||||||
]
|
]
|
||||||
update_port_defs = [
|
update_port_defs = [
|
||||||
dict(name='instance0_foo',
|
dict(name='instance0_Foo',
|
||||||
dns_name='instance0',
|
dns_name='instance0',
|
||||||
network_id='foo_id',
|
network_id='foo_id',
|
||||||
fixed_ips=[{'subnet_id': 'foo_subnet_id'}]),
|
fixed_ips=[{'subnet_id': 'foo_subnet_id'}]),
|
||||||
|
|
Loading…
Reference in New Issue