use of io.strimzi.controller.cluster.operator.resource.BuildConfigOperator in project strimzi by strimzi.
the class KafkaConnectS2IAssemblyOperatorTest method testReconcile.
@Test
public void testReconcile(TestContext context) {
ConfigMapOperator mockCmOps = mock(ConfigMapOperator.class);
ServiceOperator mockServiceOps = mock(ServiceOperator.class);
DeploymentConfigOperator mockDcOps = mock(DeploymentConfigOperator.class);
BuildConfigOperator mockBcOps = mock(BuildConfigOperator.class);
ImageStreamOperator mockIsOps = mock(ImageStreamOperator.class);
String clusterCmNamespace = "test";
ConfigMap foo = ResourceUtils.createEmptyKafkaConnectClusterConfigMap(clusterCmNamespace, "foo");
ConfigMap bar = ResourceUtils.createEmptyKafkaConnectClusterConfigMap(clusterCmNamespace, "bar");
ConfigMap baz = ResourceUtils.createEmptyKafkaConnectClusterConfigMap(clusterCmNamespace, "baz");
when(mockCmOps.list(eq(clusterCmNamespace), any())).thenReturn(asList(foo, bar));
// when requested ConfigMap for a specific Kafka Connect S2I cluster
when(mockCmOps.get(eq(clusterCmNamespace), eq("foo"))).thenReturn(foo);
when(mockCmOps.get(eq(clusterCmNamespace), eq("bar"))).thenReturn(bar);
// providing the list of ALL DeploymentConfigs for all the Kafka Connect S2I clusters
Labels newLabels = Labels.forType(AssemblyType.CONNECT_S2I);
when(mockDcOps.list(eq(clusterCmNamespace), eq(newLabels))).thenReturn(asList(KafkaConnectS2ICluster.fromConfigMap(bar).generateDeploymentConfig(), KafkaConnectS2ICluster.fromConfigMap(baz).generateDeploymentConfig()));
// providing the list DeploymentConfigs for already "existing" Kafka Connect S2I clusters
Labels barLabels = Labels.forCluster("bar");
when(mockDcOps.list(eq(clusterCmNamespace), eq(barLabels))).thenReturn(asList(KafkaConnectS2ICluster.fromConfigMap(bar).generateDeploymentConfig()));
Labels bazLabels = Labels.forCluster("baz");
when(mockDcOps.list(eq(clusterCmNamespace), eq(bazLabels))).thenReturn(asList(KafkaConnectS2ICluster.fromConfigMap(baz).generateDeploymentConfig()));
Set<String> createdOrUpdated = new HashSet<>();
Set<String> deleted = new HashSet<>();
Async async = context.async(3);
KafkaConnectS2IAssemblyOperator ops = new KafkaConnectS2IAssemblyOperator(vertx, true, mockCmOps, mockDcOps, mockServiceOps, mockIsOps, mockBcOps) {
@Override
public void createOrUpdate(Reconciliation reconciliation, ConfigMap assemblyCm, Handler h) {
createdOrUpdated.add(assemblyCm.getMetadata().getName());
async.countDown();
h.handle(Future.succeededFuture());
}
@Override
public void delete(Reconciliation reconciliation, Handler h) {
deleted.add(reconciliation.assemblyName());
async.countDown();
h.handle(Future.succeededFuture());
}
};
// Now try to reconcile all the Kafka Connect S2I clusters
ops.reconcileAll("test", clusterCmNamespace, Labels.EMPTY);
async.await();
context.assertEquals(new HashSet(asList("foo", "bar")), createdOrUpdated);
context.assertEquals(singleton("baz"), deleted);
}
use of io.strimzi.controller.cluster.operator.resource.BuildConfigOperator in project strimzi by strimzi.
the class KafkaConnectS2IAssemblyOperatorTest method testDeleteCluster.
@Test
public void testDeleteCluster(TestContext context) {
ConfigMapOperator mockCmOps = mock(ConfigMapOperator.class);
ServiceOperator mockServiceOps = mock(ServiceOperator.class);
DeploymentConfigOperator mockDcOps = mock(DeploymentConfigOperator.class);
BuildConfigOperator mockBcOps = mock(BuildConfigOperator.class);
ImageStreamOperator mockIsOps = mock(ImageStreamOperator.class);
String clusterCmName = "foo";
String clusterCmNamespace = "test";
KafkaConnectS2ICluster connect = KafkaConnectS2ICluster.fromConfigMap(ResourceUtils.createEmptyKafkaConnectS2IClusterConfigMap(clusterCmNamespace, clusterCmName));
when(mockDcOps.get(clusterCmNamespace, connect.getName())).thenReturn(connect.generateDeploymentConfig());
when(mockIsOps.get(clusterCmNamespace, connect.getSourceImageStreamName())).thenReturn(connect.generateSourceImageStream());
ArgumentCaptor<String> serviceNamespaceCaptor = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<String> serviceNameCaptor = ArgumentCaptor.forClass(String.class);
when(mockServiceOps.reconcile(serviceNamespaceCaptor.capture(), serviceNameCaptor.capture(), isNull())).thenReturn(Future.succeededFuture());
ArgumentCaptor<String> dcNamespaceCaptor = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<String> dcNameCaptor = ArgumentCaptor.forClass(String.class);
when(mockDcOps.reconcile(dcNamespaceCaptor.capture(), dcNameCaptor.capture(), isNull())).thenReturn(Future.succeededFuture());
ArgumentCaptor<String> isNamespaceCaptor = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<String> isNameCaptor = ArgumentCaptor.forClass(String.class);
when(mockIsOps.reconcile(isNamespaceCaptor.capture(), isNameCaptor.capture(), isNull())).thenReturn(Future.succeededFuture());
ArgumentCaptor<String> bcNamespaceCaptor = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<String> bcNameCaptor = ArgumentCaptor.forClass(String.class);
when(mockBcOps.reconcile(bcNamespaceCaptor.capture(), bcNameCaptor.capture(), isNull())).thenReturn(Future.succeededFuture());
KafkaConnectS2IAssemblyOperator ops = new KafkaConnectS2IAssemblyOperator(vertx, true, mockCmOps, mockDcOps, mockServiceOps, mockIsOps, mockBcOps);
Async async = context.async();
ops.delete(new Reconciliation("test-trigger", AssemblyType.CONNECT_S2I, clusterCmNamespace, clusterCmName), createResult -> {
context.assertTrue(createResult.succeeded());
// Verify service
context.assertEquals(1, serviceNameCaptor.getAllValues().size());
context.assertEquals(clusterCmNamespace, serviceNamespaceCaptor.getValue());
context.assertEquals(connect.getName(), serviceNameCaptor.getValue());
// Vertify deployment Config
context.assertEquals(1, dcNameCaptor.getAllValues().size());
context.assertEquals(clusterCmNamespace, dcNamespaceCaptor.getValue());
context.assertEquals(connect.getName(), dcNameCaptor.getValue());
// Vertify BuildConfig
context.assertEquals(1, bcNameCaptor.getAllValues().size());
context.assertEquals(clusterCmNamespace, bcNamespaceCaptor.getValue());
context.assertEquals(connect.getName(), bcNameCaptor.getValue());
// Vertify ImageStreams
int sisIndex = (connect.getSourceImageStreamName()).equals(isNameCaptor.getAllValues().get(0)) ? 0 : 1;
int tisIndex = (connect.getName()).equals(isNameCaptor.getAllValues().get(0)) ? 0 : 1;
context.assertEquals(2, isNameCaptor.getAllValues().size());
context.assertEquals(clusterCmNamespace, isNamespaceCaptor.getAllValues().get(sisIndex));
context.assertEquals(connect.getSourceImageStreamName(), isNameCaptor.getAllValues().get(sisIndex));
context.assertEquals(clusterCmNamespace, isNamespaceCaptor.getAllValues().get(tisIndex));
context.assertEquals(connect.getName(), isNameCaptor.getAllValues().get(tisIndex));
async.complete();
});
}
use of io.strimzi.controller.cluster.operator.resource.BuildConfigOperator in project strimzi by strimzi.
the class KafkaConnectS2IAssemblyOperatorTest method testUpdateClusterScaleUp.
@Test
public void testUpdateClusterScaleUp(TestContext context) {
int scaleTo = 4;
String newReplicas = String.valueOf(scaleTo);
ConfigMapOperator mockCmOps = mock(ConfigMapOperator.class);
ServiceOperator mockServiceOps = mock(ServiceOperator.class);
DeploymentConfigOperator mockDcOps = mock(DeploymentConfigOperator.class);
BuildConfigOperator mockBcOps = mock(BuildConfigOperator.class);
ImageStreamOperator mockIsOps = mock(ImageStreamOperator.class);
String clusterCmName = "foo";
String clusterCmNamespace = "test";
ConfigMap clusterCm = ResourceUtils.createEmptyKafkaConnectS2IClusterConfigMap(clusterCmNamespace, clusterCmName);
KafkaConnectS2ICluster connect = KafkaConnectS2ICluster.fromConfigMap(clusterCm);
// Change replicas to create ScaleUp
clusterCm.getData().put(KafkaConnectCluster.KEY_REPLICAS, newReplicas);
when(mockCmOps.get(clusterCmNamespace, clusterCmName)).thenReturn(clusterCm);
when(mockServiceOps.get(clusterCmNamespace, connect.getName())).thenReturn(connect.generateService());
when(mockDcOps.get(clusterCmNamespace, connect.getName())).thenReturn(connect.generateDeploymentConfig());
when(mockIsOps.get(clusterCmNamespace, connect.getSourceImageStreamName())).thenReturn(connect.generateSourceImageStream());
when(mockIsOps.get(clusterCmNamespace, connect.getName())).thenReturn(connect.generateTargetImageStream());
when(mockBcOps.get(clusterCmNamespace, connect.getName())).thenReturn(connect.generateBuildConfig());
when(mockServiceOps.reconcile(any(), any(), any())).thenReturn(Future.succeededFuture());
when(mockDcOps.reconcile(any(), any(), any())).thenReturn(Future.succeededFuture());
doAnswer(i -> Future.succeededFuture(scaleTo)).when(mockDcOps).scaleUp(clusterCmNamespace, connect.getName(), scaleTo);
doAnswer(i -> Future.succeededFuture(scaleTo)).when(mockDcOps).scaleDown(clusterCmNamespace, connect.getName(), scaleTo);
when(mockIsOps.reconcile(any(), any(), any())).thenReturn(Future.succeededFuture());
when(mockBcOps.reconcile(any(), any(), any())).thenReturn(Future.succeededFuture());
KafkaConnectS2IAssemblyOperator ops = new KafkaConnectS2IAssemblyOperator(vertx, true, mockCmOps, mockDcOps, mockServiceOps, mockIsOps, mockBcOps);
Async async = context.async();
ops.createOrUpdate(new Reconciliation("test-trigger", AssemblyType.CONNECT_S2I, clusterCmNamespace, clusterCmName), clusterCm, createResult -> {
context.assertTrue(createResult.succeeded());
verify(mockDcOps).scaleUp(clusterCmNamespace, connect.getName(), scaleTo);
async.complete();
});
}
use of io.strimzi.controller.cluster.operator.resource.BuildConfigOperator 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);
}
Aggregations