private void carryOverAppDeploymentIds(Release existingRelease, Map<String, String> appNameDeploymentIdMap) { AppDeployerData existingAppDeployerData = this.appDeployerDataRepository .findByReleaseNameAndReleaseVersionRequired( existingRelease.getName(), existingRelease.getVersion()); Map<String, String> existingAppNamesAndDeploymentIds = existingAppDeployerData.getDeploymentDataAsMap(); for (Map.Entry<String, String> existingEntry : existingAppNamesAndDeploymentIds.entrySet()) { String existingName = existingEntry.getKey(); if (!appNameDeploymentIdMap.containsKey(existingName)) { appNameDeploymentIdMap.put(existingName, existingEntry.getValue()); } } }
private void carryOverAppDeploymentIds(Release existingRelease, Map<String, String> appNameDeploymentIdMap) { AppDeployerData existingAppDeployerData = this.appDeployerDataRepository .findByReleaseNameAndReleaseVersionRequired( existingRelease.getName(), existingRelease.getVersion()); Map<String, String> existingAppNamesAndDeploymentIds = existingAppDeployerData.getDeploymentDataAsMap(); for (Map.Entry<String, String> existingEntry : existingAppNamesAndDeploymentIds.entrySet()) { String existingName = existingEntry.getKey(); if (!appNameDeploymentIdMap.containsKey(existingName)) { appNameDeploymentIdMap.put(existingName, existingEntry.getValue()); } } }
/** * @return a textual summary of the ReleaseDifference */ public String getReleaseDifferenceSummary() { ReleaseDifferenceSummaryGenerator releaseDifferenceSummaryGenerator = new ReleaseDifferenceSummaryGenerator(); return releaseDifferenceSummaryGenerator.generateSummary(existingRelease.getName(), existingRelease.getVersion(), replacingRelease.getName(), replacingRelease.getVersion(), this.releaseDifference); }
/** * @return a textual summary of the ReleaseDifference */ public String getReleaseDifferenceSummary() { ReleaseDifferenceSummaryGenerator releaseDifferenceSummaryGenerator = new ReleaseDifferenceSummaryGenerator(); return releaseDifferenceSummaryGenerator.generateSummary(existingRelease.getName(), existingRelease.getVersion(), replacingRelease.getName(), replacingRelease.getVersion(), this.releaseDifference); }
@Override public Release findByNameAndVersion(String releaseName, int version) { Iterable<Release> releases = this.releaseRepository.findAll(); Release matchingRelease = null; for (Release release : releases) { if (release.getName().equals(releaseName) && release.getVersion() == version) { matchingRelease = release; break; } } if (matchingRelease == null) { throw new ReleaseNotFoundException(releaseName, version); } return matchingRelease; }
@Override public Release findByNameAndVersion(String releaseName, int version) { Iterable<Release> releases = this.releaseRepository.findAll(); Release matchingRelease = null; for (Release release : releases) { if (release.getName().equals(releaseName) && release.getVersion() == version) { matchingRelease = release; break; } } if (matchingRelease == null) { throw new ReleaseNotFoundException(releaseName, version); } return matchingRelease; }
public AppStatus status(Release release) { logger.info("Checking application status for the release: " + release.getName()); ApplicationManifest applicationManifest = CloudFoundryApplicationManifestUtils.updateApplicationName(release); String applicationName = applicationManifest.getName(); AppStatus appStatus = null; try { appStatus = getStatus(applicationName, release.getPlatformName()) .doOnSuccess(v -> logger.info("Successfully computed status [{}] for {}", v, applicationName)) .doOnError(e -> logger.error( String.format("Failed to compute status for %s", applicationName))) .block(); } catch (Exception timeoutDueToBlock) { logger.error("Caught exception while querying for status of {}", applicationName, timeoutDueToBlock); appStatus = createErrorAppStatus(applicationName); } return appStatus; }
private void updateReplacingReleaseState(Release replacingRelease, boolean rollback) { // Update Status in DB Status status = new Status(); status.setStatusCode(StatusCode.DEPLOYED); replacingRelease.getInfo().setStatus(status); replacingRelease.getInfo().setDescription(rollback ? "Rollback complete" : "Upgrade complete"); this.releaseRepository.save(replacingRelease); logger.info("Release {}-v{} has been DEPLOYED", replacingRelease.getName(), replacingRelease.getVersion()); logger.info("Apps in release {}-v{} are healthy.", replacingRelease.getName(), replacingRelease.getVersion()); }
private void updateReplacingReleaseState(Release replacingRelease, boolean rollback) { // Update Status in DB Status status = new Status(); status.setStatusCode(StatusCode.DEPLOYED); replacingRelease.getInfo().setStatus(status); replacingRelease.getInfo().setDescription(rollback ? "Rollback complete" : "Upgrade complete"); this.releaseRepository.save(replacingRelease); logger.info("Release {}-v{} has been DEPLOYED", replacingRelease.getName(), replacingRelease.getVersion()); logger.info("Apps in release {}-v{} are healthy.", replacingRelease.getName(), replacingRelease.getVersion()); }
private void updateReplacingReleaseState(Release replacingRelease, boolean rollback) { // Update Status in DB Status status = new Status(); status.setStatusCode(StatusCode.DEPLOYED); replacingRelease.getInfo().setStatus(status); replacingRelease.getInfo().setDescription(rollback ? "Rollback complete" : "Upgrade complete"); this.releaseRepository.save(replacingRelease); logger.info("Release {}-v{} has been DEPLOYED", replacingRelease.getName(), replacingRelease.getVersion()); logger.info("Apps in release {}-v{} are healthy.", replacingRelease.getName(), replacingRelease.getVersion()); }
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; } }
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; } }
public static ApplicationManifest updateApplicationName(Release release) { String name = release.getName() + "-v" + release.getVersion(); ApplicationManifest cfApplicationManifest = ApplicationManifest.builder() .name(name) .build(); return cfApplicationManifest; }
private Map<String, String> deploy(Release replacingRelease, List<String> applicationNamesToUpgrade, AppDeployer appDeployer) { List<? extends SpringCloudDeployerApplicationManifest> applicationSpecList = this.applicationManifestReader .read(replacingRelease .getManifest().getData()); Map<String, String> appNameDeploymentIdMap = new HashMap<>(); for (SpringCloudDeployerApplicationManifest applicationManifest : applicationSpecList) { if (applicationNamesToUpgrade.contains(applicationManifest.getApplicationName())) { AppDeploymentRequest appDeploymentRequest = appDeploymentRequestFactory.createAppDeploymentRequest( applicationManifest, replacingRelease.getName(), String.valueOf(replacingRelease.getVersion())); // ============= // DEPLOY DEPLOY // ============= String deploymentId = appDeployer.deploy(appDeploymentRequest); appNameDeploymentIdMap.put(applicationManifest.getApplicationName(), deploymentId); } } return appNameDeploymentIdMap; } }
@ShellMethod(key = "release rollback", value = "Rollback the release to a previous or a specific release.") public String rollback( @ShellOption(help = "the name of the release to rollback") String releaseName, @ShellOption(help = "the specific release version to rollback to. " + "Not specifying the value rolls back to the previous release.", defaultValue = "0") int releaseVersion, @ShellOption(help = "the expression for rollback timeout", defaultValue = NULL) String timeoutExpression) { RollbackRequest rollbackRequest = new RollbackRequest(releaseName, releaseVersion); Duration duration = DurationUtils.convert(timeoutExpression); if (duration != null) { rollbackRequest.setTimeout(duration.toMillis()); } Release release = skipperClient.rollback(rollbackRequest); StringBuilder sb = new StringBuilder(); sb.append(release.getName() + " has been rolled back. Now at version v" + release.getVersion() + "."); return sb.toString(); }
private void saveAppDeployerData(Release release, Map<String, String> appNameDeploymentIdMap) { AppDeployerData appDeployerData = new AppDeployerData(); appDeployerData.setReleaseName(release.getName()); appDeployerData.setReleaseVersion(release.getVersion()); appDeployerData.setDeploymentDataUsingMap(appNameDeploymentIdMap); this.appDeployerDataRepository.save(appDeployerData); }
private void saveAppDeployerData(Release release, Map<String, String> appNameDeploymentIdMap) { AppDeployerData appDeployerData = new AppDeployerData(); appDeployerData.setReleaseName(release.getName()); appDeployerData.setReleaseVersion(release.getVersion()); appDeployerData.setDeploymentDataUsingMap(appNameDeploymentIdMap); this.appDeployerDataRepository.save(appDeployerData); }
private void saveAppDeployerData(Release release, Map<String, String> appNameDeploymentIdMap) { AppDeployerData appDeployerData = new AppDeployerData(); appDeployerData.setReleaseName(release.getName()); appDeployerData.setReleaseVersion(release.getVersion()); appDeployerData.setDeploymentDataUsingMap(appNameDeploymentIdMap); this.appDeployerDataRepository.save(appDeployerData); }
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; }
@ShellMethod(key = "package install", value = "Install a package.") public String install( @ShellOption(help = "name of the package to install") String packageName, @ShellOption(help = "version of the package to install, if not specified latest version will be used", defaultValue = NULL) String packageVersion, @ShellOption(help = "specify values in a YAML file", defaultValue = NULL) File file, @ShellOption(help = "the comma separated set of properties to override during install", defaultValue = NULL) String properties, @ShellOption(help = "the release name to use") String releaseName, @ShellOption(help = "the platform name to use", defaultValue = "default") String platformName) throws IOException { // Commented out until https://github.com/spring-cloud/spring-cloud-skipper/issues/263 is // addressed // assertMutuallyExclusiveFileAndProperties(file, properties); Release release = skipperClient .install(getInstallRequest(packageName, packageVersion, file, properties, releaseName, platformName)); return "Released " + release.getName() + ". Now at version v" + release.getVersion() + "."; }