YARN-8329. Docker client configuration can still be set incorrectly. Contributed by Shane Kumpf
(cherry picked from commit 4827e9a908
)
This commit is contained in:
parent
3eb1cb18c7
commit
a1fd04c4f4
|
@ -154,14 +154,15 @@ public final class DockerClientConfigHandler {
|
|||
* @param outConfigFile the File to write the Docker client configuration to.
|
||||
* @param credentials the populated Credentials object.
|
||||
* @throws IOException if the write fails.
|
||||
* @return true if a Docker credential is found in the supplied credentials.
|
||||
*/
|
||||
public static void writeDockerCredentialsToPath(File outConfigFile,
|
||||
public static boolean writeDockerCredentialsToPath(File outConfigFile,
|
||||
Credentials credentials) throws IOException {
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
ObjectNode rootNode = mapper.createObjectNode();
|
||||
ObjectNode registryUrlNode = mapper.createObjectNode();
|
||||
boolean foundDockerCred = false;
|
||||
if (credentials.numberOfTokens() > 0) {
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
ObjectNode rootNode = mapper.createObjectNode();
|
||||
ObjectNode registryUrlNode = mapper.createObjectNode();
|
||||
for (Token<? extends TokenIdentifier> tk : credentials.getAllTokens()) {
|
||||
if (tk.getKind().equals(DockerCredentialTokenIdentifier.KIND)) {
|
||||
foundDockerCred = true;
|
||||
|
@ -176,12 +177,14 @@ public final class DockerClientConfigHandler {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (foundDockerCred) {
|
||||
rootNode.put(CONFIG_AUTHS_KEY, registryUrlNode);
|
||||
String json = mapper.writerWithDefaultPrettyPrinter()
|
||||
.writeValueAsString(rootNode);
|
||||
FileUtils.writeStringToFile(
|
||||
outConfigFile, json, StandardCharsets.UTF_8);
|
||||
}
|
||||
}
|
||||
if (foundDockerCred) {
|
||||
rootNode.put(CONFIG_AUTHS_KEY, registryUrlNode);
|
||||
String json =
|
||||
mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode);
|
||||
FileUtils.writeStringToFile(outConfigFile, json, StandardCharsets.UTF_8);
|
||||
}
|
||||
return foundDockerCred;
|
||||
}
|
||||
}
|
|
@ -116,8 +116,8 @@ public class TestDockerClientConfigHandler {
|
|||
Credentials credentials =
|
||||
DockerClientConfigHandler.readCredentialsFromConfigFile(
|
||||
new Path(file.toURI()), conf, APPLICATION_ID);
|
||||
DockerClientConfigHandler.writeDockerCredentialsToPath(outFile,
|
||||
credentials);
|
||||
assertTrue(DockerClientConfigHandler.writeDockerCredentialsToPath(outFile,
|
||||
credentials));
|
||||
assertTrue(outFile.exists());
|
||||
String fileContents = FileUtils.readFileToString(outFile);
|
||||
assertTrue(fileContents.contains("auths"));
|
||||
|
|
|
@ -1302,14 +1302,15 @@ public class DockerLinuxContainerRuntime implements LinuxContainerRuntime {
|
|||
.getParent();
|
||||
File dockerConfigPath = new File(nmPrivateDir + "/config.json");
|
||||
try {
|
||||
DockerClientConfigHandler
|
||||
.writeDockerCredentialsToPath(dockerConfigPath, credentials);
|
||||
if (DockerClientConfigHandler
|
||||
.writeDockerCredentialsToPath(dockerConfigPath, credentials)) {
|
||||
dockerRunCommand.setClientConfigDir(dockerConfigPath.getParent());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new ContainerExecutionException(
|
||||
"Unable to write Docker client credentials to "
|
||||
+ dockerConfigPath);
|
||||
}
|
||||
dockerRunCommand.setClientConfigDir(dockerConfigPath.getParent());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue