YARN-7723. Avoid using docker volume --format option to run against to older docker releases. Contributed by Wangda Tan

This commit is contained in:
Sunil G 2018-01-30 15:58:11 +05:30
parent f666e7c43d
commit 6463e10c72
2 changed files with 22 additions and 12 deletions

View File

@ -437,7 +437,6 @@ public class DockerLinuxContainerRuntime implements LinuxContainerRuntime {
throws ContainerExecutionException {
DockerVolumeCommand dockerVolumeInspectCommand = new DockerVolumeCommand(
DockerVolumeCommand.VOLUME_LS_SUB_COMMAND);
dockerVolumeInspectCommand.setFormat("{{.Name}},{{.Driver}}");
String output = runDockerVolumeCommand(dockerVolumeInspectCommand,
container);
@ -450,13 +449,7 @@ public class DockerLinuxContainerRuntime implements LinuxContainerRuntime {
for (String line : output.split("\n")) {
line = line.trim();
String[] arr = line.split(",");
String v = arr[0].trim();
String d = null;
if (arr.length > 1) {
d = arr[1].trim();
}
if (d != null && volumeName.equals(v) && driverName.equals(d)) {
if (line.contains(volumeName) && line.contains(driverName)) {
// Good we found it.
LOG.info(
"Docker volume-name=" + volumeName + " driver-name=" + driverName

View File

@ -1473,9 +1473,9 @@ public class TestDockerContainerRuntime {
commandFile = new File(StringUtils.join(",", op.getArguments()));
fileInputStream = new FileInputStream(commandFile);
fileContent = new String(IOUtils.toByteArray(fileInputStream));
Assert.assertEquals("[docker-command-execution]\n"
+ " docker-command=volume\n" + " format={{.Name}},{{.Driver}}\n"
+ " sub-command=ls\n", fileContent);
Assert.assertEquals(
"[docker-command-execution]\n" + " docker-command=volume\n"
+ " sub-command=ls\n", fileContent);
fileInputStream.close();
}
@ -1577,16 +1577,33 @@ public class TestDockerContainerRuntime {
// For following tests, we expect to have volume1,local in output
// Failure cases
testDockerCommandPluginWithVolumesOutput(
"DRIVER VOLUME NAME\n", true);
testDockerCommandPluginWithVolumesOutput("", true);
testDockerCommandPluginWithVolumesOutput("volume1", true);
testDockerCommandPluginWithVolumesOutput(
"DRIVER VOLUME NAME\n" +
"nvidia-docker nvidia_driver_375.66\n", true);
testDockerCommandPluginWithVolumesOutput(
"DRIVER VOLUME NAME\n" +
" volume1\n", true);
testDockerCommandPluginWithVolumesOutput("local", true);
testDockerCommandPluginWithVolumesOutput("volume2,local", true);
testDockerCommandPluginWithVolumesOutput(
"DRIVER VOLUME NAME\n" +
"local volume2\n", true);
testDockerCommandPluginWithVolumesOutput("volum1,something", true);
testDockerCommandPluginWithVolumesOutput(
"DRIVER VOLUME NAME\n" +
"something volume1\n", true);
testDockerCommandPluginWithVolumesOutput("volum1,something\nvolum2,local",
true);
// Success case
testDockerCommandPluginWithVolumesOutput("volume1,local\n", false);
testDockerCommandPluginWithVolumesOutput(
"DRIVER VOLUME NAME\n" +
"nvidia-docker nvidia_driver_375.66\n" +
"local volume1\n", false);
testDockerCommandPluginWithVolumesOutput(
"volume_xyz,nvidia\nvolume1,local\n\n", false);
testDockerCommandPluginWithVolumesOutput(" volume1, local \n", false);