Search in sources :

Example 11 with ConnectorDeployment

use of org.bf2.cos.fleet.manager.model.ConnectorDeployment in project cos-fleetshard by bf2fc6cc711aee1a0c2a.

the class ConnectorTestSupport method createDeployment.

public static ConnectorDeployment createDeployment(long deploymentRevision, Consumer<ConnectorDeployment> customizer) {
    ConnectorDeployment answer = createDeployment(deploymentRevision);
    customizer.accept(answer);
    return answer;
}
Also used : ConnectorDeployment(org.bf2.cos.fleet.manager.model.ConnectorDeployment)

Example 12 with ConnectorDeployment

use of org.bf2.cos.fleet.manager.model.ConnectorDeployment in project cos-fleetshard by bf2fc6cc711aee1a0c2a.

the class SyncTestSupport method deployment.

public static ConnectorDeployment deployment(String name, long revision, Consumer<ConnectorDeploymentSpec> consumer) {
    ConnectorDeployment answer = new ConnectorDeployment().kind("ConnectorDeployment").id(name).metadata(new ConnectorDeploymentAllOfMetadata().resourceVersion(revision)).spec(new ConnectorDeploymentSpec());
    consumer.accept(answer.getSpec());
    return answer;
}
Also used : ConnectorDeployment(org.bf2.cos.fleet.manager.model.ConnectorDeployment) ConnectorDeploymentAllOfMetadata(org.bf2.cos.fleet.manager.model.ConnectorDeploymentAllOfMetadata) ConnectorDeploymentSpec(org.bf2.cos.fleet.manager.model.ConnectorDeploymentSpec)

Example 13 with ConnectorDeployment

use of org.bf2.cos.fleet.manager.model.ConnectorDeployment in project cos-fleetshard by bf2fc6cc711aee1a0c2a.

the class ConnectorDeploymentProvisioner method createManagedConnector.

private ManagedConnector createManagedConnector(String uow, ConnectorDeployment deployment, HasMetadata owner) {
    ManagedConnector connector = fleetShard.getConnector(deployment).orElseGet(() -> {
        LOGGER.info("Connector not found (cluster_id: {}, connector_id: {}, deployment_id: {}, resource_version: {}), creating a new one", fleetShard.getClusterId(), deployment.getSpec().getConnectorId(), deployment.getId(), deployment.getMetadata().getResourceVersion());
        return Connectors.newConnector(fleetShard.getClusterId(), deployment.getSpec().getConnectorId(), deployment.getId(), Map.of());
    });
    // TODO: change APIs to include a single operator
    // move operator one level up
    // include full operator info in ConnectorDeployment APIs
    ArrayNode operatorsMeta = deployment.getSpec().getShardMetadata().withArray("operators");
    if (operatorsMeta.size() != 1) {
        throw new IllegalArgumentException("Multiple selectors are not yet supported");
    }
    OperatorSelector operatorSelector = new OperatorSelector(deployment.getSpec().getOperatorId(), operatorsMeta.get(0).requiredAt("/type").asText(), operatorsMeta.get(0).requiredAt("/version").asText());
    if (operatorSelector.getId() == null) {
        final OperatorSelector currentSelector = connector.getSpec().getOperatorSelector();
        // don't select a new operator if previously set.
        if (currentSelector != null && currentSelector.getId() != null) {
            operatorSelector.setId(currentSelector.getId());
        } else {
            OperatorSelectorUtil.assign(operatorSelector, fleetShard.lookupOperators()).map(Operator::getId).ifPresent(operatorSelector::setId);
        }
    }
    if (operatorSelector.getId() != null) {
        Resources.setLabel(connector, Resources.LABEL_OPERATOR_ASSIGNED, operatorSelector.getId());
    }
    if (operatorSelector.getType() != null) {
        Resources.setLabel(connector, Resources.LABEL_OPERATOR_TYPE, operatorSelector.getType());
    }
    if (config != null) {
        config.connectors().labels().forEach((k, v) -> {
            Resources.setLabel(connector, k, v);
        });
        config.connectors().annotations().forEach((k, v) -> {
            Resources.setAnnotation(connector, k, v);
        });
    }
    connector.getMetadata().setOwnerReferences(List.of(new OwnerReferenceBuilder().withApiVersion(owner.getApiVersion()).withKind(owner.getKind()).withName(owner.getMetadata().getName()).withUid(owner.getMetadata().getUid()).withBlockOwnerDeletion(true).build()));
    // add resource version to label
    Resources.setLabel(connector, Resources.LABEL_DEPLOYMENT_RESOURCE_VERSION, "" + deployment.getMetadata().getResourceVersion());
    // add uow
    Resources.setLabel(connector, Resources.LABEL_UOW, uow);
    connector.getSpec().getDeployment().setDeploymentResourceVersion(deployment.getMetadata().getResourceVersion());
    connector.getSpec().getDeployment().setDesiredState(deployment.getSpec().getDesiredState());
    connector.getSpec().getDeployment().setConnectorTypeId(deployment.getSpec().getConnectorTypeId());
    connector.getSpec().getDeployment().setConnectorResourceVersion(deployment.getSpec().getConnectorResourceVersion());
    KafkaConnectionSettings kafkaConnectionSettings = deployment.getSpec().getKafka();
    if (kafkaConnectionSettings != null) {
        connector.getSpec().getDeployment().setKafka(new KafkaSpecBuilder().withId(kafkaConnectionSettings.getId()).withUrl(kafkaConnectionSettings.getUrl()).build());
    }
    SchemaRegistryConnectionSettings schemaRegistryConnectionSettings = deployment.getSpec().getSchemaRegistry();
    if (schemaRegistryConnectionSettings != null) {
        connector.getSpec().getDeployment().setSchemaRegistry(new SchemaRegistrySpecBuilder().withId(schemaRegistryConnectionSettings.getId()).withUrl(schemaRegistryConnectionSettings.getUrl()).build());
    }
    connector.getSpec().getDeployment().setConnectorResourceVersion(deployment.getSpec().getConnectorResourceVersion());
    connector.getSpec().getDeployment().setSecret(Secrets.generateConnectorSecretId(deployment.getId()));
    connector.getSpec().getDeployment().setUnitOfWork(uow);
    connector.getSpec().setOperatorSelector(operatorSelector);
    LOGGER.info("Provisioning connector id={} rv={} - {}/{}: {}", connector.getMetadata().getName(), connector.getSpec().getDeployment().getDeploymentResourceVersion(), fleetShard.getConnectorsNamespace(), connector.getSpec().getConnectorId(), Serialization.asJson(connector.getSpec()));
    try {
        return fleetShard.createConnector(connector);
    } catch (Exception e) {
        LOGGER.warn("", e);
        throw e;
    }
}
Also used : OwnerReferenceBuilder(io.fabric8.kubernetes.api.model.OwnerReferenceBuilder) KafkaSpecBuilder(org.bf2.cos.fleetshard.api.KafkaSpecBuilder) SchemaRegistryConnectionSettings(org.bf2.cos.fleet.manager.model.SchemaRegistryConnectionSettings) SchemaRegistrySpecBuilder(org.bf2.cos.fleetshard.api.SchemaRegistrySpecBuilder) ManagedConnector(org.bf2.cos.fleetshard.api.ManagedConnector) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) OperatorSelector(org.bf2.cos.fleetshard.api.OperatorSelector) KafkaConnectionSettings(org.bf2.cos.fleet.manager.model.KafkaConnectionSettings)

Example 14 with ConnectorDeployment

use of org.bf2.cos.fleet.manager.model.ConnectorDeployment in project cos-fleetshard by bf2fc6cc711aee1a0c2a.

the class ConnectorDeploymentSync method run.

private void run() {
    try {
        while (!executor.isShutdown()) {
            final long timeout = config.connectors().provisioner().queueTimeout().toMillis();
            queue.poll(timeout, TimeUnit.MILLISECONDS, deployments -> {
                LOGGER.debug("connectors to deploy: {}", deployments.size());
                for (ConnectorDeployment deployment : deployments) {
                    provisioner.provision(deployment);
                }
            });
        }
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        LOGGER.debug("interrupted, message: {}", e.getMessage());
    } catch (Exception e) {
        LOGGER.debug("{}", e.getMessage(), e);
    } finally {
        if (!executor.isShutdown()) {
            future = executor.submit(this::run);
        }
    }
}
Also used : ConnectorDeployment(org.bf2.cos.fleet.manager.model.ConnectorDeployment)

Aggregations

ConnectorDeployment (org.bf2.cos.fleet.manager.model.ConnectorDeployment)11 ManagedConnector (org.bf2.cos.fleetshard.api.ManagedConnector)8 Secret (io.fabric8.kubernetes.api.model.Secret)6 FleetShardSyncConfig (org.bf2.cos.fleetshard.sync.FleetShardSyncConfig)5 MeterRegistry (io.micrometer.core.instrument.MeterRegistry)4 FleetManagerClient (org.bf2.cos.fleetshard.sync.client.FleetManagerClient)4 ConnectorDeploymentStatus (org.bf2.cos.fleet.manager.model.ConnectorDeploymentStatus)3 KafkaConnectionSettings (org.bf2.cos.fleet.manager.model.KafkaConnectionSettings)3 SchemaRegistryConnectionSettings (org.bf2.cos.fleet.manager.model.SchemaRegistryConnectionSettings)3 FleetShardClient (org.bf2.cos.fleetshard.sync.client.FleetShardClient)3 ConnectorDeploymentProvisioner (org.bf2.cos.fleetshard.sync.resources.ConnectorDeploymentProvisioner)3 Test (org.junit.jupiter.api.Test)3 ArrayNode (com.fasterxml.jackson.databind.node.ArrayNode)2 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)2 ObjectMetaBuilder (io.fabric8.kubernetes.api.model.ObjectMetaBuilder)2 SecretBuilder (io.fabric8.kubernetes.api.model.SecretBuilder)2 Collection (java.util.Collection)2 ApplicationScoped (javax.enterprise.context.ApplicationScoped)2 ConnectorDeploymentAllOfMetadata (org.bf2.cos.fleet.manager.model.ConnectorDeploymentAllOfMetadata)2 ConnectorDeploymentList (org.bf2.cos.fleet.manager.model.ConnectorDeploymentList)2