ProvisioningRuntime(final ProvisioningRuntimeBuilder builder, final MessageWriter messageWriter) throws ProvisioningException { this.startTime = builder.startTime; this.config = builder.config; this.layout = builder.layout.transform(new FeaturePackLayoutTransformer<FeaturePackRuntime, FeaturePackRuntimeBuilder>() { @Override public FeaturePackRuntime transform(FeaturePackRuntimeBuilder other) throws ProvisioningException { return other.build(builder); } }); this.fsDiff = builder.fsDiff; try { this.configs = builder.getResolvedConfigs(); this.stagedDir = layout.newStagedDir(); } catch (ProvisioningException | RuntimeException | Error e) { layout.close(); throw e; } this.messageWriter = messageWriter; }
public static ProvisioningDiffProvider newInstance(ProvisioningLayout<FeaturePackRuntimeBuilder> layout, ProvisionedState provisionedState, FsDiff diff, MessageWriter log) { ProvisioningDiffProvider diffProvider = new ProvisioningDiffProvider(); diffProvider.layout = layout; diffProvider.provisionedConfig = layout.getConfig(); diffProvider.provisionedState = provisionedState; diffProvider.fsDiff = diff; diffProvider.log = log; return diffProvider; }
@Override public FeaturePackRuntime getFeaturePack(ProducerSpec producer) throws ProvisioningException { return layout.getFeaturePack(producer); }
public void uninstall(FPID fpid, Map<String, String> pluginOptions) throws ProvisioningException { rebuild(uninstall(fpid, ProvisioningConfig.builder(config)).build(), true); initPluginOptions(pluginOptions, true); }
public static ResolvedPlugins resolvePlugins(ProvisioningLayout<FeaturePackLayout> layout) throws ProvisioningException { final Set<ProvisioningOption> installOptions = new HashSet<>(ProvisioningOption.getStandardList()); final Set<ProvisioningOption> diffOptions = new HashSet<>(ProvisioningOption.getStandardList()); if (layout.hasPlugins()) { FeaturePackPluginVisitor<InstallPlugin> visitor = new FeaturePackPluginVisitor<InstallPlugin>() { @Override public void visitPlugin(InstallPlugin plugin) throws ProvisioningException { installOptions.addAll(plugin.getOptions().values()); } }; layout.visitPlugins(visitor, InstallPlugin.class); FeaturePackPluginVisitor<StateDiffPlugin> diffVisitor = new FeaturePackPluginVisitor<StateDiffPlugin>() { @Override public void visitPlugin(StateDiffPlugin plugin) throws ProvisioningException { diffOptions.addAll(plugin.getOptions().values()); } }; layout.visitPlugins(diffVisitor, StateDiffPlugin.class); } return new ResolvedPlugins(installOptions, diffOptions); }
install(fpConfig, configBuilder); uninstall(producer.getLocation().getFPID(), configBuilder); rebuild(configBuilder.build(), true); initPluginOptions(pluginOptions, plan.hasUninstall());
private static String buildDependencies(PmCommandInvocation invoc, ProvisioningLayout<FeaturePackLayout> layout) throws ProvisioningException { Map<FPID, FeaturePackConfig> configs = new HashMap<>(); List<FeaturePackLocation> dependencies = new ArrayList<>(); for (FeaturePackLayout fpLayout : layout.getOrderedFeaturePacks()) { boolean isProduct = true; for (FeaturePackLayout fpLayout2 : layout.getOrderedFeaturePacks()) { if (fpLayout2.getSpec().hasTransitiveDep(fpLayout.getFPID().getProducer()) || fpLayout2.getSpec().getFeaturePackDep(fpLayout.getFPID().getProducer()) != null) { isProduct = false; break; } } if (!isProduct) { FeaturePackLocation loc = invoc.getPmSession().getExposedLocation(null, fpLayout.getFPID().getLocation()); dependencies.add(loc); FeaturePackConfig transitiveConfig = layout.getConfig().getTransitiveDep(fpLayout.getFPID().getProducer()); configs.put(loc.getFPID(), transitiveConfig); } } return buildDependencies(dependencies, configs); }
public static String buildPatches(PmCommandInvocation invoc, ProvisioningLayout<FeaturePackLayout> layout) throws ProvisioningException { if (!layout.hasPatches()) { return null; } Table table = new Table(Headers.PATCH, Headers.PATCH_FOR, Headers.UPDATE_CHANNEL); for (FeaturePackLayout fpLayout : layout.getOrderedFeaturePacks()) { List<FeaturePackLayout> patches = layout.getPatches(fpLayout.getFPID()); for (FeaturePackLayout patch : patches) { FeaturePackLocation loc = invoc.getPmSession().getExposedLocation(null, patch.getFPID().getLocation()); FPID patchFor = patch.getSpec().getPatchFor(); table.addLine(patch.getFPID().getBuild(), patchFor.getProducer().getName() + FeaturePackLocation.BUILD_START + patchFor.getBuild(), formatChannel(loc)); } } if (!table.isEmpty()) { table.sort(Table.SortType.ASCENDANT); return table.build(); } return null; }
public void provision() throws ProvisioningException { layout.visitPlugins(new FeaturePackPluginVisitor<InstallPlugin>() { @Override public void visitPlugin(InstallPlugin plugin) throws ProvisioningException { for(FeaturePackRuntime fp : layout.getOrderedFeaturePacks()) { messageWriter.verbose("Installing %s", fp.getFPID()); for(PackageRuntime pkg : fp.getPackages()) { layout.visitPlugins(new FeaturePackPluginVisitor<InstallPlugin>() { @Override public void visitPlugin(InstallPlugin plugin) throws ProvisioningException {
final ProvisioningConfig provisionedConfig = layout.getConfig(); final ConfigModel definedConfig = provisionedConfig.getDefinedConfig(new ConfigId(model, name)); final ConfigModel.Builder configBuilder = ConfigModel.builder(model, name); final ProvisionedFeature original = feature[0]; final ProvisionedFeature actual = feature[1]; final FeatureSpec fSpec = layout.getFeaturePack(actual.getSpecId().getProducer()).getFeatureSpec(actual.getSpecId().getName()).getSpec(); final FeatureConfig config = new FeatureConfig(fSpec.getName()); config.setOrigin(provisionedConfig.originOf(actual.getSpecId().getProducer()));
for (FeaturePackLayout fpLayout : layout.getOrderedFeaturePacks()) { boolean isProduct = true; for (FeaturePackLayout fpLayout2 : layout.getOrderedFeaturePacks()) { if (fpLayout2.getSpec().hasTransitiveDep(fpLayout.getFPID().getProducer()) || fpLayout2.getSpec().getFeaturePackDep(fpLayout.getFPID().getProducer()) != null) { layout.close();
public ProvisioningRuntimeBuilder initLayout(ProvisioningLayout<?> configLayout) throws ProvisioningException { layout = configLayout.transform(FP_RT_FACTORY); return this; }
public ProvisioningRuntime build() throws ProvisioningException { try { return doBuild(); } catch(ProvisioningException | RuntimeException | Error e) { throw e; } finally { layout.close(); } }
/** * Removes a feature-pack from the configuration and re-builds the layout * * @param fpid the feature-pack to remove from the configuration * @throws ProvisioningException in case of a failure */ public void uninstall(FPID fpid) throws ProvisioningException { uninstall(fpid, Collections.emptyMap()); }
protected Set<ProvisioningOption> getPluginOptions(ProvisioningRuntime runtime) throws ProvisioningException { Set<ProvisioningOption> pluginOptions = new HashSet<>(ProvisioningOption.getStandardList()); FeaturePackPluginVisitor<InstallPlugin> visitor = new FeaturePackPluginVisitor<InstallPlugin>() { @Override public void visitPlugin(InstallPlugin plugin) throws ProvisioningException { pluginOptions.addAll(plugin.getOptions().values()); } }; runtime.getLayout().visitPlugins(visitor, InstallPlugin.class); return pluginOptions; }
@Override public Collection<FeaturePackRuntime> getFeaturePacks() { return layout.getOrderedFeaturePacks(); }
public static List<FeaturePackLocation> getInstallationLocations(Path installation, PmSession session, boolean transitive, boolean patches) { List<FeaturePackLocation> items = new ArrayList<>(); try { PathsUtils.assertInstallationDir(installation); ProvisioningManager mgr = session. newProvisioningManager(installation, false); try (ProvisioningLayout<FeaturePackLayout> layout = mgr.getLayoutFactory().newConfigLayout(mgr.getProvisioningConfig())) { for (FeaturePackLayout fp : layout.getOrderedFeaturePacks()) { if (fp.isDirectDep() || (fp.isTransitiveDep() && transitive)) { items.add(fp.getFPID().getLocation()); } if (patches) { List<FeaturePackLayout> appliedPatches = layout.getPatches(fp.getFPID()); for (FeaturePackLayout patch : appliedPatches) { items.add(patch.getFPID().getLocation()); } } } } } catch (Exception ex) { CliLogging.completionException(ex); } return items; }
private ProvisioningRuntime doBuild() throws ProvisioningException { config = layout.getConfig(); fpConfigStack = new FpStack(config); final String optionalPackages = layout.getOptionValue(ProvisioningOption.OPTIONAL_PACKAGES); switch(optionalPackages) { case Constants.ALL:
private ProvisionedConfig getDefaultProvisionedConfig(ProvisioningLayout<?> layout, final ConfigModel definedConfig) throws ProvisioningException { final ProvisioningConfig originalConfig = layout.getConfig(); final ProvisioningConfig.Builder baseBuilder = ProvisioningConfig.builder().initUniverses(originalConfig) .addOptions(originalConfig.getOptions()); if (originalConfig.hasTransitiveDeps()) { for (FeaturePackConfig fp : originalConfig.getTransitiveDeps()) { baseBuilder.addFeaturePackDep(originalConfig.originOf(fp.getLocation().getProducer()), fp); } } for (FeaturePackConfig fp : originalConfig.getFeaturePackDeps()) { baseBuilder.addFeaturePackDep(originalConfig.originOf(fp.getLocation().getProducer()), fp); } baseBuilder.setInheritConfigs(false); baseBuilder.includeDefaultConfig(model, name); baseBuilder.addConfig(getBaseConfig(definedConfig)); ProvisioningConfig baseC = baseBuilder.build(); try(ProvisioningRuntime baseRt = ProvisioningRuntimeBuilder.newInstance(log).initLayout(layout.getFactory(), baseC).build()) { return getRequiredProvisionedConfig(baseRt.getConfigs(), model, name); } } }
transitiveDeps.add(fpl.getProducer()); if(transitiveConfig.hasPatches()) { addPatches(transitiveConfig); FeaturePackLocation fpl = fpConfig.getLocation(); if(fpConfig.hasPatches()) { addPatches(fpConfig); layout(p.getSpec(), branch, FeaturePackLayout.TRANSITIVE_DEP); handle.copyResources(p.getDir()); ordered.add(p);