Preserve preexisting ports on container delete
This patch allow the existing port to be unbound from the container on container delete whereupon the port will still exist but not be associated with the container. Change-Id: Id047ccf8b7189a0fd149ac88f3776f2573c319cd Closes-Bug: #1704016
This commit is contained in:
parent
deaa99a797
commit
223c8d9976
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user