diff options
author | Valerij Fredriksen <valerijf@oath.com> | 2018-01-22 15:36:10 +0100 |
---|---|---|
committer | Valerij Fredriksen <valerijf@oath.com> | 2018-01-22 16:09:06 +0100 |
commit | 35b9bd876c5efb49abb3fffcdbfe010a4a001297 (patch) | |
tree | d88e7d8100259dfecc754f7dfdf2c302fdc3744d /node-admin/src/main | |
parent | c69fdcea1939f225216e95907d30d9b99fcbebae (diff) |
Use ConfigServerConfig
Diffstat (limited to 'node-admin/src/main')
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="" |