compute: Fix filtering servers by tags
The nova API expects the 'tags' and 'not-tags' filters of the 'GET /servers' (list servers) API to be a CSV string [1]: tags (Optional) A list of tags to filter the server list by. Servers that match all tags in this list will be returned. Boolean expression in this case is 't1 AND t2'. Tags in query must be separated by comma. New in version 2.26 not-tags (Optional) A list of tags to filter the server list by. Servers that don’t match all tags in this list will be returned. Boolean expression in this case is 'NOT (t1 AND t2)'. Tags in query must be separated by comma. New in version 2.26 We were instead providing a Python list, which was simply being URL encoded. Correct this. [1] https://docs.openstack.org/api-ref/compute/?expanded=list-servers-detail#list-servers Change-Id: Ie0251a0dccdf3385089e5bbaedf646a5e928cc48 Signed-off-by: Stephen Finucane <sfinucan@redhat.com> Closes-Bug: #1946816
This commit is contained in:
parent
e0c61f0cbe
commit
53debe7fe1
@ -2257,7 +2257,7 @@ class ListServer(command.Lister):
|
||||
)
|
||||
raise exceptions.CommandError(msg)
|
||||
|
||||
search_opts['tags'] = parsed_args.tags
|
||||
search_opts['tags'] = ','.join(parsed_args.tags)
|
||||
|
||||
if parsed_args.not_tags:
|
||||
if compute_client.api_version < api_versions.APIVersion('2.26'):
|
||||
@ -2267,7 +2267,7 @@ class ListServer(command.Lister):
|
||||
)
|
||||
raise exceptions.CommandError(msg)
|
||||
|
||||
search_opts['not-tags'] = parsed_args.not_tags
|
||||
search_opts['not-tags'] = ','.join(parsed_args.not_tags)
|
||||
|
||||
if parsed_args.locked:
|
||||
if compute_client.api_version < api_versions.APIVersion('2.73'):
|
||||
|
@ -4489,7 +4489,7 @@ class TestServerList(TestServer):
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.search_opts['tags'] = ['tag1', 'tag2']
|
||||
self.search_opts['tags'] = 'tag1,tag2'
|
||||
|
||||
self.servers_mock.list.assert_called_with(**self.kwargs)
|
||||
|
||||
@ -4532,7 +4532,7 @@ class TestServerList(TestServer):
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
columns, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.search_opts['not-tags'] = ['tag1', 'tag2']
|
||||
self.search_opts['not-tags'] = 'tag1,tag2'
|
||||
|
||||
self.servers_mock.list.assert_called_with(**self.kwargs)
|
||||
|
||||
|
6
releasenotes/notes/bug-1946816-7665858605453578.yaml
Normal file
6
releasenotes/notes/bug-1946816-7665858605453578.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
Filtering servers by tags (``server list --tag``,
|
||||
``server list --not-tag``) now works correctly.
|
||||
[Bug `1946816 <https://bugs.launchpad.net/bugs/1946816>`_]
|
Loading…
Reference in New Issue
Block a user