Merge "Preserve preexisting ports on container delete"

This commit is contained in:
Zuul 2017-11-14 02:24:24 +00:00 committed by Gerrit Code Review
commit f480a90e4e
4 changed files with 17 additions and 9 deletions

View File

@ -400,7 +400,8 @@ class ContainersController(base.Controller):
network.get('router:external'),
'shared': network.get('shared'),
'v4-fixed-ip': '',
'v6-fixed-ip': ''})
'v6-fixed-ip': '',
'preserve_on_delete': True})
elif net.get('network'):
network = neutron_api.get_neutron_network(net['network'])
requested_networks.append({'network': network['id'],
@ -411,7 +412,8 @@ class ContainersController(base.Controller):
'v4-fixed-ip':
net.get('v4-fixed-ip', ''),
'v6-fixed-ip':
net.get('v6-fixed-ip', '')})
net.get('v6-fixed-ip', ''),
'preserve_on_delete': False})
if not requested_networks:
# Find an available neutron net and create docker network by
@ -420,7 +422,8 @@ class ContainersController(base.Controller):
requested_networks.append({'network': neutron_net['id'],
'port': '',
'v4-fixed-ip': '',
'v6-fixed-ip': ''})
'v6-fixed-ip': '',
'preserve_on_delete': False})
self._check_external_network_attach(context, requested_networks)
return requested_networks

View File

@ -192,6 +192,7 @@ class KuryrNetwork(network.Network):
ipv4_address = None
ipv6_address = None
preserve_on_delete = requested_network['preserve_on_delete']
addresses = []
for fixed_ip in neutron_port['fixed_ips']:
ip_address = fixed_ip['ip_address']
@ -201,14 +202,16 @@ class KuryrNetwork(network.Network):
addresses.append({
'addr': ip_address,
'version': 4,
'port': neutron_port['id']
'port': neutron_port['id'],
'preserve_on_delete': preserve_on_delete
})
else:
ipv6_address = ip_address
addresses.append({
'addr': ip_address,
'version': 6,
'port': neutron_port['id']
'port': neutron_port['id'],
'preserve_on_delete': preserve_on_delete
})
kwargs = {}
@ -230,8 +233,9 @@ class KuryrNetwork(network.Network):
if container.addresses and neutron_network_id:
addrs_list = container.addresses.get(neutron_network_id, [])
for addr in addrs_list:
port_id = addr['port']
neutron_ports.add(port_id)
if not addr['preserve_on_delete']:
port_id = addr['port']
neutron_ports.add(port_id)
try:
self.docker.disconnect_container_from_network(container_id,

View File

@ -646,6 +646,7 @@ class TestContainerController(api_base.FunctionalTest):
self.assertEqual(fake_port['network_id'],
requested_networks[0]['network'])
self.assertEqual(fake_port['id'], requested_networks[0]['port'])
self.assertTrue(requested_networks[0]['preserve_on_delete'])
def side_effect(*args, **kwargs):
(ctx, cnt, force) = args

View File

@ -110,9 +110,9 @@ class KuryrNetowrkTestCase(base.TestCase):
container = Container(self.context, **utils.get_test_container())
network_name = 'c02afe4e-8350-4263-8078'
kwargs = {'ip_version': 4, 'ipv4_address': '192.168.2.22',
'port': '1234567'}
'port': '1234567', 'preserve_on_delete': True}
expected = [{'version': 4, 'addr': '192.168.2.22',
'port': '1234567'}]
'port': '1234567', 'preserve_on_delete': True}]
address = self.network_api.connect_container_to_network(container,
network_name,
kwargs)