Support detach neutron port from container

This is the client side support for detaching container
from specific neutron port. In particular, this patch adds
parameter '--port' to network-detach command.

Depends-On: Ibe7795885b93e325262130dd5e67bfbeb5a23cf9
Change-Id: I24021b55a37c003b7ead8fa6ee973382ffcaec7c
Closes-Bug: #1776131
This commit is contained in:
Hongbin Lu 2018-06-11 03:38:15 +00:00
parent faa9528401
commit f423c58c68
6 changed files with 33 additions and 14 deletions

View File

@ -31,7 +31,7 @@ if not LOG.handlers:
HEADER_NAME = "OpenStack-API-Version"
SERVICE_TYPE = "container"
MIN_API_VERSION = '1.1'
MAX_API_VERSION = '1.14'
MAX_API_VERSION = '1.17'
DEFAULT_API_VERSION = MAX_API_VERSION
_SUBSTITUTIONS = {}

View File

@ -1117,10 +1117,15 @@ class NetworkDetach(command.Command):
'container',
metavar='<container>',
help='ID or name of the container to detach network.')
parser.add_argument(
'network',
network_port_args = parser.add_mutually_exclusive_group()
network_port_args.add_argument(
'--network',
metavar='<network>',
help='The network for specified container to detach.')
network_port_args.add_argument(
'--port',
metavar='<port>',
help='The port for specified container to detach.')
return parser
def take_action(self, parsed_args):
@ -1128,6 +1133,7 @@ class NetworkDetach(command.Command):
opts = {}
opts['container'] = parsed_args.container
opts['network'] = parsed_args.network
opts['port'] = parsed_args.port
opts = zun_utils.remove_null_parms(**opts)
try:
client.containers.network_detach(**opts)
@ -1149,9 +1155,13 @@ class NetworkAttach(command.Command):
metavar='<container>',
help='ID or name of the container to attach network.')
parser.add_argument(
'network',
'--network',
metavar='<network>',
help='The network for specified container to attach.')
parser.add_argument(
'--port',
metavar='<port>',
help='The port for specified container to attach.')
return parser
def take_action(self, parsed_args):
@ -1159,6 +1169,7 @@ class NetworkAttach(command.Command):
opts = {}
opts['container'] = parsed_args.container
opts['network'] = parsed_args.network
opts['port'] = parsed_args.port
opts = zun_utils.remove_null_parms(**opts)
try:
client.containers.network_attach(**opts)

View File

@ -246,7 +246,7 @@ class ShellTest(utils.TestCase):
project_domain_id='', project_domain_name='',
user_domain_id='', user_domain_name='', profile=None,
endpoint_override=None, insecure=False,
version=api_versions.APIVersion('1.14'))
version=api_versions.APIVersion('1.17'))
def test_main_option_region(self):
self.make_env()
@ -274,7 +274,7 @@ class ShellTest(utils.TestCase):
project_domain_id='', project_domain_name='',
user_domain_id='', user_domain_name='', profile=None,
endpoint_override=None, insecure=False,
version=api_versions.APIVersion('1.14'))
version=api_versions.APIVersion('1.17'))
@mock.patch('zunclient.client.Client')
def test_main_endpoint_internal(self, mock_client):
@ -288,7 +288,7 @@ class ShellTest(utils.TestCase):
project_domain_id='', project_domain_name='',
user_domain_id='', user_domain_name='', profile=None,
endpoint_override=None, insecure=False,
version=api_versions.APIVersion('1.14'))
version=api_versions.APIVersion('1.17'))
class ShellTestKeystoneV3(ShellTest):
@ -319,4 +319,4 @@ class ShellTestKeystoneV3(ShellTest):
project_domain_id='', project_domain_name='Default',
user_domain_id='', user_domain_name='Default',
endpoint_override=None, insecure=False, profile=None,
version=api_versions.APIVersion('1.14'))
version=api_versions.APIVersion('1.17'))

View File

@ -678,7 +678,7 @@ class ContainerManagerTest(testtools.TestCase):
def test_containers_network_detach(self):
containers = self.mgr.network_detach(
CONTAINER1['id'], 'neutron_network')
CONTAINER1['id'], network='neutron_network')
expect = [
('POST', '/v1/containers/%s/network_detach?%s'
% (CONTAINER1['id'],

View File

@ -212,9 +212,9 @@ class ContainerManager(base.Manager):
return self._action(id, '/add_security_group',
qparams={'name': security_group})
def network_detach(self, container, network):
def network_detach(self, container, **kwargs):
return self._action(container, '/network_detach',
qparams={'network': network})
qparams=kwargs)
def network_attach(self, container, **kwargs):
return self._action(container, '/network_attach',

View File

@ -846,17 +846,25 @@ def do_add_security_group(cs, args):
"failed: %(e)s" % {'container': args.container, 'e': e})
@utils.exclusive_arg(
'detach_network_port',
'--network',
metavar='<network>',
help='The neutron network that container will detach from.')
@utils.exclusive_arg(
'detach_network_port',
'--port',
metavar='<port>',
help='The neutron port that container will detach from.')
@utils.arg('container',
metavar='<container>',
help='ID or name of the container to detach the network.')
@utils.arg('network',
metavar='<network>',
help='The neutron network that container will detach from.')
def do_network_detach(cs, args):
"""Detach a network from the container."""
opts = {}
opts['container'] = args.container
opts['network'] = args.network
opts['port'] = args.port
opts = zun_utils.remove_null_parms(**opts)
try:
cs.containers.network_detach(**opts)