/** * Request the launching of an existing task definition. The name must be included in the path. * * @param name the name of the existing task to be executed (required) * @param properties the runtime properties for the task, as a comma-delimited list of key=value * pairs */ @RequestMapping(value = "/{name}", method = RequestMethod.POST) @ResponseStatus(HttpStatus.CREATED) public void deploy( @PathVariable("name") String name, @RequestParam(required = false) String properties) { TaskDefinition taskDefinition = this.repository.findOne(name); if (taskDefinition == null) { throw new NoSuchTaskDefinitionException(name); } ModuleDefinition module = taskDefinition.getModuleDefinition(); ArtifactRegistration registration = this.registry.find(module.getName(), ArtifactType.task); if (registration == null) { throw new IllegalArgumentException( String.format( "Module %s of type %s not found in registry", module.getName(), ArtifactType.task)); } ArtifactCoordinates coordinates = registration.getCoordinates(); Map<String, String> deploymentProperties = new HashMap<>(); module = updateTaskProperties(module, module.getName()); deploymentProperties.putAll(DeploymentPropertiesUtils.parse(properties)); deploymentProperties.put( ModuleDeployer.GROUP_DEPLOYMENT_ID, taskDefinition.getName() + "-" + System.currentTimeMillis()); this.moduleDeployer.deploy( new ModuleDeploymentRequest(module, coordinates, deploymentProperties)); }
/** * Create a new builder that is initialized with properties of the given definition. Useful for * "mutating" a definition by building a slightly different copy. */ public static Builder from(ModuleDefinition definition) { Builder builder = new Builder(); builder .setGroup(definition.getGroup()) .setLabel(definition.getLabel()) .setName(definition.getName()) .addParameters(definition.getParameters()); return builder; }