Skip to content

Commit 423b1b3

Browse files
authored
Merge pull request #2086 from ceph/os-opt
openstack: Do not immediately throw ImportError
2 parents f1eb758 + 287f051 commit 423b1b3

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

teuthology/openstack/__init__.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import paramiko
3232
import re
3333
import socket
34+
import sys
3435
import subprocess
3536
import tempfile
3637
import teuthology
@@ -45,10 +46,14 @@
4546
from teuthology.config import set_config_attr
4647
from teuthology.orchestra import connection
4748
from teuthology import misc
48-
from openstack import connection as openstack_connection
4949

5050
from yaml.representer import SafeRepresenter
5151

52+
try:
53+
from openstack import connection as openstack_connection
54+
except ImportError:
55+
openstack_connection = None
56+
5257
class cmd_str(str): pass
5358

5459
def cmd_repr(dumper, data):
@@ -72,14 +77,22 @@ def enforce_json_dictionary(something):
7277
' you are encouraged to add a comment if you want it to be'
7378
' fixed.')
7479

75-
class OpenStackInstance(object):
80+
def create_connection():
81+
if openstack_connection is None:
82+
raise RuntimeError(
83+
"Did not find required openstack dependencies. "
84+
f"Try: {sys.executable} -m pip install -e .[openstack]"
85+
)
86+
return openstack_connection.from_config(cloud=None)
87+
7688

89+
class OpenStackInstance(object):
7790
def __init__(self, name_or_id, info=None):
7891
self.name_or_id = name_or_id
7992
self.private_or_floating_ip = None
8093
self.private_ip = None
8194
self.info = info
82-
self.conn = self._create_connection()
95+
self.conn = create_connection()
8396
if info is None:
8497
self.set_info()
8598
else:
@@ -90,9 +103,6 @@ def __init__(self, name_or_id, info=None):
90103
errmsg = '{}: {}'.format(errmsg, self.info['message'])
91104
raise Exception(errmsg)
92105

93-
def _create_connection(self):
94-
return openstack_connection.from_config(cloud=None)
95-
96106
def set_info(self):
97107
try:
98108
server = self.conn.compute.find_server(self.name_or_id)
@@ -229,15 +239,12 @@ def __init__(self):
229239
self.username = 'ubuntu'
230240
self.up_string = "UNKNOWN"
231241
self.teuthology_suite = 'teuthology-suite'
232-
self.conn = self._create_connection()
242+
self.conn = create_connection()
233243

234244
token = None
235245
token_expires = None
236246
token_cache_duration = 3600
237247

238-
def _create_connection(self):
239-
return openstack_connection.from_config(cloud=None)
240-
241248
def cache_token(self):
242249
if self.provider != 'ovh':
243250
return False

teuthology/orchestra/test/test_connection.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ def stop_patchers(self):
3131
def clear_config(self):
3232
config.config.teuthology_yaml = ''
3333
config.config.load()
34+
config.config.ssh_key = None
3435

3536
def test_split_user_just_host(self):
3637
got = connection.split_user('somehost.example.com')

0 commit comments

Comments
 (0)