connect netconf devices through ssh key

Change-Id: I1a0961ffffd33559f903ead0634dbb5492e9a154
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 c04e23e..3ddc4ff 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
@@ -318,10 +318,8 @@
                             UNKNOWN, UNKNOWN,
                             cid, false,
                             annotations);
-                    deviceKeyAdminService.addKey(
-                            DeviceKey.createDeviceKeyUsingUsernamePassword(
-                                    DeviceKeyId.deviceKeyId(deviceId.toString()),
-                                    null, addr.name(), addr.password()));
+                    storeDeviceKey(addr, deviceId);
+
                     if (deviceService.getDevice(deviceId) == null) {
                         providerService.deviceConnected(deviceId, deviceDescription);
                     }
@@ -408,10 +406,7 @@
                             UNKNOWN, UNKNOWN,
                             cid, false,
                             annotations);
-                    deviceKeyAdminService.addKey(
-                            DeviceKey.createDeviceKeyUsingUsernamePassword(
-                                    DeviceKeyId.deviceKeyId(deviceId.toString()),
-                                    null, addr.name(), addr.password()));
+                    storeDeviceKey(addr, deviceId);
                     checkAndUpdateDevice(deviceId, deviceDescription);
                 });
             } catch (ConfigException e) {
@@ -420,6 +415,20 @@
         }
     }
 
+    private void storeDeviceKey(NetconfProviderConfig.NetconfDeviceAddress addr, DeviceId deviceId) {
+        if (addr.sshkey().equals("")) {
+            deviceKeyAdminService.addKey(
+                    DeviceKey.createDeviceKeyUsingUsernamePassword(
+                            DeviceKeyId.deviceKeyId(deviceId.toString()),
+                            null, addr.name(), addr.password()));
+        } else {
+            deviceKeyAdminService.addKey(
+                    DeviceKey.createDeviceKeyUsingSshKey(
+                            DeviceKeyId.deviceKeyId(deviceId.toString()),
+                            null, addr.name(), addr.password(), addr.sshkey()));
+        }
+    }
+
     private void initiateConnection(DeviceId deviceId, MastershipRole newRole) {
         try {
             if (isReachable(deviceId)) {