summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Srnicek <jsrnicek@cisco.com>2016-10-13 13:56:47 +0200
committerMaros Marsalek <mmarsale@cisco.com>2016-10-13 13:28:56 +0000
commit6c3f614edb18bdb8cc6e7b87627f240d97a258c3 (patch)
tree52b9e116e7984d72a94ddee1c4b70b363e05c6ac
parent9d69639d39bd55628cadc445e816fcccf23c1361 (diff)
HONEYCOMB-207 : Configurable modules list for distributions
Export list of modules for built distribution on compile time according to distribution.modules property to ***module-config.txt Load aggregated set of modules on start from all descriptors in /modules folder Change-Id: Icdeb23536aee3a243a221d3f2ec5f340d387764e Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
-rw-r--r--common/minimal-distribution-parent/pom.xml52
-rw-r--r--infra/minimal-distribution/pom.xml27
-rw-r--r--infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/ActiveModuleProvider.java154
-rw-r--r--infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/Main.java36
-rw-r--r--infra/minimal-distribution/src/test/java/io/fd/honeycomb/infra/distro/ActiveModuleProviderTest.java91
-rw-r--r--infra/minimal-distribution/src/test/java/io/fd/honeycomb/infra/distro/BaseMinimalDistributionTest.java26
-rw-r--r--infra/minimal-distribution/src/test/java/io/fd/honeycomb/infra/distro/Modules.java (renamed from vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/Main.java)28
-rw-r--r--infra/minimal-distribution/src/test/resources/modules/module-config-one.txt4
-rw-r--r--infra/minimal-distribution/src/test/resources/modules/module-config-two.txt1
-rwxr-xr-xnsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/VppNshModule.java24
-rwxr-xr-xnsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/cfgattrs/VppNshConfiguration.java41
-rw-r--r--nsh/impl/src/main/resources/honeycomb-minimal-resources/config/vppnsh.json3
-rw-r--r--samples/minimal-distribution/pom.xml5
-rw-r--r--samples/minimal-distribution/src/main/java/io/fd/honeycomb/samples/distro/Main.java33
-rw-r--r--vpp-common/minimal-distribution/asciidoc/Readme.adoc3
-rw-r--r--vpp-common/minimal-distribution/pom.xml116
-rw-r--r--vpp-common/pom.xml2
-rw-r--r--vpp-common/vpp-common-integration/asciidoc/Readme.adoc3
-rw-r--r--vpp-common/vpp-common-integration/pom.xml116
-rw-r--r--vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/ContextsReaderFactoryProvider.java (renamed from vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/ContextsReaderFactoryProvider.java)2
-rw-r--r--vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/JVppCoreProvider.java (renamed from vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/JVppCoreProvider.java)2
-rw-r--r--vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/JVppRegistryProvider.java (renamed from vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/JVppRegistryProvider.java)2
-rw-r--r--vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/VppCommonModule.java (renamed from vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/VppCommonModule.java)2
-rw-r--r--vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/VppConfigAttributes.java (renamed from vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/VppConfigAttributes.java)2
-rw-r--r--vpp-common/vpp-common-integration/src/main/resources/honeycomb-minimal-resources/config/jvpp.json (renamed from vpp-common/minimal-distribution/src/main/resources/honeycomb-minimal-resources/config/jvpp.json)0
-rw-r--r--vpp-common/vpp-common-integration/src/test/java/io/fd/honeycomb/vpp/common/integration/VppCommonModuleTest.java (renamed from vpp-common/minimal-distribution/src/test/java/io/fd/honeycomb/vpp/distro/VppCommonModuleTest.java)2
-rw-r--r--vpp-common/vpp-common-integration/src/test/resources/jvpp.json (renamed from vpp-common/minimal-distribution/src/test/resources/jvpp.json)0
-rw-r--r--vpp-integration/minimal-distribution/pom.xml16
-rw-r--r--vpp-integration/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/integration/distro/Main.java40
29 files changed, 526 insertions, 307 deletions
diff --git a/common/minimal-distribution-parent/pom.xml b/common/minimal-distribution-parent/pom.xml
index b003231c3..eb68991c4 100644
--- a/common/minimal-distribution-parent/pom.xml
+++ b/common/minimal-distribution-parent/pom.xml
@@ -60,6 +60,12 @@ done
http://stackoverflow.com/questions/137212/how-to-solve-performance-problem-with-java-securerandom
-->
<random.seed.file>/dev/./urandom</random.seed.file>
+ <no.modules.defined.message>// This distribution does not define any own modules.
+// In order to do so either distribution.modules property must be defined in distribution pom.xml,
+// containing list of desired modules to start, or this file can be directly edited with same effect.
+//
+// Note : Modules should be referenced by full class name, for ex.: io.fd.test.SampleModule, and separated with comma.
+ </no.modules.defined.message>
</properties>
<dependencyManagement>
@@ -127,7 +133,7 @@ done
<classpathMavenRepositoryLayout>true</classpathMavenRepositoryLayout>
</manifest>
<manifestEntries>
- <Class-Path>config/ cert/</Class-Path>
+ <Class-Path>config/ cert/ modules/</Class-Path>
</manifestEntries>
</archive>
</configuration>
@@ -167,11 +173,13 @@ done
</plugin>
<!-- Generate shell script -->
+ <!-- Extract modules started by distribution -->
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<executions>
<execution>
+ <id>start-scripts-generation</id>
<phase>package</phase>
<goals>
<goal>execute</goal>
@@ -210,6 +218,48 @@ done
</source>
</configuration>
</execution>
+ <execution>
+ <id>distribution-module-assembly</id>
+ <!-- phase changed from package to earlier phase to generate module descriptor before distribution jar is created,
+ to include descriptor in the jar,to be accessible to children distributions-->
+ <phase>prepare-package</phase>
+ <goals>
+ <goal>execute</goal>
+ </goals>
+ <configuration>
+ <source>import java.nio.file.Paths
+ import java.nio.file.Files
+
+ // module configuration file extraction
+ // builds project name from group,artifact and version to prevent overwriting
+ // while building multiple distribution project
+ def artifact = project.getArtifact()
+ def projectName = "${artifact.getGroupId()}_${artifact.getArtifactId()}_${artifact.getVersion()}".replace(".","-")
+ log.info "Generating list of modules started by distribution ${projectName}"
+
+ def activeModules = properties.getProperty("distribution.modules", "")
+ .tokenize(",")
+ .collect { module -> module.trim() }
+
+ log.info "Project ${projectName} : Found modules ${activeModules}"
+ //creates folder modules
+
+ def outputPath = Paths.get(project.build.outputDirectory, "honeycomb-minimal-resources", "modules")
+ //creates module folder
+ outputPath.toFile().mkdirs()
+
+ def outputFile = Paths.get(outputPath.toString(), "${projectName}_module-config.txt").toFile()
+ outputFile.createNewFile();
+ log.info("Writing module configuration for distribution ${projectName} to ${outputPath}")
+
+ if (activeModules.isEmpty()) {
+ outputFile.text = properties.getProperty("no.modules.defined.message")
+ } else {
+ outputFile.text = activeModules.join(System.lineSeparator)
+ }
+ </source>
+ </configuration>
+ </execution>
</executions>
</plugin>
diff --git a/infra/minimal-distribution/pom.xml b/infra/minimal-distribution/pom.xml
index 6e935b09b..d727788a0 100644
--- a/infra/minimal-distribution/pom.xml
+++ b/infra/minimal-distribution/pom.xml
@@ -30,6 +30,17 @@
<properties>
<main.class>io.fd.honeycomb.infra.distro.Main</main.class>
+ <distribution.modules>
+ io.fd.honeycomb.infra.distro.schema.YangBindingProviderModule,
+ io.fd.honeycomb.infra.distro.schema.SchemaModule,
+ io.fd.honeycomb.infra.distro.data.ConfigAndOperationalPipelineModule,
+ io.fd.honeycomb.infra.distro.data.context.ContextPipelineModule,
+ io.fd.honeycomb.infra.distro.initializer.InitializerPipelineModule,
+ io.fd.honeycomb.infra.distro.netconf.NetconfModule,
+ io.fd.honeycomb.infra.distro.netconf.NetconfReadersModule,
+ io.fd.honeycomb.infra.distro.restconf.RestconfModule,
+ io.fd.honeycomb.infra.distro.cfgattrs.CfgAttrsModule
+ </distribution.modules>
</properties>
<dependencies>
@@ -144,6 +155,12 @@
<version>${project.version}</version>
</dependency>
+ <!-- Utilities -->
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
@@ -161,5 +178,15 @@
<version>0.1.54</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-all</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/ActiveModuleProvider.java b/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/ActiveModuleProvider.java
new file mode 100644
index 000000000..03c56969d
--- /dev/null
+++ b/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/ActiveModuleProvider.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.honeycomb.infra.distro;
+
+import com.google.common.collect.ImmutableList;
+import com.google.inject.Module;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import javax.annotation.Nonnull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Provides list of active modules for distribution
+ */
+public class ActiveModuleProvider {
+
+ public static final String STANDARD_MODULES_RELATIVE_PATH = "../modules/";
+ private static final Logger LOG = LoggerFactory.getLogger(ActiveModuleProvider.class);
+
+ /**
+ * Provide unique set of active modules filtered from provided resources
+ */
+ public static Set<Module> loadActiveModules(@Nonnull final List<String> moduleNames) {
+ final ClassLoader classLoader = ActiveModuleProvider.class.getClassLoader();
+ LOG.info("Reading active modules configuration for distribution");
+
+ // process resources to resource modules
+ return moduleNames.stream()
+ .map(String::trim)
+ .filter(trimmedLine -> trimmedLine.length() != 0)
+ // filter out commented lines
+ .filter(nonEmptyLine -> !nonEmptyLine.startsWith("//"))
+ // filter duplicates
+ .distinct()
+ .map(validLine -> nameToClass(validLine, classLoader))
+ // filters out classes that are not modules
+ .filter(ActiveModuleProvider::filterNonModules)
+ .map(ActiveModuleProvider::classToInstance)
+ .collect(Collectors.toSet());
+ }
+
+ /**
+ * Aggregate all resources from provided relative path into a {@code List<String>}
+ */
+ public static List<String> aggregateResources(final String relativePath, final ClassLoader classLoader) {
+ try {
+ return Collections.list(classLoader.getResources(relativePath)).stream()
+ .map(ActiveModuleProvider::toURI)
+ .flatMap(ActiveModuleProvider::folderToFile)
+ .map(File::toURI)
+ .map(Paths::get)
+ // readAll lines and add them to iteration
+ .flatMap(ActiveModuleProvider::readLines)
+ .collect(Collectors.toList());
+ } catch (IOException e) {
+ LOG.error("Unable to load resources from relative path {}", relativePath, e);
+ throw new IllegalStateException("Unable to load resources from relative path " + relativePath, e);
+ }
+ }
+
+ private static Stream<File> folderToFile(final URI uri) {
+ final File[] files = new File(uri).listFiles(File::isFile);
+
+ return files != null
+ ? ImmutableList.copyOf(files).stream()
+ : Collections.<File>emptyList().stream();
+ }
+
+ private static boolean filterNonModules(final Class<?> clazz) {
+ final boolean isModule = Module.class.isAssignableFrom(clazz);
+ if (!isModule) {
+ LOG.warn("Class {} is provided in modules configuration, but is not a Module and will be ignored", clazz);
+ }
+ return isModule;
+ }
+
+ /**
+ * Read lines from {@code Path}
+ */
+ private static Stream<String> readLines(final Path path) {
+ try {
+ return Files.readAllLines(path).stream();
+ } catch (IOException e) {
+ LOG.error("Unable to read content of {}", path, e);
+ throw new IllegalStateException("Unable to read content of " + path, e);
+ }
+ }
+
+ /**
+ * Converts {@code URL} to {@code URI}
+ */
+ private static URI toURI(final URL url) {
+ try {
+ return url.toURI();
+ } catch (URISyntaxException e) {
+ LOG.error("Unable to convert {} to uri", url);
+ throw new IllegalStateException("Unable to convert " + url + " to uri", e);
+ }
+ }
+
+ /**
+ * Loads class by provided name
+ */
+ private static Class<?> nameToClass(final String name,
+ final ClassLoader classLoader) {
+ try {
+ LOG.info("Loading module class {}", name);
+ return classLoader.loadClass(name);
+ } catch (ClassNotFoundException e) {
+ LOG.error("Unable to convert {} to class, make sure you've provided sources to classpath", name);
+ throw new IllegalStateException(
+ "Unable to convert " + name + " to class, make sure you've provided sources to classpath", e);
+ }
+ }
+
+ /**
+ * Creates instance of module class
+ */
+ private static Module classToInstance(final Class<?> moduleClass) {
+ try {
+ LOG.info("Creating instance for module {}", moduleClass);
+ return Module.class.cast(moduleClass.newInstance());
+ } catch (InstantiationException | IllegalAccessException e) {
+ LOG.error("Unable to create instance for class {}", moduleClass, e);
+ throw new IllegalStateException("Unable to create instance for class" + moduleClass, e);
+ }
+ }
+}
diff --git a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/Main.java b/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/Main.java
index d3a562d3a..3c62382c2 100644
--- a/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/Main.java
+++ b/infra/minimal-distribution/src/main/java/io/fd/honeycomb/infra/distro/Main.java
@@ -16,8 +16,11 @@
package io.fd.honeycomb.infra.distro;
+import static io.fd.honeycomb.infra.distro.ActiveModuleProvider.STANDARD_MODULES_RELATIVE_PATH;
+import static io.fd.honeycomb.infra.distro.ActiveModuleProvider.aggregateResources;
+import static io.fd.honeycomb.infra.distro.ActiveModuleProvider.loadActiveModules;
+
import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
import com.google.inject.ConfigurationException;
import com.google.inject.CreationException;
import com.google.inject.Guice;
@@ -28,20 +31,14 @@ import com.google.inject.ProvisionException;
import com.google.inject.name.Names;
import io.fd.honeycomb.data.init.DataTreeInitializer;
import io.fd.honeycomb.data.init.InitializerRegistry;
-import io.fd.honeycomb.infra.distro.cfgattrs.CfgAttrsModule;
import io.fd.honeycomb.infra.distro.cfgattrs.HoneycombConfiguration;
-import io.fd.honeycomb.infra.distro.data.ConfigAndOperationalPipelineModule;
-import io.fd.honeycomb.infra.distro.data.context.ContextPipelineModule;
import io.fd.honeycomb.infra.distro.initializer.InitializerPipelineModule;
import io.fd.honeycomb.infra.distro.netconf.HoneycombNotification2NetconfProvider;
import io.fd.honeycomb.infra.distro.netconf.NetconfModule;
-import io.fd.honeycomb.infra.distro.netconf.NetconfReadersModule;
import io.fd.honeycomb.infra.distro.netconf.NetconfSshServerProvider;
import io.fd.honeycomb.infra.distro.netconf.NetconfTcpServerProvider;
import io.fd.honeycomb.infra.distro.restconf.RestconfModule;
-import io.fd.honeycomb.infra.distro.schema.SchemaModule;
-import io.fd.honeycomb.infra.distro.schema.YangBindingProviderModule;
-import java.util.List;
+import java.util.Set;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.opendaylight.netconf.mapping.api.NetconfOperationServiceFactory;
@@ -53,29 +50,18 @@ public final class Main {
private static final Logger LOG = LoggerFactory.getLogger(Main.class);
- public static final List<Module> BASE_MODULES = ImmutableList.of(
- // Infra
- new YangBindingProviderModule(),
- new SchemaModule(),
- new ConfigAndOperationalPipelineModule(),
- new ContextPipelineModule(),
- new InitializerPipelineModule(),
- new NetconfModule(),
- new NetconfReadersModule(),
- new RestconfModule(),
- // Json config attributes
- new CfgAttrsModule());
-
- private Main() {}
+ private Main() {
+ }
public static void main(String[] args) {
- init(BASE_MODULES);
+ final ClassLoader classLoader = Main.class.getClassLoader();
+ init(loadActiveModules(aggregateResources(STANDARD_MODULES_RELATIVE_PATH, classLoader)));
}
/**
- * Initialize the Honeycomb infrastructure + all wired plugins.
+ * Initialize the Honeycomb with provided modules
*/
- public static Injector init(final List<? extends Module> modules) {
+ public static Injector init(final Set<? extends Module> modules) {
try {
LOG.info("Starting honeycomb");
Injector injector = Guice.createInjector(modules);
diff --git a/infra/minimal-distribution/src/test/java/io/fd/honeycomb/infra/distro/ActiveModuleProviderTest.java b/infra/minimal-distribution/src/test/java/io/fd/honeycomb/infra/distro/ActiveModuleProviderTest.java
new file mode 100644
index 000000000..bdadc5bd8
--- /dev/null
+++ b/infra/minimal-distribution/src/test/java/io/fd/honeycomb/infra/distro/ActiveModuleProviderTest.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.honeycomb.infra.distro;
+
+
+import static com.google.common.collect.ImmutableList.of;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.empty;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.hasItems;
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.isA;
+import static org.hamcrest.core.Is.is;
+
+import com.google.common.collect.ImmutableList;
+import com.google.inject.Module;
+import java.util.List;
+import java.util.Set;
+import org.junit.Test;
+
+public class ActiveModuleProviderTest {
+
+ @Test
+ public void testLoadActiveModulesSuccessfull() {
+ final ImmutableList rawResources = of(
+ "// this should be skipped",
+ "// io.fd.honeycomb.infra.distro.Modules$ChildModule1",
+ " io.fd.honeycomb.infra.distro.Modules$ChildModule2",
+ "io.fd.honeycomb.infra.distro.Modules$ChildModule3 ",
+ "io.fd.honeycomb.infra.distro.Modules$ChildModule3",
+ "io.fd.honeycomb.infra.distro.Modules$NonModule"
+ );
+
+ final Set<Module> activeModules = ActiveModuleProvider.loadActiveModules(rawResources);
+
+ // first and second line should be ignored due to comment
+ // second,third,and fourth are valid,but should reduce module count to 2,because of duplicity
+ // last one does is not ancestor of Module, so it should be ignored/skipped
+ assertThat(activeModules, hasSize(2));
+ //hasItems or containsInAnyOrder does not have/is deprecated in variant with matcher
+ assertThat(activeModules, hasItem(isA(io.fd.honeycomb.infra.distro.Modules.ChildModule2.class)));
+ assertThat(activeModules, hasItem(isA(io.fd.honeycomb.infra.distro.Modules.ChildModule3.class)));
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void testLoadActiveModulesFailed() {
+ final ImmutableList rawResources = of(
+ "// this should be skipped",
+ "// io.fd.honeycomb.infra.distro.Modules$ChildModule1",
+ " io.fd.honeycomb.infra.distro.Modules$ChildModule2",
+ "### io.fd.honeycomb.infra.distro.Modules$ChildModule3 ",// it should fail because of this
+ "io.fd.honeycomb.infra.distro.Modules$ChildModule3",
+ "io.fd.honeycomb.infra.distro.Modules$NonModule"
+ );
+
+ ActiveModuleProvider.loadActiveModules(rawResources);
+ }
+
+ @Test
+ public void testAggregateResourcesNonEmpty() {
+ final List<String> aggregatedResources =
+ ActiveModuleProvider.aggregateResources("./modules", this.getClass().getClassLoader());
+ assertThat(aggregatedResources, hasSize(5));
+ assertThat(aggregatedResources, hasItems(" Non-commented non-trimmed",
+ "//Commented",
+ "// Commented non-trimmed",
+ "Not commented",
+ "// Line from second file"));
+ }
+
+ @Test
+ public void testAggregateResourcesEmpty() {
+ assertThat(ActiveModuleProvider.aggregateResources("/non-existing-folder", this.getClass().getClassLoader()),
+ is(empty()));
+ }
+
+}
diff --git a/infra/minimal-distribution/src/test/java/io/fd/honeycomb/infra/distro/BaseMinimalDistributionTest.java b/infra/minimal-distribution/src/test/java/io/fd/honeycomb/infra/distro/BaseMinimalDistributionTest.java
index 61042868f..8a8ddc3ef 100644
--- a/infra/minimal-distribution/src/test/java/io/fd/honeycomb/infra/distro/BaseMinimalDistributionTest.java
+++ b/infra/minimal-distribution/src/test/java/io/fd/honeycomb/infra/distro/BaseMinimalDistributionTest.java
@@ -16,22 +16,35 @@
package io.fd.honeycomb.infra.distro;
+import static com.google.common.collect.ImmutableSet.of;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import com.google.common.base.Charsets;
import com.google.common.io.ByteStreams;
+import com.google.inject.Module;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSubsystem;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
+import io.fd.honeycomb.infra.distro.cfgattrs.CfgAttrsModule;
+import io.fd.honeycomb.infra.distro.data.ConfigAndOperationalPipelineModule;
+import io.fd.honeycomb.infra.distro.data.context.ContextPipelineModule;
+import io.fd.honeycomb.infra.distro.initializer.InitializerPipelineModule;
+import io.fd.honeycomb.infra.distro.netconf.NetconfModule;
+import io.fd.honeycomb.infra.distro.netconf.NetconfReadersModule;
+import io.fd.honeycomb.infra.distro.restconf.RestconfModule;
+import io.fd.honeycomb.infra.distro.schema.SchemaModule;
+import io.fd.honeycomb.infra.distro.schema.YangBindingProviderModule;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
+import java.util.List;
import java.util.Properties;
+import java.util.Set;
import javax.net.ssl.SSLContext;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
@@ -57,6 +70,17 @@ public class BaseMinimalDistributionTest {
private static final String NETCONF_NAMESPACE = "urn:ietf:params:xml:ns:netconf:base:1.0";
private static final int NETCONF_HELLO_WAIT = 2500;
+ public static final Set<Module> BASE_MODULES = of(
+ new YangBindingProviderModule(),
+ new SchemaModule(),
+ new ConfigAndOperationalPipelineModule(),
+ new ContextPipelineModule(),
+ new InitializerPipelineModule(),
+ new NetconfModule(),
+ new NetconfReadersModule(),
+ new RestconfModule(),
+ new CfgAttrsModule());
+
@Before
public void setUp() throws Exception {
SSLContext sslcontext = SSLContexts.custom()
@@ -76,7 +100,7 @@ public class BaseMinimalDistributionTest {
*/
@Test(timeout = 60000)
public void test() throws Exception {
- Main.init(Main.BASE_MODULES);
+ Main.init(BASE_MODULES);
LOG.info("Testing Honeycomb base distribution");
LOG.info("Testing NETCONF TCP");
diff --git a/vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/Main.java b/infra/minimal-distribution/src/test/java/io/fd/honeycomb/infra/distro/Modules.java
index 821bd1ef9..e30fb87ca 100644
--- a/vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/Main.java
+++ b/infra/minimal-distribution/src/test/java/io/fd/honeycomb/infra/distro/Modules.java
@@ -14,19 +14,31 @@
* limitations under the License.
*/
-package io.fd.honeycomb.vpp.distro;
+package io.fd.honeycomb.infra.distro;
-import com.google.common.collect.Lists;
+import com.google.inject.AbstractModule;
+import com.google.inject.Binder;
import com.google.inject.Module;
-import java.util.List;
-public class Main {
+public class Modules {
- public static void main(String[] args) {
- final List<Module> sampleModules = Lists.newArrayList(io.fd.honeycomb.infra.distro.Main.BASE_MODULES);
+ public static class ChildModule1 implements Module {
+ @Override
+ public void configure(final Binder binder) {
+ }
+ }
- sampleModules.add(new VppCommonModule());
+ public static class ChildModule2 implements Module {
+ @Override
+ public void configure(final Binder binder) {
+ }
+ }
- io.fd.honeycomb.infra.distro.Main.init(sampleModules);
+ public static class ChildModule3 extends AbstractModule {
+ @Override
+ protected void configure() {
+ }
}
+
+ public static class NonModule{}
}
diff --git a/infra/minimal-distribution/src/test/resources/modules/module-config-one.txt b/infra/minimal-distribution/src/test/resources/modules/module-config-one.txt
new file mode 100644
index 000000000..8d48a3c9d
--- /dev/null
+++ b/infra/minimal-distribution/src/test/resources/modules/module-config-one.txt
@@ -0,0 +1,4 @@
+//Commented
+// Commented non-trimmed
+Not commented
+ Non-commented non-trimmed \ No newline at end of file
diff --git a/infra/minimal-distribution/src/test/resources/modules/module-config-two.txt b/infra/minimal-distribution/src/test/resources/modules/module-config-two.txt
new file mode 100644
index 000000000..ef11829e9
--- /dev/null
+++ b/infra/minimal-distribution/src/test/resources/modules/module-config-two.txt
@@ -0,0 +1 @@
+// Line from second file \ No newline at end of file
diff --git a/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/VppNshModule.java b/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/VppNshModule.java
index 156646628..e7d9d1535 100755
--- a/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/VppNshModule.java
+++ b/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/VppNshModule.java
@@ -17,8 +17,6 @@
package io.fd.honeycomb.vppnsh.impl;
import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
import com.google.inject.Singleton;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.name.Names;
@@ -26,12 +24,10 @@ import io.fd.honeycomb.data.init.DataTreeInitializer;
import io.fd.honeycomb.translate.read.ReaderFactory;
import io.fd.honeycomb.translate.vpp.util.NamingContext;
import io.fd.honeycomb.translate.write.WriterFactory;
-import io.fd.honeycomb.vppnsh.impl.cfgattrs.VppNshConfiguration;
import io.fd.honeycomb.vppnsh.impl.config.VppNshWriterFactory;
import io.fd.honeycomb.vppnsh.impl.init.VppNshInitializer;
import io.fd.honeycomb.vppnsh.impl.oper.VppNshReaderFactory;
import io.fd.honeycomb.vppnsh.impl.util.JVppNshProvider;
-import net.jmob.guice.conf.core.ConfigurationModule;
import io.fd.vpp.jvpp.nsh.future.FutureJVppNsh;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -45,11 +41,6 @@ public final class VppNshModule extends AbstractModule {
@Override
protected void configure() {
- // TODO HONEYCOMB-207 workaround:
- if (!isEnabled()) {
- LOG.info("VppNshModule is disabled. Skipping module configuration.");
- return;
- }
LOG.info("Configuring VppNsh module");
// Naming contexts
@@ -70,19 +61,4 @@ public final class VppNshModule extends AbstractModule {
Multibinder.newSetBinder(binder(), DataTreeInitializer.class).addBinding().to(VppNshInitializer.class);
LOG.info("NSH module successfully configured");
}
-
- private static boolean isEnabled() {
- final Injector injector = Guice.createInjector(new AbstractModule() {
- @Override
- protected void configure() {
- // These are plugin specific config attributes
- install(ConfigurationModule.create());
- requestInjection(VppNshConfiguration.class);
- }
- });
-
- final VppNshConfiguration cfgAttributes = injector.getInstance(VppNshConfiguration.class);
- LOG.debug("Configuration for VppNsh module: {}", cfgAttributes);
- return cfgAttributes.isNshEnabled();
- }
}
diff --git a/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/cfgattrs/VppNshConfiguration.java b/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/cfgattrs/VppNshConfiguration.java
deleted file mode 100755
index e6491509d..000000000
--- a/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/cfgattrs/VppNshConfiguration.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2016 Intel and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.vppnsh.impl.cfgattrs;
-
-import com.google.common.base.MoreObjects;
-
-import net.jmob.guice.conf.core.BindConfig;
-import net.jmob.guice.conf.core.InjectConfig;
-import net.jmob.guice.conf.core.Syntax;
-
-@BindConfig(value = "vppnsh", syntax = Syntax.JSON)
-public class VppNshConfiguration {
-
- public boolean isNshEnabled() {
- return Boolean.valueOf(nshEnable);
- }
-
- @InjectConfig("nsh-enabled")
- public String nshEnable;
-
- @Override
- public String toString() {
- return MoreObjects.toStringHelper(this)
- .add("nshEnable", nshEnable)
- .toString();
- }
-}
diff --git a/nsh/impl/src/main/resources/honeycomb-minimal-resources/config/vppnsh.json b/nsh/impl/src/main/resources/honeycomb-minimal-resources/config/vppnsh.json
deleted file mode 100644
index b03a962f1..000000000
--- a/nsh/impl/src/main/resources/honeycomb-minimal-resources/config/vppnsh.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "nsh-enabled": "false"
-} \ No newline at end of file
diff --git a/samples/minimal-distribution/pom.xml b/samples/minimal-distribution/pom.xml
index d3876790f..db4966684 100644
--- a/samples/minimal-distribution/pom.xml
+++ b/samples/minimal-distribution/pom.xml
@@ -30,10 +30,13 @@
<properties>
<exec.parameters>-Xms128m -Xmx128m</exec.parameters>
- <main.class>io.fd.honeycomb.samples.distro.Main</main.class>
+ <main.class>io.fd.honeycomb.infra.distro.Main</main.class>
<interfaces.mapping.version>1.16.12-SNAPSHOT</interfaces.mapping.version>
<honeycomb.min.distro.version>1.16.12-SNAPSHOT</honeycomb.min.distro.version>
<sonar.skip>true</sonar.skip>
+ <distribution.modules>
+ io.fd.honeycomb.samples.interfaces.mapping.SampleInterfaceModule
+ </distribution.modules>
</properties>
<build>
diff --git a/samples/minimal-distribution/src/main/java/io/fd/honeycomb/samples/distro/Main.java b/samples/minimal-distribution/src/main/java/io/fd/honeycomb/samples/distro/Main.java
deleted file mode 100644
index f6b38aa78..000000000
--- a/samples/minimal-distribution/src/main/java/io/fd/honeycomb/samples/distro/Main.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.samples.distro;
-
-import com.google.common.collect.Lists;
-import com.google.inject.Module;
-import io.fd.honeycomb.samples.interfaces.mapping.SampleInterfaceModule;
-import java.util.List;
-
-public class Main {
-
- public static void main(String[] args) {
- final List<Module> sampleModules = Lists.newArrayList(io.fd.honeycomb.infra.distro.Main.BASE_MODULES);
-
- sampleModules.add(new SampleInterfaceModule());
-
- io.fd.honeycomb.infra.distro.Main.init(sampleModules);
- }
-}
diff --git a/vpp-common/minimal-distribution/asciidoc/Readme.adoc b/vpp-common/minimal-distribution/asciidoc/Readme.adoc
deleted file mode 100644
index 1da86caab..000000000
--- a/vpp-common/minimal-distribution/asciidoc/Readme.adoc
+++ /dev/null
@@ -1,3 +0,0 @@
-= minimal-distribution
-
-Overview of minimal-distribution \ No newline at end of file
diff --git a/vpp-common/minimal-distribution/pom.xml b/vpp-common/minimal-distribution/pom.xml
deleted file mode 100644
index 12d11ec1a..000000000
--- a/vpp-common/minimal-distribution/pom.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2015 Cisco and/or its affiliates.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at:
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <parent>
- <groupId>io.fd.honeycomb.common</groupId>
- <artifactId>minimal-distribution-parent</artifactId>
- <version>1.16.12-SNAPSHOT</version>
- <relativePath>../../common/minimal-distribution-parent</relativePath>
- </parent>
-
- <modelVersion>4.0.0</modelVersion>
- <groupId>io.fd.honeycomb.vpp</groupId>
- <artifactId>minimal-distribution</artifactId>
- <version>1.16.12-SNAPSHOT</version>
-
- <properties>
- <main.class>io.fd.honeycomb.vpp.distro.Main</main.class>
- <honeycomb.min.distro.version>1.16.12-SNAPSHOT</honeycomb.min.distro.version>
- <jvpp.version>16.12-SNAPSHOT</jvpp.version>
- <hamcrest.version>1.3</hamcrest.version>
- </properties>
-
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.codehaus.gmaven</groupId>
- <artifactId>groovy-maven-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- </plugin>
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
- <dependencies>
- <dependency>
- <groupId>io.fd.honeycomb</groupId>
- <artifactId>minimal-distribution</artifactId>
- <version>${honeycomb.min.distro.version}</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>naming-context-api</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>naming-context-impl</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>io.fd.vpp</groupId>
- <artifactId>jvpp-registry</artifactId>
- <version>${jvpp.version}</version>
- </dependency>
- <dependency>
- <groupId>io.fd.vpp</groupId>
- <artifactId>jvpp-core</artifactId>
- <version>${jvpp.version}</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vpp-translate-utils</artifactId>
- <version>${project.version}</version>
- </dependency>
-
- <!-- Testing Dependencies -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.google.inject.extensions</groupId>
- <artifactId>guice-testlib</artifactId>
- <version>${guice.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.hamcrest</groupId>
- <artifactId>hamcrest-all</artifactId>
- <version>${hamcrest.version}</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
-</project>
diff --git a/vpp-common/pom.xml b/vpp-common/pom.xml
index d6833cdd3..e7180aea2 100644
--- a/vpp-common/pom.xml
+++ b/vpp-common/pom.xml
@@ -34,7 +34,7 @@
<module>vpp-translate-utils</module>
<module>naming-context-api</module>
<module>naming-context-impl</module>
- <module>minimal-distribution</module>
+ <module>vpp-common-integration</module>
<module>vpp-impl-parent</module>
<module>vpp-translate-test</module>
</modules>
diff --git a/vpp-common/vpp-common-integration/asciidoc/Readme.adoc b/vpp-common/vpp-common-integration/asciidoc/Readme.adoc
new file mode 100644
index 000000000..8c18a3eb2
--- /dev/null
+++ b/vpp-common/vpp-common-integration/asciidoc/Readme.adoc
@@ -0,0 +1,3 @@
+= vpp-common-integration
+
+Overview of vpp-common-integration \ No newline at end of file
diff --git a/vpp-common/vpp-common-integration/pom.xml b/vpp-common/vpp-common-integration/pom.xml
new file mode 100644
index 000000000..2cb031ec8
--- /dev/null
+++ b/vpp-common/vpp-common-integration/pom.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2015 Cisco and/or its affiliates.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at:
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <parent>
+ <groupId>io.fd.honeycomb.common</groupId>
+ <artifactId>impl-parent</artifactId>
+ <version>1.16.12-SNAPSHOT</version>
+ <relativePath>../../common/impl-parent</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>io.fd.honeycomb.vpp</groupId>
+ <artifactId>vpp-common-integration</artifactId>
+ <version>1.16.12-SNAPSHOT</version>
+
+ <properties>
+ <honeycomb.min.distro.version>1.16.12-SNAPSHOT</honeycomb.min.distro.version>
+ <jvpp.version>16.12-SNAPSHOT</jvpp.version>
+ <hamcrest.version>1.3</hamcrest.version>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.gmaven</groupId>
+ <artifactId>groovy-maven-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>io.fd.honeycomb</groupId>
+ <artifactId>minimal-distribution</artifactId>
+ <version>${honeycomb.min.distro.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>naming-context-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>naming-context-impl</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.fd.vpp</groupId>
+ <artifactId>jvpp-registry</artifactId>
+ <version>${jvpp.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.fd.vpp</groupId>
+ <artifactId>jvpp-core</artifactId>
+ <version>${jvpp.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>vpp-translate-utils</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <!-- Testing Dependencies -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.inject.extensions</groupId>
+ <artifactId>guice-testlib</artifactId>
+ <version>${guice.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-all</artifactId>
+ <version>${hamcrest.version}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/ContextsReaderFactoryProvider.java b/vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/ContextsReaderFactoryProvider.java
index 35dd78e4e..d33b8b717 100644
--- a/vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/ContextsReaderFactoryProvider.java
+++ b/vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/ContextsReaderFactoryProvider.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.fd.honeycomb.vpp.distro;
+package io.fd.honeycomb.vpp.common.integration;
import com.google.inject.Inject;
import com.google.inject.name.Named;
diff --git a/vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/JVppCoreProvider.java b/vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/JVppCoreProvider.java
index b8334df55..bbd30fbfb 100644
--- a/vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/JVppCoreProvider.java
+++ b/vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/JVppCoreProvider.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.fd.honeycomb.vpp.distro;
+package io.fd.honeycomb.vpp.common.integration;
import com.google.inject.Inject;
import io.fd.honeycomb.infra.distro.ProviderTrait;
diff --git a/vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/JVppRegistryProvider.java b/vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/JVppRegistryProvider.java
index 9ecdd69ee..fa1d47480 100644
--- a/vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/JVppRegistryProvider.java
+++ b/vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/JVppRegistryProvider.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.fd.honeycomb.vpp.distro;
+package io.fd.honeycomb.vpp.common.integration;
import com.google.inject.Inject;
import io.fd.honeycomb.infra.distro.ProviderTrait;
diff --git a/vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/VppCommonModule.java b/vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/VppCommonModule.java
index 957819f28..9bdba1b14 100644
--- a/vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/VppCommonModule.java
+++ b/vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/VppCommonModule.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.fd.honeycomb.vpp.distro;
+package io.fd.honeycomb.vpp.common.integration;
import com.google.inject.AbstractModule;
import com.google.inject.Singleton;
diff --git a/vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/VppConfigAttributes.java b/vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/VppConfigAttributes.java
index 26b5a8385..af06e05db 100644
--- a/vpp-common/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/distro/VppConfigAttributes.java
+++ b/vpp-common/vpp-common-integration/src/main/java/io/fd/honeycomb/vpp/common/integration/VppConfigAttributes.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.fd.honeycomb.vpp.distro;
+package io.fd.honeycomb.vpp.common.integration;
import net.jmob.guice.conf.core.BindConfig;
import net.jmob.guice.conf.core.InjectConfig;
diff --git a/vpp-common/minimal-distribution/src/main/resources/honeycomb-minimal-resources/config/jvpp.json b/vpp-common/vpp-common-integration/src/main/resources/honeycomb-minimal-resources/config/jvpp.json
index 1d411872e..1d411872e 100644
--- a/vpp-common/minimal-distribution/src/main/resources/honeycomb-minimal-resources/config/jvpp.json
+++ b/vpp-common/vpp-common-integration/src/main/resources/honeycomb-minimal-resources/config/jvpp.json
diff --git a/vpp-common/minimal-distribution/src/test/java/io/fd/honeycomb/vpp/distro/VppCommonModuleTest.java b/vpp-common/vpp-common-integration/src/test/java/io/fd/honeycomb/vpp/common/integration/VppCommonModuleTest.java
index f59134812..476e15919 100644
--- a/vpp-common/minimal-distribution/src/test/java/io/fd/honeycomb/vpp/distro/VppCommonModuleTest.java
+++ b/vpp-common/vpp-common-integration/src/test/java/io/fd/honeycomb/vpp/common/integration/VppCommonModuleTest.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.fd.honeycomb.vpp.distro;
+package io.fd.honeycomb.vpp.common.integration;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
diff --git a/vpp-common/minimal-distribution/src/test/resources/jvpp.json b/vpp-common/vpp-common-integration/src/test/resources/jvpp.json
index 1d411872e..1d411872e 100644
--- a/vpp-common/minimal-distribution/src/test/resources/jvpp.json
+++ b/vpp-common/vpp-common-integration/src/test/resources/jvpp.json
diff --git a/vpp-integration/minimal-distribution/pom.xml b/vpp-integration/minimal-distribution/pom.xml
index 7e1aa0241..36d1e0f1a 100644
--- a/vpp-integration/minimal-distribution/pom.xml
+++ b/vpp-integration/minimal-distribution/pom.xml
@@ -29,11 +29,19 @@
<version>1.16.12-SNAPSHOT</version>
<properties>
- <main.class>io.fd.honeycomb.vpp.integration.distro.Main</main.class>
+ <main.class>io.fd.honeycomb.infra.distro.Main</main.class>
<v3po.version>1.16.12-SNAPSHOT</v3po.version>
<lisp.version>1.16.12-SNAPSHOT</lisp.version>
- <vpp.common.min.distro.version>1.16.12-SNAPSHOT</vpp.common.min.distro.version>
+ <vpp.common.integration.version>1.16.12-SNAPSHOT</vpp.common.integration.version>
<vppnsh.version>1.16.12-SNAPSHOT</vppnsh.version>
+
+ <distribution.modules>
+ io.fd.honeycomb.vpp.common.integration.VppCommonModule,
+ io.fd.honeycomb.lisp.LispModule,
+ io.fd.honeycomb.translate.v3po.V3poModule,
+ // io.fd.honeycomb.vppnsh.impl.VppNshModule
+ <!-- Nsh module by default disabled, because it needs vpp-nsh plugin, which is not part of vpp codebase.-->
+ </distribution.modules>
</properties>
<build>
@@ -62,8 +70,8 @@
<dependencies>
<dependency>
<groupId>io.fd.honeycomb.vpp</groupId>
- <artifactId>minimal-distribution</artifactId>
- <version>${vpp.common.min.distro.version}</version>
+ <artifactId>vpp-common-integration</artifactId>
+ <version>${vpp.common.integration.version}</version>
</dependency>
<dependency>
<groupId>io.fd.honeycomb.v3po</groupId>
diff --git a/vpp-integration/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/integration/distro/Main.java b/vpp-integration/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/integration/distro/Main.java
deleted file mode 100644
index 04377c382..000000000
--- a/vpp-integration/minimal-distribution/src/main/java/io/fd/honeycomb/vpp/integration/distro/Main.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco and/or its affiliates.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package io.fd.honeycomb.vpp.integration.distro;
-
-import com.google.common.collect.Lists;
-import com.google.inject.Module;
-import io.fd.honeycomb.lisp.LispModule;
-import io.fd.honeycomb.translate.v3po.V3poModule;
-import io.fd.honeycomb.vpp.distro.VppCommonModule;
-import io.fd.honeycomb.vppnsh.impl.VppNshModule;
-import java.util.List;
-
-public class Main {
-
- public static void main(String[] args) {
- final List<Module> sampleModules = Lists.newArrayList(io.fd.honeycomb.infra.distro.Main.BASE_MODULES);
-
- // All the plugins should be listed here
- sampleModules.add(new VppCommonModule());
- sampleModules.add(new V3poModule());
- sampleModules.add(new LispModule());
- sampleModules.add(new VppNshModule());
-
- io.fd.honeycomb.infra.distro.Main.init(sampleModules);
- }
-}