| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.slider.server.appmaster.web.rest.agent; |
| |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
| import org.apache.slider.providers.agent.application.metadata.Component; |
| import org.apache.slider.providers.agent.application.metadata.DockerContainer; |
| import org.apache.slider.providers.agent.application.metadata.DockerContainerInputFile; |
| import org.apache.slider.providers.agent.application.metadata.DockerContainerMount; |
| import org.apache.slider.providers.agent.application.metadata.DockerContainerPort; |
| import org.apache.slider.providers.agent.application.metadata.Metainfo; |
| import org.codehaus.jackson.annotate.JsonIgnoreProperties; |
| import org.codehaus.jackson.annotate.JsonProperty; |
| import org.codehaus.jackson.map.annotate.JsonSerialize; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| /** |
| * |
| */ |
| @JsonIgnoreProperties(ignoreUnknown = true) |
| @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) |
| public class ExecutionCommand { |
| protected static final Logger log = |
| LoggerFactory.getLogger(ExecutionCommand.class); |
| private AgentCommandType commandType = AgentCommandType.EXECUTION_COMMAND; |
| private String clusterName; |
| private long taskId; |
| private String commandId; |
| //TODO Remove hostname from being set in the command |
| private String hostname; |
| private String role; |
| private Map<String, String> hostLevelParams = new HashMap<String, String>(); |
| private Map<String, String> roleParams = null; |
| private String roleCommand; |
| private Map<String, Map<String, String>> configurations; |
| private Map<String, String> commandParams; |
| private String serviceName; |
| private String componentName; |
| private String componentType; |
| private List<DockerContainer> containers = new ArrayList<>(); |
| |
| public ExecutionCommand(AgentCommandType commandType) { |
| this.commandType = commandType; |
| } |
| |
| @JsonProperty("containers") |
| public List<DockerContainer> getContainers() { |
| return containers; |
| } |
| |
| @JsonProperty("commandType") |
| public AgentCommandType getCommandType() { |
| return commandType; |
| } |
| |
| @JsonProperty("commandType") |
| public void setCommandType(AgentCommandType commandType) { |
| this.commandType = commandType; |
| } |
| |
| @JsonProperty("commandId") |
| public String getCommandId() { |
| return this.commandId; |
| } |
| |
| @JsonProperty("commandId") |
| public void setCommandId(String commandId) { |
| this.commandId = commandId; |
| } |
| |
| @JsonProperty("taskId") |
| public long getTaskId() { |
| return taskId; |
| } |
| |
| @JsonProperty("taskId") |
| public void setTaskId(long taskId) { |
| this.taskId = taskId; |
| } |
| |
| @JsonProperty("role") |
| public String getRole() { |
| return role; |
| } |
| |
| @JsonProperty("role") |
| public void setRole(String role) { |
| this.role = role; |
| } |
| |
| @JsonProperty("roleParams") |
| public Map<String, String> getRoleParams() { |
| return roleParams; |
| } |
| |
| @JsonProperty("roleParams") |
| public void setRoleParams(Map<String, String> roleParams) { |
| this.roleParams = roleParams; |
| } |
| |
| @JsonProperty("roleCommand") |
| public String getRoleCommand() { |
| return roleCommand; |
| } |
| |
| @JsonProperty("roleCommand") |
| public void setRoleCommand(String cmd) { |
| this.roleCommand = cmd; |
| } |
| |
| @JsonProperty("clusterName") |
| public String getClusterName() { |
| return clusterName; |
| } |
| |
| @JsonProperty("clusterName") |
| public void setClusterName(String clusterName) { |
| this.clusterName = clusterName; |
| } |
| |
| @JsonProperty("componentType") |
| public String getComponentType() { |
| return componentType; |
| } |
| |
| @JsonProperty("componentType") |
| public void setComponentType(String componentType) { |
| this.componentType = componentType; |
| } |
| |
| @JsonProperty("hostname") |
| public String getHostname() { |
| return hostname; |
| } |
| |
| @JsonProperty("hostname") |
| public void setHostname(String hostname) { |
| this.hostname = hostname; |
| } |
| @JsonProperty("hostLevelParams") |
| public Map<String, String> getHostLevelParams() { |
| return hostLevelParams; |
| } |
| |
| @JsonProperty("hostLevelParams") |
| public void setHostLevelParams(Map<String, String> params) { |
| this.hostLevelParams = params; |
| } |
| |
| @JsonProperty("configurations") |
| public Map<String, Map<String, String>> getConfigurations() { |
| return configurations; |
| } |
| |
| @JsonProperty("configurations") |
| public void setConfigurations(Map<String, Map<String, String>> configurations) { |
| this.configurations = configurations; |
| } |
| |
| @JsonProperty("commandParams") |
| public Map<String, String> getCommandParams() { |
| return commandParams; |
| } |
| |
| @JsonProperty("commandParams") |
| public void setCommandParams(Map<String, String> commandParams) { |
| this.commandParams = commandParams; |
| } |
| |
| @JsonProperty("serviceName") |
| public String getServiceName() { |
| return serviceName; |
| } |
| |
| @JsonProperty("serviceName") |
| public void setServiceName(String serviceName) { |
| this.serviceName = serviceName; |
| } |
| |
| @JsonProperty("componentName") |
| public String getComponentName() { |
| return componentName; |
| } |
| |
| @JsonProperty("componentName") |
| public void setComponentName(String componentName) { |
| this.componentName = componentName; |
| } |
| |
| @Override |
| public String toString() { |
| StringBuilder builder = new StringBuilder(); |
| builder.append("ExecutionCommand [commandType=").append(commandType) |
| .append(", clusterName=").append(clusterName).append(", taskId=") |
| .append(taskId).append(", commandId=").append(commandId) |
| .append(", hostname=").append(hostname).append(", role=").append(role) |
| .append(", hostLevelParams=").append(hostLevelParams) |
| .append(", roleParams=").append(roleParams).append(", roleCommand=") |
| .append(roleCommand).append(", configurations=").append(configurations) |
| .append(", commandParams=").append(commandParams) |
| .append(", serviceName=").append(serviceName) |
| .append(", componentName=").append(componentName).append("]"); |
| return builder.toString(); |
| } |
| |
| public void addContainerDetails(String componentName, Metainfo metaInfo) { |
| Component component = metaInfo.getApplicationComponent(componentName); |
| this.setComponentType(component.getType()); |
| log.info("Adding container details for {}", componentName); |
| for(DockerContainer metaContainer: component.getDockerContainers()) { |
| DockerContainer container = new DockerContainer(); |
| container.setImage(metaContainer.getImage()); |
| container.setName(metaContainer.getName()); |
| container.setOptions(metaContainer.getOptions()); |
| container.setAdditionalParam(metaContainer.getAdditionalParam()); |
| container.setCommandPath(metaContainer.getAdditionalParam()); |
| container.setStatusCommand(metaContainer.getStatusCommand()); |
| if(metaContainer.getMounts().size() > 0) { |
| for(DockerContainerMount metaContMount : metaContainer.getMounts()) { |
| DockerContainerMount contMnt = new DockerContainerMount(); |
| contMnt.setContainerMount(metaContMount.getContainerMount()); |
| contMnt.setHostMount(metaContMount.getHostMount()); |
| container.getMounts().add(contMnt); |
| } |
| } |
| if(metaContainer.getPorts().size() > 0) { |
| for(DockerContainerPort metaCntPort : metaContainer.getPorts()) { |
| DockerContainerPort cntPort = new DockerContainerPort(); |
| cntPort.setContainerPort(metaCntPort.getContainerPort()); |
| cntPort.setHostPort(metaCntPort.getHostPort()); |
| container.getPorts().add(cntPort); |
| } |
| } |
| if(metaContainer.getInputFiles().size() > 0) { |
| for(DockerContainerInputFile metaInpFile : metaContainer.getInputFiles()) { |
| DockerContainerInputFile inpFile = new DockerContainerInputFile(); |
| inpFile.setContainerMount(metaInpFile.getContainerMount()); |
| inpFile.setFileLocalPath(metaInpFile.getFileLocalPath()); |
| container.getInputFiles().add(inpFile); |
| } |
| } |
| this.getContainers().add(container); |
| } |
| } |
| } |