[ONOS-6076] Moving tl1,snmp,rest netcfg to devices key
Change-Id: I332d6b9a3afad5bc8461f6bb94e2d0a3c2ca643e
diff --git a/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProvider.java b/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProvider.java
index 2a36950..fb77c70 100644
--- a/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProvider.java
+++ b/providers/snmp/device/src/main/java/org/onosproject/provider/snmp/device/impl/SnmpDeviceProvider.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.provider.snmp.device.impl;
+import com.google.common.collect.ImmutableList;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -36,6 +37,7 @@
import org.onosproject.net.config.NetworkConfigEvent;
import org.onosproject.net.config.NetworkConfigListener;
import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.net.config.basics.SubjectFactories;
import org.onosproject.net.device.DefaultDeviceDescription;
import org.onosproject.net.device.DeviceDescription;
import org.onosproject.net.device.DeviceDescriptionDiscovery;
@@ -52,6 +54,8 @@
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
+import java.util.List;
+import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
@@ -72,7 +76,7 @@
private static final String UNKNOWN = "unknown";
private static final String APP_NAME = "org.onosproject.snmp";
- private static final String SCHEME = "snmp";
+ protected static final String SCHEME = "snmp";
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected SnmpController controller;
@@ -102,7 +106,7 @@
protected final NetworkConfigListener cfgLister = new InternalNetworkConfigListener();
- protected final ConfigFactory factory =
+ protected final List<ConfigFactory> factories = ImmutableList.of(
new ConfigFactory<ApplicationId, SnmpProviderConfig>(APP_SUBJECT_FACTORY,
SnmpProviderConfig.class,
"devices",
@@ -111,7 +115,15 @@
public SnmpProviderConfig createConfig() {
return new SnmpProviderConfig();
}
- };
+ },
+ new ConfigFactory<DeviceId, SnmpDeviceConfig>(SubjectFactories.DEVICE_SUBJECT_FACTORY,
+ SnmpDeviceConfig.class,
+ SCHEME) {
+ @Override
+ public SnmpDeviceConfig createConfig() {
+ return new SnmpDeviceConfig();
+ }
+ });
/**
@@ -127,8 +139,10 @@
providerService = providerRegistry.register(this);
appId = coreService.registerApplication(APP_NAME);
- netCfgService.registerConfigFactory(factory);
+ factories.forEach(netCfgService::registerConfigFactory);
netCfgService.addListener(cfgLister);
+ connectDevices();
+ addOrRemoveDevicesConfig();
modified(context);
log.info("Started");
}
@@ -145,7 +159,7 @@
log.error("Device builder did not terminate");
}
deviceBuilderExecutor.shutdownNow();
- netCfgService.unregisterConfigFactory(factory);
+ factories.forEach(netCfgService::unregisterConfigFactory);
netCfgService.removeListener(cfgLister);
providerRegistry.unregister(this);
providerService = null;
@@ -157,14 +171,16 @@
log.info("Modified");
}
+ //Old method to register devices provided via net-cfg under apps/snmp/ tree
private void addOrRemoveDevicesConfig() {
SnmpProviderConfig cfg = netCfgService.getConfig(appId, SnmpProviderConfig.class);
if (cfg != null) {
try {
cfg.getDevicesInfo().forEach(info -> {
- SnmpDevice device = new DefaultSnmpDevice(info.ip().toString(),
- info.port(), info.username(), info.password());
- buildDevice(device);
+ buildDevice(new DefaultSnmpDevice(info.ip().toString(),
+ info.port(), info.username(),
+ info.password()));
+
});
} catch (ConfigException e) {
log.error("Cannot read config error " + e);
@@ -172,6 +188,18 @@
}
}
+ //Method to register devices provided via net-cfg under devices/ tree
+ private void connectDevices() {
+ Set<DeviceId> deviceSubjects =
+ netCfgService.getSubjects(DeviceId.class, SnmpDeviceConfig.class);
+ deviceSubjects.forEach(deviceId -> {
+ SnmpDeviceConfig config =
+ netCfgService.getConfig(deviceId, SnmpDeviceConfig.class);
+ buildDevice(new DefaultSnmpDevice(config.ip().toString(),
+ config.port(), config.username(), config.password()));
+ });
+ }
+
private void buildDevice(SnmpDevice device) {
if (device != null) {
log.debug("Device Detail:host={}, port={}, state={}",
@@ -310,12 +338,19 @@
@Override
public void event(NetworkConfigEvent event) {
- addOrRemoveDevicesConfig();
+ if (event.configClass().equals(SnmpDeviceConfig.class)) {
+ connectDevices();
+ } else {
+ log.warn("Injecting device via this Json is deprecated, " +
+ "please put configuration under devices/");
+ addOrRemoveDevicesConfig();
+ }
}
@Override
public boolean isRelevant(NetworkConfigEvent event) {
- return event.configClass().equals(SnmpProviderConfig.class) &&
+ return (event.configClass().equals(SnmpDeviceConfig.class) ||
+ event.configClass().equals(SnmpProviderConfig.class)) &&
(event.type() == NetworkConfigEvent.Type.CONFIG_ADDED ||
event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED);
}