FeaturePackRuntime(FeaturePackRuntimeBuilder builder, ProvisioningRuntimeBuilder rt) throws ProvisioningException { super(builder.producer.getLocation().getFPID(), builder.getDir(), builder.getType()); this.spec = builder.getSpec(); this.featureSpecs = builder.featureSpecs;
void processIncludedFeatures(final ResolvedFeatureGroupConfig pushedFgConfig) throws ProvisioningException { if (pushedFgConfig.includedFeatures.isEmpty()) { return; } for (Map.Entry<ResolvedFeatureId, FeatureConfig> feature : pushedFgConfig.includedFeatures.entrySet()) { final FeatureConfig includedFc = feature.getValue(); if (includedFc != null && includedFc.hasParams()) { final ResolvedFeatureId includedId = feature.getKey(); if (pushedFgConfig.configStack.isFilteredOut(includedId.specId, includedId)) { continue; } // make sure the included ID is in fact present on the feature group branch if (!pushedFgConfig.configStack.includes(includedId)) { throw new ProvisioningException(Errors.featureNotInScope(includedId, pushedFgConfig.fg.getId() == null ? "'anonymous'" : pushedFgConfig.fg.getId().toString(), currentOrigin == null ? null : currentOrigin.producer.getLocation().getFPID())); } resolveFeature(pushedFgConfig.configStack, includedFc); } } }
/** * Query for available version update and patches for the specific producer. * * @param producer the producer to check the updates for * @return available updates for the producer * @throws ProvisioningException in case of a failure */ public FeaturePackUpdatePlan getFeaturePackUpdate(ProducerSpec producer) throws ProvisioningException { final F f = featurePacks.get(producer); if(f == null) { throw new ProvisioningException(Errors.unknownFeaturePack(producer.getLocation().getFPID())); } final FeaturePackLocation fpl = f.getFPID().getLocation(); final Universe<?> universe = layoutFactory.getUniverseResolver().getUniverse(fpl.getUniverse()); final Channel channel = universe.getProducer(fpl.getProducerName()).getChannel(fpl.getChannelName()); final List<F> patches = fpPatches.get(fpl.getFPID()); final Set<FPID> patchIds; if (patches == null || patches.isEmpty()) { patchIds = Collections.emptySet(); } else if (patches.size() == 1) { patchIds = Collections.singleton(patches.get(0).getFPID()); } else { final Set<FPID> tmp = new HashSet<>(patches.size()); for (F p : patches) { tmp.add(p.getFPID()); } patchIds = CollectionUtils.unmodifiable(tmp); } return channel.getUpdatePlan(FeaturePackUpdatePlan.request(fpl, patchIds, f.isTransitiveDep())); }
session, entry.getKey().getLocation().getFPID(), fp.getFPID(), pkgBuilder.getPackages(), false, entry.getValue()); for (ResolvedSpecId rs : entry.getValue()) {
newConfig = ProvisioningConfig.builder(config); newConfig.removeTransitiveDep(producer.getLocation().getFPID()); continue;
uninstall(producer.getLocation().getFPID(), configBuilder);
currentOrigin.setVisited(false); throw new ProvisioningDescriptionException(Errors.packageNotFound(currentOrigin.producer.getLocation().getFPID(), pkgName));
handler.nextFeaturePack(feature.spec.id.producer.getLocation().getFPID());
private void processConfigItemContainer(ConfigItemContainer ciContainer) throws ProvisioningException { if(!ciContainer.hasItems()) { return; } final FeaturePackRuntimeBuilder prevFpOrigin = ciContainer.isResetFeaturePackOrigin() ? setThisOrigin(currentOrigin) : null; for (ConfigItem item : ciContainer.getItems()) { final FeaturePackRuntimeBuilder originalFp = setOrigin(item.getOrigin()); try { if (item.isGroup()) { processFeatureGroup((FeatureGroup) item); } else { resolveFeature(configStack, (FeatureConfig) item); } } catch (ProvisioningException e) { if (currentOrigin == null) { throw e; } throw new ProvisioningException( item.isGroup() ? Errors.failedToProcess(currentOrigin.producer.getLocation().getFPID(), ((FeatureGroup) item).getName()) : Errors.failedToProcess(currentOrigin.producer.getLocation().getFPID(), (FeatureConfig) item), e); } finally { setOrigin(originalFp); } } if(prevFpOrigin != null) { setThisOrigin(prevFpOrigin); } }
@Override public void handle(ProvisionedConfigHandler handler) throws ProvisioningException { if (!hasFeatures()) { return; } handler.prepare(this); ResolvedSpecId lastHandledSpecId = null; for(ProvisionedFeature feature : features) { if(!feature.getSpecId().equals(lastHandledSpecId)) { if (lastHandledSpecId == null || !feature.getSpecId().getProducer().equals(lastHandledSpecId.getProducer())) { handler.nextFeaturePack(feature.getSpecId().getProducer().getLocation().getFPID()); } // TODO: complete spec isn't available here, but specId is enough for marshalling handler.nextSpec(new ResolvedFeatureSpec(feature.getSpecId(), null, FeatureSpec.builder().build())); lastHandledSpecId = feature.getSpecId(); } handler.nextFeature(feature); } handler.done(); }
@Override protected String processingContent(ProgressTracker<ProducerSpec> tracker) { return session.getExposedLocation(null, tracker.getItem().getLocation()).toString(); }
public static String buildOrigin(ProducerSpec producer) { return FeaturePackConfig.getDefaultOriginName(producer.getLocation()); }
public static Identity fromChannel(ProducerSpec origin, String name) { return new Identity(FeaturePackConfig.getDefaultOriginName(origin.getLocation()), name); }
public F getFeaturePack(ProducerSpec producer) throws ProvisioningException { final F p = featurePacks.get(producer); if(p == null) { throw new ProvisioningException(Errors.unknownFeaturePack(producer.getLocation().getFPID())); } return p; }