Turned netconf providers into an app and made NetconfDeviceProvider register its configs with ComponentConfigService.
More cleanup needs to be done to avoid log messages with "+" and some other stylistic issues.
Change-Id: Ic1be1ce6d3340f5a6284ba5514d0052e01bdaaed
diff --git a/providers/netconf/device/pom.xml b/providers/netconf/device/pom.xml
index 192d8e3..0ebe079 100644
--- a/providers/netconf/device/pom.xml
+++ b/providers/netconf/device/pom.xml
@@ -14,134 +14,138 @@
~ 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/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
+<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/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
- <parent>
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-netconf-providers</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>onos-netconf-provider-device</artifactId>
+ <packaging>bundle</packaging>
+
+ <description>ONOS Netconf protocol device provider</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>ch.ethz.ganymed</groupId>
+ <artifactId>ganymed-ssh2</artifactId>
+ <version>262</version>
+ </dependency>
+ <dependency>
+ <!-- TODO: change this appropriately when the official TailF JNC is available -->
<groupId>org.onosproject</groupId>
- <artifactId>onos-netconf-providers</artifactId>
- <version>1.2.0-SNAPSHOT</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
+ <artifactId>jnc</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jdom</groupId>
+ <artifactId>jdom2</artifactId>
+ <version>2.0.5</version>
+ </dependency>
+ <dependency>
+ <groupId>jaxen</groupId>
+ <artifactId>jaxen</artifactId>
+ <version>1.1.4</version>
+ <optional>true</optional>
+ </dependency>
+ </dependencies>
- <artifactId>onos-netconf-provider-device</artifactId>
- <packaging>bundle</packaging>
-
- <description>ONOS Netconf protocol device provider</description>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-shade-plugin</artifactId>
- <version>2.3</version>
- <configuration>
- <filters>
- <filter>
- <artifact>com.tailf:JNC</artifact>
- <includes>
- <include>com/tailf/jnc/**</include>
- </includes>
- </filter>
- <filter>
- <artifact>ch.ethz.ganymed:ganymed-ssh2</artifact>
- <includes>
- <include>ch/ethz/ssh2/**</include>
- </includes>
- </filter>
- <filter>
- <artifact>org.jdom:jdom2</artifact>
- <includes>
- <include>org/jdom2/**</include>
- </includes>
- </filter>
- </filters>
- </configuration>
- <executions>
- <execution>
- <phase>package</phase>
- <goals>
- <goal>shade</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-scr-plugin</artifactId>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <configuration>
- <instructions>
- <Export-Package>
- com.tailf.jnc,
- ch.ethz.ssh2,
- ch.ethz.ssh2.auth,
- ch.ethz.ssh2.channel,
- ch.ethz.ssh2.crypto,
- ch.ethz.ssh2.crypto.cipher,
- ch.ethz.ssh2.crypto.dh,
- ch.ethz.ssh2.crypto.digest,
- ch.ethz.ssh2.log,
- ch.ethz.ssh2.packets,
- ch.ethz.ssh2.server,
- ch.ethz.ssh2.sftp,
- ch.ethz.ssh2.signature,
- ch.ethz.ssh2.transport,
- ch.ethz.ssh2.util,
- org.jdom2,
- org.jdom2.input,
- org.jdom2.output,
- org.jdom2.adapters,
- org.jdom2.filter,
- org.jdom2.internal,
- org.jdom2.located,
- org.jdom2.transform,
- org.jdom2.util,
- org.jdom2.xpath,
- org.jdom2.input.sax,
- org.jdom2.input.stax,
- org.jdom2.output.support,
- org.jdom2.xpath.jaxen,
- org.jdom2.xpath.util
- </Export-Package>
- </instructions>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- <dependency>
- <groupId>ch.ethz.ganymed</groupId>
- <artifactId>ganymed-ssh2</artifactId>
- <version>262</version>
- </dependency>
- <dependency>
- <!-- TODO: change this appropriately when the official TailF JNC is available -->
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <version>2.3</version>
+ <configuration>
+ <filters>
+ <filter>
+ <artifact>com.tailf:JNC</artifact>
+ <includes>
+ <include>com/tailf/jnc/**</include>
+ </includes>
+ </filter>
+ <filter>
+ <artifact>ch.ethz.ganymed:ganymed-ssh2</artifact>
+ <includes>
+ <include>ch/ethz/ssh2/**</include>
+ </includes>
+ </filter>
+ <filter>
+ <artifact>org.jdom:jdom2</artifact>
+ <includes>
+ <include>org/jdom2/**</include>
+ </includes>
+ </filter>
+ </filters>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-scr-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <configuration>
+ <instructions>
+ <Export-Package>
+ com.tailf.jnc,
+ ch.ethz.ssh2,
+ ch.ethz.ssh2.auth,
+ ch.ethz.ssh2.channel,
+ ch.ethz.ssh2.crypto,
+ ch.ethz.ssh2.crypto.cipher,
+ ch.ethz.ssh2.crypto.dh,
+ ch.ethz.ssh2.crypto.digest,
+ ch.ethz.ssh2.log,
+ ch.ethz.ssh2.packets,
+ ch.ethz.ssh2.server,
+ ch.ethz.ssh2.sftp,
+ ch.ethz.ssh2.signature,
+ ch.ethz.ssh2.transport,
+ ch.ethz.ssh2.util,
+ org.jdom2,
+ org.jdom2.input,
+ org.jdom2.output,
+ org.jdom2.adapters,
+ org.jdom2.filter,
+ org.jdom2.internal,
+ org.jdom2.located,
+ org.jdom2.transform,
+ org.jdom2.util,
+ org.jdom2.xpath,
+ org.jdom2.input.sax,
+ org.jdom2.input.stax,
+ org.jdom2.output.support,
+ org.jdom2.xpath.jaxen,
+ org.jdom2.xpath.util
+ </Export-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
<groupId>org.onosproject</groupId>
- <artifactId>jnc</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>org.jdom</groupId>
- <artifactId>jdom2</artifactId>
- <version>2.0.5</version>
- </dependency>
- <dependency>
- <groupId>jaxen</groupId>
- <artifactId>jaxen</artifactId>
- <version>1.1.4</version>
- <optional>true</optional>
- </dependency>
- </dependencies>
+ <artifactId>onos-maven-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
</project>
diff --git a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
index 9336adb..5fb6ead 100644
--- a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
+++ b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
@@ -39,6 +39,7 @@
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.onlab.packet.ChassisId;
+import org.onosproject.cfg.ComponentConfigService;
import org.onosproject.cluster.ClusterService;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
@@ -78,9 +79,11 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected ClusterService clusterService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected ComponentConfigService cfgService;
+
private ExecutorService deviceBuilder = Executors
- .newFixedThreadPool(1,
- groupedThreads("onos/netconf", "device-creator"));
+ .newFixedThreadPool(1, groupedThreads("onos/netconf", "device-creator"));
// Delay between events in ms.
private static final int EVENTINTERVAL = 5;
@@ -90,7 +93,7 @@
@Property(name = "devConfigs", value = "", label = "Instance-specific configurations")
private String devConfigs = null;
- @Property(name = "devPasswords", value = "", label = "Instace-specific password")
+ @Property(name = "devPasswords", value = "", label = "Instance-specific password")
private String devPasswords = null;
/**
@@ -102,13 +105,15 @@
@Activate
public void activate(ComponentContext context) {
- log.info("Netconf Device Provider Started");
+ cfgService.registerProperties(getClass());
providerService = providerRegistry.register(this);
modified(context);
+ log.info("Started");
}
@Deactivate
public void deactivate(ComponentContext context) {
+ cfgService.unregisterProperties(getClass(), false);
try {
for (Entry<DeviceId, NetconfDevice> deviceEntry : netconfDeviceMap
.entrySet()) {
@@ -134,13 +139,9 @@
}
Dictionary<?, ?> properties = context.getProperties();
String deviceCfgValue = get(properties, "devConfigs");
- log.info("Getting Device configuration from cfg file: "
- + deviceCfgValue);
+ log.info("Settings: devConfigs={}", deviceCfgValue);
if (!isNullOrEmpty(deviceCfgValue)) {
addOrRemoveDevicesConfig(deviceCfgValue);
- } else {
- log.info("Device Configuration value receiviced from the property 'devConfigs': "
- + deviceCfgValue + ", is not valid");
}
}
@@ -148,11 +149,9 @@
for (String deviceEntry : deviceConfig.split(",")) {
NetconfDevice device = processDeviceEntry(deviceEntry);
if (device != null) {
- log.info("Device Detail: " + "username: "
- + device.getUsername() + ", host: "
- + device.getSshHost() + ", port: "
- + device.getSshPort() + " device state: "
- + device.getDeviceState().name());
+ log.info("Device Detail: username: {}, host={}, port={}, state={}",
+ device.getUsername(), device.getSshHost(),
+ device.getSshPort(), device.getDeviceState().name());
if (device.isActive()) {
deviceBuilder.submit(new DeviceCreator(device, true));
} else {