From f724bcfa584c590ad079cd2614aa21acc835e285 Mon Sep 17 00:00:00 2001 From: Valerij Fredriksen Date: Wed, 9 Jan 2019 15:08:53 +0100 Subject: Add NodeSpec to NodeAgentContext --- .../node/admin/nodeagent/NodeAgentContext.java | 11 +++- .../node/admin/nodeagent/NodeAgentContextImpl.java | 65 ++++++++++++++-------- 2 files changed, 51 insertions(+), 25 deletions(-) (limited to 'node-admin') diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java index 4874eccb913..2e9f58a2c31 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java @@ -6,6 +6,7 @@ import com.yahoo.vespa.athenz.api.AthenzService; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.node.admin.component.TaskContext; import com.yahoo.vespa.hosted.node.admin.component.ZoneId; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; import com.yahoo.vespa.hosted.node.admin.docker.DockerNetworking; import java.nio.file.Path; @@ -13,11 +14,17 @@ import java.nio.file.Paths; public interface NodeAgentContext extends TaskContext { + NodeSpec node(); + ContainerName containerName(); - HostName hostname(); + default HostName hostname() { + return HostName.from(node().getHostname()); + } - NodeType nodeType(); + default NodeType nodeType() { + return node().getNodeType(); + } AthenzService identity(); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java index 3c34e35ab46..58414ab55f4 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImpl.java @@ -1,14 +1,15 @@ package com.yahoo.vespa.hosted.node.admin.nodeagent; import com.yahoo.config.provision.Environment; -import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; import com.yahoo.vespa.athenz.api.AthenzService; import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.node.admin.component.ZoneId; +import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; import com.yahoo.vespa.hosted.node.admin.docker.DockerNetworking; +import com.yahoo.vespa.hosted.provision.Node; import java.nio.file.FileSystem; import java.nio.file.Path; @@ -25,9 +26,8 @@ public class NodeAgentContextImpl implements NodeAgentContext { private static final Path ROOT = Paths.get("/"); private final String logPrefix; + private final NodeSpec node; private final ContainerName containerName; - private final HostName hostName; - private final NodeType nodeType; private final AthenzService identity; private final DockerNetworking dockerNetworking; private final ZoneId zoneId; @@ -36,13 +36,12 @@ public class NodeAgentContextImpl implements NodeAgentContext { private final String vespaUser; private final String vespaUserOnHost; - public NodeAgentContextImpl(String hostname, NodeType nodeType, AthenzService identity, + public NodeAgentContextImpl(NodeSpec node, AthenzService identity, DockerNetworking dockerNetworking, ZoneId zoneId, Path pathToContainerStorage, Path pathToVespaHome, String vespaUser, String vespaUserOnHost) { - this.hostName = HostName.from(Objects.requireNonNull(hostname)); - this.containerName = ContainerName.fromHostname(hostname); - this.nodeType = Objects.requireNonNull(nodeType); + this.node = Objects.requireNonNull(node); + this.containerName = ContainerName.fromHostname(node.getHostname()); this.identity = Objects.requireNonNull(identity); this.dockerNetworking = Objects.requireNonNull(dockerNetworking); this.zoneId = Objects.requireNonNull(zoneId); @@ -54,18 +53,13 @@ public class NodeAgentContextImpl implements NodeAgentContext { } @Override - public ContainerName containerName() { - return containerName; - } - - @Override - public HostName hostname() { - return hostName; + public NodeSpec node() { + return node; } @Override - public NodeType nodeType() { - return nodeType; + public ContainerName containerName() { + return containerName; } @Override @@ -134,12 +128,25 @@ public class NodeAgentContextImpl implements NodeAgentContext { public void log(Logger logger, Level level, String message, Throwable throwable) { logger.log(level, logPrefix + message, throwable); } - + + @Override + public String toString() { + return "NodeAgentContextImpl{" + + "node=" + node + + ", containerName=" + containerName + + ", identity=" + identity + + ", dockerNetworking=" + dockerNetworking + + ", zoneId=" + zoneId + + ", pathToNodeRootOnHost=" + pathToNodeRootOnHost + + ", pathToVespaHome=" + pathToVespaHome + + ", vespaUser='" + vespaUser + '\'' + + ", vespaUserOnHost='" + vespaUserOnHost + '\'' + + '}'; + } /** For testing only! */ public static class Builder { - private final String hostname; - private NodeType nodeType; + private NodeSpec.Builder nodeSpecBuilder = new NodeSpec.Builder(); private AthenzService identity; private DockerNetworking dockerNetworking; private ZoneId zoneId; @@ -148,12 +155,25 @@ public class NodeAgentContextImpl implements NodeAgentContext { private String vespaUser; private String vespaUserOnHost; + public Builder(NodeSpec node) { + this.nodeSpecBuilder = new NodeSpec.Builder(node); + } + + /** + * Creates a NodeAgentContext.Builder with a NodeSpec that has the given hostname and some + * reasonable values for the remaining required NodeSpec fields. Use {@link #Builder(NodeSpec)} + * if you want to control the entire NodeSpec. + */ public Builder(String hostname) { - this.hostname = hostname; + this.nodeSpecBuilder + .hostname(hostname) + .state(Node.State.active) + .nodeType(NodeType.tenant) + .flavor("d-2-8-50"); } public Builder nodeType(NodeType nodeType) { - this.nodeType = nodeType; + this.nodeSpecBuilder.nodeType(nodeType); return this; } @@ -198,8 +218,7 @@ public class NodeAgentContextImpl implements NodeAgentContext { public NodeAgentContextImpl build() { return new NodeAgentContextImpl( - hostname, - Optional.ofNullable(nodeType).orElse(NodeType.tenant), + nodeSpecBuilder.build(), Optional.ofNullable(identity).orElseGet(() -> new AthenzService("domain", "service")), Optional.ofNullable(dockerNetworking).orElse(DockerNetworking.HOST_NETWORK), Optional.ofNullable(zoneId).orElseGet(() -> new ZoneId(SystemName.dev, Environment.dev, RegionName.defaultName())), -- cgit v1.2.3