use of com.epam.pipeline.entity.pipeline.Tool in project cloud-pipeline by epam.
the class PipelineRunManager method runCmd.
/**
* Launches cmd command execution, uses Tool as ACL identity
* @param runVO
* @return
*/
@ToolSecurityPolicyCheck
public PipelineRun runCmd(PipelineStart runVO) {
Assert.notNull(runVO.getInstanceType(), messageHelper.getMessage(MessageConstants.SETTING_IS_NOT_PROVIDED, "instance_type"));
Assert.notNull(runVO.getHddSize(), messageHelper.getMessage(MessageConstants.SETTING_IS_NOT_PROVIDED, "instance_disk"));
int maxRunsNumber = preferenceManager.getPreference(SystemPreferences.LAUNCH_MAX_SCHEDULED_NUMBER);
LOGGER.debug("Allowed runs count - {}, actual - {}", maxRunsNumber, getNodeCount(runVO.getNodeCount(), 1));
Assert.isTrue(getNodeCount(runVO.getNodeCount(), 1) < maxRunsNumber, messageHelper.getMessage(MessageConstants.ERROR_EXCEED_MAX_RUNS_COUNT, maxRunsNumber, getNodeCount(runVO.getNodeCount(), 1)));
Tool tool = toolManager.loadByNameOrId(runVO.getDockerImage());
PipelineConfiguration configuration = configurationManager.getPipelineConfiguration(runVO, tool);
boolean clusterRun = configurationManager.initClusterConfiguration(configuration, true);
PipelineRun run = launchPipeline(configuration, null, null, runVO.getInstanceType(), runVO.getParentNodeId(), runVO.getConfigurationName(), null, runVO.getParentRunId(), null, null, runVO.getRunSids());
run.setParent(tool);
run.setAclClass(AclClass.TOOL);
if (clusterRun) {
runClusterWorkers(run, runVO, null, null, configuration);
}
return run;
}
use of com.epam.pipeline.entity.pipeline.Tool in project cloud-pipeline by epam.
the class PipelineRunManager method launchPipeline.
/**
* Internal method for creating a pipeline run,
* it assumes that ACL filtering was already applied to input arguments
* @param configuration
* @param pipeline - null in case of CMD launch
* @param version - null in case of CMD launch
* @param instanceType
* @param configurationName
* @param runSids - a list of identities (user names or groups) that have access to run
* @return
*/
@Transactional(propagation = Propagation.REQUIRED)
public PipelineRun launchPipeline(PipelineConfiguration configuration, Pipeline pipeline, String version, String instanceType, Long parentNodeId, String configurationName, String clusterId, Long parentRunId, List<Long> entityIds, Long configurationId, List<RunSid> runSids) {
validateInstanceAndPriceTypes(configuration, pipeline, instanceType);
String instanceDisk = configuration.getInstanceDisk();
if (StringUtils.hasText(instanceDisk)) {
Assert.isTrue(NumberUtils.isNumber(instanceDisk) && Integer.parseInt(instanceDisk) > 0, messageHelper.getMessage(MessageConstants.ERROR_INSTANCE_DISK_IS_INVALID, instanceDisk));
}
Tool tool = getToolForRun(configuration);
adjustInstanceDisk(configuration);
List<String> endpoints = configuration.isEraseRunEndpoints() ? Collections.emptyList() : tool.getEndpoints();
configuration.setSecretName(tool.getSecretName());
PipelineRun run = createPipelineRun(version, configuration, pipeline, parentRunId, entityIds, configurationId);
if (parentNodeId != null && !parentNodeId.equals(run.getId())) {
setParentInstance(run, parentNodeId);
}
String useNodeLabel = parentNodeId != null ? parentNodeId.toString() : run.getId().toString();
run.setConfigName(configurationName);
run.setRunSids(runSids);
String launchedCommand = pipelineLauncher.launch(run, configuration, endpoints, useNodeLabel, clusterId);
// update instance info according to evaluated command
run.setActualCmd(launchedCommand);
save(run);
dataStorageManager.analyzePipelineRunsParameters(Collections.singletonList(run));
return run;
}
use of com.epam.pipeline.entity.pipeline.Tool in project cloud-pipeline by epam.
the class PipelineRunManager method restartRun.
/**
* Restarts spot run
* @param run {@link PipelineRun} which will be restart
* @return Restarted pipeline run
*/
@Transactional(propagation = Propagation.REQUIRED)
public PipelineRun restartRun(final PipelineRun run) {
final PipelineConfiguration configuration = configurationManager.getConfigurationFromRun(run);
final PipelineRun restartedRun = createRestartRun(run);
final Tool tool = getToolForRun(configuration);
final List<String> endpoints = configuration.isEraseRunEndpoints() ? Collections.emptyList() : tool.getEndpoints();
configuration.setSecretName(tool.getSecretName());
final String launchedCommand = pipelineLauncher.launch(restartedRun, configuration, endpoints, restartedRun.getId().toString(), null);
restartedRun.setActualCmd(launchedCommand);
save(restartedRun);
final RestartRun restartRun = new RestartRun();
restartRun.setParentRunId(run.getId());
restartRun.setRestartedRunId(restartedRun.getId());
restartRun.setDate(DateUtils.now());
restartRunManager.createRestartRun(restartRun);
return run;
}
use of com.epam.pipeline.entity.pipeline.Tool in project cloud-pipeline by epam.
the class PipelineDocumentTemplateManager method applyTools.
private void applyTools(PipelineDocumentTemplate template) {
TaskGraphVO taskGraph = pipelineVersionManager.getWorkflowGraph(template.getPipeline().getId(), template.getVersion().getName());
template.setWorkflowGraph(taskGraph);
List<Tool> tools = taskGraph.getTasks().stream().filter(t -> t.getTool() != null).map(TaskNode::getTool).collect(Collectors.toList());
template.setOpenSourceSoftware(tools);
}
use of com.epam.pipeline.entity.pipeline.Tool in project cloud-pipeline by epam.
the class ToolManager method loadTags.
public List<String> loadTags(Long id) {
Tool tool = load(id);
Assert.notNull(tool, messageHelper.getMessage(MessageConstants.ERROR_TOOL_NOT_FOUND, id));
return dockerRegistryManager.loadImageTags(dockerRegistryManager.load(tool.getRegistryId()), tool);
}
Aggregations