summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorTang Chen <chen.tang@easystack.cn>2016-04-07 14:30:06 +0800
committerTang Chen <chen.tang@easystack.cn>2016-07-04 10:41:30 +0800
commit179ebe6d648fc5cff514306076f1b0fa54e64b40 (patch)
tree8fe00c6304cb9c493360a62c3838bc31e0b12e35 /openstackclient
parentd1f9ea3f750bb4c1f440ebfa93d06a40673ec0aa (diff)
downloadpython-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.py34
-rw-r--r--openstackclient/compute/v2/server.py57
-rw-r--r--openstackclient/tests/compute/v2/test_server.py71
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):