|
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