summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorint32bit <krystism@gmail.com>2016-12-24 01:10:13 +0800
committerint32bit <krystism@gmail.com>2017-01-17 16:27:26 +0000
commit70a3957cae435c792972bccf8f0f4eddd61eefdc (patch)
tree26d4806fd24b12520f693ba736a74c4efb0869e3
parente81b81a027565d91e20ad55fc7c985b7e6da7e98 (diff)
downloadpython-novaclient-70a3957cae435c792972bccf8f0f4eddd61eefdc.tar.gz
Allow multiple tag add/delete from cli
Our users always want to add/remove multiple tags easily, but currently we can only add/remove a single tag to a server via Nova CLI. This patch allows user to add or delete server tags in one hit. Change-Id: I4dc6e5cb30b99857970965cd180e116afba1fc7d
-rw-r--r--novaclient/tests/functional/v2/test_servers.py11
-rw-r--r--novaclient/tests/unit/v2/fakes.py18
-rw-r--r--novaclient/tests/unit/v2/test_shell.py14
-rw-r--r--novaclient/v2/shell.py20
4 files changed, 57 insertions, 6 deletions
diff --git a/novaclient/tests/functional/v2/test_servers.py b/novaclient/tests/functional/v2/test_servers.py
index 3d8c5128..31b2ae06 100644
--- a/novaclient/tests/functional/v2/test_servers.py
+++ b/novaclient/tests/functional/v2/test_servers.py
@@ -158,6 +158,12 @@ class TestServersTagsV226(base.ClientTestBase):
self.assertEqual(["t1", "t2", "t3"],
self.client.servers.tag_list(uuid))
+ def test_add_many(self):
+ uuid = self._boot_server_with_tags()
+ self.nova("server-tag-add %s t3 t4" % uuid)
+ self.assertEqual(["t1", "t2", "t3", "t4"],
+ self.client.servers.tag_list(uuid))
+
def test_set(self):
uuid = self._boot_server_with_tags()
self.nova("server-tag-set %s t3 t4" % uuid)
@@ -168,6 +174,11 @@ class TestServersTagsV226(base.ClientTestBase):
self.nova("server-tag-delete %s t2" % uuid)
self.assertEqual(["t1"], self.client.servers.tag_list(uuid))
+ def test_delete_many(self):
+ uuid = self._boot_server_with_tags()
+ self.nova("server-tag-delete %s t1 t2" % uuid)
+ self.assertEqual([], self.client.servers.tag_list(uuid))
+
def test_delete_all(self):
uuid = self._boot_server_with_tags()
self.nova("server-tag-delete-all %s" % uuid)
diff --git a/novaclient/tests/unit/v2/fakes.py b/novaclient/tests/unit/v2/fakes.py
index f9da820c..3590acdf 100644
--- a/novaclient/tests/unit/v2/fakes.py
+++ b/novaclient/tests/unit/v2/fakes.py
@@ -2339,6 +2339,15 @@ class FakeSessionClient(base_client.SessionClient):
def put_servers_1234_tags_tag(self, **kw):
return (201, {}, None)
+ def put_servers_1234_tags_tag1(self, **kw):
+ return (201, {}, None)
+
+ def put_servers_1234_tags_tag2(self, **kw):
+ return (201, {}, None)
+
+ def put_servers_1234_tags_tag3(self, **kw):
+ return (201, {}, None)
+
def put_servers_1234_tags(self, **kw):
return (201, {}, None)
@@ -2348,6 +2357,15 @@ class FakeSessionClient(base_client.SessionClient):
def delete_servers_1234_tags_tag(self, **kw):
return (204, {}, None)
+ def delete_servers_1234_tags_tag1(self, **kw):
+ return (204, {}, None)
+
+ def delete_servers_1234_tags_tag2(self, **kw):
+ return (204, {}, None)
+
+ def delete_servers_1234_tags_tag3(self, **kw):
+ return (204, {}, None)
+
def delete_servers_1234_tags(self, **kw):
return (204, {}, None)
diff --git a/novaclient/tests/unit/v2/test_shell.py b/novaclient/tests/unit/v2/test_shell.py
index bb01344a..45b135f5 100644
--- a/novaclient/tests/unit/v2/test_shell.py
+++ b/novaclient/tests/unit/v2/test_shell.py
@@ -3329,6 +3329,13 @@ class ShellTest(utils.TestCase):
api_version='2.26')
self.assert_called('PUT', '/servers/1234/tags/tag', None)
+ def test_server_tag_add_many(self):
+ self.run_command('server-tag-add sample-server tag1 tag2 tag3',
+ api_version='2.26')
+ self.assert_called('PUT', '/servers/1234/tags/tag1', None, pos=-3)
+ self.assert_called('PUT', '/servers/1234/tags/tag2', None, pos=-2)
+ self.assert_called('PUT', '/servers/1234/tags/tag3', None, pos=-1)
+
def test_server_tag_set(self):
self.run_command('server-tag-set sample-server tag1 tag2',
api_version='2.26')
@@ -3344,6 +3351,13 @@ class ShellTest(utils.TestCase):
api_version='2.26')
self.assert_called('DELETE', '/servers/1234/tags/tag')
+ def test_server_tag_delete_many(self):
+ self.run_command('server-tag-delete sample-server tag1 tag2 tag3',
+ api_version='2.26')
+ self.assert_called('DELETE', '/servers/1234/tags/tag1', pos=-3)
+ self.assert_called('DELETE', '/servers/1234/tags/tag2', pos=-2)
+ self.assert_called('DELETE', '/servers/1234/tags/tag3', pos=-1)
+
def test_server_tag_delete_all(self):
self.run_command('server-tag-delete-all sample-server',
api_version='2.26')
diff --git a/novaclient/v2/shell.py b/novaclient/v2/shell.py
index 055559a4..1acb4dce 100644
--- a/novaclient/v2/shell.py
+++ b/novaclient/v2/shell.py
@@ -5283,11 +5283,15 @@ def do_server_tag_list(cs, args):
@api_versions.wraps("2.26")
@utils.arg('server', metavar='<server>', help=_('Name or ID of server.'))
-@utils.arg('tag', metavar='<tag>', help=_('Tag to add.'))
+@utils.arg('tag', metavar='<tag>', nargs='+', help=_('Tag(s) to add.'))
def do_server_tag_add(cs, args):
- """Add single tag to a server."""
+ """Add one or more tags to a server."""
server = _find_server(cs, args.server)
- server.add_tag(args.tag)
+ utils.do_action_on_many(
+ lambda t: server.add_tag(t),
+ args.tag,
+ _("Request to add tag %s to specified server has been accepted."),
+ _("Unable to add tag %s to the specified server."))
@api_versions.wraps("2.26")
@@ -5301,11 +5305,15 @@ def do_server_tag_set(cs, args):
@api_versions.wraps("2.26")
@utils.arg('server', metavar='<server>', help=_('Name or ID of server.'))
-@utils.arg('tag', metavar='<tag>', help=_('Tag to delete.'))
+@utils.arg('tag', metavar='<tag>', nargs='+', help=_('Tag(s) to delete.'))
def do_server_tag_delete(cs, args):
- """Delete single tag from a server."""
+ """Delete one or more tags from a server."""
server = _find_server(cs, args.server)
- server.delete_tag(args.tag)
+ utils.do_action_on_many(
+ lambda t: server.delete_tag(t),
+ args.tag,
+ _("Request to delete tag %s from specified server has been accepted."),
+ _("Unable to delete tag %s from specified server."))
@api_versions.wraps("2.26")