Search in sources :

Example 96 with Status

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());
}
Also used : PodStatus(io.fabric8.kubernetes.api.model.PodStatus) ObjectMeta(io.fabric8.kubernetes.api.model.ObjectMeta) ContainerStatus(io.fabric8.kubernetes.api.model.ContainerStatus) KubernetesClientException(io.fabric8.kubernetes.client.KubernetesClientException) CheckForNull(edu.umd.cs.findbugs.annotations.CheckForNull)

Example 97 with Status

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)));
}
Also used : Condition(io.strimzi.api.kafka.model.status.Condition) Quantity(io.fabric8.kubernetes.api.model.Quantity) Context(io.javaoperatorsdk.operator.api.Context) KafkaStatus(io.strimzi.api.kafka.model.status.KafkaStatus) GenericKafkaListener(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListener) Arrays(java.util.Arrays) GenericSecretSource(io.strimzi.api.kafka.model.GenericSecretSource) Status(org.bf2.operator.resources.v1alpha1.ManagedKafkaCondition.Status) Logger(org.jboss.logging.Logger) KafkaListenerAuthentication(io.strimzi.api.kafka.model.listener.KafkaListenerAuthentication) StrimziManager(org.bf2.operator.managers.StrimziManager) GenericKafkaListenerConfigurationBrokerBuilder(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBrokerBuilder) GenericKafkaListenerConfigurationBootstrapBuilder(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBootstrapBuilder) Function(java.util.function.Function) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) CertAndKeySecretSourceBuilder(io.strimzi.api.kafka.model.CertAndKeySecretSourceBuilder) GenericKafkaListenerConfigurationBroker(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBroker) SecuritySecretManager(org.bf2.operator.managers.SecuritySecretManager) Map(java.util.Map) KafkaManager(org.bf2.operator.managers.KafkaManager) KafkaResourceClient(org.bf2.operator.clients.KafkaResourceClient) CertAndKeySecretSource(io.strimzi.api.kafka.model.CertAndKeySecretSource) CertSecretSource(io.strimzi.api.kafka.model.CertSecretSource) Predicate(java.util.function.Predicate) Pod(io.fabric8.kubernetes.api.model.Pod) InformerManager(org.bf2.operator.managers.InformerManager) GenericKafkaListenerBuilder(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerBuilder) Reason(org.bf2.operator.resources.v1alpha1.ManagedKafkaCondition.Reason) OpenShiftClient(io.fabric8.openshift.client.OpenShiftClient) ManagedKafkaAuthenticationOAuth(org.bf2.operator.resources.v1alpha1.ManagedKafkaAuthenticationOAuth) Objects(java.util.Objects) List(java.util.List) CertSecretSourceBuilder(io.strimzi.api.kafka.model.CertSecretSourceBuilder) GenericSecretSourceBuilder(io.strimzi.api.kafka.model.GenericSecretSourceBuilder) KafkaListenerType(io.strimzi.api.kafka.model.listener.arraylistener.KafkaListenerType) KubernetesClient(io.fabric8.kubernetes.client.KubernetesClient) KafkaListenerAuthenticationOAuthBuilder(io.strimzi.api.kafka.model.listener.KafkaListenerAuthenticationOAuthBuilder) Optional(java.util.Optional) NetworkPolicyPeerBuilder(io.fabric8.kubernetes.api.model.networking.v1.NetworkPolicyPeerBuilder) Condition(io.strimzi.api.kafka.model.status.Condition) ConfigProperty(org.eclipse.microprofile.config.inject.ConfigProperty) Kafka(io.strimzi.api.kafka.model.Kafka) ManagedKafka(org.bf2.operator.resources.v1alpha1.ManagedKafka) Collections(java.util.Collections) GenericKafkaListenerConfigurationBuilder(io.strimzi.api.kafka.model.listener.arraylistener.GenericKafkaListenerConfigurationBuilder) Kafka(io.strimzi.api.kafka.model.Kafka) ManagedKafka(org.bf2.operator.resources.v1alpha1.ManagedKafka)

Example 98 with Status

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));
}
Also used : Storage(io.strimzi.api.kafka.model.storage.Storage) PersistentClaimStorage(io.strimzi.api.kafka.model.storage.PersistentClaimStorage) SingleVolumeStorage(io.strimzi.api.kafka.model.storage.SingleVolumeStorage) JbodStorage(io.strimzi.api.kafka.model.storage.JbodStorage) SingleVolumeStorage(io.strimzi.api.kafka.model.storage.SingleVolumeStorage) PersistentClaimStorage(io.strimzi.api.kafka.model.storage.PersistentClaimStorage) Quantity(io.fabric8.kubernetes.api.model.Quantity) JbodStorage(io.strimzi.api.kafka.model.storage.JbodStorage)

Example 99 with Status

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));
}
Also used : Quantity(io.fabric8.kubernetes.api.model.Quantity) KafkaClusterSpec(io.strimzi.api.kafka.model.KafkaClusterSpec) PodAffinityTerm(io.fabric8.kubernetes.api.model.PodAffinityTerm) LabelSelector(io.fabric8.kubernetes.api.model.LabelSelector) ImagePullSecretManager(org.bf2.operator.managers.ImagePullSecretManager) Storage(io.strimzi.api.kafka.model.storage.Storage) Rack(io.strimzi.api.kafka.model.Rack) StrimziManager(org.bf2.operator.managers.StrimziManager) Resource(io.fabric8.kubernetes.client.dsl.Resource) JvmOptionsBuilder(io.strimzi.api.kafka.model.JvmOptionsBuilder) PersistentClaimStorage(io.strimzi.api.kafka.model.storage.PersistentClaimStorage) ResourceRequirements(io.fabric8.kubernetes.api.model.ResourceRequirements) ConfigMapKeySelector(io.fabric8.kubernetes.api.model.ConfigMapKeySelector) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) KafkaClusterTemplate(io.strimzi.api.kafka.model.template.KafkaClusterTemplate) SystemProperty(io.strimzi.api.kafka.model.SystemProperty) Map(java.util.Map) KafkaExporterSpec(io.strimzi.api.kafka.model.KafkaExporterSpec) KafkaSpec(io.strimzi.api.kafka.model.KafkaSpec) KafkaManager(org.bf2.operator.managers.KafkaManager) Instance(javax.enterprise.inject.Instance) ExternalLogging(io.strimzi.api.kafka.model.ExternalLogging) ZookeeperClusterTemplateBuilder(io.strimzi.api.kafka.model.template.ZookeeperClusterTemplateBuilder) JvmOptions(io.strimzi.api.kafka.model.JvmOptions) JbodStorageBuilder(io.strimzi.api.kafka.model.storage.JbodStorageBuilder) OperandUtils(org.bf2.common.OperandUtils) DrainCleanerManager(org.bf2.operator.managers.DrainCleanerManager) Config(org.eclipse.microprofile.config.Config) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) PodAffinityTermBuilder(io.fabric8.kubernetes.api.model.PodAffinityTermBuilder) Startup(io.quarkus.runtime.Startup) List(java.util.List) RackBuilder(io.strimzi.api.kafka.model.RackBuilder) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) Optional(java.util.Optional) ApplicationScoped(javax.enterprise.context.ApplicationScoped) TopologySpreadConstraintBuilder(io.fabric8.kubernetes.api.model.TopologySpreadConstraintBuilder) ManagedKafka(org.bf2.operator.resources.v1alpha1.ManagedKafka) DatatypeConverter(javax.xml.bind.DatatypeConverter) ZookeeperClusterTemplate(io.strimzi.api.kafka.model.template.ZookeeperClusterTemplate) PersistentVolumeClaimStatus(io.fabric8.kubernetes.api.model.PersistentVolumeClaimStatus) Context(io.javaoperatorsdk.operator.api.Context) ZookeeperClusterSpec(io.strimzi.api.kafka.model.ZookeeperClusterSpec) ExternalLoggingBuilder(io.strimzi.api.kafka.model.ExternalLoggingBuilder) MessageDigest(java.security.MessageDigest) Logger(org.jboss.logging.Logger) ResourceRequirementsBuilder(io.fabric8.kubernetes.api.model.ResourceRequirementsBuilder) KafkaAuthorizationCustomBuilder(io.strimzi.api.kafka.model.KafkaAuthorizationCustomBuilder) SingleVolumeStorage(io.strimzi.api.kafka.model.storage.SingleVolumeStorage) HashMap(java.util.HashMap) Supplier(java.util.function.Supplier) KafkaBuilder(io.strimzi.api.kafka.model.KafkaBuilder) Inject(javax.inject.Inject) PodDisruptionBudgetTemplateBuilder(io.strimzi.api.kafka.model.template.PodDisruptionBudgetTemplateBuilder) DefaultBean(io.quarkus.arc.DefaultBean) PersistentClaimStorageBuilder(io.strimzi.api.kafka.model.storage.PersistentClaimStorageBuilder) PodAntiAffinity(io.fabric8.kubernetes.api.model.PodAntiAffinity) ExternalConfigurationReferenceBuilder(io.strimzi.api.kafka.model.ExternalConfigurationReferenceBuilder) JmxPrometheusExporterMetricsBuilder(io.strimzi.api.kafka.model.JmxPrometheusExporterMetricsBuilder) KafkaAuthorization(io.strimzi.api.kafka.model.KafkaAuthorization) KafkaClusterTemplateBuilder(io.strimzi.api.kafka.model.template.KafkaClusterTemplateBuilder) MetricsConfig(io.strimzi.api.kafka.model.MetricsConfig) SecuritySecretManager(org.bf2.operator.managers.SecuritySecretManager) PodAffinity(io.fabric8.kubernetes.api.model.PodAffinity) PodAntiAffinityBuilder(io.fabric8.kubernetes.api.model.PodAntiAffinityBuilder) Versions(org.bf2.operator.resources.v1alpha1.Versions) JbodStorage(io.strimzi.api.kafka.model.storage.JbodStorage) TopologySpreadConstraint(io.fabric8.kubernetes.api.model.TopologySpreadConstraint) IngressControllerManager(org.bf2.operator.managers.IngressControllerManager) Toleration(io.fabric8.kubernetes.api.model.Toleration) IOException(java.io.IOException) PodTemplateBuilder(io.strimzi.api.kafka.model.template.PodTemplateBuilder) ServiceAccount(org.bf2.operator.resources.v1alpha1.ServiceAccount) TolerationBuilder(io.fabric8.kubernetes.api.model.TolerationBuilder) ConfigMap(io.fabric8.kubernetes.api.model.ConfigMap) AffinityBuilder(io.fabric8.kubernetes.api.model.AffinityBuilder) ConfigMapBuilder(io.fabric8.kubernetes.api.model.ConfigMapBuilder) ManagedKafkaAuthenticationOAuth(org.bf2.operator.resources.v1alpha1.ManagedKafkaAuthenticationOAuth) KafkaExporterSpecBuilder(io.strimzi.api.kafka.model.KafkaExporterSpecBuilder) AccessControl(org.bf2.operator.operands.KafkaInstanceConfiguration.AccessControl) SystemPropertyBuilder(io.strimzi.api.kafka.model.SystemPropertyBuilder) ConfigMapKeySelectorBuilder(io.fabric8.kubernetes.api.model.ConfigMapKeySelectorBuilder) DigestInputStream(java.security.DigestInputStream) PodNested(io.strimzi.api.kafka.model.template.ZookeeperClusterTemplateFluent.PodNested) ConfigProperty(org.eclipse.microprofile.config.inject.ConfigProperty) Kafka(io.strimzi.api.kafka.model.Kafka) Collections(java.util.Collections) InputStream(java.io.InputStream) ManagedKafka(org.bf2.operator.resources.v1alpha1.ManagedKafka) Kafka(io.strimzi.api.kafka.model.Kafka) PersistentVolumeClaimStatus(io.fabric8.kubernetes.api.model.PersistentVolumeClaimStatus) Quantity(io.fabric8.kubernetes.api.model.Quantity)

Example 100 with Status

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);
}
Also used : PackageManifest(io.fabric8.openshift.api.model.operatorhub.lifecyclemanager.v1.PackageManifest) Subscription(io.fabric8.openshift.api.model.operatorhub.v1alpha1.Subscription) QuarkusTest(io.quarkus.test.junit.QuarkusTest) Test(org.junit.jupiter.api.Test)

Aggregations

Test (org.junit.jupiter.api.Test)210 Pod (io.fabric8.kubernetes.api.model.Pod)147 Reconciliation (io.strimzi.operator.common.Reconciliation)146 Checkpoint (io.vertx.junit5.Checkpoint)128 List (java.util.List)128 KubernetesClient (io.fabric8.kubernetes.client.KubernetesClient)126 PlatformFeaturesAvailability (io.strimzi.operator.PlatformFeaturesAvailability)118 ResourceOperatorSupplier (io.strimzi.operator.cluster.operator.resource.ResourceOperatorSupplier)118 Future (io.vertx.core.Future)111 SecretOperator (io.strimzi.operator.common.operator.resource.SecretOperator)104 Vertx (io.vertx.core.Vertx)102 Optional (java.util.Optional)98 KubernetesClientException (io.fabric8.kubernetes.client.KubernetesClientException)97 MatcherAssert.assertThat (org.hamcrest.MatcherAssert.assertThat)97 ExtendWith (org.junit.jupiter.api.extension.ExtendWith)94 VertxExtension (io.vertx.junit5.VertxExtension)92 VertxTestContext (io.vertx.junit5.VertxTestContext)92 Map (java.util.Map)89 CoreMatchers.is (org.hamcrest.CoreMatchers.is)86 ArrayList (java.util.ArrayList)84