Allow HC user to enable/disable NSH module 71/2871/1
authorMarek Gradzki <mgradzki@cisco.com>
Sat, 10 Sep 2016 11:50:26 +0000 (13:50 +0200)
committerMarek Gradzki <mgradzki@cisco.com>
Wed, 14 Sep 2016 06:52:07 +0000 (08:52 +0200)
Because NSH plugin is optional in VPP,
it is disabled by default in HC.

Change-Id: I6842c68b94144b7ba7e9f6f87a2395e0d692a70c
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/VppNshModule.java
nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/cfgattrs/vppnsh.json [deleted file]
nsh/impl/src/main/resources/honeycomb-minimal-resources/config/vppnsh.json [new file with mode: 0644]

index 48f3233..ec1be5b 100755 (executable)
 
 package io.fd.honeycomb.vppnsh.impl;
 
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-
 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;
 import io.fd.honeycomb.data.init.DataTreeInitializer;
-import io.fd.honeycomb.notification.ManagedNotificationProducer;
+import io.fd.honeycomb.translate.read.ReaderFactory;
+import io.fd.honeycomb.translate.v3po.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.oper.VppNshReaderFactory;
 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 io.fd.honeycomb.translate.read.ReaderFactory;
-import io.fd.honeycomb.translate.v3po.util.NamingContext;
-import io.fd.honeycomb.translate.write.WriterFactory;
 import net.jmob.guice.conf.core.ConfigurationModule;
 import org.openvpp.jvpp.nsh.future.FutureJVppNsh;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This is some glue code necessary for Honeycomb distribution to pick up the plugin classes
  */
 public final class VppNshModule extends AbstractModule {
 
+    private static final Logger LOG = LoggerFactory.getLogger(VppNshModule.class);
+
     @Override
     protected void configure() {
-        // These are plugin specific config attributes
-        install(ConfigurationModule.create());
-        requestInjection(VppNshConfiguration.class);
+        // TODO HONEYCOMB-207 workaround:
+        if (!isEnabled()) {
+            LOG.info("VppNshModule is disabled. Skipping module configuration.");
+            return;
+        }
+        LOG.info("Configuring VppNsh module");
 
         // Naming contexts
         bind(NamingContext.class)
@@ -63,5 +68,21 @@ public final class VppNshModule extends AbstractModule {
         Multibinder.newSetBinder(binder(), WriterFactory.class).addBinding().to(VppNshWriterFactory.class);
         Multibinder.newSetBinder(binder(), ReaderFactory.class).addBinding().to(VppNshReaderFactory.class);
         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/vppnsh.json b/nsh/impl/src/main/java/io/fd/honeycomb/vppnsh/impl/cfgattrs/vppnsh.json
deleted file mode 100644 (file)
index f2fe985..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-    "nsh-enabled" : "false"
-}
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
new file mode 100644 (file)
index 0000000..b03a962
--- /dev/null
@@ -0,0 +1,3 @@
+{
+  "nsh-enabled": "false"
+}
\ No newline at end of file