summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@oath.com>2018-01-08 00:36:13 +0100
committerHåkon Hallingstad <hakon@oath.com>2018-01-08 00:36:13 +0100
commit2e1f09f6999c020e4b575659d812e38083c3e24f (patch)
tree44db91d0a803a17bbfdbb244441c9e86c59bc58c /node-admin
parent49a6ff5aa3296a99d10334856fdfc443bb844805 (diff)
Add AWS mode
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/DockerAdminComponent.java23
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/DockerAdminConfig.java9
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminConfig.java8
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminMain.java51
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/AddYumRepoTask.java10
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/MakeDirectoryTask.java6
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/Task.java19
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/WriteFileTask.java16
8 files changed, 53 insertions, 89 deletions
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 928bf17db6e..5d8fed67682 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
@@ -14,7 +14,10 @@ import com.yahoo.vespa.hosted.node.admin.maintenance.acl.AclMaintainer;
import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgent;
import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentImpl;
import com.yahoo.vespa.hosted.node.admin.noderepository.NodeRepository;
+import com.yahoo.vespa.hosted.node.admin.noderepository.NodeRepositoryImpl;
import com.yahoo.vespa.hosted.node.admin.orchestrator.Orchestrator;
+import com.yahoo.vespa.hosted.node.admin.orchestrator.OrchestratorImpl;
+import com.yahoo.vespa.hosted.node.admin.util.ConfigServerHttpRequestExecutor;
import com.yahoo.vespa.hosted.node.admin.util.Environment;
import java.time.Clock;
@@ -29,23 +32,18 @@ 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 Environment environment;
- private final NodeRepository nodeRepository;
- private final Orchestrator orchestrator;
+ private final NodeAdminConfig config;
private final Docker docker;
private final MetricReceiverWrapper metricReceiver;
private final ClassLocking classLocking;
+
private Optional<NodeAdminStateUpdater> nodeAdminStateUpdater = Optional.empty();
- public DockerAdminComponent(Environment environment,
- NodeRepository nodeRepository,
- Orchestrator orchestrator,
+ public DockerAdminComponent(NodeAdminConfig config,
Docker docker,
MetricReceiverWrapper metricReceiver,
ClassLocking classLocking) {
- this.environment = environment;
- this.nodeRepository = nodeRepository;
- this.orchestrator = orchestrator;
+ this.config = config;
this.docker = docker;
this.metricReceiver = metricReceiver;
this.classLocking = classLocking;
@@ -57,6 +55,13 @@ public class DockerAdminComponent implements AdminComponent {
return;
}
+
+ Environment environment = new Environment();
+ ConfigServerHttpRequestExecutor requestExecutor =
+ ConfigServerHttpRequestExecutor.create(environment.getConfigServerUris());
+ NodeRepository nodeRepository = new NodeRepositoryImpl(requestExecutor);
+ Orchestrator orchestrator = new OrchestratorImpl(requestExecutor);
+
Clock clock = Clock.systemUTC();
String dockerHostHostName = HostName.getLocalhost();
ProcessExecuter processExecuter = new ProcessExecuter();
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/DockerAdminConfig.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/DockerAdminConfig.java
new file mode 100644
index 00000000000..d1aaefab3dd
--- /dev/null
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/DockerAdminConfig.java
@@ -0,0 +1,9 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+package com.yahoo.vespa.hosted.node.admin.nodeadmin;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class DockerAdminConfig {
+}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminConfig.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminConfig.java
index 9caf1307aa4..d9726c88e4c 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminConfig.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminConfig.java
@@ -14,14 +14,18 @@ public class NodeAdminConfig {
private static final Logger logger = Logger.getLogger(NodeAdminConfig.class.getName());
private static final ObjectMapper mapper = new ObjectMapper();
- enum Mode {
+ public enum Mode {
+ aws_tenant,
+ config_server_host,
tenant,
- config_server_host
}
@JsonProperty("mode")
public Mode mode = Mode.tenant;
+ @JsonProperty("docker")
+ public DockerAdminConfig docker = new DockerAdminConfig();
+
public static NodeAdminConfig fromFile(File file) {
if (!file.exists()) {
return new NodeAdminConfig();
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 58358efff33..f5f2deb8dcb 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
@@ -5,14 +5,9 @@ import com.yahoo.concurrent.classlock.ClassLocking;
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.noderepository.NodeRepository;
-import com.yahoo.vespa.hosted.node.admin.noderepository.NodeRepositoryImpl;
-import com.yahoo.vespa.hosted.node.admin.orchestrator.Orchestrator;
-import com.yahoo.vespa.hosted.node.admin.orchestrator.OrchestratorImpl;
-import com.yahoo.vespa.hosted.node.admin.util.ConfigServerHttpRequestExecutor;
-import com.yahoo.vespa.hosted.node.admin.util.Environment;
import java.io.File;
+import java.util.Optional;
/**
* NodeAdminMain is the main component of the node admin JDisc application:
@@ -24,34 +19,27 @@ import java.io.File;
* be fatal: the node admin may not have installed and started the docker daemon.
*/
public class NodeAdminMain implements AutoCloseable {
- private final DockerAdminComponent dockerAdmin;
+ private final Docker docker;
+ private final MetricReceiverWrapper metricReceiver;
+ private final ClassLocking classLocking;
+
+ private Optional<DockerAdminComponent> dockerAdmin = Optional.empty();
public NodeAdminMain(Docker docker,
MetricReceiverWrapper metricReceiver,
ClassLocking classLocking) {
- Environment environment = new Environment();
- ConfigServerHttpRequestExecutor requestExecutor =
- ConfigServerHttpRequestExecutor.create(environment.getConfigServerUris());
-
- NodeRepository nodeRepository = new NodeRepositoryImpl(requestExecutor);
- Orchestrator orchestrator = new OrchestratorImpl(requestExecutor);
-
- dockerAdmin = new DockerAdminComponent(
- environment,
- nodeRepository,
- orchestrator,
- docker,
- metricReceiver,
- classLocking);
+ this.docker = docker;
+ this.metricReceiver = metricReceiver;
+ this.classLocking = classLocking;
}
@Override
public void close() {
- dockerAdmin.disable();
+ dockerAdmin.ifPresent(DockerAdminComponent::disable);
}
public NodeAdminStateUpdater getNodeAdminStateUpdater() {
- return dockerAdmin.getNodeAdminStateUpdater();
+ return dockerAdmin.get().getNodeAdminStateUpdater();
}
public void start() {
@@ -59,19 +47,24 @@ public class NodeAdminMain implements AutoCloseable {
NodeAdminConfig config = NodeAdminConfig.fromFile(new File(staticConfigPath));
switch (config.mode) {
+ case aws_tenant:
case tenant:
- dockerAdmin.enable();
- break;
+ dockerAdmin = Optional.of(new DockerAdminComponent(
+ config,
+ docker,
+ metricReceiver,
+ classLocking));
+ dockerAdmin.get().enable();
+ return;
case config_server_host:
// TODO:
// - install and start docker daemon
// - Read config that specifies which containers to start how
// - use thin static backends for node repo and orchestrator
// - Start node admin state updater.
- break;
- default:
- throw new IllegalStateException(
- "Unknown bootstrap mode: " + config.mode.name());
+ return;
}
+
+ throw new IllegalStateException("Unknown bootstrap mode: " + config.mode.name());
}
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/AddYumRepoTask.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/AddYumRepoTask.java
index b3c85b8614e..48ed43f2920 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/AddYumRepoTask.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/AddYumRepoTask.java
@@ -30,19 +30,13 @@ public class AddYumRepoTask implements Task {
public AddYumRepoTask(Params params) {
validateRepositoryId(params.repositoryId);
this.params = params;
- Task.validateVariant(variantName());
- }
-
- @Override
- public String variantName() {
- return params.repositoryId;
}
@Override
public boolean execute(TaskContext context) {
- Path path = Paths.get("/etc/yum.repos.d",params.repositoryId, ".repo");
+ Path path = Paths.get("/etc/yum.repos.d",params.repositoryId + ".repo");
- if (path.toFile().exists()) {
+ if (context.getFileSystem().isRegularFile(path)) {
return false;
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/MakeDirectoryTask.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/MakeDirectoryTask.java
index c406cd13c22..cf0cb36d17a 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/MakeDirectoryTask.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/MakeDirectoryTask.java
@@ -11,7 +11,6 @@ public class MakeDirectoryTask implements Task {
MakeDirectoryTask(Path directory) {
this.directory = directory;
- validate();
}
public MakeDirectoryTask withParents() {
@@ -19,11 +18,6 @@ public class MakeDirectoryTask implements Task {
return this;
}
- @Override
- public String variantName() {
- return directory.getFileName().toString();
- }
-
private boolean makeDirectory(FileSystem fileSystem,
Path directory,
boolean withParents) {
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/Task.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/Task.java
index c630bbeb3e1..4d40ac02440 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/Task.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/Task.java
@@ -3,26 +3,7 @@ package com.yahoo.vespa.hosted.node.admin.task;
import com.yahoo.vespa.hosted.node.admin.io.FileSystem;
-import java.util.regex.Pattern;
-
public interface Task {
- /**
- * If the task supports different variants, this method should be overridden
- * to return something distinctive for this task instance. For instance a
- * "WriteFileTask" that supports writing files at a 'path' could return
- * the stem of the filename as the variantName(). variantName() must match
- * NAME_PATTERN to ensure name is valid as key in various contexts.
- */
- default String variantName() { return ""; }
-
- default void validate() { validateVariant(variantName()); }
- static void validateVariant(String variant) {
- Pattern variantPattern = Pattern.compile("^[a-zA-Z0-9_-]*$");
- if (!variantPattern.matcher(variant).matches()) {
- throw new IllegalArgumentException("variantName '" + variant + "' is not a valid");
- }
- }
-
interface TaskContext {
FileSystem getFileSystem();
boolean executeSubtask(Task task);
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/WriteFileTask.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/WriteFileTask.java
index 694454e121a..8c56c2629f1 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/WriteFileTask.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/WriteFileTask.java
@@ -44,22 +44,6 @@ public class WriteFileTask implements Task {
public WriteFileTask(Params params) {
this.params = params;
- Task.validateVariant(variantName());
- }
-
- @Override
- public String variantName() {
- return filenameStem(params.path);
- }
-
- static String filenameStem(Path path) {
- String filename = path.getFileName().toString();
- int i = filename.indexOf('.');
- if (i >= 0) {
- return filename.substring(0, i);
- } else {
- return filename;
- }
}
@Override