@EventListener @Transactional public void initialize(ApplicationReadyEvent event) { if (singleDeployerExists()) { for (Platform platform: this.platforms) { if (platform.getDeployers().size() == 1) { List<Deployer> updatedDeployers = new ArrayList<>(); List<Deployer> deployers = platform.getDeployers(); Deployer existingDeployer = deployers.get(0); if (existingDeployer.getName() != "default") { Deployer defaultDeployer = new Deployer("default", existingDeployer.getType(), existingDeployer.getAppDeployer()); defaultDeployer.setDescription(existingDeployer.getDescription()); updatedDeployers.add(defaultDeployer); } updatedDeployers.addAll(deployers); platform.setDeployers(updatedDeployers); } } } this.platforms.forEach(platform -> { platform.getDeployers().forEach(deployer -> { this.deployerRepository.save(deployer); logger.info(String.format( "Added '%s' platform account '%s' into deployer repository.", platform.getName(), deployer.getName())); }); }); }
@Bean @ConditionalOnProperty(value = "spring.cloud.skipper.server.enableLocalPlatform", matchIfMissing = true) public Platform localDeployers(LocalPlatformProperties localPlatformProperties) { List<Deployer> deployers = new ArrayList<>(); Map<String, LocalDeployerProperties> localDeployerPropertiesMap = localPlatformProperties.getAccounts(); if (localDeployerPropertiesMap.isEmpty()) { localDeployerPropertiesMap.put("default", new LocalDeployerProperties()); } for (Map.Entry<String, LocalDeployerProperties> entry : localDeployerPropertiesMap .entrySet()) { LocalAppDeployer localAppDeployer = new LocalAppDeployer(entry.getValue()); Deployer deployer = new Deployer(entry.getKey(), "local", localAppDeployer); deployer.setDescription(prettyPrintLocalDeployerProperties(entry.getValue())); deployers.add(deployer); } return new Platform("Local", deployers); }
@Override public RuntimeEnvironmentInfo environmentInfo() { AboutResource skipperInfo = skipperClient.info(); Resources<Deployer> deployers = skipperClient.listDeployers(); RuntimeEnvironmentInfo.Builder builder = new RuntimeEnvironmentInfo.Builder() .implementationName(skipperInfo.getVersionInfo().getServer().getName()) .implementationVersion(skipperInfo.getVersionInfo().getServer().getVersion()) .platformApiVersion("") .platformClientVersion("") .platformHostVersion("") .platformType("Skipper Managed") .spiClass(SkipperClient.class); for (Deployer d : deployers) { builder.addPlatformSpecificInfo(d.getName(), d.getType()); } return builder.build(); }
public boolean isHealthy(Release replacingRelease) { AppDeployerData replacingAppDeployerData = this.appDeployerDataRepository .findByReleaseNameAndReleaseVersionRequired( replacingRelease.getName(), replacingRelease.getVersion()); Map<String, String> appNamesAndDeploymentIds = replacingAppDeployerData.getDeploymentDataAsMap(); AppDeployer appDeployer = this.deployerRepository .findByNameRequired(replacingRelease.getPlatformName()) .getAppDeployer(); logger.debug("Getting status for apps in replacing release {}-v{}", replacingRelease.getName(), replacingRelease.getVersion()); for (Map.Entry<String, String> appNameAndDeploymentId : appNamesAndDeploymentIds.entrySet()) { AppStatus status = appDeployer.status(appNameAndDeploymentId.getValue()); if (status.getState() == DeploymentState.deployed) { return true; } } return false; } }
private String determinePlatformName(final String platformName) { Resources<Deployer> deployerResources = skipperClient.listDeployers(); Collection<Deployer> deployers = deployerResources.getContent(); if (StringUtils.hasText(platformName)) { List<Deployer> filteredDeployers = deployers.stream() .filter(d -> d.getName().equals(platformName)) .collect(Collectors.toList()); if (filteredDeployers.size() == 0) { throw new IllegalArgumentException("No platform named '" + platformName + "'"); } else { return platformName; } } else { if (deployers.size() == 0) { throw new IllegalArgumentException("No platforms configured"); } else { String platformNameToUse = deployers.stream().findFirst().get().getName(); logger.info("Using platform '" + platformNameToUse + "'"); return platformNameToUse; } } }
@Bean @ConditionalOnProperty(value = "spring.cloud.skipper.server.enable-local-platform", matchIfMissing = true) public Platform localDeployers(LocalPlatformProperties localPlatformProperties) { List<Deployer> deployers = new ArrayList<>(); Map<String, LocalDeployerProperties> localDeployerPropertiesMap = localPlatformProperties.getAccounts(); if (localDeployerPropertiesMap.isEmpty()) { localDeployerPropertiesMap.put("default", new LocalDeployerProperties()); } for (Map.Entry<String, LocalDeployerProperties> entry : localDeployerPropertiesMap .entrySet()) { LocalAppDeployer localAppDeployer = new LocalAppDeployer(entry.getValue()); Deployer deployer = new Deployer(entry.getKey(), "local", localAppDeployer); deployer.setDescription(prettyPrintLocalDeployerProperties(entry.getValue())); deployers.add(deployer); } return new Platform("Local", deployers); }
@Override public RuntimeEnvironmentInfo environmentInfo() { AboutResource skipperInfo = skipperClient.info(); Resources<Deployer> deployers = skipperClient.listDeployers(); RuntimeEnvironmentInfo.Builder builder = new RuntimeEnvironmentInfo.Builder() .implementationName(skipperInfo.getVersionInfo().getServer().getName()) .implementationVersion(skipperInfo.getVersionInfo().getServer().getVersion()) .platformApiVersion("") .platformClientVersion("") .platformHostVersion("") .platformType("Skipper Managed") .spiClass(SkipperClient.class); for (Deployer d : deployers) { builder.addPlatformSpecificInfo(d.getName(), d.getType()); } return builder.build(); }
public boolean isHealthy(Release replacingRelease) { AppDeployerData replacingAppDeployerData = this.appDeployerDataRepository .findByReleaseNameAndReleaseVersionRequired( replacingRelease.getName(), replacingRelease.getVersion()); Map<String, String> appNamesAndDeploymentIds = replacingAppDeployerData.getDeploymentDataAsMap(); AppDeployer appDeployer = this.deployerRepository .findByNameRequired(replacingRelease.getPlatformName()) .getAppDeployer(); logger.debug("Getting status for apps in replacing release {}-v{}", replacingRelease.getName(), replacingRelease.getVersion()); for (Map.Entry<String, String> appNameAndDeploymentId : appNamesAndDeploymentIds.entrySet()) { AppStatus status = appDeployer.status(appNameAndDeploymentId.getValue()); if (status.getState() == DeploymentState.deployed) { return true; } } return false; } }
private String determinePlatformName(final String platformName) { Resources<Deployer> deployerResources = skipperClient.listDeployers(); Collection<Deployer> deployers = deployerResources.getContent(); if (StringUtils.hasText(platformName)) { List<Deployer> filteredDeployers = deployers.stream() .filter(d -> d.getName().equals(platformName)) .collect(Collectors.toList()); if (filteredDeployers.size() == 0) { throw new IllegalArgumentException("No platform named '" + platformName + "'"); } else { return platformName; } } else { if (deployers.size() == 0) { throw new IllegalArgumentException("No platforms configured"); } else { String platformNameToUse = deployers.stream().findFirst().get().getName(); logger.info("Using platform '" + platformNameToUse + "'"); return platformNameToUse; } } }
@EventListener @Transactional public void initialize(ApplicationReadyEvent event) { if (singleDeployerExists()) { for (Platform platform : this.platforms) { if (platform.getDeployers().size() == 1) { List<Deployer> updatedDeployers = new ArrayList<>(); List<Deployer> deployers = platform.getDeployers(); Deployer existingDeployer = deployers.get(0); if (!"default".equalsIgnoreCase(existingDeployer.getName())) { Deployer defaultDeployer = new Deployer("default", existingDeployer.getType(), existingDeployer.getAppDeployer()); defaultDeployer.setDescription(existingDeployer.getDescription()); updatedDeployers.add(defaultDeployer); } updatedDeployers.addAll(deployers); platform.setDeployers(updatedDeployers); } } } this.platforms.forEach(platform -> { platform.getDeployers().forEach(deployer -> { this.deployerRepository.save(deployer); logger.info(String.format( "Added '%s' platform account '%s' into deployer repository.", platform.getName(), deployer.getName())); }); }); }
protected Deployer createAndSaveKubernetesAppDeployers(String account, KubernetesDeployerProperties kubernetesProperties) { KubernetesClient kubernetesClient = KubernetesClientFactory.getKubernetesClient(kubernetesProperties); ContainerFactory containerFactory = new DefaultContainerFactory( kubernetesProperties); KubernetesAppDeployer kubernetesAppDeployer = new KubernetesAppDeployer( kubernetesProperties, kubernetesClient, containerFactory); Deployer deployer = new Deployer(account, "kubernetes", kubernetesAppDeployer); deployer.setDescription( String.format("master url = [%s], namespace = [%s], api version = [%s]", kubernetesClient.getMasterUrl(), kubernetesClient.getNamespace(), kubernetesClient.getApiVersion())); return deployer; } }
public Release delete(Release release, AppDeployerData existingAppDeployerData, List<String> applicationNamesToDelete) { AppDeployer appDeployer = this.deployerRepository.findByNameRequired(release.getPlatformName()) .getAppDeployer(); Map<String, String> appNamesAndDeploymentIds = existingAppDeployerData.getDeploymentDataAsMap(); for (Map.Entry<String, String> appNameAndDeploymentId : appNamesAndDeploymentIds.entrySet()) { if (applicationNamesToDelete.contains(appNameAndDeploymentId.getKey())) { AppStatus appStatus = appDeployer.status(appNameAndDeploymentId.getValue()); if (appStatus.getState().equals(DeploymentState.deployed)) { appDeployer.undeploy(appNameAndDeploymentId.getValue()); } else { logger.warn("For Release name {}, did not undeploy existing app {} as its status is not " + "'deployed'.", release.getName(), appNameAndDeploymentId.getKey()); } } } Status deletedStatus = new Status(); deletedStatus.setStatusCode(StatusCode.DELETED); release.getInfo().setStatus(deletedStatus); release.getInfo().setDescription("Delete complete"); this.releaseRepository.save(release); return release; } }
protected Deployer createAndSaveKubernetesAppDeployers(String account, KubernetesDeployerProperties kubernetesProperties) { KubernetesClient kubernetesClient = KubernetesClientFactory.getKubernetesClient(kubernetesProperties); ContainerFactory containerFactory = new DefaultContainerFactory( kubernetesProperties); KubernetesAppDeployer kubernetesAppDeployer = new KubernetesAppDeployer( kubernetesProperties, kubernetesClient, containerFactory); Deployer deployer = new Deployer(account, "kubernetes", kubernetesAppDeployer); deployer.setDescription( String.format("master url = [%s], namespace = [%s], api version = [%s]", kubernetesClient.getMasterUrl(), kubernetesClient.getNamespace(), kubernetesClient.getApiVersion())); return deployer; } }
public Release delete(Release release, AppDeployerData existingAppDeployerData, List<String> applicationNamesToDelete) { AppDeployer appDeployer = this.deployerRepository.findByNameRequired(release.getPlatformName()) .getAppDeployer(); Map<String, String> appNamesAndDeploymentIds = existingAppDeployerData.getDeploymentDataAsMap(); for (Map.Entry<String, String> appNameAndDeploymentId : appNamesAndDeploymentIds.entrySet()) { if (applicationNamesToDelete.contains(appNameAndDeploymentId.getKey())) { AppStatus appStatus = appDeployer.status(appNameAndDeploymentId.getValue()); if (appStatus.getState().equals(DeploymentState.deployed)) { appDeployer.undeploy(appNameAndDeploymentId.getValue()); } else { logger.warn("For Release name {}, did not undeploy existing app {} as its status is not " + "'deployed'.", release.getName(), appNameAndDeploymentId.getKey()); } } } Status deletedStatus = new Status(); deletedStatus.setStatusCode(StatusCode.DELETED); release.getInfo().setStatus(deletedStatus); release.getInfo().setDescription("Delete complete"); this.releaseRepository.save(release); return release; } }
appNameGenerator, deploymentProperties, cloudFoundryOperations, runtimeEnvironmentInfo); Deployer deployer = new Deployer(account, "cloudfoundry", cfAppDeployer); deployer.setDescription(String.format("org = [%s], space = [%s], url = [%s]", connectionProperties.getOrg(), connectionProperties.getSpace(), connectionProperties.getUrl()));
public Release delete(Release release) { AppDeployer appDeployer = this.deployerRepository.findByNameRequired(release.getPlatformName()) .getAppDeployer(); AppDeployerData appDeployerData = this.appDeployerDataRepository .findByReleaseNameAndReleaseVersionRequired(release.getName(), release.getVersion()); List<String> deploymentIds = appDeployerData.getDeploymentIds(); if (!deploymentIds.isEmpty()) { for (String deploymentId : deploymentIds) { try { appDeployer.undeploy(deploymentId); } catch (Exception e) { this.logger.error(String.format("Exception undeploying the application with the deploymentId %s. " + "Exception message: %s", deploymentId, e.getMessage())); } } Status deletedStatus = new Status(); deletedStatus.setStatusCode(StatusCode.DELETED); release.getInfo().setStatus(deletedStatus); release.getInfo().setDescription("Delete complete"); this.releaseRepository.save(release); } return release; }
appNameGenerator, deploymentProperties, cloudFoundryOperations, runtimeEnvironmentInfo); Deployer deployer = new Deployer(account, "cloudfoundry", cfAppDeployer); deployer.setDescription(String.format("org = [%s], space = [%s], url = [%s]", connectionProperties.getOrg(), connectionProperties.getSpace(), connectionProperties.getUrl()));
public Release delete(Release release) { AppDeployer appDeployer = this.deployerRepository.findByNameRequired(release.getPlatformName()) .getAppDeployer(); AppDeployerData appDeployerData = this.appDeployerDataRepository .findByReleaseNameAndReleaseVersionRequired(release.getName(), release.getVersion()); List<String> deploymentIds = appDeployerData.getDeploymentIds(); if (!deploymentIds.isEmpty()) { for (String deploymentId : deploymentIds) { try { appDeployer.undeploy(deploymentId); } catch (Exception e) { this.logger.error(String.format("Exception undeploying the application with the deploymentId %s. " + "Exception message: %s", deploymentId, e.getMessage())); } } Status deletedStatus = new Status(); deletedStatus.setStatusCode(StatusCode.DELETED); release.getInfo().setStatus(deletedStatus); release.getInfo().setDescription("Delete complete"); this.releaseRepository.save(release); } return release; }