|
10 | 10 | )
|
11 | 11 | from ocp_resources.node_network_state import NodeNetworkState
|
12 | 12 | from ocp_resources.resource import Resource, ResourceEditor
|
13 |
| -from timeout_sampler import TimeoutExpiredError, TimeoutSampler, TimeoutWatch |
| 13 | +from timeout_sampler import TimeoutExpiredError, TimeoutSampler, TimeoutWatch, retry |
14 | 14 |
|
15 | 15 | IPV4_STR = "ipv4"
|
16 | 16 | IPV6_STR = "ipv6"
|
@@ -329,10 +329,7 @@ def _absent_interface(self):
|
329 | 329 | @property
|
330 | 330 | def status(self):
|
331 | 331 | for condition in self.instance.status.conditions:
|
332 |
| - if ( |
333 |
| - condition["type"] == self.Conditions.Type.AVAILABLE |
334 |
| - and condition["status"] == self.Condition.Status.TRUE |
335 |
| - ): |
| 332 | + if condition["type"] == self.Conditions.Type.AVAILABLE: |
336 | 333 | return condition["reason"]
|
337 | 334 |
|
338 | 335 | def wait_for_configuration_conditions_unknown_or_progressing(self, wait_timeout=30):
|
@@ -373,32 +370,31 @@ def _process_failed_status(self, failed_condition_reason):
|
373 | 370 |
|
374 | 371 | raise NNCPConfigurationFailed(f"Reason: {failed_condition_reason}\n{last_err_msg}")
|
375 | 372 |
|
| 373 | + def get_available_condition(self): |
| 374 | + for condition in self.instance.get("status", {}).get("conditions", []): |
| 375 | + if condition["type"] == self.Conditions.Type.AVAILABLE: |
| 376 | + return condition |
| 377 | + |
| 378 | + @retry(wait_timeout=120, sleep=5) |
376 | 379 | def wait_for_status_success(self):
|
377 | 380 | failed_condition_reason = self.Conditions.Reason.FAILED_TO_CONFIGURE
|
378 | 381 | no_match_node_condition_reason = self.Conditions.Reason.NO_MATCHING_NODE
|
379 | 382 |
|
380 |
| - # if we get here too fast there are no conditions, we need to wait. |
381 |
| - self.wait_for_configuration_conditions_unknown_or_progressing() |
382 |
| - |
383 |
| - samples = TimeoutSampler(wait_timeout=self.success_timeout, sleep=1, func=lambda: self.status) |
384 |
| - try: |
385 |
| - for sample in samples: |
386 |
| - if sample == self.Conditions.Reason.SUCCESSFULLY_CONFIGURED: |
387 |
| - self.logger.info(f"NNCP {self.name} configured Successfully") |
388 |
| - return sample |
389 |
| - |
390 |
| - elif sample == no_match_node_condition_reason: |
391 |
| - raise NNCPConfigurationFailed(f"{self.name}. Reason: {no_match_node_condition_reason}") |
392 |
| - |
393 |
| - elif sample == failed_condition_reason: |
394 |
| - self._process_failed_status(failed_condition_reason=failed_condition_reason) |
395 |
| - |
396 |
| - except (TimeoutExpiredError, NNCPConfigurationFailed): |
397 |
| - self.logger.error( |
398 |
| - f"Unable to configure NNCP {self.name} " |
399 |
| - f"{f'nodes: {[node.name for node in self.nodes]}' if self.nodes else ''}" |
400 |
| - ) |
401 |
| - raise |
| 383 | + available_condition = [ |
| 384 | + condition |
| 385 | + for condition in self.instance.get("status", {}).get("conditions", []) |
| 386 | + if condition and condition["type"] == self.Conditions.Type.AVAILABLE |
| 387 | + ] |
| 388 | + if available_condition and available_condition[0]["status"] == self.Condition.Status.TRUE: |
| 389 | + self.logger.info(f"NNCP {self.name} configured Successfully") |
| 390 | + return available_condition |
| 391 | + |
| 392 | + elif available_condition[0]["reason"] == no_match_node_condition_reason: |
| 393 | + raise NNCPConfigurationFailed(f"{self.name}. Reason: {no_match_node_condition_reason}") |
| 394 | + |
| 395 | + elif available_condition[0]["reason"] == failed_condition_reason: |
| 396 | + self.logger.error(f"Available condition: {available_condition}") |
| 397 | + self._process_failed_status(failed_condition_reason=failed_condition_reason) |
402 | 398 |
|
403 | 399 | @property
|
404 | 400 | def nnces(self):
|
|
0 commit comments