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

View File

@ -192,6 +192,7 @@ class KuryrNetwork(network.Network):
ipv4_address = None ipv4_address = None
ipv6_address = None ipv6_address = None
preserve_on_delete = requested_network['preserve_on_delete']
addresses = [] addresses = []
for fixed_ip in neutron_port['fixed_ips']: for fixed_ip in neutron_port['fixed_ips']:
ip_address = fixed_ip['ip_address'] ip_address = fixed_ip['ip_address']
@ -201,14 +202,16 @@ class KuryrNetwork(network.Network):
addresses.append({ addresses.append({
'addr': ip_address, 'addr': ip_address,
'version': 4, 'version': 4,
'port': neutron_port['id'] 'port': neutron_port['id'],
'preserve_on_delete': preserve_on_delete
}) })
else: else:
ipv6_address = ip_address ipv6_address = ip_address
addresses.append({ addresses.append({
'addr': ip_address, 'addr': ip_address,
'version': 6, 'version': 6,
'port': neutron_port['id'] 'port': neutron_port['id'],
'preserve_on_delete': preserve_on_delete
}) })
kwargs = {} kwargs = {}
@ -230,8 +233,9 @@ class KuryrNetwork(network.Network):
if container.addresses and neutron_network_id: if container.addresses and neutron_network_id:
addrs_list = container.addresses.get(neutron_network_id, []) addrs_list = container.addresses.get(neutron_network_id, [])
for addr in addrs_list: for addr in addrs_list:
port_id = addr['port'] if not addr['preserve_on_delete']:
neutron_ports.add(port_id) port_id = addr['port']
neutron_ports.add(port_id)
try: try:
self.docker.disconnect_container_from_network(container_id, 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'], self.assertEqual(fake_port['network_id'],
requested_networks[0]['network']) requested_networks[0]['network'])
self.assertEqual(fake_port['id'], requested_networks[0]['port']) self.assertEqual(fake_port['id'], requested_networks[0]['port'])
self.assertTrue(requested_networks[0]['preserve_on_delete'])
def side_effect(*args, **kwargs): def side_effect(*args, **kwargs):
(ctx, cnt, force) = args (ctx, cnt, force) = args

View File

@ -110,9 +110,9 @@ class KuryrNetowrkTestCase(base.TestCase):
container = Container(self.context, **utils.get_test_container()) container = Container(self.context, **utils.get_test_container())
network_name = 'c02afe4e-8350-4263-8078' network_name = 'c02afe4e-8350-4263-8078'
kwargs = {'ip_version': 4, 'ipv4_address': '192.168.2.22', 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', 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, address = self.network_api.connect_container_to_network(container,
network_name, network_name,
kwargs) kwargs)