diff --git a/zunclient/api_versions.py b/zunclient/api_versions.py index da4c6257..32687654 100644 --- a/zunclient/api_versions.py +++ b/zunclient/api_versions.py @@ -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 = {} diff --git a/zunclient/osc/v1/containers.py b/zunclient/osc/v1/containers.py index 5e1cbb2c..88a1100a 100644 --- a/zunclient/osc/v1/containers.py +++ b/zunclient/osc/v1/containers.py @@ -1117,10 +1117,15 @@ class NetworkDetach(command.Command): 'container', metavar='', 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='', help='The network for specified container to detach.') + network_port_args.add_argument( + '--port', + metavar='', + 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='', help='ID or name of the container to attach network.') parser.add_argument( - 'network', + '--network', metavar='', help='The network for specified container to attach.') + parser.add_argument( + '--port', + metavar='', + 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) diff --git a/zunclient/tests/unit/test_shell.py b/zunclient/tests/unit/test_shell.py index 9501ed84..9be64319 100644 --- a/zunclient/tests/unit/test_shell.py +++ b/zunclient/tests/unit/test_shell.py @@ -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')) diff --git a/zunclient/tests/unit/v1/test_containers.py b/zunclient/tests/unit/v1/test_containers.py index e7ea8fcf..20ca29f4 100644 --- a/zunclient/tests/unit/v1/test_containers.py +++ b/zunclient/tests/unit/v1/test_containers.py @@ -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'], diff --git a/zunclient/v1/containers.py b/zunclient/v1/containers.py index 0b605d83..d2cdaa96 100644 --- a/zunclient/v1/containers.py +++ b/zunclient/v1/containers.py @@ -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', diff --git a/zunclient/v1/containers_shell.py b/zunclient/v1/containers_shell.py index 7de9d4fa..ce12241b 100644 --- a/zunclient/v1/containers_shell.py +++ b/zunclient/v1/containers_shell.py @@ -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='', + help='The neutron network that container will detach from.') +@utils.exclusive_arg( + 'detach_network_port', + '--port', + metavar='', + help='The neutron port that container will detach from.') @utils.arg('container', metavar='', help='ID or name of the container to detach the network.') -@utils.arg('network', - metavar='', - 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)