aboutsummaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@oath.com>2018-01-22 15:36:10 +0100
committerValerij Fredriksen <valerijf@oath.com>2018-01-22 16:09:06 +0100
commit35b9bd876c5efb49abb3fffcdbfe010a4a001297 (patch)
treed88e7d8100259dfecc754f7dfdf2c302fdc3744d /node-admin
parentc69fdcea1939f225216e95907d30d9b99fcbebae (diff)
Use ConfigServerConfig
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/application/services.xml5
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/DockerAdminComponent.java8
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminMain.java6
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/NodeAdminProvider.java4
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java42
-rw-r--r--node-admin/src/main/resources/configdefinitions/config-server.def20
6 files changed, 56 insertions, 29 deletions
diff --git a/node-admin/src/main/application/services.xml b/node-admin/src/main/application/services.xml
index e73c13dfa8f..da782363508 100644
--- a/node-admin/src/main/application/services.xml
+++ b/node-admin/src/main/application/services.xml
@@ -15,11 +15,6 @@
<isRunningLocally>false</isRunningLocally>
</config>
- <config name="vespa.hosted.node.admin.node-admin">
- <isRunningLocally>false</isRunningLocally>
- <restartOnDeploy>true</restartOnDeploy>
- </config>
-
<nodes type="host"/>
<preprocess:include file="variant.xml" required="false"/>
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/DockerAdminComponent.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/DockerAdminComponent.java
index 980a244484c..8ba93e769e5 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/DockerAdminComponent.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/DockerAdminComponent.java
@@ -6,6 +6,7 @@ import com.yahoo.net.HostName;
import com.yahoo.system.ProcessExecuter;
import com.yahoo.vespa.hosted.dockerapi.Docker;
import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper;
+import com.yahoo.vespa.hosted.node.admin.ConfigServerConfig;
import com.yahoo.vespa.hosted.node.admin.component.AdminComponent;
import com.yahoo.vespa.hosted.node.admin.docker.DockerOperations;
import com.yahoo.vespa.hosted.node.admin.docker.DockerOperationsImpl;
@@ -32,6 +33,7 @@ public class DockerAdminComponent implements AdminComponent {
private static final Duration NODE_AGENT_SCAN_INTERVAL = Duration.ofSeconds(30);
private static final Duration NODE_ADMIN_CONVERGE_STATE_INTERVAL = Duration.ofSeconds(30);
+ private final ConfigServerConfig configServerConfig;
private final NodeAdminConfig config;
private final Docker docker;
private final MetricReceiverWrapper metricReceiver;
@@ -41,10 +43,12 @@ public class DockerAdminComponent implements AdminComponent {
private Optional<NodeAdminStateUpdater> nodeAdminStateUpdater = Optional.empty();
- public DockerAdminComponent(NodeAdminConfig config,
+ public DockerAdminComponent(ConfigServerConfig configServerConfig,
+ NodeAdminConfig config,
Docker docker,
MetricReceiverWrapper metricReceiver,
ClassLocking classLocking) {
+ this.configServerConfig = configServerConfig;
this.config = config;
this.docker = docker;
this.metricReceiver = metricReceiver;
@@ -57,7 +61,7 @@ public class DockerAdminComponent implements AdminComponent {
return;
}
- Environment environment = new Environment();
+ Environment environment = new Environment(configServerConfig);
requestExecutor = ConfigServerHttpRequestExecutor.create(
environment.getConfigServerUris(), environment.getKeyStoreOptions(), environment.getTrustStoreOptions());
NodeRepository nodeRepository = new NodeRepositoryImpl(requestExecutor);
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminMain.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminMain.java
index 6fd6b0c906c..4ee84d12b1d 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminMain.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminMain.java
@@ -8,6 +8,7 @@ import com.yahoo.log.LogLevel;
import com.yahoo.vespa.defaults.Defaults;
import com.yahoo.vespa.hosted.dockerapi.Docker;
import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper;
+import com.yahoo.vespa.hosted.node.admin.ConfigServerConfig;
import com.yahoo.vespa.hosted.node.admin.component.AdminComponent;
import java.io.File;
@@ -30,6 +31,7 @@ public class NodeAdminMain implements AutoCloseable {
private static final Logger logger = Logger.getLogger(NodeAdminMain.class.getName());
private final ComponentRegistry<AdminComponent> adminRegistry;
+ private final ConfigServerConfig configServerConfig;
private final Docker docker;
private final MetricReceiverWrapper metricReceiver;
private final ClassLocking classLocking;
@@ -39,10 +41,12 @@ public class NodeAdminMain implements AutoCloseable {
private Optional<DockerAdminComponent> dockerAdmin = Optional.empty();
public NodeAdminMain(ComponentRegistry<AdminComponent> adminRegistry,
+ ConfigServerConfig configServerConfig,
Docker docker,
MetricReceiverWrapper metricReceiver,
ClassLocking classLocking) {
this.adminRegistry = adminRegistry;
+ this.configServerConfig = configServerConfig;
this.docker = docker;
this.metricReceiver = metricReceiver;
this.classLocking = classLocking;
@@ -58,7 +62,7 @@ public class NodeAdminMain implements AutoCloseable {
if (config.components.isEmpty()) {
dockerAdmin = Optional.of(new DockerAdminComponent(
- config, docker, metricReceiver, classLocking));
+ configServerConfig, config, docker, metricReceiver, classLocking));
enable(dockerAdmin.get());
} else {
logger.log(LogLevel.INFO, () -> {
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/NodeAdminProvider.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/NodeAdminProvider.java
index 4543e4f62c0..9a667c29fb3 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/NodeAdminProvider.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/NodeAdminProvider.java
@@ -10,16 +10,18 @@ import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper;
import com.yahoo.vespa.hosted.node.admin.component.AdminComponent;
import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminMain;
import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminStateUpdater;
+import com.yahoo.vespa.hosted.node.admin.ConfigServerConfig;
public class NodeAdminProvider implements Provider<NodeAdminStateUpdater> {
private final NodeAdminMain nodeAdminMain;
@Inject
public NodeAdminProvider(ComponentRegistry<AdminComponent> adminRegistry,
+ ConfigServerConfig configServerConfig,
Docker docker,
MetricReceiverWrapper metricReceiver,
ClassLocking classLocking) {
- nodeAdminMain = new NodeAdminMain(adminRegistry, docker, metricReceiver, classLocking);
+ nodeAdminMain = new NodeAdminMain(adminRegistry, configServerConfig, docker, metricReceiver, classLocking);
nodeAdminMain.start();
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java
index dcde950c4d3..72996e438b7 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/util/Environment.java
@@ -2,8 +2,9 @@
package com.yahoo.vespa.hosted.node.admin.util;
import com.google.common.base.Strings;
-import com.yahoo.net.HostName;
+import com.yahoo.vespa.defaults.Defaults;
import com.yahoo.vespa.hosted.dockerapi.ContainerName;
+import com.yahoo.vespa.hosted.node.admin.ConfigServerConfig;
import java.net.InetAddress;
import java.net.URI;
@@ -31,15 +32,10 @@ public class Environment {
private static final DateFormat filenameFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
public static final String APPLICATION_STORAGE_CLEANUP_PATH_PREFIX = "cleanup_";
- private static final String ENV_CONFIGSERVER_SCHEME = "CONFIG_SERVER_SCHEME";
- private static final String ENV_CONFIGSERVER_HOSTS = "CONFIG_SERVER_ADDRESS";
- private static final String ENV_CONFIGSERVER_PORT = "CONFIG_SERVER_PORT";
private static final String ENVIRONMENT = "ENVIRONMENT";
private static final String REGION = "REGION";
private static final String LOGSTASH_NODES = "LOGSTASH_NODES";
private static final String COREDUMP_FEED_ENDPOINT = "COREDUMP_FEED_ENDPOINT";
- private static final String KEY_STORE_PATH = "KEY_STORE_PATH";
- private static final String TRUST_STORE_PATH = "TRUST_STORE_PATH";
private final List<URI> configServerHosts;
private final String environment;
@@ -56,19 +52,29 @@ public class Environment {
filenameFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
}
- public Environment() {
- this(getConfigServerUrlsFromEnvironment(),
+ public Environment(ConfigServerConfig configServerConfig) {
+ this(createConfigServerUris(
+ configServerConfig.scheme(),
+ configServerConfig.hosts(),
+ configServerConfig.port()),
+
getEnvironmentVariable(ENVIRONMENT),
getEnvironmentVariable(REGION),
- HostName.getLocalhost(),
+ Defaults.getDefaults().vespaHostname(),
new InetAddressResolver(),
new PathResolver(),
getLogstashNodesFromEnvironment(),
getEnvironmentVariable(COREDUMP_FEED_ENDPOINT),
- // TODO: Make key store password and type configurable
- getKeyStoreOptionsFromEnvironment(KEY_STORE_PATH, new char[0], "PKCS12"),
- getKeyStoreOptionsFromEnvironment(TRUST_STORE_PATH, "changeit".toCharArray(), "JKS"));
+ createKeyStoreOptions(
+ configServerConfig.keyStoreConfig().path(),
+ configServerConfig.keyStoreConfig().password().toCharArray(),
+ configServerConfig.keyStoreConfig().type().name()),
+ createKeyStoreOptions(
+ configServerConfig.trustStoreConfig().path(),
+ configServerConfig.trustStoreConfig().password().toCharArray(),
+ configServerConfig.trustStoreConfig().type().name())
+ );
}
public Environment(List<URI> configServerHosts,
@@ -119,12 +125,8 @@ public class Environment {
return getEnvironment() + "." + getRegion();
}
- private static List<URI> getConfigServerUrlsFromEnvironment() {
- String scheme = getEnvironmentVariable(ENV_CONFIGSERVER_SCHEME);
- String configServerHosts = getEnvironmentVariable(ENV_CONFIGSERVER_HOSTS);
- String port = getEnvironmentVariable(ENV_CONFIGSERVER_PORT);
-
- return Arrays.stream(configServerHosts.split("[,\\s]+"))
+ private static List<URI> createConfigServerUris(String scheme, List<String> configServerHosts, int port) {
+ return configServerHosts.stream()
.map(hostname -> URI.create(scheme + "://" + hostname + ":" + port))
.collect(Collectors.toList());
}
@@ -137,8 +139,8 @@ public class Environment {
return Arrays.asList(logstashNodes.split("[,\\s]+"));
}
- private static Optional<KeyStoreOptions> getKeyStoreOptionsFromEnvironment(String pathToKeyStore, char[] password, String type) {
- return Optional.ofNullable(System.getenv(pathToKeyStore))
+ private static Optional<KeyStoreOptions> createKeyStoreOptions(String pathToKeyStore, char[] password, String type) {
+ return Optional.ofNullable(pathToKeyStore)
.filter(path -> !Strings.isNullOrEmpty(path))
.map(path -> new KeyStoreOptions(Paths.get(path), password, type));
}
diff --git a/node-admin/src/main/resources/configdefinitions/config-server.def b/node-admin/src/main/resources/configdefinitions/config-server.def
new file mode 100644
index 00000000000..f43bb221107
--- /dev/null
+++ b/node-admin/src/main/resources/configdefinitions/config-server.def
@@ -0,0 +1,20 @@
+# Copyright 2018 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+namespace=vespa.hosted.node.admin
+
+hosts[] string
+port int default=8080 range=[1,65535]
+scheme string default="http"
+
+# Optional options used to authenticate config server
+athenzDomain string default=""
+serviceName string default=""
+
+# Optional options about key store to use when communicating with config server
+keyStoreConfig.path string default="" # Path to keystore
+keyStoreConfig.type enum { JKS, PEM, PKCS12 } default=JKS
+keyStoreConfig.password string default=""
+
+# Optional options about trust store to use to authenticate config server
+trustStoreConfig.path string default=""
+trustStoreConfig.type enum { JKS, PEM, PKCS12 } default=JKS
+trustStoreConfig.password string default=""