use of io.fabric8.kubernetes.api.model.Status in project kubernetes-plugin by jenkinsci.
the class PodUtils method logLastLines.
@CheckForNull
public static String logLastLines(@NonNull Pod pod, @NonNull KubernetesClient client) {
PodStatus status = pod.getStatus();
ObjectMeta metadata = pod.getMetadata();
if (status == null || metadata == null) {
return null;
}
String podName = metadata.getName();
String namespace = metadata.getNamespace();
List<ContainerStatus> containers = status.getContainerStatuses();
StringBuilder sb = new StringBuilder();
if (containers != null) {
for (ContainerStatus containerStatus : containers) {
sb.append("\n");
sb.append("- ");
sb.append(containerStatus.getName());
if (containerStatus.getState().getTerminated() != null) {
sb.append(" -- terminated (");
sb.append(containerStatus.getState().getTerminated().getExitCode());
sb.append(")");
}
if (containerStatus.getState().getRunning() != null) {
sb.append(" -- running");
}
if (containerStatus.getState().getWaiting() != null) {
sb.append(" -- waiting");
}
sb.append("\n");
try {
String log = client.pods().inNamespace(namespace).withName(podName).inContainer(containerStatus.getName()).tailingLines(30).getLog();
sb.append("-----Logs-------------\n");
sb.append(log);
sb.append("\n");
} catch (KubernetesClientException e) {
LOGGER.log(Level.FINE, "Unable to retrieve container logs as it is already gone", e);
}
}
}
return Util.fixEmpty(sb.toString());
}
use of io.fabric8.kubernetes.api.model.Status 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 io.fabric8.kubernetes.api.model.Status in project kas-fleetshard by bf2fc6cc711aee1a0c2a.
the class KafkaCluster method getAdjustedMaxDataRetentionSize.
/**
* Get the effective volume size considering extra padding and the existing size
*/
private Quantity getAdjustedMaxDataRetentionSize(ManagedKafka managedKafka, Kafka current) {
long bytes = getPerBrokerBytes(managedKafka, current, managedKafka.getSpec().getCapacity().getMaxDataRetentionSize(), () -> this.config.getKafka().getVolumeSize());
// pad to give a margin before soft/hard limits kick in
bytes += getStoragePadding(managedKafka, current);
// strimzi won't allow the size to be reduced so scrape the size if possible
if (current != null) {
Storage storage = current.getSpec().getKafka().getStorage();
if (storage instanceof JbodStorage) {
JbodStorage jbodStorage = (JbodStorage) storage;
for (SingleVolumeStorage singleVolumeStorage : jbodStorage.getVolumes()) {
if (singleVolumeStorage instanceof PersistentClaimStorage && Integer.valueOf(JBOD_VOLUME_ID).equals(singleVolumeStorage.getId())) {
String existingSize = ((PersistentClaimStorage) singleVolumeStorage).getSize();
long existingBytes = Quantity.getAmountInBytes(Quantity.parse(existingSize)).longValue();
// TODO: if not changed a warning may be appropriate, but it would be best as a status condition
bytes = Math.max(existingBytes, bytes);
break;
}
}
}
}
return new Quantity(String.valueOf(bytes));
}
use of io.fabric8.kubernetes.api.model.Status in project kas-fleetshard by bf2fc6cc711aee1a0c2a.
the class KafkaCluster method calculateRetentionSize.
/**
* Get the current sum of storage as reported by the pvcs.
* This may not match the requested amount ephemerally, or due to rounding
*/
@Override
public Quantity calculateRetentionSize(ManagedKafka managedKafka) {
Kafka current = cachedKafka(managedKafka);
long storageInGbs = informerManager.getPvcsInNamespace(managedKafka.getMetadata().getNamespace()).stream().map(pvc -> {
if (pvc.getStatus() == null) {
return 0L;
}
PersistentVolumeClaimStatus status = pvc.getStatus();
Quantity q = OperandUtils.getOrDefault(status.getCapacity(), "storage", (Quantity) null);
if (q == null) {
return 0L;
}
long value = Quantity.getAmountInBytes(q).longValue();
// round down to the nearest GB - the PVC request is automatically rounded up
return (long) Math.floor(((double) unpadBrokerStorage(managedKafka, current, value)) / (1L << 30));
}).collect(Collectors.summingLong(Long::longValue));
Quantity capacity = managedKafka.getSpec().getCapacity().getMaxDataRetentionSize();
// try to correct for the overall rounding
if (storageInGbs > 0 && (capacity == null || ("Gi".equals(capacity.getFormat()) && (Quantity.getAmountInBytes(capacity).longValue() / (1L << 30)) % getBrokerReplicas(managedKafka, current) != 0))) {
storageInGbs++;
}
return Quantity.parse(String.format("%sGi", storageInGbs));
}
use of io.fabric8.kubernetes.api.model.Status in project kas-fleetshard by bf2fc6cc711aee1a0c2a.
the class StrimziBundleManagerTest method testPackageManifestWithoutStatus.
@Test
public void testPackageManifestWithoutStatus() {
Subscription subscription = this.installOrUpdateBundle("kas-strimzi-operator", "kas-strimzi-bundle", "Manual", "strimzi-cluster-operator.v1", "strimzi-cluster-operator.v2");
// overwrite the PackaheManifest with a "bad" one, completely missing the status
PackageManifest packageManifest = this.createPackageManifestWithStatus("kas-strimzi-operator", "kas-strimzi-bundle", null);
this.packageManifestClient.inNamespace("kas-strimzi-operator").createOrReplace(packageManifest);
this.strimziBundleManager.handleSubscription(subscription);
// check that InstallPlan was not approved
this.checkInstallPlan(subscription, false);
}
Aggregations