Search in sources :

Example 1 with Types

use of org.bf2.admin.kafka.admin.model.Types in project kas-fleetshard by bf2fc6cc711aee1a0c2a.

the class InstanceProfiler method setup.

private void setup() throws Exception {
    readResults();
    if (profilingResult.name == null) {
        profilingResult.name = "profile-" + Environment.DATE_FORMAT.format(LocalDateTime.now());
    }
    logDir = new File("target", profilingResult.name);
    Files.createDirectories(logDir.toPath());
    kafkaCluster = KubeClusterResource.connectToKubeCluster(PerformanceEnvironment.KAFKA_KUBECONFIG);
    profilingResult.kafkaNodeType = kafkaCluster.getWorkerNodes().get(0).getMetadata().getLabels().get("node.kubernetes.io/instance-type");
    kafkaProvisioner = ManagedKafkaProvisioner.create(kafkaCluster);
    kafkaProvisioner.setup();
    omb = new OMB(KubeClusterResource.connectToKubeCluster(PerformanceEnvironment.OMB_KUBECONFIG));
    omb.install(kafkaProvisioner.getTlsConfig());
    // TODO: if there is an existing result, make sure it's the same test setup
    profilingResult.ombNodeType = omb.getOmbCluster().getWorkerNodes().get(0).getMetadata().getLabels().get("node.kubernetes.io/instance-type");
    profilingResult.ombWorkerNodes = omb.getOmbCluster().getWorkerNodes().size();
    AvailableResources resources = getMinAvailableResources(omb.getOmbCluster().getWorkerNodes().stream());
    // use all available resources on the worker nodes with 2 workers per node
    // if (resources.memoryBytes > 16*ONE_GB || resources.memoryBytes < 8*ONE_GB) {
    // throw new IllegalStateException("Client instance types are expected to have 16 GB");
    // }
    // assume instead resources that will fit on 2xlarge or xlarge
    resources.cpuMillis = Math.min(6400, resources.cpuMillis);
    resources.memoryBytes = Math.min(12 * ONE_GB, resources.memoryBytes);
    omb.setWorkerCpu(Quantity.parse(resources.cpuMillis / 2 + "m"));
    omb.setWorkerContainerMemory(Quantity.parse(String.valueOf(resources.memoryBytes / 2)));
    profilingResult.ombWorkerCpu = omb.getWorkerCpu();
    profilingResult.ombWorkerMemory = omb.getWorkerContainerMemory();
    LOGGER.info("OMB Workers will use {} cpu and {} memory requests", omb.getWorkerCpu(), omb.getWorkerContainerMemory());
    if (profilingResult.completedStep == null) {
        installedProvisioner = true;
        kafkaProvisioner.install();
        writeResults(Step.SETUP);
    }
}
Also used : AvailableResources(org.bf2.performance.TestUtils.AvailableResources) File(java.io.File)

Example 2 with Types

use of org.bf2.admin.kafka.admin.model.Types in project cos-fleetshard by bf2fc6cc711aee1a0c2a.

the class CamelOperandController method doReify.

@SuppressFBWarnings("HARD_CODE_PASSWORD")
@Override
protected List<HasMetadata> doReify(ManagedConnector connector, CamelShardMetadata shardMetadata, ConnectorConfiguration<ObjectNode, ObjectNode> connectorConfiguration, ServiceAccountSpec serviceAccountSpec) {
    final Map<String, String> properties = createSecretsData(connector, connectorConfiguration, serviceAccountSpec, configuration);
    final ObjectNode errorHandler = createErrorHandler(shardMetadata, connector, connectorConfiguration.getErrorHandlerSpec());
    final List<KameletEndpoint> stepDefinitions;
    final KameletEndpoint source;
    final KameletEndpoint sink;
    // 
    switch(shardMetadata.getConnectorType()) {
        case CONNECTOR_TYPE_SOURCE:
            source = KameletEndpoint.kamelet(shardMetadata.getKamelets().getAdapter().getName());
            source.getProperties().put("id", connector.getSpec().getDeploymentId() + "-source");
            configureKameletProperties(source.getProperties(), connectorConfiguration.getConnectorSpec(), shardMetadata.getKamelets().getAdapter());
            sink = KameletEndpoint.kamelet(shardMetadata.getKamelets().getKafka().getName());
            sink.getProperties().put("id", connector.getSpec().getDeploymentId() + "-sink");
            sink.getProperties().put("bootstrapServers", connector.getSpec().getDeployment().getKafka().getUrl());
            sink.getProperties().put("user", SA_CLIENT_ID_PLACEHOLDER);
            sink.getProperties().put("password", SA_CLIENT_SECRET_PLACEHOLDER);
            configureKameletProperties(sink.getProperties(), connectorConfiguration.getConnectorSpec(), shardMetadata.getKamelets().getKafka());
            if (hasSchemaRegistry(connector)) {
                sink.getProperties().put("registryUrl", connector.getSpec().getDeployment().getSchemaRegistry().getUrl());
            }
            stepDefinitions = createSteps(connector, connectorConfiguration, shardMetadata, sink);
            break;
        case CONNECTOR_TYPE_SINK:
            source = KameletEndpoint.kamelet(shardMetadata.getKamelets().getKafka().getName());
            source.getProperties().put("id", connector.getSpec().getDeploymentId() + "-source");
            source.getProperties().put("consumerGroup", connector.getSpec().getDeploymentId());
            source.getProperties().put("bootstrapServers", connector.getSpec().getDeployment().getKafka().getUrl());
            source.getProperties().put("user", SA_CLIENT_ID_PLACEHOLDER);
            source.getProperties().put("password", SA_CLIENT_SECRET_PLACEHOLDER);
            configureKameletProperties(source.getProperties(), connectorConfiguration.getConnectorSpec(), shardMetadata.getKamelets().getKafka());
            if (hasSchemaRegistry(connector)) {
                source.getProperties().put("registryUrl", connector.getSpec().getDeployment().getSchemaRegistry().getUrl());
            }
            sink = KameletEndpoint.kamelet(shardMetadata.getKamelets().getAdapter().getName());
            sink.getProperties().put("id", connector.getSpec().getDeploymentId() + "-sink");
            configureKameletProperties(sink.getProperties(), connectorConfiguration.getConnectorSpec(), shardMetadata.getKamelets().getAdapter());
            stepDefinitions = createSteps(connector, connectorConfiguration, shardMetadata, source);
            break;
        default:
            throw new IllegalArgumentException("Unknown connector type: " + shardMetadata.getConnectorType());
    }
    final Secret secret = new Secret();
    secret.setMetadata(new ObjectMeta());
    secret.getMetadata().setName(connector.getMetadata().getName() + Resources.CONNECTOR_SECRET_SUFFIX);
    secret.setData(Map.of(APPLICATION_PROPERTIES, asBytesBase64(properties)));
    final ObjectNode integration = createIntegrationSpec(secret.getMetadata().getName(), configuration, Map.of("CONNECTOR_SECRET_NAME", secret.getMetadata().getName(), "CONNECTOR_SECRET_CHECKSUM", Secrets.computeChecksum(secret), "CONNECTOR_ID", connector.getSpec().getConnectorId(), "CONNECTOR_DEPLOYMENT_ID", connector.getSpec().getDeploymentId()));
    final KameletBinding binding = new KameletBinding();
    binding.setMetadata(new ObjectMeta());
    binding.getMetadata().setName(connector.getMetadata().getName());
    binding.getMetadata().setAnnotations(new TreeMap<>());
    binding.setSpec(new KameletBindingSpec());
    binding.getSpec().setSource(source);
    binding.getSpec().setSink(sink);
    binding.getSpec().setErrorHandler(errorHandler);
    binding.getSpec().setSteps(stepDefinitions);
    binding.getSpec().setIntegration(integration);
    Map<String, String> annotations = binding.getMetadata().getAnnotations();
    if (shardMetadata.getAnnotations() != null) {
        annotations.putAll(shardMetadata.getAnnotations());
    }
    if (configuration.labelSelection().enabled()) {
        Operator assigned = connector.getStatus().getConnectorStatus().getAssignedOperator();
        if (assigned != null && assigned.getId() != null) {
            annotations.putIfAbsent(KAMEL_OPERATOR_ID, assigned.getId());
        }
    }
    annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_CONTAINER_IMAGE, shardMetadata.getConnectorImage());
    annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_KAMELETS_ENABLED, "false");
    annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_JVM_ENABLED, "false");
    annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_LOGGING_JSON, "false");
    annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_OWNER_TARGET_LABELS, LABELS_TO_TRANSFER);
    annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_PROMETHEUS_ENABLED, "true");
    annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_PROMETHEUS_POD_MONITOR, "false");
    // health check annotations
    annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_HEALTH_ENABLED, "true");
    annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_HEALTH_READINESS_PROBE_ENABLED, "true");
    annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_HEALTH_LIVENESS_PROBE_ENABLED, "true");
    CamelOperandConfiguration.Health health = configuration.health();
    if (health != null) {
        annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_HEALTH_READINESS_SUCCESS_THRESHOLD, health.readinessSuccessThreshold());
        annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_HEALTH_READINESS_FAILURE_THRESHOLD, health.readinessFailureThreshold());
        annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_HEALTH_READINESS_PERIOD, health.readinessPeriodSeconds());
        annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_HEALTH_READINESS_TIMEOUT, health.readinessTimeoutSeconds());
        annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_HEALTH_LIVENESS_SUCCESS_THRESHOLD, health.livenessSuccessThreshold());
        annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_HEALTH_LIVENESS_FAILURE_THRESHOLD, health.livenessFailureThreshold());
        annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_HEALTH_LIVENESS_PERIOD, health.livenessPeriodSeconds());
        annotations.putIfAbsent(TRAIT_CAMEL_APACHE_ORG_HEALTH_LIVENESS_TIMEOUT, health.livenessTimeoutSeconds());
    }
    if (configuration.connectors() != null) {
        if (configuration.connectors().traits() != null) {
            annotations.putAll(configuration.connectors().traits());
        }
        if (configuration.connectors().types() != null) {
            final String typeId = connector.getSpec().getDeployment().getConnectorTypeId();
            final CamelOperandConfiguration.ConnectorConfiguration typeConfig = configuration.connectors().types().get(typeId);
            if (typeConfig != null && typeConfig.traits() != null) {
                annotations.putAll(typeConfig.traits());
            }
        }
    }
    return List.of(secret, binding);
}
Also used : Operator(org.bf2.cos.fleetshard.api.Operator) ObjectMeta(io.fabric8.kubernetes.api.model.ObjectMeta) KameletBindingSpec(org.bf2.cos.fleetshard.operator.camel.model.KameletBindingSpec) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) KameletEndpoint(org.bf2.cos.fleetshard.operator.camel.model.KameletEndpoint) Secret(io.fabric8.kubernetes.api.model.Secret) KameletBinding(org.bf2.cos.fleetshard.operator.camel.model.KameletBinding) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings)

Aggregations

ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)1 SuppressFBWarnings (edu.umd.cs.findbugs.annotations.SuppressFBWarnings)1 ObjectMeta (io.fabric8.kubernetes.api.model.ObjectMeta)1 Secret (io.fabric8.kubernetes.api.model.Secret)1 File (java.io.File)1 Operator (org.bf2.cos.fleetshard.api.Operator)1 KameletBinding (org.bf2.cos.fleetshard.operator.camel.model.KameletBinding)1 KameletBindingSpec (org.bf2.cos.fleetshard.operator.camel.model.KameletBindingSpec)1 KameletEndpoint (org.bf2.cos.fleetshard.operator.camel.model.KameletEndpoint)1 AvailableResources (org.bf2.performance.TestUtils.AvailableResources)1