aboutsummaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@oath.com>2018-10-12 14:45:56 +0200
committerValerij Fredriksen <valerijf@oath.com>2018-10-12 14:51:06 +0200
commit1429ff2fe23c8ae87343a4e892860fb9fd17ebac (patch)
treec1b0e708441e861fb1ff75359801dfd3209b5736 /node-admin
parent6435d7dc7af3dc15540582f7b5745d69ee75f907 (diff)
Use NodeAgentContext in DockerOperations
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java25
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java121
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java31
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java4
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java8
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java6
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java2
7 files changed, 96 insertions, 101 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java
index 7abf179f616..c65d59a79dc 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperations.java
@@ -6,6 +6,7 @@ import com.yahoo.vespa.hosted.dockerapi.ContainerName;
import com.yahoo.vespa.hosted.dockerapi.ContainerStats;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.dockerapi.ProcessResult;
+import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec;
import com.yahoo.vespa.hosted.node.admin.nodeagent.ContainerData;
@@ -14,39 +15,39 @@ import java.util.Optional;
public interface DockerOperations {
- void createContainer(ContainerName containerName, NodeSpec node, ContainerData containerData);
+ void createContainer(NodeAgentContext context, NodeSpec node, ContainerData containerData);
- void startContainer(ContainerName containerName);
+ void startContainer(NodeAgentContext context);
- void removeContainer(Container existingContainer);
+ void removeContainer(NodeAgentContext context, Container container);
- Optional<Container> getContainer(ContainerName containerName);
+ Optional<Container> getContainer(NodeAgentContext context);
boolean pullImageAsyncIfNeeded(DockerImage dockerImage);
- ProcessResult executeCommandInContainerAsRoot(ContainerName containerName, String... command);
+ ProcessResult executeCommandInContainerAsRoot(NodeAgentContext context, String... command);
- ProcessResult executeCommandInContainerAsRoot(ContainerName containerName, Long timeoutSeconds, String... command);
+ ProcessResult executeCommandInContainerAsRoot(NodeAgentContext context, Long timeoutSeconds, String... command);
ProcessResult executeCommandInNetworkNamespace(ContainerName containerName, String... command);
/** Resume node. Resuming a node means that it is ready to take on traffic. */
- void resumeNode(ContainerName containerName);
+ void resumeNode(NodeAgentContext context);
/**
* Suspend node. Suspending a node means the node should be taken temporarly offline,
* such that maintenance of the node can be done (upgrading, rebooting, etc).
*/
- void suspendNode(ContainerName containerName);
+ void suspendNode(NodeAgentContext context);
- void restartVespa(ContainerName containerName);
+ void restartVespa(NodeAgentContext context);
- void startServices(ContainerName containerName);
+ void startServices(NodeAgentContext context);
- void stopServices(ContainerName containerName);
+ void stopServices(NodeAgentContext context);
- Optional<ContainerStats> getContainerStats(ContainerName containerName);
+ Optional<ContainerStats> getContainerStats(NodeAgentContext context);
/**
* Returns the list of containers managed by node-admin
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java
index 13ebf84228c..6f53bf9d274 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java
@@ -13,10 +13,10 @@ import com.yahoo.vespa.hosted.dockerapi.Docker;
import com.yahoo.vespa.hosted.dockerapi.DockerImage;
import com.yahoo.vespa.hosted.dockerapi.ProcessResult;
import com.yahoo.vespa.hosted.node.admin.component.Environment;
+import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec;
import com.yahoo.vespa.hosted.node.admin.nodeagent.ContainerData;
import com.yahoo.vespa.hosted.node.admin.task.util.network.IPAddresses;
-import com.yahoo.vespa.hosted.node.admin.util.PrefixLogger;
import java.io.IOException;
import java.net.Inet6Address;
@@ -29,6 +29,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.OptionalLong;
+import java.util.logging.Logger;
import java.util.stream.Stream;
/**
@@ -38,6 +40,8 @@ import java.util.stream.Stream;
*/
public class DockerOperationsImpl implements DockerOperations {
+ private static final Logger logger = Logger.getLogger(DockerOperationsImpl.class.getName());
+
private static final String MANAGER_NAME = "node-admin";
private static final String IPV6_NPT_PREFIX = "fd00::";
@@ -46,7 +50,6 @@ public class DockerOperationsImpl implements DockerOperations {
private final Docker docker;
private final Environment environment;
private final ProcessExecuter processExecuter;
- private final String nodeProgram;
private final Map<Path, Boolean> directoriesToMount;
public DockerOperationsImpl(Docker docker, Environment environment, ProcessExecuter processExecuter) {
@@ -54,14 +57,12 @@ public class DockerOperationsImpl implements DockerOperations {
this.environment = environment;
this.processExecuter = processExecuter;
- this.nodeProgram = environment.pathInNodeUnderVespaHome("bin/vespa-nodectl").toString();
this.directoriesToMount = getDirectoriesToMount(environment);
}
@Override
- public void createContainer(ContainerName containerName, NodeSpec node, ContainerData containerData) {
- PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName);
- logger.info("Creating container " + containerName);
+ public void createContainer(NodeAgentContext context, NodeSpec node, ContainerData containerData) {
+ context.log(logger, "Creating container");
// IPv6 - Assume always valid
Inet6Address ipV6Address = environment.getIpAddresses().getIPv6Address(node.getHostname()).orElseThrow(
@@ -73,7 +74,7 @@ public class DockerOperationsImpl implements DockerOperations {
Docker.CreateContainerCommand command = docker.createContainerCommand(
node.getWantedDockerImage().get(),
ContainerResources.from(node.getMinCpuCores(), node.getMinMainMemoryAvailableGb()),
- containerName,
+ context.containerName(),
node.getHostname())
.withManagedBy(MANAGER_NAME)
.withEnvironment("VESPA_CONFIGSERVERS", configServers)
@@ -86,15 +87,15 @@ public class DockerOperationsImpl implements DockerOperations {
.withAddCapability("SYS_ADMIN"); // Needed for perf
if (isInfrastructureHost(environment.getNodeType())) {
- command.withVolume("/var/lib/sia", "/var/lib/sia");
+ command.withVolume(Paths.get("/var/lib/sia"), Paths.get("/var/lib/sia"));
}
if (environment.getNodeType() == NodeType.proxyhost) {
- command.withVolume("/opt/yahoo/share/ssl/certs", "/opt/yahoo/share/ssl/certs");
+ command.withVolume(Paths.get("/opt/yahoo/share/ssl/certs"), Paths.get("/opt/yahoo/share/ssl/certs"));
}
if (environment.getNodeType() == NodeType.host) {
- command.withSharedVolume("/var/zpe", environment.pathInNodeUnderVespaHome("var/zpe").toString());
+ command.withSharedVolume(Paths.get("/var/zpe"), environment.pathInNodeUnderVespaHome("var/zpe"));
}
DockerNetworking networking = environment.getDockerNetworking();
@@ -117,8 +118,8 @@ public class DockerOperationsImpl implements DockerOperations {
}
for (Path pathInNode : directoriesToMount.keySet()) {
- String pathInHost = environment.pathInHostFromPathInNode(containerName, pathInNode).toString();
- command.withVolume(pathInHost, pathInNode.toString());
+ Path pathInHost = environment.pathInHostFromPathInNode(context.containerName(), pathInNode);
+ command.withVolume(pathInHost, pathInNode);
}
// TODO: Enforce disk constraints
@@ -164,35 +165,31 @@ public class DockerOperationsImpl implements DockerOperations {
}
@Override
- public void startContainer(ContainerName containerName) {
- PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName);
- logger.info("Starting container " + containerName);
-
- docker.startContainer(containerName);
+ public void startContainer(NodeAgentContext context) {
+ context.log(logger, "Starting container");
+ docker.startContainer(context.containerName());
directoriesToMount.entrySet().stream()
.filter(Map.Entry::getValue)
.map(Map.Entry::getKey)
.forEach(path ->
- docker.executeInContainerAsRoot(containerName, "chmod", "-R", "a+w", path.toString()));
+ executeCommandInContainerAsRoot(context, "chmod", "-R", "a+w", path.toString()));
}
@Override
- public void removeContainer(Container existingContainer) {
- final ContainerName containerName = existingContainer.name;
- PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName);
- if (existingContainer.state.isRunning()) {
- logger.info("Stopping container " + containerName.asString());
- docker.stopContainer(containerName);
+ public void removeContainer(NodeAgentContext context, Container container) {
+ if (container.state.isRunning()) {
+ context.log(logger, "Stopping container");
+ docker.stopContainer(context.containerName());
}
- logger.info("Deleting container " + containerName.asString());
- docker.deleteContainer(containerName);
+ context.log(logger, "Deleting container");
+ docker.deleteContainer(context.containerName());
}
@Override
- public Optional<Container> getContainer(ContainerName containerName) {
- return docker.getContainer(containerName);
+ public Optional<Container> getContainer(NodeAgentContext context) {
+ return docker.getContainer(context.containerName());
}
@Override
@@ -200,88 +197,84 @@ public class DockerOperationsImpl implements DockerOperations {
return docker.pullImageAsyncIfNeeded(dockerImage);
}
- ProcessResult executeCommandInContainer(ContainerName containerName, String... command) {
- ProcessResult result = docker.executeInContainerAsRoot(containerName, command);
-
- if (!result.isSuccess()) {
- throw new RuntimeException("Container " + containerName.asString() +
- ": command " + Arrays.toString(command) + " failed: " + result);
- }
- return result;
- }
-
@Override
- public ProcessResult executeCommandInContainerAsRoot(ContainerName containerName, Long timeoutSeconds, String... command) {
- return docker.executeInContainerAsRoot(containerName, timeoutSeconds, command);
+ public ProcessResult executeCommandInContainerAsRoot(NodeAgentContext context, Long timeoutSeconds, String... command) {
+ return docker.executeInContainerAsUser(context.containerName(), "root", OptionalLong.of(timeoutSeconds), command);
}
@Override
- public ProcessResult executeCommandInContainerAsRoot(ContainerName containerName, String... command) {
- return docker.executeInContainerAsRoot(containerName, command);
+ public ProcessResult executeCommandInContainerAsRoot(NodeAgentContext context, String... command) {
+ context.log(logger, context.containerName().asString() + " " + Arrays.asList(command));
+ return docker.executeInContainerAsUser(context.containerName(), "root", OptionalLong.empty(), command);
}
@Override
public ProcessResult executeCommandInNetworkNamespace(ContainerName containerName, String... command) {
- final PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName);
final Integer containerPid = docker.getContainer(containerName)
.filter(container -> container.state.isRunning())
.map(container -> container.pid)
.orElseThrow(() -> new RuntimeException("PID not found for container with name: " +
containerName.asString()));
- Path procPath = environment.getPathResolver().getPathToRootOfHost().resolve("proc");
-
final String[] wrappedCommand = Stream.concat(
- Stream.of("nsenter", String.format("--net=%s/%d/ns/net", procPath, containerPid), "--"),
+ Stream.of("nsenter", String.format("--net=/proc/%d/ns/net", containerPid), "--"),
Stream.of(command))
.toArray(String[]::new);
try {
Pair<Integer, String> result = processExecuter.exec(wrappedCommand);
if (result.getFirst() != 0) {
- String msg = String.format(
+ throw new RuntimeException(String.format(
"Failed to execute %s in network namespace for %s (PID = %d), exit code: %d, output: %s",
- Arrays.toString(wrappedCommand), containerName.asString(), containerPid, result.getFirst(), result.getSecond());
- logger.error(msg);
- throw new RuntimeException(msg);
+ Arrays.toString(wrappedCommand), containerName.asString(), containerPid, result.getFirst(), result.getSecond()));
}
return new ProcessResult(0, result.getSecond(), "");
} catch (IOException e) {
- logger.warning(String.format("IOException while executing %s in network namespace for %s (PID = %d)",
+ throw new RuntimeException(String.format("IOException while executing %s in network namespace for %s (PID = %d)",
Arrays.toString(wrappedCommand), containerName.asString(), containerPid), e);
- throw new RuntimeException(e);
}
}
@Override
- public void resumeNode(ContainerName containerName) {
- executeCommandInContainer(containerName, nodeProgram, "resume");
+ public void resumeNode(NodeAgentContext context) {
+ executeNodeCtlInContainer(context, "resume");
}
@Override
- public void suspendNode(ContainerName containerName) {
- executeCommandInContainer(containerName, nodeProgram, "suspend");
+ public void suspendNode(NodeAgentContext context) {
+ executeNodeCtlInContainer(context, "suspend");
}
@Override
- public void restartVespa(ContainerName containerName) {
- executeCommandInContainer(containerName, nodeProgram, "restart-vespa");
+ public void restartVespa(NodeAgentContext context) {
+ executeNodeCtlInContainer(context, "restart-vespa");
}
@Override
- public void startServices(ContainerName containerName) {
- executeCommandInContainer(containerName, nodeProgram, "start");
+ public void startServices(NodeAgentContext context) {
+ executeNodeCtlInContainer(context, "start");
}
@Override
- public void stopServices(ContainerName containerName) {
- executeCommandInContainer(containerName, nodeProgram, "stop");
+ public void stopServices(NodeAgentContext context) {
+ executeNodeCtlInContainer(context, "stop");
+ }
+
+ ProcessResult executeNodeCtlInContainer(NodeAgentContext context, String program) {
+ String[] command = new String[] {context.pathInNodeUnderVespaHome("bin/vespa-nodectl").toString(), program};
+ ProcessResult result = executeCommandInContainerAsRoot(context, command);
+
+ if (!result.isSuccess()) {
+ throw new RuntimeException("Container " + context.containerName().asString() +
+ ": command " + Arrays.toString(command) + " failed: " + result);
+ }
+ return result;
}
@Override
- public Optional<ContainerStats> getContainerStats(ContainerName containerName) {
- return docker.getContainerStats(containerName);
+ public Optional<ContainerStats> getContainerStats(NodeAgentContext context) {
+ return docker.getContainerStats(context.containerName());
}
@Override
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java
index 7f4dad6ee36..760326f061e 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java
@@ -12,6 +12,8 @@ import com.yahoo.vespa.hosted.dockerapi.ProcessResult;
import com.yahoo.vespa.hosted.node.admin.component.Environment;
import com.yahoo.vespa.hosted.node.admin.config.ConfigServerConfig;
import com.yahoo.vespa.hosted.node.admin.nodeagent.ContainerData;
+import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContext;
+import com.yahoo.vespa.hosted.node.admin.nodeagent.NodeAgentContextImplTest;
import org.junit.Test;
import org.mockito.InOrder;
@@ -19,6 +21,7 @@ import java.io.IOException;
import java.net.InetAddress;
import java.nio.file.Paths;
import java.util.Optional;
+import java.util.OptionalLong;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
@@ -48,43 +51,41 @@ public class DockerOperationsImplTest {
@Test
public void processResultFromNodeProgramWhenSuccess() {
- final ContainerName containerName = new ContainerName("container-name");
+ final NodeAgentContext context = NodeAgentContextImplTest.nodeAgentFromHostname("container-123.domain.tld");
final ProcessResult actualResult = new ProcessResult(0, "output", "errors");
- final String programPath = "/bin/command";
- final String[] command = new String[]{programPath, "arg"};
- when(docker.executeInContainerAsRoot(any(), anyVararg()))
+ when(docker.executeInContainerAsUser(any(), any(), any(), anyVararg()))
.thenReturn(actualResult); // output from node program
- ProcessResult result = dockerOperations.executeCommandInContainer(containerName, command);
+ ProcessResult result = dockerOperations.executeNodeCtlInContainer(context, "start");
final InOrder inOrder = inOrder(docker);
- inOrder.verify(docker, times(1)).executeInContainerAsRoot(
- eq(containerName),
- eq(command[0]),
- eq(command[1]));
+ inOrder.verify(docker, times(1)).executeInContainerAsUser(
+ eq(context.containerName()),
+ eq("root"),
+ eq(OptionalLong.empty()),
+ eq("/opt/vespa/bin/vespa-nodectl"),
+ eq("start"));
assertThat(result, is(actualResult));
}
@Test(expected = RuntimeException.class)
public void processResultFromNodeProgramWhenNonZeroExitCode() {
- final ContainerName containerName = new ContainerName("container-name");
+ final NodeAgentContext context = NodeAgentContextImplTest.nodeAgentFromHostname("container-123.domain.tld");
final ProcessResult actualResult = new ProcessResult(3, "output", "errors");
- final String programPath = "/bin/command";
- final String[] command = new String[]{programPath, "arg"};
- when(docker.executeInContainerAsRoot(any(), anyVararg()))
+ when(docker.executeInContainerAsUser(any(), any(), any(), anyVararg()))
.thenReturn(actualResult); // output from node program
- dockerOperations.executeCommandInContainer(containerName, command);
+ dockerOperations.executeNodeCtlInContainer(context, "start");
}
@Test
public void runsCommandInNetworkNamespace() throws IOException {
Container container = makeContainer("container-42", Container.State.RUNNING, 42);
- when(processExecuter.exec(aryEq(new String[]{"nsenter", "--net=/host/proc/42/ns/net", "--", "iptables", "-nvL"})))
+ when(processExecuter.exec(aryEq(new String[]{"nsenter", "--net=/proc/42/ns/net", "--", "iptables", "-nvL"})))
.thenReturn(new Pair<>(0, ""));
dockerOperations.executeCommandInNetworkNamespace(container.name, "iptables", "-nvL");
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java
index ec29cf0fe25..d7e0fe3d8e5 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/DockerFailTest.java
@@ -37,14 +37,14 @@ public class DockerFailTest {
dockerTester.callOrderVerifier.assertInOrder(1200,
"createContainerCommand with DockerImage { imageId=dockerImage }, HostName: host1.test.yahoo.com, ContainerName { name=host1 }",
- "executeInContainerAsRoot with ContainerName { name=host1 }, args: [" + DockerTester.NODE_PROGRAM + ", resume]");
+ "executeInContainer host1 as root, args: [" + DockerTester.NODE_PROGRAM + ", resume]");
dockerTester.dockerMock.deleteContainer(new ContainerName("host1"));
dockerTester.callOrderVerifier.assertInOrder(
"deleteContainer with ContainerName { name=host1 }",
"createContainerCommand with DockerImage { imageId=dockerImage }, HostName: host1.test.yahoo.com, ContainerName { name=host1 }",
- "executeInContainerAsRoot with ContainerName { name=host1 }, args: [" + DockerTester.NODE_PROGRAM + ", resume]");
+ "executeInContainer host1 as root, args: [" + DockerTester.NODE_PROGRAM + ", resume]");
}
}
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java
index 9c9b2afe956..e130cd0d475 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/MultiDockerTest.java
@@ -38,16 +38,16 @@ public class MultiDockerTest {
dockerTester.callOrderVerifier.assertInOrder(
"createContainerCommand with DockerImage { imageId=image1 }, HostName: host1.test.yahoo.com, ContainerName { name=host1 }",
- "executeInContainerAsRoot with ContainerName { name=host1 }, args: [" + DockerTester.NODE_PROGRAM + ", resume]",
+ "executeInContainer host1 as root, args: [" + DockerTester.NODE_PROGRAM + ", resume]",
"createContainerCommand with DockerImage { imageId=image2 }, HostName: host2.test.yahoo.com, ContainerName { name=host2 }",
- "executeInContainerAsRoot with ContainerName { name=host2 }, args: [" + DockerTester.NODE_PROGRAM + ", resume]",
+ "executeInContainer host2 as root, args: [" + DockerTester.NODE_PROGRAM + ", resume]",
"stopContainer with ContainerName { name=host2 }",
"deleteContainer with ContainerName { name=host2 }",
"createContainerCommand with DockerImage { imageId=image1 }, HostName: host3.test.yahoo.com, ContainerName { name=host3 }",
- "executeInContainerAsRoot with ContainerName { name=host3 }, args: [" + DockerTester.NODE_PROGRAM + ", resume]");
+ "executeInContainer host3 as root, args: [" + DockerTester.NODE_PROGRAM + ", resume]");
dockerTester.callOrderVerifier.assertInOrderWithAssertMessage(
"Maintainer did not receive call to delete application storage",
@@ -87,7 +87,7 @@ public class MultiDockerTest {
ContainerName containerName = ContainerName.fromHostname(hostName);
tester.callOrderVerifier.assertInOrder(
"createContainerCommand with " + dockerImage + ", HostName: " + hostName + ", " + containerName,
- "executeInContainerAsRoot with " + containerName + ", args: [" + DockerTester.NODE_PROGRAM + ", resume]");
+ "executeInContainer " + containerName.asString() + " as root, args: [" + DockerTester.NODE_PROGRAM + ", resume]");
return nodeSpec;
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java
index 3681878d728..da743c40e8b 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/NodeStateTest.java
@@ -36,7 +36,7 @@ public class NodeStateTest {
tester.callOrderVerifier.assertInOrder(
"createContainerCommand with DockerImage { imageId=dockerImage }, HostName: host1.test.yahoo.com, ContainerName { name=host1 }",
- "executeInContainerAsRoot with ContainerName { name=host1 }, args: [" + DockerTester.NODE_PROGRAM + ", resume]");
+ "executeInContainer host1 as root, args: [" + DockerTester.NODE_PROGRAM + ", resume]");
}
@@ -59,7 +59,7 @@ public class NodeStateTest {
}
dockerTester.callOrderVerifier.assertInOrder(
- "executeInContainerAsRoot with ContainerName { name=host1 }, args: [" + DockerTester.NODE_PROGRAM + ", stop]",
+ "executeInContainer host1 as root, args: [" + DockerTester.NODE_PROGRAM + ", stop]",
"stopContainer with ContainerName { name=host1 }",
"deleteContainer with ContainerName { name=host1 }");
}
@@ -102,7 +102,7 @@ public class NodeStateTest {
"Node not started again after being put to active state",
"deleteContainer with ContainerName { name=host1 }",
"createContainerCommand with DockerImage { imageId=newDockerImage }, HostName: host1.test.yahoo.com, ContainerName { name=host1 }",
- "executeInContainerAsRoot with ContainerName { name=host1 }, args: [" + DockerTester.NODE_PROGRAM + ", resume]");
+ "executeInContainer host1 as root, args: [" + DockerTester.NODE_PROGRAM + ", resume]");
}
}
}
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java
index 0406934defc..2e290e014c2 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integrationTests/RestartTest.java
@@ -38,7 +38,7 @@ public class RestartTest {
dockerTester.callOrderVerifier.assertInOrder(
"Suspend for host1.test.yahoo.com",
- "executeInContainerAsRoot with ContainerName { name=host1 }, args: [" + DockerTester.NODE_PROGRAM + ", restart-vespa]");
+ "executeInContainer host1 as root, args: [" + DockerTester.NODE_PROGRAM + ", restart-vespa]");
}
}