throw new SkipperException("Could not process files in path " + packageDirectory.getPath() + ". " + e.getMessage(), e); Package pkg = new Package(); List<FileHolder> fileHolders = new ArrayList<>(); pkg.setMetadata(loadPackageMetadata(file)); continue; pkg.setConfigValues(loadConfigValues(file)); continue; pkg.setTemplates(loadTemplates(file)); continue; dependencies.add(read(dependentPackageDirectory)); pkg.setDependencies(dependencies); pkg.setFileHolders(fileHolders);
private void writePackage(Package pkg, File directory) { String packageMetadata = generatePackageMetadata(pkg.getMetadata()); writeText(new File(directory, "package.yml"), packageMetadata); if (pkg.getConfigValues() != null && StringUtils.hasText(pkg.getConfigValues().getRaw())) { writeText(new File(directory, "values.yml"), pkg.getConfigValues().getRaw()); } if (!pkg.getTemplates().isEmpty()) { File templateDir = new File(directory, "templates/"); templateDir.mkdirs(); File templateFile = new File(templateDir, pkg.getMetadata().getName() + ".yml"); writeText(templateFile, getDefaultTemplate()); } }
private static String applyManifestTemplate(Package packageToDeploy, Map<String, ?> model) { // Aggregate all valid manifests into one big doc. StringBuilder sb = new StringBuilder(); // Top level templates. List<Template> templates = packageToDeploy.getTemplates(); if (templates != null) { for (Template template : templates) { String templateAsString = new String(template.getData()); com.samskivert.mustache.Template mustacheTemplate = Mustache.compiler().compile(templateAsString); sb.append("\n---\n# Source: " + template.getName() + "\n"); sb.append(mustacheTemplate.execute(model)); } } for (Package pkg : packageToDeploy.getDependencies()) { String packageName = pkg.getMetadata().getName(); Map<String, Object> modelForDependency; if (model.containsKey(packageName)) { modelForDependency = (Map<String, Object>) model.get(pkg.getMetadata().getName()); } else { modelForDependency = new TreeMap<>(); } sb.append(applyManifestTemplate(pkg, modelForDependency)); } return sb.toString(); }
if (pkg.getConfigValues() == null || (pkg.getConfigValues() != null && !StringUtils.hasText(pkg.getConfigValues().getRaw()))) { return overrideMap; Object object = yaml.load(pkg.getConfigValues().getRaw()); if (object == null) { for (Package dependency : pkg.getDependencies()) { if (packageValueMap.containsKey(dependency.getMetadata().getName())) { packageValueMap.remove(dependency.getMetadata().getName());
private Package createDependentPackage(String packageVersion, AppDeploymentRequest appDeploymentRequest) { Package pkg = new Package(); String packageName = appDeploymentRequest.getDefinition().getName(); packageMetadata.setMaintainer(SkipperStream.SKIPPER_DEFAULT_MAINTAINER); pkg.setMetadata(packageMetadata); configValues.setRaw(yaml.dump(configValueMap)); pkg.setConfigValues(configValues); pkg.setTemplates(createGenericTemplate()); return pkg;
private Package createPackage(String packageName, String packageVersion, StreamDeploymentRequest streamDeploymentRequest) { Package pkg = new Package(); PackageMetadata packageMetadata = new PackageMetadata(); packageMetadata.setApiVersion(SkipperStream.SKIPPER_DEFAULT_API_VERSION); packageMetadata.setKind(SkipperStream.SKIPPER_DEFAULT_KIND); packageMetadata.setName(packageName); packageMetadata.setVersion(packageVersion); packageMetadata.setMaintainer(SkipperStream.SKIPPER_DEFAULT_MAINTAINER); packageMetadata.setDescription(streamDeploymentRequest.getDslText()); pkg.setMetadata(packageMetadata); pkg.setDependencies(createDependentPackages(packageVersion, streamDeploymentRequest)); return pkg; }
private static Map<String, Object> mergePackagesIncludingDependencies(Package pkg, Map<String, Object> overrideMap) { List<Package> dependencies = pkg.getDependencies(); if (dependencies.size() == 0) { return overrideMap; String dependencyName = dependency.getMetadata().getName(); Map<String, Object> currentPackageValueMapForDependency = (Map<String, Object>) currentPackageValueMap .getOrDefault(dependencyName, new TreeMap<>()); mergedValues.put(dependency.getMetadata().getName(), mergeOverrideMap(dependency, currentPackageValueMapForDependency));
private Package deserializePackageFromDatabase(PackageMetadata packageMetadata) { // package file was uploaded to a local DB hosted repository Path tmpDirPath = null; try { tmpDirPath = TempFileUtils.createTempDirectory("skipper"); File targetPath = new File(tmpDirPath + File.separator + packageMetadata.getName()); targetPath.mkdirs(); File targetFile = PackageFileUtils.calculatePackageZipFile(packageMetadata, targetPath); try { StreamUtils.copy(packageMetadata.getPackageFile().getPackageBytes(), new FileOutputStream(targetFile)); } catch (IOException e) { throw new SkipperException( "Could not copy package file for " + packageMetadata.getName() + "-" + packageMetadata.getVersion() + " from database to target file " + targetFile, e); } ZipUtil.unpack(targetFile, targetPath); Package pkgToReturn = this.packageReader.read(new File(targetPath, packageMetadata.getName() + "-" + packageMetadata.getVersion())); pkgToReturn.setMetadata(packageMetadata); return pkgToReturn; } finally { if (tmpDirPath != null && !FileSystemUtils.deleteRecursively(tmpDirPath.toFile())) { logger.warn("Temporary directory can not be deleted: " + tmpDirPath); } } }
public void setPkg(Package pkg) { this.pkg = pkg; this.packageMetadataId = pkg.getMetadata().getId(); this.repositoryId = pkg.getMetadata().getRepositoryId(); ObjectMapper mapper = new ObjectMapper(); try { // Note that @JsonIgnore is on the package file byte array field. this.pkgJsonString = mapper.writeValueAsString(pkg); } catch (JsonProcessingException e) { throw new SkipperException("Error processing pkg json string", e); } }
List<? extends SpringCloudDeployerApplicationManifest> replacingApplicationSpecList = this.applicationManifestReader .read(replacingRelease.getManifest().getData()); if (existingRelease.getPkg().getDependencies().size() == replacingRelease.getPkg().getDependencies() .size()) { if (existingRelease.getPkg().getDependencies().size() == 0) { logger.info("Existing Package and Upgrade Package both have no dependent packages."); return analyzeTopLevelPackagesOnly(existingApplicationSpecList, if (existingRelease.getPkg().getTemplates().size() == 0 && replacingRelease.getPkg().getTemplates().size() == 0) { logger.info("Existing Package and Upgrade package both have no top level templates"); return analyzeDependentPackagesOnly(existingApplicationSpecList,
public List<String> getAllApplicationNames(Release release) { List<String> appNames = new ArrayList<>(); List<? extends SpringCloudDeployerApplicationManifest> applicationSpecList = this.applicationManifestReader .read(release.getManifest().getData()); if (release.getPkg().getDependencies().size() == 0) { appNames.add(applicationSpecList.get(0).getApplicationName()); } else { for (SpringCloudDeployerApplicationManifest applicationManifestSpec : applicationSpecList) { appNames.add(applicationManifestSpec.getApplicationName()); } } return appNames; }
private static Map<String, Object> convertConfigValuesToMap(Package pkg) { Yaml yaml = new Yaml(); Map<String, Object> currentPackageValueMap = new TreeMap<>(); if (pkg.getConfigValues() != null && StringUtils.hasText(pkg.getConfigValues().getRaw())) { currentPackageValueMap = (Map<String, Object>) yaml.load(pkg.getConfigValues().getRaw()); } if (currentPackageValueMap == null) { currentPackageValueMap = new TreeMap<>(); } return currentPackageValueMap; }
private Package createDependentPackage(String packageVersion, AppDeploymentRequest appDeploymentRequest) { Package pkg = new Package(); String packageName = appDeploymentRequest.getDefinition().getName(); packageMetadata.setMaintainer(SkipperStream.SKIPPER_DEFAULT_MAINTAINER); pkg.setMetadata(packageMetadata); configValues.setRaw(yaml.dump(configValueMap)); pkg.setConfigValues(configValues); pkg.setTemplates(createGenericTemplate()); return pkg;
private Package createPackage(String packageName, String packageVersion, StreamDeploymentRequest streamDeploymentRequest) { Package pkg = new Package(); PackageMetadata packageMetadata = new PackageMetadata(); packageMetadata.setApiVersion(SkipperStream.SKIPPER_DEFAULT_API_VERSION); packageMetadata.setKind(SkipperStream.SKIPPER_DEFAULT_KIND); packageMetadata.setName(packageName); packageMetadata.setVersion(packageVersion); packageMetadata.setMaintainer(SkipperStream.SKIPPER_DEFAULT_MAINTAINER); packageMetadata.setDescription(streamDeploymentRequest.getDslText()); pkg.setMetadata(packageMetadata); pkg.setDependencies(createDependentPackages(packageVersion, streamDeploymentRequest)); return pkg; }
if (pkg.getConfigValues() == null || (pkg.getConfigValues() != null && !StringUtils.hasText(pkg.getConfigValues().getRaw()))) { return overrideMap; Object object = yaml.load(pkg.getConfigValues().getRaw()); if (object == null) { for (Package dependency : pkg.getDependencies()) { if (packageValueMap.containsKey(dependency.getMetadata().getName())) { packageValueMap.remove(dependency.getMetadata().getName());
@Override public File write(Package pkg, File targetDirectory) { PackageMetadata packageMetadata = pkg.getMetadata(); File tmpDir = TempFileUtils.createTempDirectory("skipper" + packageMetadata.getName()).toFile(); File rootPackageDir = new File(tmpDir, String.format("%s-%s", packageMetadata.getName(), packageMetadata.getVersion())); rootPackageDir.mkdir(); writePackage(pkg, rootPackageDir); if (!pkg.getDependencies().isEmpty()) { File packagesDir = new File(rootPackageDir, "packages"); packagesDir.mkdir(); for (Package dependencyPkg : pkg.getDependencies()) { File packageDir = new File(packagesDir, dependencyPkg.getMetadata().getName()); packageDir.mkdir(); writePackage(dependencyPkg, packageDir); } } File targetZipFile = PackageFileUtils.calculatePackageZipFile(pkg.getMetadata(), targetDirectory); ZipUtil.pack(rootPackageDir, targetZipFile, true); FileSystemUtils.deleteRecursively(tmpDir); return targetZipFile; }
private Package deserializePackageFromDatabase(PackageMetadata packageMetadata) { // package file was uploaded to a local DB hosted repository Path tmpDirPath = null; try { tmpDirPath = TempFileUtils.createTempDirectory("skipper"); File targetPath = new File(tmpDirPath + File.separator + packageMetadata.getName()); targetPath.mkdirs(); File targetFile = PackageFileUtils.calculatePackageZipFile(packageMetadata, targetPath); try { StreamUtils.copy(packageMetadata.getPackageFile().getPackageBytes(), new FileOutputStream(targetFile)); } catch (IOException e) { throw new SkipperException( "Could not copy package file for " + packageMetadata.getName() + "-" + packageMetadata.getVersion() + " from database to target file " + targetFile, e); } ZipUtil.unpack(targetFile, targetPath); Package pkgToReturn = this.packageReader.read(new File(targetPath, packageMetadata.getName() + "-" + packageMetadata.getVersion())); pkgToReturn.setMetadata(packageMetadata); return pkgToReturn; } finally { if (tmpDirPath != null && !FileSystemUtils.deleteRecursively(tmpDirPath.toFile())) { logger.warn("Temporary directory can not be deleted: " + tmpDirPath); } } }
public void setPkg(Package pkg) { this.pkg = pkg; this.packageMetadataId = pkg.getMetadata().getId(); this.repositoryId = pkg.getMetadata().getRepositoryId(); ObjectMapper mapper = new ObjectMapper(); try { // Note that @JsonIgnore is on the package file byte array field. this.pkgJsonString = mapper.writeValueAsString(pkg); } catch (JsonProcessingException e) { throw new SkipperException("Error processing pkg json string", e); } }
List<? extends SpringCloudDeployerApplicationManifest> replacingApplicationSpecList = this.applicationManifestReader .read(replacingRelease.getManifest().getData()); if (existingRelease.getPkg().getDependencies().size() == replacingRelease.getPkg().getDependencies() .size()) { if (existingRelease.getPkg().getDependencies().size() == 0) { logger.info("Existing Package and Upgrade Package both have no dependent packages."); return analyzeTopLevelPackagesOnly(existingApplicationSpecList, if (existingRelease.getPkg().getTemplates().size() == 0 && replacingRelease.getPkg().getTemplates().size() == 0) { logger.info("Existing Package and Upgrade package both have no top level templates"); return analyzeDependentPackagesOnly(existingApplicationSpecList,
public List<String> getAllApplicationNames(Release release) { List<String> appNames = new ArrayList<>(); List<? extends SpringCloudDeployerApplicationManifest> applicationSpecList = this.applicationManifestReader .read(release.getManifest().getData()); if (release.getPkg().getDependencies().size() == 0) { appNames.add(applicationSpecList.get(0).getApplicationName()); } else { for (SpringCloudDeployerApplicationManifest applicationManifestSpec : applicationSpecList) { appNames.add(applicationManifestSpec.getApplicationName()); } } return appNames; }