Pass requested_network on network_attach
In RPC API, compute manager, and docker driver, change the 'network_attach' method to take a 'requested_network' dict instead of a network id. This set the stage for future patch that will extend the network_attach API to take more parameters than just the network id. Change-Id: Ic17be1aa3c58717324e52daffbe11580b6e9afd4 Partial-Bug: #1746654
This commit is contained in:
parent
e3bd9f9537
commit
188ecf5fec
@ -1029,9 +1029,8 @@ class ContainersController(base.Controller):
|
|||||||
"container:network_attach")
|
"container:network_attach")
|
||||||
context = pecan.request.context
|
context = pecan.request.context
|
||||||
compute_api = pecan.request.compute_api
|
compute_api = pecan.request.compute_api
|
||||||
neutron_api = neutron.NeutronAPI(context)
|
requested_networks = utils.build_requested_networks(context, [kwargs])
|
||||||
neutron_net = neutron_api.get_neutron_network(kwargs.get('network'))
|
compute_api.network_attach(context, container, requested_networks[0])
|
||||||
compute_api.network_attach(context, container, neutron_net['id'])
|
|
||||||
|
|
||||||
@base.Controller.api_version("1.13")
|
@base.Controller.api_version("1.13")
|
||||||
@pecan.expose('json')
|
@pecan.expose('json')
|
||||||
|
@ -1188,12 +1188,12 @@ class Manager(periodic_task.PeriodicTasks):
|
|||||||
|
|
||||||
@wrap_exception()
|
@wrap_exception()
|
||||||
@wrap_container_event(prefix='compute')
|
@wrap_container_event(prefix='compute')
|
||||||
def network_attach(self, context, container, network):
|
def network_attach(self, context, container, requested_network):
|
||||||
LOG.debug('Attach network: %(network)s to container: %(container)s.',
|
LOG.debug('Attach network: %(network)s to container: %(container)s.',
|
||||||
{'container': container, 'network': network})
|
{'container': container, 'network': requested_network})
|
||||||
self._update_task_state(context, container,
|
self._update_task_state(context, container,
|
||||||
consts.NETWORK_ATTACHING)
|
consts.NETWORK_ATTACHING)
|
||||||
self.driver.network_attach(context, container, network)
|
self.driver.network_attach(context, container, requested_network)
|
||||||
self._update_task_state(context, container, None)
|
self._update_task_state(context, container, None)
|
||||||
|
|
||||||
def network_create(self, context, network):
|
def network_create(self, context, network):
|
||||||
|
@ -199,9 +199,10 @@ class API(rpc_service.API):
|
|||||||
return self._call(container.host, 'network_detach',
|
return self._call(container.host, 'network_detach',
|
||||||
container=container, network=network)
|
container=container, network=network)
|
||||||
|
|
||||||
def network_attach(self, context, container, network):
|
def network_attach(self, context, container, requested_network):
|
||||||
return self._call(container.host, 'network_attach',
|
return self._call(container.host, 'network_attach',
|
||||||
container=container, network=network)
|
container=container,
|
||||||
|
requested_network=requested_network)
|
||||||
|
|
||||||
def network_create(self, context, new_network):
|
def network_create(self, context, new_network):
|
||||||
host = None
|
host = None
|
||||||
|
@ -1097,7 +1097,7 @@ class DockerDriver(driver.ContainerDriver):
|
|||||||
container.addresses = update
|
container.addresses = update
|
||||||
container.save(context)
|
container.save(context)
|
||||||
|
|
||||||
def network_attach(self, context, container, network):
|
def network_attach(self, context, container, requested_network):
|
||||||
with docker_utils.docker_client() as docker:
|
with docker_utils.docker_client() as docker:
|
||||||
security_group_ids = None
|
security_group_ids = None
|
||||||
if container.security_groups:
|
if container.security_groups:
|
||||||
@ -1105,6 +1105,7 @@ class DockerDriver(driver.ContainerDriver):
|
|||||||
context, container.security_groups)
|
context, container.security_groups)
|
||||||
network_api = zun_network.api(context,
|
network_api = zun_network.api(context,
|
||||||
docker_api=docker)
|
docker_api=docker)
|
||||||
|
network = requested_network['network']
|
||||||
if network in container.addresses:
|
if network in container.addresses:
|
||||||
raise exception.ZunException('Container %(container)s has'
|
raise exception.ZunException('Container %(container)s has'
|
||||||
' alreay connected to the network'
|
' alreay connected to the network'
|
||||||
@ -1112,11 +1113,6 @@ class DockerDriver(driver.ContainerDriver):
|
|||||||
% {'container': container.uuid,
|
% {'container': container.uuid,
|
||||||
'network': network})
|
'network': network})
|
||||||
self._get_or_create_docker_network(context, network_api, network)
|
self._get_or_create_docker_network(context, network_api, network)
|
||||||
requested_network = {'network': network,
|
|
||||||
'port': '',
|
|
||||||
'v4-fixed-ip': '',
|
|
||||||
'v6-fixed-ip': '',
|
|
||||||
'preserve_on_delete': False}
|
|
||||||
docker_net_name = self._get_docker_network_name(context, network)
|
docker_net_name = self._get_docker_network_name(context, network)
|
||||||
addrs = network_api.connect_container_to_network(
|
addrs = network_api.connect_container_to_network(
|
||||||
container, docker_net_name, requested_network,
|
container, docker_net_name, requested_network,
|
||||||
|
@ -258,7 +258,7 @@ class ContainerDriver(object):
|
|||||||
def network_detach(self, context, container, network):
|
def network_detach(self, context, container, network):
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
def network_attach(self, context, container, network):
|
def network_attach(self, context, container, requested_network):
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
def create_network(self, context, network):
|
def create_network(self, context, network):
|
||||||
|
@ -450,7 +450,8 @@ class TestAPI(base.TestCase):
|
|||||||
self.context, container.uuid,
|
self.context, container.uuid,
|
||||||
container_actions.NETWORK_ATTACH, want_result=False)
|
container_actions.NETWORK_ATTACH, want_result=False)
|
||||||
mock_call.assert_called_once_with(
|
mock_call.assert_called_once_with(
|
||||||
container.host, "network_attach", container=container, network={})
|
container.host, "network_attach", container=container,
|
||||||
|
requested_network={})
|
||||||
|
|
||||||
@mock.patch('zun.compute.rpcapi.API._call')
|
@mock.patch('zun.compute.rpcapi.API._call')
|
||||||
@mock.patch.object(objects.ContainerAction, 'action_start')
|
@mock.patch.object(objects.ContainerAction, 'action_start')
|
||||||
|
@ -796,24 +796,30 @@ class TestDockerDriver(base.DriverTestCase):
|
|||||||
mock_container.security_groups = None
|
mock_container.security_groups = None
|
||||||
mock_container.addresses = {}
|
mock_container.addresses = {}
|
||||||
mock_list.return_value = {'network': 'network'}
|
mock_list.return_value = {'network': 'network'}
|
||||||
requested_network = [{'network': 'network',
|
requested_network = {'network': 'network',
|
||||||
'port': '',
|
'port': '',
|
||||||
'v4-fixed-ip': '',
|
'v4-fixed-ip': '',
|
||||||
'v6-fixed-ip': '',
|
'v6-fixed-ip': '',
|
||||||
'preserve_on_delete': False}]
|
'preserve_on_delete': False}
|
||||||
self.driver.network_attach(self.context, mock_container, 'network')
|
self.driver.network_attach(self.context, mock_container,
|
||||||
|
requested_network)
|
||||||
mock_connect.assert_called_once_with(mock_container,
|
mock_connect.assert_called_once_with(mock_container,
|
||||||
'network',
|
'network',
|
||||||
requested_network[0],
|
requested_network,
|
||||||
security_groups=None)
|
security_groups=None)
|
||||||
|
|
||||||
def test_network_attach_error(self):
|
def test_network_attach_error(self):
|
||||||
mock_container = mock.Mock()
|
mock_container = mock.Mock()
|
||||||
mock_container.security_groups = None
|
mock_container.security_groups = None
|
||||||
mock_container.addresses = {'already-attached-net': []}
|
mock_container.addresses = {'already-attached-net': []}
|
||||||
|
requested_network = {'network': 'already-attached-net',
|
||||||
|
'port': '',
|
||||||
|
'v4-fixed-ip': '',
|
||||||
|
'v6-fixed-ip': '',
|
||||||
|
'preserve_on_delete': False}
|
||||||
self.assertRaises(exception.ZunException,
|
self.assertRaises(exception.ZunException,
|
||||||
self.driver.network_attach,
|
self.driver.network_attach,
|
||||||
self.context, mock_container, 'already-attached-net')
|
self.context, mock_container, requested_network)
|
||||||
|
|
||||||
@mock.patch('zun.common.utils.get_security_group_ids')
|
@mock.patch('zun.common.utils.get_security_group_ids')
|
||||||
@mock.patch('zun.network.kuryr_network.KuryrNetwork'
|
@mock.patch('zun.network.kuryr_network.KuryrNetwork'
|
||||||
@ -829,15 +835,16 @@ class TestDockerDriver(base.DriverTestCase):
|
|||||||
mock_container.addresses = {}
|
mock_container.addresses = {}
|
||||||
mock_list.return_value = {'network': 'network'}
|
mock_list.return_value = {'network': 'network'}
|
||||||
mock_get_sec_group_id.return_value = test_sec_group_id
|
mock_get_sec_group_id.return_value = test_sec_group_id
|
||||||
requested_network = [{'network': 'network',
|
requested_network = {'network': 'network',
|
||||||
'port': '',
|
'port': '',
|
||||||
'v4-fixed-ip': '',
|
'v4-fixed-ip': '',
|
||||||
'v6-fixed-ip': '',
|
'v6-fixed-ip': '',
|
||||||
'preserve_on_delete': False}]
|
'preserve_on_delete': False}
|
||||||
self.driver.network_attach(self.context, mock_container, 'network')
|
self.driver.network_attach(self.context, mock_container,
|
||||||
|
requested_network)
|
||||||
mock_connect.assert_called_once_with(mock_container,
|
mock_connect.assert_called_once_with(mock_container,
|
||||||
'network',
|
'network',
|
||||||
requested_network[0],
|
requested_network,
|
||||||
security_groups=test_sec_group_id)
|
security_groups=test_sec_group_id)
|
||||||
|
|
||||||
@mock.patch('zun.common.utils.execute')
|
@mock.patch('zun.common.utils.execute')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user