@Override public ModuleDeploymentId deploy(ModuleDeploymentRequest request) { int count = request.getCount(); ModuleCoordinates coordinates = request.getCoordinates(); ModuleDefinition definition = request.getDefinition(); ModuleDeploymentId id = ModuleDeploymentId.fromModuleDefinition(definition); String clusterId = moduleDeploymentIdToClusterId(id); String module = coordinates.toString(); Map<String, String> definitionParameters = definition.getParameters(); Map<String, String> deploymentProperties = request.getDeploymentProperties(); logger.info("deploying request for definition: " + definition); logger.info("deploying module: " + module); logger.info("definitionParameters: " + definitionParameters); logger.info("deploymentProperties: " + deploymentProperties); // TODO: using default app name "app" until we start to customise // via deploymentProperties Message<Events> message = MessageBuilder.withPayload(Events.DEPLOY) .setHeader(YarnCloudAppStateMachine.HEADER_APP_VERSION, "app") .setHeader(YarnCloudAppStateMachine.HEADER_CLUSTER_ID, clusterId) .setHeader(YarnCloudAppStateMachine.HEADER_COUNT, count) .setHeader(YarnCloudAppStateMachine.HEADER_MODULE, module) .setHeader(YarnCloudAppStateMachine.HEADER_DEFINITION_PARAMETERS, definitionParameters) .build(); stateMachine.sendEvent(message); return id; }
/** * 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 = "/deployments/{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); Assert.notNull(taskDefinition, String.format("no task defined: %s", 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(); // todo: pass deployment properties this.moduleDeployer.deploy(new ModuleDeploymentRequest(module, coordinates)); }
Map<String, String> toModuleLauncherEnvironment(ModuleDeploymentRequest moduleDeploymentRequest) { HashMap<String, String> environment = new HashMap<>(); environment.put("modules", moduleDeploymentRequest.getCoordinates().toString()); environment.putAll(ModuleArgumentQualifier.qualifyArgs(0, moduleDeploymentRequest.getDefinition().getParameters())); environment.putAll(ModuleArgumentQualifier.qualifyArgs(0, moduleDeploymentRequest.getDeploymentProperties())); return toEnvironmentVariables(environment); }
@Override public ModuleDeploymentId deploy(ModuleDeploymentRequest request) { ModuleDefinition definition = request.getDefinition(); ModuleDeploymentId moduleDeploymentId = new ModuleDeploymentId(definition.getGroup(), definition.getLabel()); String applicationName = this.cloudFoundryModuleDeploymentConverter.toApplicationName(moduleDeploymentId); PushBindAndStartApplicationResults response = this.resourceClient.pushBindAndStartApplication(new PushBindAndStartApplicationParameters() .withEnvironment(this.cloudFoundryModuleDeploymentConverter.toModuleLauncherEnvironment(request)) .withInstances(request.getCount()) .withName(applicationName) .withResource(properties.getModuleLauncherLocation()) .withServiceInstanceNames(this.properties.getServices()) ); if (!response.isCreateSucceeded()) { throw new IllegalStateException("Module " + moduleDeploymentId + " could not be deployed"); } return moduleDeploymentId; }
this.deployer.deploy(new ModuleDeploymentRequest(currentModule, coordinates, moduleDeploymentProperties));