/** * (Re-)provisions the current installation to the desired specification. * * @param provisioningLayout pre-built provisioning layout * @throws ProvisioningException in case provisioning fails */ public void provision(ProvisioningLayout<?> provisioningLayout) throws ProvisioningException { try(ProvisioningLayout<FeaturePackRuntimeBuilder> layout = provisioningLayout.transform(ProvisioningRuntimeBuilder.FP_RT_FACTORY)) { doProvision(layout, getFsDiff(), false); } }
/** * (Re-)provisions the current installation to the desired specification. * * @param provisioningConfig the desired installation specification * @param options feature-pack plug-ins options * @throws ProvisioningException in case provisioning fails */ public void provision(ProvisioningConfig provisioningConfig, Map<String, String> options) throws ProvisioningException { try(ProvisioningLayout<FeaturePackRuntimeBuilder> layout = newConfigLayout(provisioningConfig, options)) { doProvision(layout, getFsDiff(), false); } }
/** * Goes back to the previous provisioning state recorded in the provisioning state history. * If the history is empty, the method throws an exception. * * @throws ProvisioningException in case of a failure */ public void undo() throws ProvisioningException { try(ProvisioningLayout<FeaturePackRuntimeBuilder> layout = newConfigLayout(StateHistoryUtils.readUndoConfig(home, log), Collections.emptyMap())) { doProvision(layout, getFsDiff(), true); } }
/** * Provision the state described in the specified XML file. * * @param provisioningXml file describing the desired provisioned state * @param options feature-pack plug-ins options * @throws ProvisioningException in case provisioning fails */ public void provision(Path provisioningXml, Map<String, String> options) throws ProvisioningException { try(ProvisioningLayout<FeaturePackRuntimeBuilder> layout = newConfigLayout(ProvisioningXmlParser.parse(provisioningXml), options)) { doProvision(layout, getFsDiff(), false); } }
private ProvisioningDiffProvider getDiffMergedConfig() throws ProvisioningException { final FsDiff diff = getFsDiff(); if(diff == null || diff.isEmpty()) { return null; } try (ProvisioningLayout<FeaturePackRuntimeBuilder> layout = layoutFactory.newConfigLayout(getProvisioningConfig(), ProvisioningRuntimeBuilder.FP_RT_FACTORY, false)) { final ProvisioningDiffProvider diffProvider = ProvisioningDiffProvider.newInstance(layout, getProvisionedState(), diff, log); layout.visitPlugins(new FeaturePackPluginVisitor<StateDiffPlugin>() { @Override public void visitPlugin(StateDiffPlugin plugin) throws ProvisioningException { plugin.diff(diffProvider); } }, StateDiffPlugin.class); return diffProvider; } }
/** * Apply provisioning plan to the currently provisioned installation * * @param plan provisioning plan * @param options provisioning plugin options * @throws ProvisioningException in case of a failure */ public void apply(ProvisioningPlan plan, Map<String, String> options) throws ProvisioningException { ProvisioningConfig config = getProvisioningConfig(); if(config == null) { config = ProvisioningConfig.builder().build(); } try (ProvisioningLayout<FeaturePackRuntimeBuilder> layout = getLayoutFactory().newConfigLayout(config, ProvisioningRuntimeBuilder.FP_RT_FACTORY, false)) { layout.apply(plan, options); doProvision(layout, getFsDiff(), false); } }
@Override protected void runCommand(PmCommandInvocation invoc) throws CommandExecutionException { try { ProvisioningManager mgr = getManager(invoc.getPmSession()); FsDiff diff = mgr.getFsDiff(); if (diff.isEmpty()) { invoc.println("No changes detected"); } else { Path workingDir = Paths.get(invoc.getConfiguration().getAeshContext(). getCurrentWorkingDirectory().getAbsolutePath()); Path installation = mgr.getInstallationHome(); PathResolver resolver = new PathResolver() { @Override public String resolve(String relativePath) { Path absPath = Paths.get(installation.toString(), relativePath); return workingDir.relativize(absPath).toString(); } }; FsDiff.log(diff, new Consumer<String>() { @Override public void accept(String msg) { invoc.println(msg); } }, resolver); } } catch (ProvisioningException ex) { throw new CommandExecutionException(ex.getMessage()); } }
/** * Uninstalls the specified feature-pack. * * @param fpid feature-pack ID * @param pluginOptions provisioning plugin options * @throws ProvisioningException in case of a failure */ public void uninstall(FeaturePackLocation.FPID fpid, Map<String, String> pluginOptions) throws ProvisioningException { ProvisioningConfig config = getProvisioningConfig(); if(config == null || !config.hasFeaturePackDeps()) { throw new ProvisioningException(Errors.unknownFeaturePack(fpid)); } try(ProvisioningLayout<FeaturePackRuntimeBuilder> layout = getLayoutFactory().newConfigLayout(config, ProvisioningRuntimeBuilder.FP_RT_FACTORY, false)) { layout.uninstall(resolveUniverseSpec(fpid.getLocation()).getFPID(), pluginOptions); doProvision(layout, getFsDiff(), false); } }
public void install(FeaturePackConfig fpConfig, Map<String, String> options) throws ProvisioningException { ProvisioningConfig config = getProvisioningConfig(); if(config == null) { config = ProvisioningConfig.builder().build(); } try(ProvisioningLayout<FeaturePackRuntimeBuilder> layout = getLayoutFactory().newConfigLayout(config, ProvisioningRuntimeBuilder.FP_RT_FACTORY, false)) { final UniverseSpec configuredUniverse = getConfiguredUniverse(fpConfig.getLocation()); layout.install(configuredUniverse == null ? fpConfig : FeaturePackConfig.builder(fpConfig.getLocation().replaceUniverse(configuredUniverse)).init(fpConfig).build(), options); doProvision(layout, getFsDiff(), false); } }