use of io.strimzi.controller.cluster.operator.assembly.KafkaAssemblyOperator in project strimzi by strimzi.
the class Main method run.
static CompositeFuture run(Vertx vertx, KubernetesClient client, boolean isOpenShift, Map<String, String> env) {
ClusterControllerConfig config = ClusterControllerConfig.fromMap(env);
ServiceOperator serviceOperations = new ServiceOperator(vertx, client);
ZookeeperSetOperator zookeeperSetOperations = new ZookeeperSetOperator(vertx, client);
KafkaSetOperator kafkaSetOperations = new KafkaSetOperator(vertx, client);
ConfigMapOperator configMapOperations = new ConfigMapOperator(vertx, client);
PvcOperator pvcOperations = new PvcOperator(vertx, client);
DeploymentOperator deploymentOperations = new DeploymentOperator(vertx, client);
KafkaAssemblyOperator kafkaClusterOperations = new KafkaAssemblyOperator(vertx, isOpenShift, config.getOperationTimeoutMs(), configMapOperations, serviceOperations, zookeeperSetOperations, kafkaSetOperations, pvcOperations, deploymentOperations);
KafkaConnectAssemblyOperator kafkaConnectClusterOperations = new KafkaConnectAssemblyOperator(vertx, isOpenShift, configMapOperations, deploymentOperations, serviceOperations);
DeploymentConfigOperator deploymentConfigOperations = null;
ImageStreamOperator imagesStreamOperations = null;
BuildConfigOperator buildConfigOperations = null;
KafkaConnectS2IAssemblyOperator kafkaConnectS2IClusterOperations = null;
if (isOpenShift) {
imagesStreamOperations = new ImageStreamOperator(vertx, client.adapt(OpenShiftClient.class));
buildConfigOperations = new BuildConfigOperator(vertx, client.adapt(OpenShiftClient.class));
deploymentConfigOperations = new DeploymentConfigOperator(vertx, client.adapt(OpenShiftClient.class));
kafkaConnectS2IClusterOperations = new KafkaConnectS2IAssemblyOperator(vertx, isOpenShift, configMapOperations, deploymentConfigOperations, serviceOperations, imagesStreamOperations, buildConfigOperations);
}
List<Future> futures = new ArrayList<>();
for (String namespace : config.getNamespaces()) {
Future<String> fut = Future.future();
futures.add(fut);
ClusterController controller = new ClusterController(namespace, config.getReconciliationIntervalMs(), client, kafkaClusterOperations, kafkaConnectClusterOperations, kafkaConnectS2IClusterOperations);
vertx.deployVerticle(controller, res -> {
if (res.succeeded()) {
log.info("Cluster Controller verticle started in namespace {}", namespace);
} else {
log.error("Cluster Controller verticle in namespace {} failed to start", namespace, res.cause());
System.exit(1);
}
fut.completer().handle(res);
});
}
return CompositeFuture.join(futures);
}
use of io.strimzi.controller.cluster.operator.assembly.KafkaAssemblyOperator in project strimzi by strimzi.
the class ClusterController method createConfigMapWatch.
private void createConfigMapWatch(Handler<AsyncResult<Watch>> handler) {
getVertx().executeBlocking(future -> {
Watch watch = client.configMaps().inNamespace(namespace).withLabels(selector.toMap()).watch(new Watcher<ConfigMap>() {
@Override
public void eventReceived(Action action, ConfigMap cm) {
Labels labels = Labels.fromResource(cm);
AssemblyType type;
try {
type = labels.type();
} catch (IllegalArgumentException e) {
log.warn("Unknown {} label {} received in Config Map {} in namespace {}", Labels.STRIMZI_TYPE_LABEL, cm.getMetadata().getLabels().get(Labels.STRIMZI_TYPE_LABEL), cm.getMetadata().getName(), namespace);
return;
}
final AbstractAssemblyOperator cluster;
if (type == null) {
log.warn("Missing label {} in Config Map {} in namespace {}", Labels.STRIMZI_TYPE_LABEL, cm.getMetadata().getName(), namespace);
return;
} else {
switch(type) {
case KAFKA:
cluster = kafkaAssemblyOperator;
break;
case CONNECT:
cluster = kafkaConnectAssemblyOperator;
break;
case CONNECT_S2I:
cluster = kafkaConnectS2IAssemblyOperator;
break;
default:
return;
}
}
String name = cm.getMetadata().getName();
switch(action) {
case ADDED:
case DELETED:
case MODIFIED:
Reconciliation reconciliation = new Reconciliation("watch", type, namespace, name);
log.info("{}: ConfigMap {} in namespace {} was {}", reconciliation, name, namespace, action);
cluster.reconcileAssembly(reconciliation, result -> {
if (result.succeeded()) {
log.info("{}: assembly reconciled", reconciliation);
} else {
log.error("{}: Failed to reconcile", reconciliation);
}
});
break;
case ERROR:
log.error("Failed ConfigMap {} in namespace{} ", name, namespace);
reconcileAll("watch error");
break;
default:
log.error("Unknown action: {} in namespace {}", name, namespace);
reconcileAll("watch unknown");
}
}
@Override
public void onClose(KubernetesClientException e) {
if (e != null) {
log.error("Watcher closed with exception in namespace {}", namespace, e);
} else {
log.info("Watcher closed in namespace {}", namespace);
}
recreateConfigMapWatch();
}
});
future.complete(watch);
}, res -> {
if (res.succeeded()) {
log.info("ConfigMap watcher running for labels {}", selector);
handler.handle(Future.succeededFuture((Watch) res.result()));
} else {
log.info("ConfigMap watcher failed to start", res.cause());
handler.handle(Future.failedFuture("ConfigMap watcher failed to start"));
}
});
}
Aggregations