Search in sources :

Example 1 with Tool

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;
}
Also used : PipelineRun(com.epam.pipeline.entity.pipeline.PipelineRun) PipelineConfiguration(com.epam.pipeline.entity.configuration.PipelineConfiguration) Tool(com.epam.pipeline.entity.pipeline.Tool) ToolSecurityPolicyCheck(com.epam.pipeline.manager.docker.scan.ToolSecurityPolicyCheck)

Example 2 with Tool

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;
}
Also used : PipelineRun(com.epam.pipeline.entity.pipeline.PipelineRun) Tool(com.epam.pipeline.entity.pipeline.Tool) Transactional(org.springframework.transaction.annotation.Transactional)

Example 3 with Tool

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;
}
Also used : PipelineRun(com.epam.pipeline.entity.pipeline.PipelineRun) PipelineConfiguration(com.epam.pipeline.entity.configuration.PipelineConfiguration) RestartRun(com.epam.pipeline.entity.pipeline.run.RestartRun) Tool(com.epam.pipeline.entity.pipeline.Tool) Transactional(org.springframework.transaction.annotation.Transactional)

Example 4 with Tool

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);
}
Also used : TaskGraphVO(com.epam.pipeline.controller.vo.TaskGraphVO) Tool(com.epam.pipeline.entity.pipeline.Tool)

Example 5 with Tool

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);
}
Also used : Tool(com.epam.pipeline.entity.pipeline.Tool)

Aggregations

Tool (com.epam.pipeline.entity.pipeline.Tool)72 Transactional (org.springframework.transaction.annotation.Transactional)28 DockerRegistry (com.epam.pipeline.entity.pipeline.DockerRegistry)24 Test (org.junit.Test)22 ToolGroup (com.epam.pipeline.entity.pipeline.ToolGroup)14 AbstractManagerTest (com.epam.pipeline.manager.AbstractManagerTest)11 AbstractSpringTest (com.epam.pipeline.AbstractSpringTest)9 DockerClient (com.epam.pipeline.manager.docker.DockerClient)9 List (java.util.List)9 PipelineConfiguration (com.epam.pipeline.entity.configuration.PipelineConfiguration)8 MessageHelper (com.epam.pipeline.common.MessageHelper)7 PipelineRun (com.epam.pipeline.entity.pipeline.PipelineRun)7 ToolVersionScanResult (com.epam.pipeline.entity.scan.ToolVersionScanResult)7 ToolScanExternalServiceException (com.epam.pipeline.exception.ToolScanExternalServiceException)7 DockerRegistryManager (com.epam.pipeline.manager.docker.DockerRegistryManager)7 Optional (java.util.Optional)7 MessageConstants (com.epam.pipeline.common.MessageConstants)6 ManifestV2 (com.epam.pipeline.entity.docker.ManifestV2)6 ToolScanStatus (com.epam.pipeline.entity.pipeline.ToolScanStatus)6 DockerClientFactory (com.epam.pipeline.manager.docker.DockerClientFactory)6