use of org.bf2.operator.resources.v1alpha1.ManagedKafkaCondition.Reason in project kas-fleetshard by bf2fc6cc711aee1a0c2a.
the class AbstractKafkaCluster method getReadiness.
@Override
public OperandReadiness getReadiness(ManagedKafka managedKafka) {
Kafka kafka = cachedKafka(managedKafka);
if (kafka == null) {
return new OperandReadiness(Status.False, Reason.Installing, String.format("Kafka %s does not exist", kafkaClusterName(managedKafka)));
}
Optional<Condition> notReady = kafkaCondition(kafka, c -> "NotReady".equals(c.getType()));
if (notReady.filter(c -> "True".equals(c.getStatus())).isPresent()) {
Condition c = notReady.get();
return new OperandReadiness(Status.False, "Creating".equals(c.getReason()) ? Reason.Installing : Reason.Error, c.getMessage());
}
if (isStrimziUpdating(managedKafka)) {
// the status here is actually unknown
return new OperandReadiness(Status.True, Reason.StrimziUpdating, null);
}
if (isKafkaUpdating(managedKafka) || isKafkaUpgradeStabilityChecking(managedKafka)) {
return new OperandReadiness(Status.True, Reason.KafkaUpdating, null);
}
if (isKafkaIbpUpdating(managedKafka)) {
return new OperandReadiness(Status.True, Reason.KafkaIbpUpdating, null);
}
Optional<Condition> ready = kafkaCondition(kafka, c -> "Ready".equals(c.getType()));
if (ready.filter(c -> "True".equals(c.getStatus())).isPresent()) {
return new OperandReadiness(Status.True, null, null);
}
if (isReconciliationPaused(managedKafka)) {
// strimzi may in the future report the status even when paused, but for now we don't know
return new OperandReadiness(Status.Unknown, Reason.Paused, String.format("Kafka %s is paused for an unknown reason", kafkaClusterName(managedKafka)));
}
return new OperandReadiness(Status.False, Reason.Installing, String.format("Kafka %s is not providing status", kafkaClusterName(managedKafka)));
}
use of org.bf2.operator.resources.v1alpha1.ManagedKafkaCondition.Reason in project kas-fleetshard by bf2fc6cc711aee1a0c2a.
the class KafkaInstance method getReadiness.
@Override
public OperandReadiness getReadiness(ManagedKafka managedKafka) {
if (managedKafka.getSpec().isDeleted()) {
// TODO: it may be a good idea to offer a message here as well
return new OperandReadiness(isDeleted(managedKafka) ? Status.False : Status.Unknown, Reason.Deleted, null);
}
List<OperandReadiness> readiness = operands.stream().map(o -> o.getReadiness(managedKafka)).filter(Objects::nonNull).collect(Collectors.toList());
// default to the first reason, with can come from the kafka by the order of the operands
Reason reason = readiness.stream().map(OperandReadiness::getReason).filter(Objects::nonNull).findFirst().orElse(null);
// default the status to false or unknown if any are unknown
Status status = readiness.stream().anyMatch(r -> Status.Unknown.equals(r.getStatus())) ? Status.Unknown : Status.False;
// combine all the messages
String message = readiness.stream().map(OperandReadiness::getMessage).filter(Objects::nonNull).collect(Collectors.joining("; "));
// override in particular scenarios
if (readiness.stream().allMatch(r -> Status.True.equals(r.getStatus()))) {
status = Status.True;
} else if (readiness.stream().anyMatch(r -> Reason.Installing.equals(r.getReason()))) {
// may mask other error states
reason = Reason.Installing;
} else if (readiness.stream().anyMatch(r -> Reason.Error.equals(r.getReason()))) {
reason = Reason.Error;
}
return new OperandReadiness(status, reason, message);
}
use of org.bf2.operator.resources.v1alpha1.ManagedKafkaCondition.Reason in project kas-fleetshard by bf2fc6cc711aee1a0c2a.
the class StrimziBundleManager method updateStatus.
/**
* Update status of ManagedKafkaAgent resource about approval of Strimzi bundle installation
* NOTE: it creates a condition if Strimzi bundle installation was not approved. The condition is taken out if approved.
*
* @param approval the status of the approval
*/
private void updateStatus(Approval approval) {
ManagedKafkaAgent resource = this.agentClient.getByName(this.agentClient.getNamespace(), ManagedKafkaAgentResourceClient.RESOURCE_NAME);
if (resource != null && resource.getStatus() != null) {
List<ManagedKafkaCondition> conditions = resource.getStatus().getConditions();
ManagedKafkaCondition bundleReadyCondition = ConditionUtils.findManagedKafkaCondition(conditions, ManagedKafkaCondition.Type.StrimziBundleReady).orElse(null);
ManagedKafkaCondition.Reason reason = ManagedKafkaCondition.Reason.OrphanedKafkas;
ManagedKafkaCondition.Status status = ManagedKafkaCondition.Status.False;
if (approval != Approval.ORPHANED) {
if (bundleReadyCondition == null) {
return;
}
conditions.remove(bundleReadyCondition);
} else {
if (bundleReadyCondition == null) {
bundleReadyCondition = ConditionUtils.buildCondition(ManagedKafkaCondition.Type.StrimziBundleReady, status);
bundleReadyCondition.reason(reason);
conditions.add(bundleReadyCondition);
} else {
ConditionUtils.updateConditionStatus(bundleReadyCondition, status, reason, null);
}
}
this.agentClient.replaceStatus(resource);
}
}
use of org.bf2.operator.resources.v1alpha1.ManagedKafkaCondition.Reason in project cos-fleetshard by bf2fc6cc711aee1a0c2a.
the class DebeziumOperandControllerTest method computeStatus.
@ParameterizedTest
@MethodSource
void computeStatus(String connectorState, String conditionType, String conditionReason, String expectedConnectorState) {
ConnectorStatusSpec status = new ConnectorStatusSpec();
DebeziumOperandSupport.computeStatus(status, new KafkaConnectorBuilder().withStatus(new KafkaConnectorStatusBuilder().addToConditions(new ConditionBuilder().withType(conditionType).withReason(conditionReason).build()).addToConnectorStatus("connector", new org.bf2.cos.fleetshard.operator.debezium.model.KafkaConnectorStatusBuilder().withState(connectorState).build()).build()).build());
assertThat(status.getPhase()).isEqualTo(expectedConnectorState);
assertThat(status.getConditions()).anySatisfy(condition -> {
assertThat(condition).hasFieldOrPropertyWithValue("type", conditionType).hasFieldOrPropertyWithValue("reason", conditionReason);
});
}
use of org.bf2.operator.resources.v1alpha1.ManagedKafkaCondition.Reason in project cos-fleetshard by bf2fc6cc711aee1a0c2a.
the class ConnectorDeploymentProvisioner method provisionConnectors.
private void provisionConnectors(Collection<ConnectorDeployment> deployments) {
for (ConnectorDeployment deployment : deployments) {
this.recorder.record(() -> provision(deployment), Tags.of(TAG_DEPLOYMENT_ID, deployment.getId()), e -> {
LOGGER.error("Failure while trying to provision connector deployment: id={}, revision={}", deployment.getId(), deployment.getMetadata().getResourceVersion(), e);
try {
MetaV1Condition condition = new MetaV1Condition();
condition.setType(Conditions.TYPE_READY);
condition.setStatus(Conditions.STATUS_FALSE);
condition.setReason(Conditions.FAILED_TO_CREATE_OR_UPDATE_RESOURCE_REASON);
condition.setMessage(e.getMessage());
ConnectorDeploymentStatus status = new ConnectorDeploymentStatus();
status.setResourceVersion(deployment.getMetadata().getResourceVersion());
status.addConditionsItem(condition);
fleetManager.updateConnectorStatus(fleetShard.getClusterId(), deployment.getId(), status);
} catch (Exception ex) {
LOGGER.warn("Error wile reporting failure to the control plane", e);
}
fleetShard.getConnectorCluster().ifPresent(cc -> {
fleetShard.broadcast("Warning", "FailedToCreateOrUpdateResource", String.format("Unable to create or update deployment %s, revision: %s, reason: %s", deployment.getId(), deployment.getMetadata().getResourceVersion(), e.getMessage()), cc);
});
});
}
}
Aggregations