summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2020-03-02 21:19:42 +0000
committerGerrit Code Review <review@openstack.org>2020-03-02 21:19:42 +0000
commit2b4b1e00a59fd23f58e0bc0645ad16d8047f923e (patch)
tree6eb1de7883e7385ade7d6217721f58618abc1bd0 /openstackclient
parent576d9ecfd0ac27611ec89af6d34e7378b7a39fb3 (diff)
parentc42c27aa926e93a2507e686eeaf0c5510a29d245 (diff)
downloadpython-openstackclient-2b4b1e00a59fd23f58e0bc0645ad16d8047f923e.tar.gz
Merge "Fix openstack server list --deleted --marker option" into stable/train
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/compute/v2/server.py15
-rw-r--r--openstackclient/tests/functional/compute/v2/test_server.py43
2 files changed, 55 insertions, 3 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index 2016d408..d3bd1c72 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -1229,7 +1229,8 @@ class ListServer(command.Lister):
default=None,
help=_('The last server of the previous page. Display '
'list of servers after marker. Display all servers if not '
- 'specified. (name or ID)')
+ 'specified. When used with ``--deleted``, the marker must '
+ 'be an ID, otherwise a name or ID can be used.'),
)
parser.add_argument(
'--limit',
@@ -1437,9 +1438,17 @@ class ListServer(command.Lister):
mixed_case_fields = []
marker_id = None
+
if parsed_args.marker:
- marker_id = utils.find_resource(compute_client.servers,
- parsed_args.marker).id
+ # Check if both "--marker" and "--deleted" are used.
+ # In that scenario a lookup is not needed as the marker
+ # needs to be an ID, because find_resource does not
+ # handle deleted resources
+ if parsed_args.deleted:
+ marker_id = parsed_args.marker
+ else:
+ marker_id = utils.find_resource(compute_client.servers,
+ parsed_args.marker).id
data = compute_client.servers.list(search_opts=search_opts,
marker=marker_id,
diff --git a/openstackclient/tests/functional/compute/v2/test_server.py b/openstackclient/tests/functional/compute/v2/test_server.py
index 2bca70d0..6e080e9b 100644
--- a/openstackclient/tests/functional/compute/v2/test_server.py
+++ b/openstackclient/tests/functional/compute/v2/test_server.py
@@ -63,6 +63,49 @@ class ServerTests(common.ComputeTestCase):
self.assertNotIn(name1, col_name)
self.assertIn(name2, col_name)
+ def test_server_list_with_marker_and_deleted(self):
+ """Test server list with deleted and marker"""
+ cmd_output = self.server_create(cleanup=False)
+ name1 = cmd_output['name']
+ cmd_output = self.server_create(cleanup=False)
+ name2 = cmd_output['name']
+ id2 = cmd_output['id']
+ self.wait_for_status(name1, "ACTIVE")
+ self.wait_for_status(name2, "ACTIVE")
+
+ # Test list --marker with ID
+ cmd_output = json.loads(self.openstack(
+ 'server list -f json --marker ' + id2
+ ))
+ col_name = [x["Name"] for x in cmd_output]
+ self.assertIn(name1, col_name)
+
+ # Test list --marker with Name
+ cmd_output = json.loads(self.openstack(
+ 'server list -f json --marker ' + name2
+ ))
+ col_name = [x["Name"] for x in cmd_output]
+ self.assertIn(name1, col_name)
+
+ self.openstack('server delete --wait ' + name1)
+ self.openstack('server delete --wait ' + name2)
+
+ # Test list --deleted --marker with ID
+ cmd_output = json.loads(self.openstack(
+ 'server list -f json --deleted --marker ' + id2
+ ))
+ col_name = [x["Name"] for x in cmd_output]
+ self.assertIn(name1, col_name)
+
+ # Test list --deleted --marker with Name
+ try:
+ cmd_output = json.loads(self.openstack(
+ 'server list -f json --deleted --marker ' + name2
+ ))
+ except exceptions.CommandFailed as e:
+ self.assertIn('marker [%s] not found (HTTP 400)' % (name2),
+ e.stderr.decode('utf-8'))
+
def test_server_list_with_changes_before(self):
"""Test server list.