private Map<String, String> getSanitizedApplicationProperties(String deploymentId, AppDeploymentRequest request) { Map<String, String> applicationProperties = new HashMap<>(request.getDefinition().getProperties()); // Remove server.port as CF assigns a port for us, and we don't want to override that Optional.ofNullable(applicationProperties.remove("server.port")) .ifPresent(port -> logger.warn("Ignoring 'server.port={}' for app {}, as Cloud Foundry will assign a local dynamic port. Route to the app will use port 80.", port, deploymentId)); return applicationProperties; }
/** * Create command arguments * * @param request the {@link AppDeploymentRequest} * @return the command line arguments to use */ protected List<String> createCommandArgs(AppDeploymentRequest request) { List<String> cmdArgs = new LinkedList<>(); // add properties from deployment request Map<String, String> args = request.getDefinition().getProperties(); for (Map.Entry<String, String> entry : args.entrySet()) { cmdArgs.add(String.format("--%s=%s", entry.getKey(), entry.getValue())); } // add provided command line args cmdArgs.addAll(request.getCommandlineArguments()); logger.debug("Using command args: " + cmdArgs); return cmdArgs; }
private String getName(AppDeploymentRequest request) { if (request.getDeploymentProperties() .containsKey(AppDeployer.PREFIX + ThinJarLauncher.THIN_NAME)) { return request.getDeploymentProperties() .get(AppDeployer.PREFIX + ThinJarLauncher.THIN_NAME); } return this.name; }
private String deduceAppId(AppDeploymentRequest request) { String groupId = request.getDeploymentProperties().get(GROUP_PROPERTY_KEY); String name = request.getDefinition().getName(); if (groupId != null) { return "/" + groupId + "/" + name; } else { return "/" + name; } }
@Override public String[] buildExecutionCommand(AppDeploymentRequest request, Map<String, String> appInstanceEnv, Optional<Integer> appInstanceNumber) { ArrayList<String> commands = new ArrayList<>(); Map<String, String> deploymentProperties = request.getDeploymentProperties(); commands.add(properties.getJavaCmd()); // Add Java System Properties (ie -Dmy.prop=val) before main class or -jar addJavaOptions(commands, deploymentProperties, properties); addJavaExecutionOptions(commands, request); commands.addAll(request.getCommandlineArguments()); logger.debug("Java Command = " + commands); return commands.toArray(new String[0]); }
@Test public void testSimpleLaunch() throws InterruptedException { Map<String, String> appProperties = new HashMap<>(); appProperties.put("killDelay", "0"); appProperties.put("exitCode", "0"); AppDefinition definition = new AppDefinition(randomName(), appProperties); Resource resource = testApplication(); AppDeploymentRequest request = new AppDeploymentRequest(definition, resource); log.info("Launching {}...", request.getDefinition().getName()); String launchId = taskLauncher().launch(request); Timeout timeout = deploymentTimeout(); assertThat(launchId, eventually(hasStatusThat( Matchers.<TaskStatus>hasProperty("state", Matchers.is(LaunchState.complete))), timeout.maxAttempts, timeout.pause)); taskLauncher().destroy(definition.getName()); }
private Package createDependentPackage(String packageVersion, AppDeploymentRequest appDeploymentRequest) { Package pkg = new Package(); String packageName = appDeploymentRequest.getDefinition().getName(); String resourceWithoutVersion = this.appRegistryService.getResourceWithoutVersion(appDeploymentRequest.getResource()); specMap.put("resource", resourceWithoutVersion); specMap.put("applicationProperties", appDeploymentRequest.getDefinition().getProperties()); specMap.put("deploymentProperties", appDeploymentRequest.getDeploymentProperties()); String version = this.appRegistryService.getResourceVersion(appDeploymentRequest.getResource()); if (appDeploymentRequest.getCommandlineArguments().size() == 1) { specMap.put("version", appDeploymentRequest.getCommandlineArguments().get(0));
public void deployStream(StreamDeploymentRequest streamDeploymentRequest) { for (AppDeploymentRequest appDeploymentRequest : streamDeploymentRequest.getAppDeploymentRequests()) { try { logger.info(String.format(deployLoggingString, appDeploymentRequest.getDefinition().getName(), streamDeploymentRequest.getStreamName(), appDeploymentRequest.getResource().getURI())); String id = this.appDeployer.deploy(appDeploymentRequest); this.deploymentIdRepository.save(DeploymentKey .forAppDeploymentRequest(streamDeploymentRequest.getStreamName(), appDeploymentRequest.getDefinition()), id); "[stream name = %s, application name = %s, application properties = %s", streamDeploymentRequest.getStreamName(), appDeploymentRequest.getDefinition().getName(), appDeploymentRequest.getDefinition().getProperties()); logger.error( String.format("Exception when deploying the app %s: %s", errorMessage, e.getMessage()), Map<String, String> appVersions = new HashMap<>(); for (AppDeploymentRequest appDeploymentRequest : streamDeploymentRequest.getAppDeploymentRequests()) { deploymentProperties.put(appDeploymentRequest.getDefinition().getName(), appDeploymentRequest.getDeploymentProperties()); appVersions.put(appDeploymentRequest.getDefinition().getName(), this.appRegistry.getResourceVersion(appDeploymentRequest.getResource()));
for (AppDeploymentRequest appDeploymentRequest : appDeploymentRequests) { boolean hasProps = false; String appName = appDeploymentRequest.getDefinition().getName(); Map<String, Object> appMap = new HashMap<>(); Map<String, Object> specMap = new HashMap<>(); if (!appDeploymentRequest.getDefinition().getProperties().isEmpty()) { hasProps = true; specMap.put(SpringCloudDeployerApplicationSpec.APPLICATION_PROPERTIES_STRING, appDeploymentRequest.getDefinition().getProperties()); if (!appDeploymentRequest.getDeploymentProperties().isEmpty()) { hasProps = true; specMap.put(SpringCloudDeployerApplicationSpec.DEPLOYMENT_PROPERTIES_STRING, appDeploymentRequest.getDeploymentProperties()); if (appDeploymentRequest.getCommandlineArguments().size() == 1) { hasProps = true; String version = appDeploymentRequest.getCommandlineArguments().get(0); this.skipperStreamDeployer.validateAppVersionIsRegistered(streamDefinition, appDeploymentRequest, version);
private List<String> addDockerOptions(AppDeploymentRequest request, Map<String, String> appInstanceEnv, Optional<Integer> appInstanceNumber) { List<String> commands = new ArrayList<>(); commands.add("docker"); commands.add("run"); // Add env vars for (String env : appInstanceEnv.keySet()) { commands.add("-e"); commands.add(String.format("%s=%s", env, appInstanceEnv.get(env))); } setPort(commands, appInstanceEnv); if(request.getDeploymentProperties().containsKey(DOCKER_CONTAINER_NAME_KEY)) { if(appInstanceNumber.isPresent()) { commands.add(String.format("--name=%s-%d", request.getDeploymentProperties().get(DOCKER_CONTAINER_NAME_KEY), appInstanceNumber.get())); } else { commands.add(String.format("--name=%s", request.getDeploymentProperties().get(DOCKER_CONTAINER_NAME_KEY))); } } DockerResource dockerResource = (DockerResource) request.getResource(); try { String dockerImageURI = dockerResource.getURI().toString(); commands.add(dockerImageURI.substring("docker:".length())); } catch (IOException e) { throw new IllegalStateException(e); } return commands; }
appDeployTimeProperties); AppDeploymentRequest request = new AppDeploymentRequest(revisedDefinition, appResource, deployerDeploymentProperties, commandlineArguments); logger.debug("Created AppDeploymentRequest = " + request.toString() + " AppDefinition = " + request.getDefinition().toString()); appDeploymentRequests.add(request);
private void validateAllAppsRegistered(StreamDeploymentRequest streamDeploymentRequest) { StreamDefinition streamDefinition = this.streamDefinitionRepository.findOne(streamDeploymentRequest.getStreamName()); for (AppDeploymentRequest adr : streamDeploymentRequest.getAppDeploymentRequests()) { String version = this.appRegistryService.getResourceVersion(adr.getResource()); validateAppVersionIsRegistered(getRegisteredName(streamDefinition, adr.getDefinition().getName()), adr, version); } }
public String deploy(AppDeploymentRequest request) { ThinJarAppWrapper wrapper = new ThinJarAppWrapper(request.getResource(), getName(request), getProfiles(request)); String id = wrapper.getId(); if (!apps.containsKey(id)) { apps.put(id, wrapper); } else { wrapper = apps.get(id); } wrapper.run(getProperties(request), request.getCommandlineArguments()); return id; }
protected List<String> createCommandArgs(AppDeploymentRequest request) { List<String> cmdArgs = new LinkedList<String>(); // add provided command line args cmdArgs.addAll(request.getCommandlineArguments()); logger.debug("Using command args: " + cmdArgs); return cmdArgs; }
/** * Return a Path to the application Resource or {@literal null} if the request is for a Docker image. * * @see #getDockerImage(AppDeploymentRequest) */ Path getApplication(AppDeploymentRequest request) { try { if (!request.getResource().getURI().toString().startsWith("docker:")) { return request.getResource().getFile().toPath(); } else { return null; } } catch (IOException e) { throw Exceptions.propagate(e); } }
AppDefinition appDefinition = new AppDefinition(currentApp.getName(), expandedAppUpdateTimeProperties); AppDeploymentRequest request = new AppDeploymentRequest(appDefinition, appResource, deployerDeploymentProperties, commandlineArguments);
throw new SkipperException(String.format("Could not install AppDeployRequest [%s] " + " to platform [%s]. Error Message = [%s]", appDeploymentRequest.toString(), release.getPlatformName(), e.getMessage()), e);
@Test public void testErrorExit() throws InterruptedException { Map<String, String> appProperties = new HashMap<>(); appProperties.put("killDelay", "0"); appProperties.put("exitCode", "1"); AppDefinition definition = new AppDefinition(randomName(), appProperties); Resource resource = testApplication(); AppDeploymentRequest request = new AppDeploymentRequest(definition, resource); log.info("Launching {}...", request.getDefinition().getName()); String launchId = taskLauncher().launch(request); Timeout timeout = deploymentTimeout(); assertThat(launchId, eventually(hasStatusThat( Matchers.<TaskStatus>hasProperty("state", Matchers.is(LaunchState.failed))), timeout.maxAttempts, timeout.pause)); taskLauncher().destroy(definition.getName()); }
private Package createDependentPackage(String packageVersion, AppDeploymentRequest appDeploymentRequest) { Package pkg = new Package(); String packageName = appDeploymentRequest.getDefinition().getName(); String resourceWithoutVersion = this.appRegistryService.getResourceWithoutVersion(appDeploymentRequest.getResource()); specMap.put("resource", resourceWithoutVersion); specMap.put("applicationProperties", appDeploymentRequest.getDefinition().getProperties()); specMap.put("deploymentProperties", appDeploymentRequest.getDeploymentProperties()); String version = this.appRegistryService.getResourceVersion(appDeploymentRequest.getResource()); if (appDeploymentRequest.getCommandlineArguments().size() == 1) { specMap.put("version", appDeploymentRequest.getCommandlineArguments().get(0));
@Override public String deploy(AppDeploymentRequest request) { logger.trace("Entered deploy: Deploying AppDeploymentRequest: AppDefinition = {}, Resource = {}, Deployment Properties = {}", request.getDefinition(), request.getResource(), request.getDeploymentProperties()); String deploymentId = deploymentId(request);