Skip to content

Commit 4fd2fce

Browse files
committed
Kibana / dashboards configured via hosts config if not empty.
1 parent e19463f commit 4fd2fce

File tree

1 file changed

+38
-43
lines changed

1 file changed

+38
-43
lines changed

extensions/elasticsearch-rest-client-common/deployment/src/main/java/io/quarkus/elasticsearch/restclient/common/deployment/DevServicesElasticsearchProcessor.java

Lines changed: 38 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
import java.util.Properties;
1717
import java.util.Set;
1818
import java.util.function.Supplier;
19+
import java.util.stream.Collectors;
1920

21+
import org.eclipse.microprofile.config.ConfigProvider;
2022
import org.jboss.logging.Logger;
2123
import org.opensearch.testcontainers.OpensearchContainer;
2224
import org.testcontainers.containers.GenericContainer;
@@ -289,15 +291,6 @@ private RunningDevService startDashboardDevServices(
289291
return null;
290292
}
291293

292-
for (String hostsConfigProperty : buildItemConfig.hostsConfigProperties) {
293-
// Check if elasticsearch hosts property is set
294-
if (ConfigUtils.isPropertyNonEmpty(hostsConfigProperty)) {
295-
log.debugf("Not starting Dashboard Dev Services for Elasticsearch, the %s property is configured.",
296-
hostsConfigProperty);
297-
return null;
298-
}
299-
}
300-
301294
if (!dockerStatusBuildItem.isContainerRuntimeAvailable()) {
302295
log.warn("Docker is not working, cannot start the Kibana/OpenSearch dashboards dev service.");
303296
return null;
@@ -306,6 +299,28 @@ private RunningDevService startDashboardDevServices(
306299
Distribution resolvedDistribution = resolveDistribution(config, buildItemConfig);
307300
DockerImageName resolvedImageName = resolveDashboardImageName(config, resolvedDistribution);
308301

302+
final Optional<ContainerAddress> maybeContainerAddressSearchBackend = elasticsearchContainerLocator.locateContainer(
303+
config.serviceName(),
304+
config.shared(),
305+
launchMode.getLaunchMode())
306+
.or(() -> ComposeLocator.locateContainer(composeProjectBuildItem,
307+
List.of(resolvedImageName.getUnversionedPart(), "elasticsearch", "opensearch"),
308+
ELASTICSEARCH_PORT,
309+
launchMode.getLaunchMode(), useSharedNetwork));
310+
311+
Set<String> opensearchHosts;
312+
if (buildItemConfig.hostsConfigProperties.stream().anyMatch(ConfigUtils::isPropertyNonEmpty)) {
313+
opensearchHosts = buildItemConfig.hostsConfigProperties.stream().filter(ConfigUtils::isPropertyNonEmpty)
314+
.flatMap(property -> ConfigProvider.getConfig().getValues(property, String.class).stream())
315+
.map(host -> "http://" + host.replace("localhost", "host.docker.internal"))
316+
.collect(Collectors.toSet());
317+
} else {
318+
opensearchHosts = maybeContainerAddressSearchBackend.map(containerAddress -> Set
319+
.of(("http://" + containerAddress.getHost() + ":" + containerAddress.getPort())
320+
.replace("localhost", "host.docker.internal")))
321+
.orElseGet(() -> Set.of());
322+
}
323+
309324
final Optional<ContainerAddress> maybeContainerAddress = dashboardContainerLocator.locateContainer(
310325
config.serviceName(),
311326
config.shared(),
@@ -321,9 +336,9 @@ private RunningDevService startDashboardDevServices(
321336
String defaultNetworkId = composeProjectBuildItem.getDefaultNetworkId();
322337
CreatedContainer createdContainer = resolvedDistribution.equals(Distribution.ELASTIC)
323338
? createKibanaContainer(config, resolvedImageName, defaultNetworkId, useSharedNetwork, launchMode,
324-
composeProjectBuildItem)
339+
composeProjectBuildItem, opensearchHosts)
325340
: createDashboardsContainer(config, resolvedImageName, defaultNetworkId, useSharedNetwork, launchMode,
326-
composeProjectBuildItem);
341+
composeProjectBuildItem, opensearchHosts);
327342
GenericContainer<?> container = createdContainer.genericContainer();
328343

329344
if (config.serviceName() != null) {
@@ -401,58 +416,38 @@ private CreatedContainer createOpensearchContainer(ElasticsearchDevServicesBuild
401416

402417
private CreatedContainer createKibanaContainer(ElasticsearchDevServicesBuildTimeConfig config,
403418
DockerImageName resolvedImageName, String defaultNetworkId, boolean useSharedNetwork,
404-
LaunchModeBuildItem launchMode, DevServicesComposeProjectBuildItem composeProjectBuildItem) {
419+
LaunchModeBuildItem launchMode, DevServicesComposeProjectBuildItem composeProjectBuildItem,
420+
Set<String> elasticsearchHosts) {
405421
//Create Generic Kibana container
406422
GenericContainer<?> container = new GenericContainer<>(
407423
resolvedImageName.asCompatibleSubstituteFor("docker.elastic.co/kibana/kibana"));
408424

409425
String kibanaHostName = ConfigureUtil.configureNetwork(container, defaultNetworkId, useSharedNetwork,
410426
DEV_SERVICE_KIBANA);
411427
container.setExposedPorts(List.of(DASHBOARD_PORT));
412-
413-
final Optional<ContainerAddress> maybeContainerAddress = elasticsearchContainerLocator.locateContainer(
414-
config.serviceName(),
415-
config.shared(),
416-
launchMode.getLaunchMode())
417-
.or(() -> ComposeLocator.locateContainer(composeProjectBuildItem,
418-
List.of(resolvedImageName.getUnversionedPart(), "elasticsearch", "opensearch"),
419-
ELASTICSEARCH_PORT,
420-
launchMode.getLaunchMode(), useSharedNetwork));
421-
422-
maybeContainerAddress
423-
.map(containerAddress -> ("http://" + containerAddress.getHost() + ":" + containerAddress.getPort())
424-
.replace("localhost", "host.docker.internal"))
425-
.ifPresent(addressStr -> container.addEnv("ELASTICSEARCH_HOSTS",
426-
addressStr));
428+
if (!elasticsearchHosts.isEmpty()) {
429+
container.addEnv("ELASTICSEARCH_HOSTS",
430+
"[" + elasticsearchHosts.stream().map(url -> "\"" + url + "\"").collect(Collectors.joining(",")) + "]");
431+
}
427432
container.addEnv("NODE_OPTIONS", config.dashboard().nodeOpts());
428433
return new CreatedContainer(container, kibanaHostName);
429434
}
430435

431436
private CreatedContainer createDashboardsContainer(ElasticsearchDevServicesBuildTimeConfig config,
432437
DockerImageName resolvedImageName, String defaultNetworkId, boolean useSharedNetwork,
433-
LaunchModeBuildItem launchMode, DevServicesComposeProjectBuildItem composeProjectBuildItem) {
438+
LaunchModeBuildItem launchMode, DevServicesComposeProjectBuildItem composeProjectBuildItem,
439+
Set<String> opensearchHosts) {
434440
//Create Generic Kibana container
435441
GenericContainer<?> container = new GenericContainer<>(
436442
resolvedImageName.asCompatibleSubstituteFor("opensearchproject/opensearch-dashboards"));
437443

438444
String kibanaHostName = ConfigureUtil.configureNetwork(container, defaultNetworkId, useSharedNetwork,
439445
DEV_SERVICE_DASHBOARDS);
440446
container.setExposedPorts(List.of(DASHBOARD_PORT));
441-
442-
final Optional<ContainerAddress> maybeContainerAddress = elasticsearchContainerLocator.locateContainer(
443-
config.serviceName(),
444-
config.shared(),
445-
launchMode.getLaunchMode())
446-
.or(() -> ComposeLocator.locateContainer(composeProjectBuildItem,
447-
List.of(resolvedImageName.getUnversionedPart(), "elasticsearch", "opensearch"),
448-
ELASTICSEARCH_PORT,
449-
launchMode.getLaunchMode(), useSharedNetwork));
450-
451-
maybeContainerAddress
452-
.map(containerAddress -> ("http://" + containerAddress.getHost() + ":" + containerAddress.getPort())
453-
.replace("localhost", "host.docker.internal"))
454-
.ifPresent(addressStr -> container.addEnv("OPENSEARCH_HOSTS",
455-
addressStr));
447+
if (!opensearchHosts.isEmpty()) {
448+
container.addEnv("OPENSEARCH_HOSTS",
449+
"[" + opensearchHosts.stream().map(url -> "\"" + url + "\"").collect(Collectors.joining(",")) + "]");
450+
}
456451
container.addEnv("NODE_OPTIONS", config.dashboard().nodeOpts());
457452
container.addEnv("DISABLE_SECURITY_DASHBOARDS_PLUGIN", "true");
458453
return new CreatedContainer(container, kibanaHostName);

0 commit comments

Comments
 (0)