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:
		@@ -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 = {}
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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'))
 | 
			
		||||
 
 | 
			
		||||
@@ -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'],
 | 
			
		||||
 
 | 
			
		||||
@@ -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',
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user