mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-27 14:21:48 +01:00
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
This commit is contained in:
parent
1af8e137e3
commit
d6811710c6
@ -130,10 +130,4 @@
|
||||
<bundle>mvn:org.onosproject/onos-core-trivial/@ONOS-VERSION</bundle>
|
||||
</feature>
|
||||
|
||||
<feature name="onos-netconf" version="@FEATURE-VERSION"
|
||||
description="ONOS Netconf providers">
|
||||
<feature>onos-api</feature>
|
||||
<bundle>mvn:org.onosproject/onos-netconf-provider-device/@ONOS-VERSION</bundle>
|
||||
</feature>
|
||||
|
||||
</features>
|
||||
|
||||
24
providers/netconf/app/app.xml
Normal file
24
providers/netconf/app/app.xml
Normal file
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright 2015 Open Networking Laboratory
|
||||
~
|
||||
~ 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.
|
||||
-->
|
||||
<app name="org.onosproject.netconf" origin="ON.Lab" version="${project.version}"
|
||||
featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
|
||||
features="${project.artifactId}">
|
||||
<description>${project.description}</description>
|
||||
|
||||
<artifact>mvn:${project.groupId}/onos-netconf-provider-device/${project.version}</artifact>
|
||||
<!-- Question: should there be the jnc stuff here? Or is it just for testing -->
|
||||
</app>
|
||||
27
providers/netconf/app/features.xml
Normal file
27
providers/netconf/app/features.xml
Normal file
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<!--
|
||||
~ Copyright 2015 Open Networking Laboratory
|
||||
~
|
||||
~ 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.
|
||||
-->
|
||||
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
|
||||
<repository>mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features</repository>
|
||||
<feature name="${project.artifactId}" version="${project.version}"
|
||||
description="${project.description}">
|
||||
<feature>onos-api</feature>
|
||||
<bundle>mvn:io.netty/netty/3.9.2.Final</bundle>
|
||||
<bundle>mvn:${project.groupId}/onos-netconf-provider-device/${project.version}</bundle>
|
||||
<!-- Question: should there be the jnc stuff here? Or is it just for testing -->
|
||||
</feature>
|
||||
</features>
|
||||
|
||||
43
providers/netconf/app/pom.xml
Normal file
43
providers/netconf/app/pom.xml
Normal file
@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright 2015 Open Networking Laboratory
|
||||
~
|
||||
~ 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/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.onosproject</groupId>
|
||||
<artifactId>onos-netconf-providers</artifactId>
|
||||
<version>1.2.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<artifactId>onos-netconf</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<description>NetConf protocol southbound providers</description>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.onosproject</groupId>
|
||||
<artifactId>onos-netconf-provider-device</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<!-- TODO: add other dependencies here as more bundles are added to the app -->
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@ -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>
|
||||
|
||||
@ -39,6 +39,7 @@ import org.apache.felix.scr.annotations.Property;
|
||||
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 @@ public class NetconfDeviceProvider extends AbstractProvider
|
||||
@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 @@ public class NetconfDeviceProvider extends AbstractProvider
|
||||
@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 @@ public class NetconfDeviceProvider extends AbstractProvider
|
||||
|
||||
@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 @@ public class NetconfDeviceProvider extends AbstractProvider
|
||||
}
|
||||
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 @@ public class NetconfDeviceProvider extends AbstractProvider
|
||||
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 {
|
||||
|
||||
@ -33,6 +33,7 @@
|
||||
|
||||
<modules>
|
||||
<module>device</module>
|
||||
<module>app</module>
|
||||
</modules>
|
||||
|
||||
<dependencies>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user