diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/services/api/impl/ApplicationApiService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/services/api/impl/ApplicationApiService.java index 6db69ac..863ecde 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/services/api/impl/ApplicationApiService.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/services/api/impl/ApplicationApiService.java @@ -372,6 +372,50 @@ public String run(SliderClient sliderClient) throws YarnException, }); } + private void addDockerOptions(String compName, + List appCompOptionTriples, Component comp, + Map placeholders, Application application) { + appCompOptionTriples.addAll(Arrays.asList(compName, + DockerKeys.DOCKER_IMAGE, comp.getArtifact().getId() == null ? + application.getArtifact().getId() : comp.getArtifact().getId())); + appCompOptionTriples.addAll(Arrays.asList(compName, + DockerKeys.DOCKER_START_COMMAND, comp.getLaunchCommand() == null ? + replacePlaceholders(application.getLaunchCommand(), placeholders) + : replacePlaceholders(comp.getLaunchCommand(), placeholders))); + appCompOptionTriples.addAll(Arrays.asList(compName, + DockerKeys.DOCKER_NETWORK, DockerKeys.DEFAULT_DOCKER_NETWORK)); + if (comp.getRunPrivilegedContainer() != null) { + appCompOptionTriples.addAll(Arrays.asList(compName, + DockerKeys.DOCKER_USE_PRIVILEGED, + comp.getRunPrivilegedContainer().toString())); + } + } + + private void addDockerOptions(List appCompOptionTriples, + Component comp, Map placeholders, + Application application) { + if (Boolean.FALSE.equals(comp.getUniqueComponentSupport())) { + addDockerOptions(comp.getName(), appCompOptionTriples, comp, placeholders, + application); + } else { + // Need to handle getUniqueComponentSupport == true case here to make sure + // docker.image correctly set + for (int i = 1; i <= comp.getNumberOfContainers(); i++) { + // Set COMPONENT_ID + // TODO, we need support other placeholder replacement in launch_cmd as + // well + placeholders.put(PLACEHOLDER_COMPONENT_ID, String.valueOf(i)); + + addDockerOptions(getCompNameByIndex(comp.getName(), i), + appCompOptionTriples, comp, placeholders, application); + } + } + } + + private String getCompNameByIndex(String compName, int i) { + return compName + i; + } + private void addAppConfOptions(ActionCreateArgs createArgs, Application application, Map compNameArtifactIdMap) throws IOException { List appCompOptionTriples = createArgs.optionsDelegate.compOptTriples; // TODO: optionTuples instead of compOptTriples @@ -436,21 +480,10 @@ private void addAppConfOptions(ActionCreateArgs createArgs, placeholders.put(PLACEHOLDER_APP_NAME, application.getName()); for (Component comp : application.getComponents()) { placeholders.put(PLACEHOLDER_APP_COMPONENT_NAME, comp.getName()); + if (comp.getArtifact().getType() == Artifact.TypeEnum.DOCKER) { - appCompOptionTriples.addAll(Arrays.asList(comp.getName(), - DockerKeys.DOCKER_IMAGE, comp.getArtifact().getId() == null ? - application.getArtifact().getId() : comp.getArtifact().getId())); - appCompOptionTriples.addAll(Arrays.asList(comp.getName(), - DockerKeys.DOCKER_START_COMMAND, comp.getLaunchCommand() == null ? - replacePlaceholders(application.getLaunchCommand(), placeholders) - : replacePlaceholders(comp.getLaunchCommand(), placeholders))); - appCompOptionTriples.addAll(Arrays.asList(comp.getName(), - DockerKeys.DOCKER_NETWORK, DockerKeys.DEFAULT_DOCKER_NETWORK)); - if (comp.getRunPrivilegedContainer() != null) { - appCompOptionTriples.addAll(Arrays.asList(comp.getName(), - DockerKeys.DOCKER_USE_PRIVILEGED, - comp.getRunPrivilegedContainer().toString())); - } + addDockerOptions(appCompOptionTriples, comp, placeholders, + application); } if (comp.getConfiguration() != null) {