diff options
| author | Tang Chen <chen.tang@easystack.cn> | 2016-04-07 14:30:06 +0800 |
|---|---|---|
| committer | Tang Chen <chen.tang@easystack.cn> | 2016-07-04 10:41:30 +0800 |
| commit | 179ebe6d648fc5cff514306076f1b0fa54e64b40 (patch) | |
| tree | 8fe00c6304cb9c493360a62c3838bc31e0b12e35 /openstackclient | |
| parent | d1f9ea3f750bb4c1f440ebfa93d06a40673ec0aa (diff) | |
| download | python-openstackclient-179ebe6d648fc5cff514306076f1b0fa54e64b40.tar.gz | |
Transfer "ip fixed add/remove" to "server add/remove fixed ip"
This patch does the following things to transfer
"ip fixed add/remove" to "server add/remove fixed ip":
* Add new command "server add/remove fixed ip", and unit
tests and doc.
* Deprecate "ip fixed add/remove" command.
compute/v2/fixedip.py is not removed because the arguments'
positions are different between the new and old commands.
* ip fixed add <network> <server>
server add fixed ip <server> <network>
* ip fixed remove <ip-address> <server>
server remove fixed ip <server> <ip-address>
Change-Id: Ica07ccf92a76c21fd5608ecaff86ff7c4d96f5a0
Implements: blueprint rework-ip-commands
Partial-bug: 1555990
Co-Authored-By: Dean Troyer <dtroyer@gmail.com>
Diffstat (limited to 'openstackclient')
| -rw-r--r-- | openstackclient/compute/v2/fixedip.py | 34 | ||||
| -rw-r--r-- | openstackclient/compute/v2/server.py | 57 | ||||
| -rw-r--r-- | openstackclient/tests/compute/v2/test_server.py | 71 |
3 files changed, 158 insertions, 4 deletions
diff --git a/openstackclient/compute/v2/fixedip.py b/openstackclient/compute/v2/fixedip.py index 8bd72ca3..c14d29fa 100644 --- a/openstackclient/compute/v2/fixedip.py +++ b/openstackclient/compute/v2/fixedip.py @@ -15,28 +15,43 @@ """Fixed IP action implementations""" +import logging + from osc_lib.command import command from osc_lib import utils +from openstackclient.i18n import _ + class AddFixedIP(command.Command): """Add fixed IP address to server""" + # TODO(tangchen): Remove this class and ``ip fixed add`` command + # two cycles after Mitaka. + + # This notifies cliff to not display the help for this command + deprecated = True + + log = logging.getLogger('deprecated') + def get_parser(self, prog_name): parser = super(AddFixedIP, self).get_parser(prog_name) parser.add_argument( "network", metavar="<network>", - help="Network to fetch an IP address from (name or ID)", + help=_("Network to fetch an IP address from (name or ID)"), ) parser.add_argument( "server", metavar="<server>", - help="Server to receive the IP address (name or ID)", + help=_("Server to receive the IP address (name or ID)"), ) return parser def take_action(self, parsed_args): + self.log.warning(_('This command has been deprecated. ' + 'Please use "server add fixed ip" instead.')) + compute_client = self.app.client_manager.compute network = utils.find_resource( @@ -51,21 +66,32 @@ class AddFixedIP(command.Command): class RemoveFixedIP(command.Command): """Remove fixed IP address from server""" + # TODO(tangchen): Remove this class and ``ip fixed remove`` command + # two cycles after Mitaka. + + # This notifies cliff to not display the help for this command + deprecated = True + + log = logging.getLogger('deprecated') + def get_parser(self, prog_name): parser = super(RemoveFixedIP, self).get_parser(prog_name) parser.add_argument( "ip_address", metavar="<ip-address>", - help="IP address to remove from server (name only)", + help=_("IP address to remove from server (name only)"), ) parser.add_argument( "server", metavar="<server>", - help="Server to remove the IP address from (name or ID)", + help=_("Server to remove the IP address from (name or ID)"), ) return parser def take_action(self, parsed_args): + self.log.warning(_('This command has been deprecated. ' + 'Please use "server remove fixed ip" instead.')) + compute_client = self.app.client_manager.compute server = utils.find_resource( diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index d7c3a656..7d04ffc3 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -174,6 +174,36 @@ def _show_progress(progress): sys.stdout.flush() +class AddFixedIP(command.Command): + """Add fixed IP address to server""" + + def get_parser(self, prog_name): + parser = super(AddFixedIP, self).get_parser(prog_name) + parser.add_argument( + "server", + metavar="<server>", + help=_("Server (name or ID) to receive the fixed IP address"), + ) + parser.add_argument( + "network", + metavar="<network>", + help=_("Network (name or ID) to allocate " + "the fixed IP address from"), + ) + return parser + + def take_action(self, parsed_args): + compute_client = self.app.client_manager.compute + + server = utils.find_resource( + compute_client.servers, parsed_args.server) + + network = utils.find_resource( + compute_client.networks, parsed_args.network) + + server.add_fixed_ip(network.id) + + class AddFloatingIP(command.Command): """Add floating IP address to server""" @@ -1108,6 +1138,33 @@ class RebuildServer(command.ShowOne): return zip(*sorted(six.iteritems(details))) +class RemoveFixedIP(command.Command): + """Remove fixed IP address from server""" + + def get_parser(self, prog_name): + parser = super(RemoveFixedIP, self).get_parser(prog_name) + parser.add_argument( + "server", + metavar="<server>", + help=_("Server (name or ID) to remove the fixed IP address from"), + ) + parser.add_argument( + "ip_address", + metavar="<ip-address>", + help=_("Fixed IP address (IP address only) to remove from the " + "server"), + ) + return parser + + def take_action(self, parsed_args): + compute_client = self.app.client_manager.compute + + server = utils.find_resource( + compute_client.servers, parsed_args.server) + + server.remove_fixed_ip(parsed_args.ip_address) + + class RemoveFloatingIP(command.Command): """Remove floating IP address from server""" diff --git a/openstackclient/tests/compute/v2/test_server.py b/openstackclient/tests/compute/v2/test_server.py index 81f21856..57babd2f 100644 --- a/openstackclient/tests/compute/v2/test_server.py +++ b/openstackclient/tests/compute/v2/test_server.py @@ -88,6 +88,45 @@ class TestServer(compute_fakes.TestComputev2): self.assertIsNone(result) +class TestServerAddFixedIP(TestServer): + + def setUp(self): + super(TestServerAddFixedIP, self).setUp() + + # Get a shortcut to the compute client ServerManager Mock + self.networks_mock = self.app.client_manager.compute.networks + + # Get the command object to test + self.cmd = server.AddFixedIP(self.app, None) + + # Set add_fixed_ip method to be tested. + self.methods = { + 'add_fixed_ip': None, + } + + def test_server_add_fixed_ip(self): + servers = self.setup_servers_mock(count=1) + network = compute_fakes.FakeNetwork.create_one_network() + self.networks_mock.get.return_value = network + + arglist = [ + servers[0].id, + network.id, + ] + verifylist = [ + ('server', servers[0].id), + ('network', network.id) + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + + servers[0].add_fixed_ip.assert_called_once_with( + network.id, + ) + self.assertIsNone(result) + + class TestServerAddFloatingIP(TestServer): def setUp(self): @@ -878,6 +917,38 @@ class TestServerRebuild(TestServer): self.server.rebuild.assert_called_with(self.image, None) +class TestServerRemoveFixedIP(TestServer): + + def setUp(self): + super(TestServerRemoveFixedIP, self).setUp() + + # Get the command object to test + self.cmd = server.RemoveFixedIP(self.app, None) + + # Set unshelve method to be tested. + self.methods = { + 'remove_fixed_ip': None, + } + + def test_server_remove_fixed_ip(self): + servers = self.setup_servers_mock(count=1) + + arglist = [ + servers[0].id, + '1.2.3.4', + ] + verifylist = [ + ('server', servers[0].id), + ('ip_address', '1.2.3.4'), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + + servers[0].remove_fixed_ip.assert_called_once_with('1.2.3.4') + self.assertIsNone(result) + + class TestServerRemoveFloatingIP(TestServer): def setUp(self): |
