use of org.jboss.galleon.config.ConfigId in project galleon by wildfly.
the class ProvisioningDiffProvider method updateConfig.
public void updateConfig(ProvisionedFeatureDiffCallback featureDiffCallback, ProvisionedConfig updatedConfig, String... relativePaths) throws ProvisioningException {
final ConfigId configId = new ConfigId(updatedConfig.getModel(), updatedConfig.getName());
configPlugins = CollectionUtils.put(configPlugins, configId, featureDiffCallback);
if (featureDiff == null) {
featureDiff = new FeatureDiff(log);
}
featureDiff.init(getRequiredProvisionedConfig(provisionedState.getConfigs(), updatedConfig.getModel(), updatedConfig.getName()));
featureDiff.diff(featureDiffCallback, updatedConfig);
final ConfigModel mergedConfig = featureDiff.getMergedConfig(layout);
if (mergedConfig == null) {
log.verbose("%s has not changed", updatedConfig.getName());
} else {
updatedConfigs.put(configId, mergedConfig);
}
featureDiff.reset();
suppressPaths(relativePaths);
}
use of org.jboss.galleon.config.ConfigId in project galleon by wildfly.
the class ProvisioningDiffProvider method getMergedConfig.
public ProvisioningConfig getMergedConfig() throws ProvisioningException {
if (mergedConfig != null) {
return mergedConfig;
}
if (!hasConfigChanges()) {
mergedConfig = provisionedConfig;
return provisionedConfig;
}
final ProvisioningConfig.Builder configBuilder = initProvisioningConfig();
final Collection<ConfigModel> definedConfigs = provisionedConfig.getDefinedConfigs();
if (!definedConfigs.isEmpty()) {
for (ConfigModel originalConfig : definedConfigs) {
final ConfigModel updatedConfig = updatedConfigs.remove(originalConfig.getId());
if (updatedConfig != null) {
configBuilder.addConfig(updatedConfig);
continue;
}
if (removedConfigs.contains(originalConfig.getId())) {
continue;
}
configBuilder.addConfig(originalConfig);
}
}
if (!updatedConfigs.isEmpty()) {
for (ConfigModel updatedConfig : updatedConfigs.values()) {
configBuilder.addConfig(updatedConfig);
}
}
if (!addedConfigs.isEmpty()) {
for (ConfigModel addedConfig : addedConfigs.values()) {
configBuilder.addConfig(addedConfig);
}
}
if (!removedConfigs.isEmpty()) {
List<ProvisionedConfig> baseConfigs = null;
for (ConfigId configId : removedConfigs) {
if (provisionedConfig.hasDefinedConfig(configId)) {
if (baseConfigs == null) {
final ProvisioningConfig.Builder baseBuilder = initProvisioningConfig();
for (ProvisionedConfig config : provisionedState.getConfigs()) {
final ConfigId provisionedId = new ConfigId(config.getModel(), config.getName());
if (!provisionedConfig.hasDefinedConfig(provisionedId)) {
baseBuilder.excludeDefaultConfig(provisionedId);
}
}
try (ProvisioningRuntime baseRt = ProvisioningRuntimeBuilder.newInstance(log).initLayout(layout.getFactory(), baseBuilder.build()).build()) {
baseConfigs = baseRt.getConfigs();
}
}
if (getProvisionedConfig(baseConfigs, configId.getModel(), configId.getName()) != null) {
if (provisionedConfig.isInheritConfigs(true)) {
if (!provisionedConfig.isConfigModelExcluded(configId)) {
configBuilder.excludeDefaultConfig(configId);
}
} else if (provisionedConfig.isConfigModelIncluded(configId)) {
configBuilder.excludeDefaultConfig(configId);
}
}
} else if (provisionedConfig.isInheritConfigs(true)) {
if (!provisionedConfig.isConfigModelExcluded(configId)) {
configBuilder.excludeDefaultConfig(configId);
}
} else if (provisionedConfig.isConfigModelIncluded(configId)) {
configBuilder.excludeDefaultConfig(configId);
}
}
}
mergedConfig = configBuilder.build();
return mergedConfig;
}
use of org.jboss.galleon.config.ConfigId in project galleon by wildfly.
the class ProvisioningDiffProvider method addConfig.
public void addConfig(ProvisionedFeatureDiffCallback featureDiffCallback, ProvisionedConfig config, String... relativePaths) throws ProvisioningException {
if (featureDiff == null) {
featureDiff = new FeatureDiff(log);
}
featureDiff.reset();
featureDiff.model = config.getModel();
featureDiff.name = config.getName();
featureDiff.diff(featureDiffCallback, config);
final ConfigModel mergedConfig = featureDiff.getMergedConfig(layout);
if (mergedConfig == null) {
log.verbose("%s is meaningless", config.getName());
} else {
addedConfigs = CollectionUtils.putLinked(addedConfigs, new ConfigId(config.getModel(), config.getName()), mergedConfig);
}
featureDiff.reset();
suppressPaths(relativePaths);
}
use of org.jboss.galleon.config.ConfigId in project galleon by wildfly.
the class LayersTestCase method test.
@Test
public void test() throws Exception {
FeaturePackLocation prod1 = newFpl(PRODUCER1, "1", "1.0.0.Final");
FeaturePackLocation prod2 = newFpl(PRODUCER2, "1", "1.0.0.Final");
CliTestUtils.installWithLayers(cli, universeSpec, PRODUCER1, "1.0.0.Final");
CliTestUtils.install(cli, universeSpec, PRODUCER2, "1.0.0.Final");
cli.execute("find * --layers=layerZ --universe=" + universeSpec);
assertFalse(cli.getOutput(), cli.getOutput().contains(prod1.toString()));
cli.execute("find * --layers=layerB --universe=" + universeSpec);
assertTrue(cli.getOutput(), cli.getOutput().contains(prod1.toString()));
assertTrue(cli.getOutput(), cli.getOutput().contains("layerB-" + PRODUCER1));
cli.execute("feature-pack get-info " + prod1 + " --type=layers");
assertTrue(cli.getOutput(), cli.getOutput().contains("base-" + PRODUCER1));
assertTrue(cli.getOutput(), cli.getOutput().contains("layerA-" + PRODUCER1));
assertTrue(cli.getOutput(), cli.getOutput().contains("layerB-" + PRODUCER1));
assertTrue(cli.getOutput(), cli.getOutput().contains("layerC-" + PRODUCER1));
cli.execute("feature-pack get-info " + prod1 + " --type=configs");
assertFalse(cli.getOutput(), cli.getOutput().contains("base-" + PRODUCER1));
assertFalse(cli.getOutput(), cli.getOutput().contains("layerA-" + PRODUCER1));
assertTrue(cli.getOutput(), cli.getOutput().contains("layerB-" + PRODUCER1));
assertFalse(cli.getOutput(), cli.getOutput().contains("layerC-" + PRODUCER1));
Path path = cli.newDir("prod1", false);
try {
cli.execute("install " + prod1 + " --dir=" + path + " --layers=foo");
throw new Exception("Should have failed");
} catch (CommandException ex) {
// XXX OK, expected
}
cli.execute("install " + prod1 + " --dir=" + path + " --layers=" + "layerA-" + PRODUCER1 + ",layerC-" + PRODUCER1);
ProvisioningConfig config = ProvisioningManager.builder().setInstallationHome(path).build().getProvisioningConfig();
ConfigModel conf = config.getDefinedConfig(new ConfigId("testmodel", "testmodel.xml"));
assertNotNull(conf);
assertTrue(conf.getIncludedLayers().size() == 2);
assertTrue(conf.getIncludedLayers().contains("layerA-" + PRODUCER1));
assertTrue(conf.getIncludedLayers().contains("layerC-" + PRODUCER1));
String opt = config.getOption(Constants.OPTIONAL_PACKAGES);
assertNotNull(opt);
assertEquals(Constants.PASSIVE_PLUS, opt);
cli.execute("get-info --dir=" + path + " --type=configs");
assertTrue(cli.getOutput(), cli.getOutput().contains("layerA-" + PRODUCER1));
assertTrue(cli.getOutput(), cli.getOutput().contains("layerC-" + PRODUCER1));
assertFalse(cli.getOutput(), cli.getOutput().contains("base-" + PRODUCER1));
// Multiple configurations are invalid with layers
try {
cli.execute("install " + prod1 + " --dir=" + path + " --config=testmodel/foobar.xml,testmodel/foobar2.xml, --layers=" + "layerB-" + PRODUCER1);
throw new Exception("should have failed");
} catch (CommandException ex) {
// XXX OK expected
}
Path path2 = cli.newDir("prod2", false);
try {
cli.execute("install " + prod1 + " --dir=" + path2 + " --config=moo/foobar.xml --layers=" + "layerB-" + PRODUCER1);
throw new Exception("should have failed");
} catch (CommandException ex) {
// XXX OK expected
}
cli.execute("install " + prod1 + " --dir=" + path2 + " --config=testmodel/foobar.xml --layers=" + "layerB-" + PRODUCER1);
ProvisioningConfig config2 = ProvisioningManager.builder().setInstallationHome(path2).build().getProvisioningConfig();
ConfigModel conf2 = config2.getDefinedConfig(new ConfigId("testmodel", "foobar.xml"));
assertNotNull(conf2);
assertTrue(conf2.getIncludedLayers().size() == 1);
assertTrue(conf2.getIncludedLayers().contains("layerB-" + PRODUCER1));
cli.execute("get-info --dir=" + path2 + " --type=configs");
assertTrue(cli.getOutput(), cli.getOutput().contains("testmodel"));
assertTrue(cli.getOutput(), cli.getOutput().contains("foobar.xml"));
assertTrue(cli.getOutput(), cli.getOutput().contains("layerB-" + PRODUCER1));
assertFalse(cli.getOutput(), cli.getOutput().contains("layerA-" + PRODUCER1));
assertFalse(cli.getOutput(), cli.getOutput().contains("layerC-" + PRODUCER1));
assertFalse(cli.getOutput(), cli.getOutput().contains("base-" + PRODUCER1));
// Default model and config names
Path path3 = cli.newDir("prod3", false);
cli.execute("install " + prod1 + " --dir=" + path3 + " --config=foobar.xml --layers=" + "layerB-" + PRODUCER1);
cli.execute("get-info --dir=" + path3 + " --type=configs");
assertTrue(cli.getOutput(), cli.getOutput().contains("testmodel"));
assertTrue(cli.getOutput(), cli.getOutput().contains("foobar.xml"));
config = ProvisioningManager.builder().setInstallationHome(path3).build().getProvisioningConfig();
assertTrue(config.getDefinedConfigs().size() == 1);
conf = config.getDefinedConfig(new ConfigId("testmodel", "foobar.xml"));
assertNotNull(conf);
try {
cli.execute("install " + prod1 + " --dir=" + path3 + " --config=foomodel/ --layers=" + "layerB-" + PRODUCER1);
throw new Exception("Should have failed");
} catch (CommandException ex) {
// XXX OK, expected
}
Path path4 = cli.newDir("prod4", false);
cli.execute("install " + prod1 + " --dir=" + path4 + " --config=testmodel/ --layers=" + "layerB-" + PRODUCER1);
cli.execute("get-info --dir=" + path4 + " --type=configs");
assertTrue(cli.getOutput(), cli.getOutput().contains("testmodel"));
assertTrue(cli.getOutput(), cli.getOutput().contains("testmodel.xml"));
config = ProvisioningManager.builder().setInstallationHome(path4).build().getProvisioningConfig();
assertTrue(config.getDefinedConfigs().size() == 1);
conf = config.getDefinedConfig(new ConfigId("testmodel", "testmodel.xml"));
assertNotNull(conf);
// Install a specified config without layers
Path path5 = cli.newDir("prod5", false);
cli.execute("install " + prod1 + " --dir=" + path5);
cli.execute("get-info --dir=" + path5 + " --type=configs");
assertTrue(cli.getOutput(), cli.getOutput().contains("config1.xml"));
assertTrue(cli.getOutput(), cli.getOutput().contains("config2.xml"));
cli.execute("install " + prod1 + " --dir=" + path5 + " --default-configs=testmodel/config1.xml");
cli.execute("get-info --dir=" + path5 + " --type=configs");
assertTrue(cli.getOutput(), cli.getOutput().contains("config1.xml"));
assertFalse(cli.getOutput(), cli.getOutput().contains("config2.xml"));
cli.execute("install " + prod1 + " --dir=" + path5 + " --default-configs=testmodel/config1.xml,testmodel/config2.xml");
cli.execute("get-info --dir=" + path5 + " --type=configs");
assertTrue(cli.getOutput(), cli.getOutput().contains("config1.xml"));
assertTrue(cli.getOutput(), cli.getOutput().contains("config2.xml"));
// Install multiple producers, installing default-config should not erase existing producer.
Path path6 = cli.newDir("prod6", false);
cli.execute("install " + prod2 + " --dir=" + path6);
cli.execute("install " + prod1 + " --dir=" + path6 + " --default-configs=testmodel/config1.xml");
cli.execute("get-info --dir=" + path6);
assertTrue(cli.getOutput(), cli.getOutput().contains(PRODUCER1));
assertTrue(cli.getOutput(), cli.getOutput().contains(PRODUCER2));
// Install a default-config into empty directory
Path path7 = cli.newDir("prod7", false);
cli.execute("install " + prod1 + " --dir=" + path7 + " --default-configs=testmodel/config1.xml");
cli.execute("get-info --dir=" + path7 + " --type=configs");
assertTrue(cli.getOutput(), cli.getOutput().contains(PRODUCER1));
assertTrue(cli.getOutput(), cli.getOutput().contains("config1.xml"));
// Install layers in multiple steps
Path path8 = cli.newDir("prod8", false);
cli.execute("install " + prod1 + " --dir=" + path8 + " --layers=" + "layerA-" + PRODUCER1);
cli.execute("install " + prod1 + " --dir=" + path8 + " --layers=" + "layerC-" + PRODUCER1);
ProvisioningConfig config3 = ProvisioningManager.builder().setInstallationHome(path8).build().getProvisioningConfig();
ConfigModel conf3 = config3.getDefinedConfig(new ConfigId("testmodel", "testmodel.xml"));
assertNotNull(conf3);
assertTrue(conf3.getIncludedLayers().size() == 2);
assertTrue(conf3.getIncludedLayers().contains("layerA-" + PRODUCER1));
assertTrue(conf3.getIncludedLayers().contains("layerC-" + PRODUCER1));
}
use of org.jboss.galleon.config.ConfigId in project galleon by wildfly.
the class AdvancedLayersTestCase method testCircularDepExcludeLayers.
@Test
public void testCircularDepExcludeLayers() throws Exception {
FeaturePackLocation prod = newFpl(PRODUCER5, "1", "1.0.0.Final");
buildFP(cli, universeSpec, PRODUCER5, "1.0.0.Final");
{
// Install layerD circular dependency with layerE
Path path = cli.newDir("prod6", false);
cli.execute("install " + prod + " --dir=" + path + " --layers=layerD-" + PRODUCER5);
ProvisionedState state = ProvisioningManager.builder().setInstallationHome(path).build().getProvisionedState();
Collection<ConfigId> layers = state.getConfigs().get(0).getLayers();
assertEquals(layers.toString(), 2, layers.size());
assertTrue(layers.toString(), layers.contains(new ConfigId("testmodel", "layerE-" + PRODUCER5)));
assertTrue(layers.toString(), layers.contains(new ConfigId("testmodel", "layerD-" + PRODUCER5)));
}
{
// Install layerE, exclude layerD
Path path = cli.newDir("prod-exclude6", false);
cli.execute("install " + prod + " --dir=" + path + " --layers=layerE-" + PRODUCER5 + ",-layerD-" + PRODUCER5);
ProvisionedState state = ProvisioningManager.builder().setInstallationHome(path).build().getProvisionedState();
Collection<ConfigId> layers = state.getConfigs().get(0).getLayers();
assertEquals(layers.toString(), 1, layers.size());
assertTrue(layers.toString(), layers.contains(new ConfigId("testmodel", "layerE-" + PRODUCER5)));
}
}
Aggregations