31
31
import paramiko
32
32
import re
33
33
import socket
34
+ import sys
34
35
import subprocess
35
36
import tempfile
36
37
import teuthology
45
46
from teuthology .config import set_config_attr
46
47
from teuthology .orchestra import connection
47
48
from teuthology import misc
48
- from openstack import connection as openstack_connection
49
49
50
50
from yaml .representer import SafeRepresenter
51
51
52
+ try :
53
+ from openstack import connection as openstack_connection
54
+ except ImportError :
55
+ openstack_connection = None
56
+
52
57
class cmd_str (str ): pass
53
58
54
59
def cmd_repr (dumper , data ):
@@ -72,14 +77,22 @@ def enforce_json_dictionary(something):
72
77
' you are encouraged to add a comment if you want it to be'
73
78
' fixed.' )
74
79
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
+
76
88
89
+ class OpenStackInstance (object ):
77
90
def __init__ (self , name_or_id , info = None ):
78
91
self .name_or_id = name_or_id
79
92
self .private_or_floating_ip = None
80
93
self .private_ip = None
81
94
self .info = info
82
- self .conn = self . _create_connection ()
95
+ self .conn = create_connection ()
83
96
if info is None :
84
97
self .set_info ()
85
98
else :
@@ -90,9 +103,6 @@ def __init__(self, name_or_id, info=None):
90
103
errmsg = '{}: {}' .format (errmsg , self .info ['message' ])
91
104
raise Exception (errmsg )
92
105
93
- def _create_connection (self ):
94
- return openstack_connection .from_config (cloud = None )
95
-
96
106
def set_info (self ):
97
107
try :
98
108
server = self .conn .compute .find_server (self .name_or_id )
@@ -229,15 +239,12 @@ def __init__(self):
229
239
self .username = 'ubuntu'
230
240
self .up_string = "UNKNOWN"
231
241
self .teuthology_suite = 'teuthology-suite'
232
- self .conn = self . _create_connection ()
242
+ self .conn = create_connection ()
233
243
234
244
token = None
235
245
token_expires = None
236
246
token_cache_duration = 3600
237
247
238
- def _create_connection (self ):
239
- return openstack_connection .from_config (cloud = None )
240
-
241
248
def cache_token (self ):
242
249
if self .provider != 'ovh' :
243
250
return False
0 commit comments