public static File calculatePackageZipFile(PackageMetadata packageMetadata, File targetPath) { return new File(targetPath, packageMetadata.getName() + "-" + packageMetadata.getVersion() + ".zip"); } }
public static File calculatePackageZipFile(PackageMetadata packageMetadata, File targetPath) { return new File(targetPath, packageMetadata.getName() + "-" + packageMetadata.getVersion() + ".zip"); } }
@Transactional public void delete(PackageMetadata packageMetadata) { Assert.notNull(packageMetadata, "Can't download PackageMetadata, it is a null value."); Assert.hasText(packageMetadata.getName(), "Package name can not be empty."); Assert.hasText(packageMetadata.getVersion(), "Package version can not be empty."); Assert.isTrue(packageMetadata.getRepositoryId() > 0, "Invalid Repository ID."); this.packageMetadataRepository.delete(packageMetadata); }
@Transactional public void delete(PackageMetadata packageMetadata) { Assert.notNull(packageMetadata, "Can't download PackageMetadata, it is a null value."); Assert.hasText(packageMetadata.getName(), "Package name can not be empty."); Assert.hasText(packageMetadata.getVersion(), "Package version can not be empty."); Assert.isTrue(packageMetadata.getRepositoryId() > 0, "Invalid Repository ID."); this.packageMetadataRepository.delete(packageMetadata); }
private boolean checkIfPackageIsFromLocalRepo(List<String> errorMessages, PackageMetadata packageMetadata) { Repository repository = this.repositoryRepository.findOne(packageMetadata.getRepositoryId()); if (repository != null) { if (!repository.isLocal()) { errorMessages.add(String.format("Can not delete package [%s], associated repository [%s] is remote.", packageMetadata.getName(), repository.getName())); return true; } } else { errorMessages.add(String.format("Can not delete package {}, repositoryId {} does not exist.", packageMetadata.getName(), packageMetadata.getRepositoryId())); } return false; }
private boolean checkIfPackageIsFromLocalRepo(List<String> errorMessages, PackageMetadata packageMetadata) { Repository repository = this.repositoryRepository.findById(packageMetadata.getRepositoryId()).orElse(null); if (repository != null) { if (!repository.isLocal()) { errorMessages.add(String.format("Can not delete package [%s], associated repository [%s] is remote.", packageMetadata.getName(), repository.getName())); return true; } } else { errorMessages.add(String.format("Can not delete package {}, repositoryId {} does not exist.", packageMetadata.getName(), packageMetadata.getRepositoryId())); } return false; }
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));
@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; }
@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 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(); }
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(); }
@ShellMethod(key = "package upload", value = "Upload a package.") public String upload(@ShellOption(help = "the package to be uploaded") String path, @ShellOption(help = "the local repository name to upload to", defaultValue = NULL) String repoName) { UploadRequest uploadRequest = new UploadRequest(); try { File file = ResourceUtils.getFile(path); String zipFileName = file.getName(); String fileName = zipFileName.substring(0, zipFileName.lastIndexOf("-")); String versionAndExtension = zipFileName.substring(fileName.length() + 1); String extension = versionAndExtension.substring(versionAndExtension.lastIndexOf(".") + 1); String version = versionAndExtension.replaceAll("." + extension, ""); uploadRequest.setName(fileName); uploadRequest.setVersion(version); uploadRequest.setExtension(extension); uploadRequest.setRepoName(StringUtils.hasText(repoName) ? repoName : "local"); uploadRequest.setPackageFileAsBytes(Files.readAllBytes(file.toPath())); } catch (FileNotFoundException e) { throw new IllegalArgumentException("File Not found: " + e.getMessage()); } catch (IOException e) { throw new IllegalArgumentException(e.getMessage()); } PackageMetadata packageMetadata = skipperClient.upload(uploadRequest); return "Package uploaded successfully:[" + packageMetadata.getName() + ":" + packageMetadata.getVersion() + "]"; }
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 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 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); } } }
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); } } }
private void loadAllPackageMetadata() { try { List<PackageMetadata> packageMetadataList = this.packageMetadataService.downloadPackageMetadata(); for (PackageMetadata packageMetadata : packageMetadataList) { if (this.packageMetadataRepository.findByRepositoryIdAndNameAndVersion( packageMetadata.getRepositoryId(), packageMetadata.getName(), packageMetadata.getVersion()) == null) { this.packageMetadataRepository.save(packageMetadata); } } } catch (SkipperException e) { logger.warn("Could not load package metadata from remote repositories", e); } }
private void loadAllPackageMetadata() { try { List<PackageMetadata> packageMetadataList = this.packageMetadataService.downloadPackageMetadata(); for (PackageMetadata packageMetadata : packageMetadataList) { if (this.packageMetadataRepository.findByRepositoryIdAndNameAndVersion( packageMetadata.getRepositoryId(), packageMetadata.getName(), packageMetadata.getVersion()) == null) { this.packageMetadataRepository.save(packageMetadata); } } } catch (SkipperException e) { logger.warn("Could not load package metadata from remote repositories", e); } }
String packageName = releaseToDelete.getPkg().getMetadata().getName(); if (this.packageMetadataService.filterReleasesFromLocalRepos( Arrays.asList(releaseToDelete), packageName).isEmpty()) {
String packageName = releaseToDelete.getPkg().getMetadata().getName(); if (this.packageMetadataService.filterReleasesFromLocalRepos( Arrays.asList(releaseToDelete), packageName).isEmpty()) {