Merge "Compute: Add tag support for server add fixed ip"
This commit is contained in:
		@@ -236,6 +236,14 @@ class AddFixedIP(command.Command):
 | 
			
		||||
            metavar="<ip-address>",
 | 
			
		||||
            help=_("Requested fixed IP address"),
 | 
			
		||||
        )
 | 
			
		||||
        parser.add_argument(
 | 
			
		||||
            '--tag',
 | 
			
		||||
            metavar='<tag>',
 | 
			
		||||
            help=_(
 | 
			
		||||
                'Tag for the attached interface. '
 | 
			
		||||
                '(supported by --os-compute-api-version 2.52 or above)'
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
        return parser
 | 
			
		||||
 | 
			
		||||
    def take_action(self, parsed_args):
 | 
			
		||||
@@ -246,11 +254,23 @@ class AddFixedIP(command.Command):
 | 
			
		||||
 | 
			
		||||
        network = compute_client.api.network_find(parsed_args.network)
 | 
			
		||||
 | 
			
		||||
        server.interface_attach(
 | 
			
		||||
            port_id=None,
 | 
			
		||||
            net_id=network['id'],
 | 
			
		||||
            fixed_ip=parsed_args.fixed_ip_address,
 | 
			
		||||
        kwargs = {
 | 
			
		||||
            'port_id': None,
 | 
			
		||||
            'net_id': network['id'],
 | 
			
		||||
            'fixed_ip': parsed_args.fixed_ip_address,
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if parsed_args.tag:
 | 
			
		||||
            if compute_client.api_version < api_versions.APIVersion('2.49'):
 | 
			
		||||
                msg = _(
 | 
			
		||||
                    '--os-compute-api-version 2.49 or greater is required to '
 | 
			
		||||
                    'support the --tag option'
 | 
			
		||||
                )
 | 
			
		||||
                raise exceptions.CommandError(msg)
 | 
			
		||||
 | 
			
		||||
            kwargs['tag'] = parsed_args.tag
 | 
			
		||||
 | 
			
		||||
        server.interface_attach(**kwargs)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class AddFloatingIP(network_common.NetworkAndComputeCommand):
 | 
			
		||||
 
 | 
			
		||||
@@ -182,6 +182,72 @@ class TestServerAddFixedIP(TestServer):
 | 
			
		||||
        extralist = ['--fixed-ip-address', '5.6.7.8']
 | 
			
		||||
        self._test_server_add_fixed_ip(extralist, '5.6.7.8')
 | 
			
		||||
 | 
			
		||||
    def test_server_add_fixed_ip_with_tag(self):
 | 
			
		||||
        self.app.client_manager.compute.api_version = api_versions.APIVersion(
 | 
			
		||||
            '2.49')
 | 
			
		||||
 | 
			
		||||
        servers = self.setup_servers_mock(count=1)
 | 
			
		||||
        network = compute_fakes.FakeNetwork.create_one_network()
 | 
			
		||||
        with mock.patch(
 | 
			
		||||
            'openstackclient.api.compute_v2.APIv2.network_find'
 | 
			
		||||
        ) as net_mock:
 | 
			
		||||
            net_mock.return_value = network
 | 
			
		||||
 | 
			
		||||
            arglist = [
 | 
			
		||||
                servers[0].id,
 | 
			
		||||
                network['id'],
 | 
			
		||||
                '--fixed-ip-address', '5.6.7.8',
 | 
			
		||||
                '--tag', 'tag1',
 | 
			
		||||
            ]
 | 
			
		||||
            verifylist = [
 | 
			
		||||
                ('server', servers[0].id),
 | 
			
		||||
                ('network', network['id']),
 | 
			
		||||
                ('fixed_ip_address', '5.6.7.8'),
 | 
			
		||||
                ('tag', 'tag1'),
 | 
			
		||||
            ]
 | 
			
		||||
            parsed_args = self.check_parser(self.cmd, arglist, verifylist)
 | 
			
		||||
            result = self.cmd.take_action(parsed_args)
 | 
			
		||||
 | 
			
		||||
            servers[0].interface_attach.assert_called_once_with(
 | 
			
		||||
                port_id=None,
 | 
			
		||||
                net_id=network['id'],
 | 
			
		||||
                fixed_ip='5.6.7.8',
 | 
			
		||||
                tag='tag1'
 | 
			
		||||
            )
 | 
			
		||||
            self.assertIsNone(result)
 | 
			
		||||
 | 
			
		||||
    def test_server_add_fixed_ip_with_tag_pre_v249(self):
 | 
			
		||||
        self.app.client_manager.compute.api_version = api_versions.APIVersion(
 | 
			
		||||
            '2.48')
 | 
			
		||||
 | 
			
		||||
        servers = self.setup_servers_mock(count=1)
 | 
			
		||||
        network = compute_fakes.FakeNetwork.create_one_network()
 | 
			
		||||
        with mock.patch(
 | 
			
		||||
            'openstackclient.api.compute_v2.APIv2.network_find'
 | 
			
		||||
        ) as net_mock:
 | 
			
		||||
            net_mock.return_value = network
 | 
			
		||||
 | 
			
		||||
            arglist = [
 | 
			
		||||
                servers[0].id,
 | 
			
		||||
                network['id'],
 | 
			
		||||
                '--fixed-ip-address', '5.6.7.8',
 | 
			
		||||
                '--tag', 'tag1',
 | 
			
		||||
            ]
 | 
			
		||||
            verifylist = [
 | 
			
		||||
                ('server', servers[0].id),
 | 
			
		||||
                ('network', network['id']),
 | 
			
		||||
                ('fixed_ip_address', '5.6.7.8'),
 | 
			
		||||
                ('tag', 'tag1'),
 | 
			
		||||
            ]
 | 
			
		||||
            parsed_args = self.check_parser(self.cmd, arglist, verifylist)
 | 
			
		||||
            ex = self.assertRaises(
 | 
			
		||||
                exceptions.CommandError,
 | 
			
		||||
                self.cmd.take_action,
 | 
			
		||||
                parsed_args)
 | 
			
		||||
            self.assertIn(
 | 
			
		||||
                '--os-compute-api-version 2.49 or greater is required',
 | 
			
		||||
                str(ex))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@mock.patch(
 | 
			
		||||
    'openstackclient.api.compute_v2.APIv2.floating_ip_add'
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,5 @@
 | 
			
		||||
---
 | 
			
		||||
features:
 | 
			
		||||
  - Add ``--tag`` option to ``server add fixed ip`` command
 | 
			
		||||
    when adding a fixed IP to server. Only available starting
 | 
			
		||||
    with ``--os-compute-api-version 2.49``.
 | 
			
		||||
		Reference in New Issue
	
	Block a user