From: Zack Cerza Date: Thu, 22 Oct 2015 16:39:36 +0000 (-0600) Subject: OpenStack.exists(): Don't list every instance X-Git-Tag: 1.1.0~782^2~9 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cae98d949f7dff6c5cc987ee5abd4f27cfd882e7;p=teuthology.git OpenStack.exists(): Don't list every instance Instead of "openstack server list", dumping the entire tentant's list of instances, use "openstack server show" to show a single instance. While "list" can accept a "--name" argument to filter, it does not have an "--id" argument. Signed-off-by: Zack Cerza --- diff --git a/teuthology/openstack/__init__.py b/teuthology/openstack/__init__.py index 4216ac466..ea9e1705e 100644 --- a/teuthology/openstack/__init__.py +++ b/teuthology/openstack/__init__.py @@ -31,6 +31,8 @@ import subprocess import tempfile import teuthology +from subprocess import CalledProcessError + from teuthology.contextutil import safe_while from teuthology.config import config as teuth_config from teuthology.orchestra import connection @@ -226,10 +228,15 @@ class OpenStack(object): Return true if the OpenStack name_or_id instance exists, false otherwise. """ - servers = json.loads(misc.sh("openstack server list -f json")) - for server in servers: - if (server['ID'] == name_or_id or server['Name'] == name_or_id): - return True + try: + server = json.loads( + misc.sh("openstack server show -f json %s" % id) + ) + except CalledProcessError: + return False + if (self.get_value(server, 'Name') == name_or_id or + self.get_value(server, 'ID') == name_or_id): + return True return False @staticmethod