Search in sources :

Example 16 with EntityTopicOperatorSpec

use of io.strimzi.api.kafka.model.EntityTopicOperatorSpec in project strimzi by strimzi.

the class EntityTopicOperator method fromCrd.

/**
 * Create an Entity Topic Operator from given desired resource
 *
 * @param reconciliation The reconciliation
 * @param kafkaAssembly desired resource with cluster configuration containing the Entity Topic Operator one
 * @return Entity Topic Operator instance, null if not configured in the ConfigMap
 */
public static EntityTopicOperator fromCrd(Reconciliation reconciliation, Kafka kafkaAssembly) {
    EntityTopicOperator result = null;
    EntityOperatorSpec entityOperatorSpec = kafkaAssembly.getSpec().getEntityOperator();
    if (entityOperatorSpec != null) {
        EntityTopicOperatorSpec topicOperatorSpec = entityOperatorSpec.getTopicOperator();
        if (topicOperatorSpec != null) {
            String namespace = kafkaAssembly.getMetadata().getNamespace();
            result = new EntityTopicOperator(reconciliation, kafkaAssembly);
            result.setOwnerReference(kafkaAssembly);
            String image = topicOperatorSpec.getImage();
            if (image == null) {
                image = System.getenv().getOrDefault(ClusterOperatorConfig.STRIMZI_DEFAULT_TOPIC_OPERATOR_IMAGE, "quay.io/strimzi/operator:latest");
            }
            result.setImage(image);
            result.setWatchedNamespace(topicOperatorSpec.getWatchedNamespace() != null ? topicOperatorSpec.getWatchedNamespace() : namespace);
            result.setReconciliationIntervalMs(topicOperatorSpec.getReconciliationIntervalSeconds() * 1_000);
            result.setZookeeperSessionTimeoutMs(topicOperatorSpec.getZookeeperSessionTimeoutSeconds() * 1_000);
            result.setTopicMetadataMaxAttempts(topicOperatorSpec.getTopicMetadataMaxAttempts());
            result.setLogging(topicOperatorSpec.getLogging());
            result.setGcLoggingEnabled(topicOperatorSpec.getJvmOptions() == null ? DEFAULT_JVM_GC_LOGGING_ENABLED : topicOperatorSpec.getJvmOptions().isGcLoggingEnabled());
            if (topicOperatorSpec.getJvmOptions() != null) {
                result.setJavaSystemProperties(topicOperatorSpec.getJvmOptions().getJavaSystemProperties());
            }
            result.setJvmOptions(topicOperatorSpec.getJvmOptions());
            result.setResources(topicOperatorSpec.getResources());
            if (topicOperatorSpec.getStartupProbe() != null) {
                result.setStartupProbe(topicOperatorSpec.getStartupProbe());
            }
            if (topicOperatorSpec.getReadinessProbe() != null) {
                result.setReadinessProbe(topicOperatorSpec.getReadinessProbe());
            }
            if (topicOperatorSpec.getLivenessProbe() != null) {
                result.setLivenessProbe(topicOperatorSpec.getLivenessProbe());
            }
        }
    }
    return result;
}
Also used : EntityOperatorSpec(io.strimzi.api.kafka.model.EntityOperatorSpec) EntityTopicOperatorSpec(io.strimzi.api.kafka.model.EntityTopicOperatorSpec)

Example 17 with EntityTopicOperatorSpec

use of io.strimzi.api.kafka.model.EntityTopicOperatorSpec in project strimzi-kafka-operator by strimzi.

the class EntityTopicOperator method fromCrd.

/**
 * Create an Entity Topic Operator from given desired resource
 *
 * @param reconciliation The reconciliation
 * @param kafkaAssembly desired resource with cluster configuration containing the Entity Topic Operator one
 * @return Entity Topic Operator instance, null if not configured in the ConfigMap
 */
public static EntityTopicOperator fromCrd(Reconciliation reconciliation, Kafka kafkaAssembly) {
    EntityTopicOperator result = null;
    EntityOperatorSpec entityOperatorSpec = kafkaAssembly.getSpec().getEntityOperator();
    if (entityOperatorSpec != null) {
        EntityTopicOperatorSpec topicOperatorSpec = entityOperatorSpec.getTopicOperator();
        if (topicOperatorSpec != null) {
            String namespace = kafkaAssembly.getMetadata().getNamespace();
            result = new EntityTopicOperator(reconciliation, kafkaAssembly);
            result.setOwnerReference(kafkaAssembly);
            String image = topicOperatorSpec.getImage();
            if (image == null) {
                image = System.getenv().getOrDefault(ClusterOperatorConfig.STRIMZI_DEFAULT_TOPIC_OPERATOR_IMAGE, "quay.io/strimzi/operator:latest");
            }
            result.setImage(image);
            result.setWatchedNamespace(topicOperatorSpec.getWatchedNamespace() != null ? topicOperatorSpec.getWatchedNamespace() : namespace);
            result.setReconciliationIntervalMs(topicOperatorSpec.getReconciliationIntervalSeconds() * 1_000);
            result.setZookeeperSessionTimeoutMs(topicOperatorSpec.getZookeeperSessionTimeoutSeconds() * 1_000);
            result.setTopicMetadataMaxAttempts(topicOperatorSpec.getTopicMetadataMaxAttempts());
            result.setLogging(topicOperatorSpec.getLogging());
            result.setGcLoggingEnabled(topicOperatorSpec.getJvmOptions() == null ? DEFAULT_JVM_GC_LOGGING_ENABLED : topicOperatorSpec.getJvmOptions().isGcLoggingEnabled());
            if (topicOperatorSpec.getJvmOptions() != null) {
                result.setJavaSystemProperties(topicOperatorSpec.getJvmOptions().getJavaSystemProperties());
            }
            result.setJvmOptions(topicOperatorSpec.getJvmOptions());
            result.setResources(topicOperatorSpec.getResources());
            if (topicOperatorSpec.getStartupProbe() != null) {
                result.setStartupProbe(topicOperatorSpec.getStartupProbe());
            }
            if (topicOperatorSpec.getReadinessProbe() != null) {
                result.setReadinessProbe(topicOperatorSpec.getReadinessProbe());
            }
            if (topicOperatorSpec.getLivenessProbe() != null) {
                result.setLivenessProbe(topicOperatorSpec.getLivenessProbe());
            }
        }
    }
    return result;
}
Also used : EntityOperatorSpec(io.strimzi.api.kafka.model.EntityOperatorSpec) EntityTopicOperatorSpec(io.strimzi.api.kafka.model.EntityTopicOperatorSpec)

Example 18 with EntityTopicOperatorSpec

use of io.strimzi.api.kafka.model.EntityTopicOperatorSpec in project strimzi-kafka-operator by strimzi.

the class EntityOperatorTest method testTlsSideCarContainerEnvVars.

@ParallelTest
public void testTlsSideCarContainerEnvVars() {
    ContainerEnvVar envVar1 = new ContainerEnvVar();
    String testEnvOneKey = "TEST_ENV_1";
    String testEnvOneValue = "test.env.one";
    envVar1.setName(testEnvOneKey);
    envVar1.setValue(testEnvOneValue);
    ContainerEnvVar envVar2 = new ContainerEnvVar();
    String testEnvTwoKey = "TEST_ENV_2";
    String testEnvTwoValue = "test.env.two";
    envVar2.setName(testEnvTwoKey);
    envVar2.setValue(testEnvTwoValue);
    List<ContainerEnvVar> testEnvs = new ArrayList<>();
    testEnvs.add(envVar1);
    testEnvs.add(envVar2);
    ContainerTemplate tlsContainer = new ContainerTemplate();
    tlsContainer.setEnv(testEnvs);
    Kafka resource = new KafkaBuilder(ResourceUtils.createKafka(namespace, cluster, replicas, image, healthDelay, healthTimeout)).editSpec().withNewEntityOperator().withTopicOperator(entityTopicOperatorSpec).withUserOperator(entityUserOperatorSpec).withNewTemplate().withTlsSidecarContainer(tlsContainer).endTemplate().endEntityOperator().endSpec().build();
    List<EnvVar> containerEnvVars = EntityOperator.fromCrd(new Reconciliation("test", resource.getKind(), resource.getMetadata().getNamespace(), resource.getMetadata().getName()), resource, VERSIONS).getTlsSidecarEnvVars();
    assertThat("Failed to correctly set container environment variable: " + testEnvOneKey, containerEnvVars.stream().filter(env -> testEnvOneKey.equals(env.getName())).map(EnvVar::getValue).findFirst().orElse("").equals(testEnvOneValue), is(true));
    assertThat("Failed to correctly set container environment variable: " + testEnvTwoKey, containerEnvVars.stream().filter(env -> testEnvTwoKey.equals(env.getName())).map(EnvVar::getValue).findFirst().orElse("").equals(testEnvTwoValue), is(true));
}
Also used : Quantity(io.fabric8.kubernetes.api.model.Quantity) VolumeMount(io.fabric8.kubernetes.api.model.VolumeMount) CoreMatchers.is(org.hamcrest.CoreMatchers.is) CoreMatchers.hasItem(org.hamcrest.CoreMatchers.hasItem) ParallelSuite(io.strimzi.test.annotations.ParallelSuite) TlsSidecar(io.strimzi.api.kafka.model.TlsSidecar) Role(io.fabric8.kubernetes.api.model.rbac.Role) SecurityContextBuilder(io.fabric8.kubernetes.api.model.SecurityContextBuilder) Collections.singletonList(java.util.Collections.singletonList) CoreMatchers.notNullValue(org.hamcrest.CoreMatchers.notNullValue) TlsSidecarBuilder(io.strimzi.api.kafka.model.TlsSidecarBuilder) AfterAll(org.junit.jupiter.api.AfterAll) EntityTopicOperatorSpec(io.strimzi.api.kafka.model.EntityTopicOperatorSpec) Map(java.util.Map) ContainerEnvVar(io.strimzi.api.kafka.model.ContainerEnvVar) ResourceUtils(io.strimzi.operator.cluster.ResourceUtils) ProbeBuilder(io.strimzi.api.kafka.model.ProbeBuilder) LabelSelectorBuilder(io.fabric8.kubernetes.api.model.LabelSelectorBuilder) ParallelTest(io.strimzi.test.annotations.ParallelTest) Matchers.allOf(org.hamcrest.Matchers.allOf) PolicyRule(io.fabric8.kubernetes.api.model.rbac.PolicyRule) Collectors(java.util.stream.Collectors) List(java.util.List) Labels(io.strimzi.operator.common.model.Labels) PodSecurityContextBuilder(io.fabric8.kubernetes.api.model.PodSecurityContextBuilder) Matchers.containsInAnyOrder(org.hamcrest.Matchers.containsInAnyOrder) TlsSidecarLogLevel(io.strimzi.api.kafka.model.TlsSidecarLogLevel) TopologySpreadConstraintBuilder(io.fabric8.kubernetes.api.model.TopologySpreadConstraintBuilder) EntityUserOperatorSpecBuilder(io.strimzi.api.kafka.model.EntityUserOperatorSpecBuilder) EntityOperatorSpecBuilder(io.strimzi.api.kafka.model.EntityOperatorSpecBuilder) EntityTopicOperatorSpecBuilder(io.strimzi.api.kafka.model.EntityTopicOperatorSpecBuilder) EnvVar(io.fabric8.kubernetes.api.model.EnvVar) ContainerTemplate(io.strimzi.api.kafka.model.template.ContainerTemplate) Container(io.fabric8.kubernetes.api.model.Container) CoreMatchers.equalTo(org.hamcrest.CoreMatchers.equalTo) HashMap(java.util.HashMap) LocalObjectReference(io.fabric8.kubernetes.api.model.LocalObjectReference) KafkaBuilder(io.strimzi.api.kafka.model.KafkaBuilder) ArrayList(java.util.ArrayList) Matchers.hasProperty(org.hamcrest.Matchers.hasProperty) SecurityContext(io.fabric8.kubernetes.api.model.SecurityContext) KafkaVersionTestUtils(io.strimzi.operator.cluster.KafkaVersionTestUtils) TestUtils(io.strimzi.test.TestUtils) Collections.singletonMap(java.util.Collections.singletonMap) PolicyRuleBuilder(io.fabric8.kubernetes.api.model.rbac.PolicyRuleBuilder) MatcherAssert.assertThat(org.hamcrest.MatcherAssert.assertThat) CoreMatchers.nullValue(org.hamcrest.CoreMatchers.nullValue) Volume(io.fabric8.kubernetes.api.model.Volume) EntityOperatorSpec(io.strimzi.api.kafka.model.EntityOperatorSpec) TestUtils.map(io.strimzi.test.TestUtils.map) TopologySpreadConstraint(io.fabric8.kubernetes.api.model.TopologySpreadConstraint) Toleration(io.fabric8.kubernetes.api.model.Toleration) EntityUserOperatorSpec(io.strimzi.api.kafka.model.EntityUserOperatorSpec) IOException(java.io.IOException) TolerationBuilder(io.fabric8.kubernetes.api.model.TolerationBuilder) Reconciliation(io.strimzi.operator.common.Reconciliation) Constants(io.strimzi.api.kafka.model.Constants) ServiceAccount(io.fabric8.kubernetes.api.model.ServiceAccount) Kafka(io.strimzi.api.kafka.model.Kafka) Deployment(io.fabric8.kubernetes.api.model.apps.Deployment) Collections(java.util.Collections) ContainerTemplate(io.strimzi.api.kafka.model.template.ContainerTemplate) Reconciliation(io.strimzi.operator.common.Reconciliation) ArrayList(java.util.ArrayList) Kafka(io.strimzi.api.kafka.model.Kafka) ContainerEnvVar(io.strimzi.api.kafka.model.ContainerEnvVar) ContainerEnvVar(io.strimzi.api.kafka.model.ContainerEnvVar) EnvVar(io.fabric8.kubernetes.api.model.EnvVar) KafkaBuilder(io.strimzi.api.kafka.model.KafkaBuilder) ParallelTest(io.strimzi.test.annotations.ParallelTest)

Example 19 with EntityTopicOperatorSpec

use of io.strimzi.api.kafka.model.EntityTopicOperatorSpec in project strimzi-kafka-operator by strimzi.

the class KafkaST method testRemoveTopicOperatorFromEntityOperator.

@ParallelNamespaceTest
void testRemoveTopicOperatorFromEntityOperator(ExtensionContext extensionContext) {
    final String namespaceName = StUtils.getNamespaceBasedOnRbac(namespace, extensionContext);
    final String clusterName = mapWithClusterNames.get(extensionContext.getDisplayName());
    LOGGER.info("Deploying Kafka cluster {}", clusterName);
    resourceManager.createResource(extensionContext, KafkaTemplates.kafkaEphemeral(clusterName, 3).build());
    String eoPodName = kubeClient(namespaceName).listPodsByPrefixInName(namespaceName, KafkaResources.entityOperatorDeploymentName(clusterName)).get(0).getMetadata().getName();
    KafkaResource.replaceKafkaResourceInSpecificNamespace(clusterName, k -> k.getSpec().getEntityOperator().setTopicOperator(null), namespaceName);
    // Waiting when EO pod will be recreated without TO
    PodUtils.deletePodWithWait(namespaceName, eoPodName);
    DeploymentUtils.waitForDeploymentAndPodsReady(namespaceName, KafkaResources.entityOperatorDeploymentName(clusterName), 1);
    PodUtils.waitUntilPodContainersCount(namespaceName, KafkaResources.entityOperatorDeploymentName(clusterName), 1);
    // Checking that TO was removed
    kubeClient(namespaceName).listPodsByPrefixInName(namespaceName, KafkaResources.entityOperatorDeploymentName(clusterName)).forEach(pod -> {
        pod.getSpec().getContainers().forEach(container -> {
            assertThat(container.getName(), not(containsString("topic-operator")));
        });
    });
    eoPodName = kubeClient(namespaceName).listPodsByPrefixInName(namespaceName, KafkaResources.entityOperatorDeploymentName(clusterName)).get(0).getMetadata().getName();
    KafkaResource.replaceKafkaResourceInSpecificNamespace(clusterName, k -> k.getSpec().getEntityOperator().setTopicOperator(new EntityTopicOperatorSpec()), namespaceName);
    // Waiting when EO pod will be recreated with TO
    PodUtils.deletePodWithWait(namespaceName, eoPodName);
    DeploymentUtils.waitForDeploymentAndPodsReady(namespaceName, KafkaResources.entityOperatorDeploymentName(clusterName), 1);
    // Checking that TO was created
    kubeClient(namespaceName).listPodsByPrefixInName(namespaceName, KafkaResources.entityOperatorDeploymentName(clusterName)).forEach(pod -> {
        pod.getSpec().getContainers().forEach(container -> {
            assertThat(container.getName(), anyOf(containsString("topic-operator"), containsString("user-operator"), containsString("tls-sidecar")));
        });
    });
}
Also used : EntityTopicOperatorSpec(io.strimzi.api.kafka.model.EntityTopicOperatorSpec) Matchers.containsString(org.hamcrest.Matchers.containsString) Matchers.emptyOrNullString(org.hamcrest.Matchers.emptyOrNullString) TestUtils.fromYamlString(io.strimzi.test.TestUtils.fromYamlString) ParallelNamespaceTest(io.strimzi.systemtest.annotations.ParallelNamespaceTest)

Example 20 with EntityTopicOperatorSpec

use of io.strimzi.api.kafka.model.EntityTopicOperatorSpec in project strimzi-kafka-operator by strimzi.

the class KafkaST method testRemoveUserAndTopicOperatorsFromEntityOperator.

@ParallelNamespaceTest
void testRemoveUserAndTopicOperatorsFromEntityOperator(ExtensionContext extensionContext) {
    final String namespaceName = StUtils.getNamespaceBasedOnRbac(namespace, extensionContext);
    final String clusterName = mapWithClusterNames.get(extensionContext.getDisplayName());
    Instant startTime = Instant.now();
    resourceManager.createResource(extensionContext, KafkaTemplates.kafkaEphemeral(clusterName, 3).build());
    String eoDeploymentName = KafkaResources.entityOperatorDeploymentName(clusterName);
    KafkaResource.replaceKafkaResourceInSpecificNamespace(clusterName, k -> {
        k.getSpec().getEntityOperator().setTopicOperator(null);
        k.getSpec().getEntityOperator().setUserOperator(null);
    }, namespaceName);
    PodUtils.waitUntilPodStabilityReplicasCount(namespaceName, eoDeploymentName, 0);
    KafkaResource.replaceKafkaResourceInSpecificNamespace(clusterName, k -> {
        k.getSpec().getEntityOperator().setTopicOperator(new EntityTopicOperatorSpec());
        k.getSpec().getEntityOperator().setUserOperator(new EntityUserOperatorSpec());
    }, namespaceName);
    DeploymentUtils.waitForDeploymentReady(namespaceName, eoDeploymentName);
    // Checking that EO was created
    kubeClient().listPodsByPrefixInName(namespaceName, eoDeploymentName).forEach(pod -> {
        pod.getSpec().getContainers().forEach(container -> {
            assertThat(container.getName(), anyOf(containsString("topic-operator"), containsString("user-operator"), containsString("tls-sidecar")));
        });
    });
    Instant endTime = Instant.now();
    long duration = Duration.between(startTime, endTime).toSeconds();
    assertNoCoErrorsLogged(duration);
}
Also used : EntityTopicOperatorSpec(io.strimzi.api.kafka.model.EntityTopicOperatorSpec) EntityUserOperatorSpec(io.strimzi.api.kafka.model.EntityUserOperatorSpec) Instant(java.time.Instant) Matchers.containsString(org.hamcrest.Matchers.containsString) Matchers.emptyOrNullString(org.hamcrest.Matchers.emptyOrNullString) TestUtils.fromYamlString(io.strimzi.test.TestUtils.fromYamlString) ParallelNamespaceTest(io.strimzi.systemtest.annotations.ParallelNamespaceTest)

Aggregations

EntityTopicOperatorSpec (io.strimzi.api.kafka.model.EntityTopicOperatorSpec)20 EntityOperatorSpec (io.strimzi.api.kafka.model.EntityOperatorSpec)16 EntityOperatorSpecBuilder (io.strimzi.api.kafka.model.EntityOperatorSpecBuilder)14 EntityTopicOperatorSpecBuilder (io.strimzi.api.kafka.model.EntityTopicOperatorSpecBuilder)14 EntityUserOperatorSpec (io.strimzi.api.kafka.model.EntityUserOperatorSpec)14 Kafka (io.strimzi.api.kafka.model.Kafka)14 KafkaBuilder (io.strimzi.api.kafka.model.KafkaBuilder)14 Reconciliation (io.strimzi.operator.common.Reconciliation)14 ParallelTest (io.strimzi.test.annotations.ParallelTest)14 Container (io.fabric8.kubernetes.api.model.Container)12 EnvVar (io.fabric8.kubernetes.api.model.EnvVar)12 LabelSelectorBuilder (io.fabric8.kubernetes.api.model.LabelSelectorBuilder)12 LocalObjectReference (io.fabric8.kubernetes.api.model.LocalObjectReference)12 PodSecurityContextBuilder (io.fabric8.kubernetes.api.model.PodSecurityContextBuilder)12 Quantity (io.fabric8.kubernetes.api.model.Quantity)12 SecurityContext (io.fabric8.kubernetes.api.model.SecurityContext)12 SecurityContextBuilder (io.fabric8.kubernetes.api.model.SecurityContextBuilder)12 ServiceAccount (io.fabric8.kubernetes.api.model.ServiceAccount)12 Toleration (io.fabric8.kubernetes.api.model.Toleration)12 TolerationBuilder (io.fabric8.kubernetes.api.model.TolerationBuilder)12