Thomas Vachuska
Committed by Gerrit Code Review

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
......@@ -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>
......
<?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>
<?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>
<?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>
This diff is collapsed. Click to expand it.
......@@ -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>
......