Skip to content

Commit af82928

Browse files
authored
Merge pull request #34 from vpodzime/master-no_instance_data_in_driver
Handle missing instance info in driver gracefully
2 parents 610c752 + 3fefc4d commit af82928

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

cf_remote/spawn.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ class Providers(Enum):
3333
def __str__(self):
3434
return self.name.lower()
3535

36+
class MissingInfoError(ValueError):
37+
pass
3638

3739
class VM:
3840
def __init__(self, name, driver, node, role=None,
@@ -125,7 +127,11 @@ def platform(self):
125127

126128
@property
127129
def region(self):
128-
data = self._node or self._data
130+
try:
131+
data = self._node or self._data
132+
except MissingInfoError:
133+
return "uknown"
134+
129135
if "zone" in data.extra:
130136
return data.extra["zone"].name
131137

@@ -169,19 +175,28 @@ def _data(self):
169175
for node in self._driver.list_nodes():
170176
if node is self._node or node.uuid == self._node.uuid:
171177
return node
172-
raise RuntimeError("Cannot find data for '%s' in its driver" % self._name)
178+
raise MissingInfoError("Cannot find data for '%s' in its driver" % self._name)
173179

174180
@property
175181
def state(self):
176-
return self._data.state
182+
try:
183+
return self._data.state
184+
except MissingInfoError:
185+
return "unknown"
177186

178187
@property
179188
def public_ips(self):
180-
return self._data.public_ips or []
189+
try:
190+
return self._data.public_ips or []
191+
except MissingInfoError:
192+
return []
181193

182194
@property
183195
def private_ips(self):
184-
return self._data.private_ips or []
196+
try:
197+
return self._data.private_ips or []
198+
except MissingInfoError:
199+
return []
185200

186201
@property
187202
def info(self):

0 commit comments

Comments
 (0)