Netconf resolution service
authorAlexis de Talhouët <adetalhouet89@gmail.com>
Sun, 17 Feb 2019 14:31:35 +0000 (09:31 -0500)
committerAlexis de Talhouët <adetalhouet89@gmail.com>
Sun, 17 Feb 2019 16:37:54 +0000 (16:37 +0000)
Change-Id: I0346c88cd11136561426260a206bd7bf07f90dd3
Issue-ID: CCSDK-1086
Signed-off-by: Alexis de Talhouët <adetalhouet89@gmail.com>
components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Definitions/activation-blueprint.json
components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Definitions/node_types.json
components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Scripts/python/NetconfRpcExample.py
components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Templates/hostname-mapping.json [new file with mode: 0644]
components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Templates/hostname-template.vtl [new file with mode: 0644]
components/model-catalog/definition-type/starter-type/node_type/component-netconf-executor.json
components/scripts/python/ccsdk_netconf/common.py
components/scripts/python/ccsdk_netconf/netconfclient.py

index 07c988b..162411f 100644 (file)
                 },
                 "inputs": {
                   "instance-dependencies": [
-                    "json-parser-service"
+
+                  ],
+                  "artifact-prefix-names": [
+                    "hostname"
                   ]
                 },
                 "outputs": {
           }
         },
         "artifacts": {
+          "hostname-template": {
+            "type": "artifact-template-velocity",
+            "file": "Templates/hostname-template.vtl"
+          },
+          "hostname-mapping": {
+            "type": "artifact-mapping-resource",
+            "file": "Templates/hostname-mapping.json"
+          },
           "component-script": {
             "type": "artifact-script-jython",
             "file": "Scripts/python/NetconfRpcExample.py"
index 6527183..d3093d9 100644 (file)
                   "entry_schema": {
                     "type": "string"
                   }
+                },
+                "artifact-prefix-names": {
+                  "required": false,
+                  "description": "Template , Resource Assignment Artifact Prefix names",
+                  "type": "list",
+                  "entry_schema": {
+                    "type": "string"
+                  }
                 }
               },
               "outputs": {
index acdb94a..26c66b6 100644 (file)
@@ -13,8 +13,8 @@
 #  limitations under the License.
 
 import netconf_constant
+from common import ResolutionHelper
 from java.lang import Exception as JavaException
-from netconfclient import NetconfClient
 from org.onap.ccsdk.apps.blueprintsprocessor.functions.netconf.executor import \
   NetconfComponentFunction
 
@@ -26,21 +26,23 @@ class NetconfRpcExample(NetconfComponentFunction):
       log = globals()[netconf_constant.SERVICE_LOG]
       print(globals())
       nc = NetconfClient(log, self, "netconf-connection")
-      nc.connect()
+      rr = ResolutionHelper(self)
 
-      payload = "<configuration xmlns:junos=\"http://xml.juniper.net/junos/17.4R1/junos\"><system xmlns=\"http://yang.juniper.net/junos-qfx/conf/system\"><host-name operation=\"delete\"/><host-name operation=\"create\">DEMO</host-name></system></configuration>"
+      payload = rr.resolve_and_generate_message_from_template_prefix("hostname")
 
+      nc.connect()
       response = nc.lock(message_id="lock-123")
       if not response.isSuccess():
         log.error(response.errorMessage)
 
-      # nc.edit_config(message_id="edit-config-1", message_content=payload,edit_default_peration="none")
+      nc.edit_config(message_id="edit-config-1", message_content=payload,
+                     edit_default_peration="none")
       # nc.validate(message_id="validate-123")
       # nc.discard_change(message_id="discard-123")
-      nc.validate(message_id="validate-123")
-      nc.commit(message_id="commit-123")
-      nc.unlock(message_id="unlock-123")
-      nc.disconnect()
+      nc.validate(message_id="validate-123")
+      nc.commit(message_id="commit-123")
+      nc.unlock(message_id="unlock-123")
+      nc.disconnect()
 
     except JavaException, err:
       log.error("Java Exception in the script {}", err)
diff --git a/components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Templates/hostname-mapping.json b/components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Templates/hostname-mapping.json
new file mode 100644 (file)
index 0000000..1e02d69
--- /dev/null
@@ -0,0 +1,13 @@
+[
+  {
+    "name": "hostname",
+    "input-param": true,
+    "property": {
+      "type": "string"
+    },
+    "dictionary-name": "hostname",
+    "dictionary-source": "input",
+    "dependencies": [
+    ]
+  }
+]
diff --git a/components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Templates/hostname-template.vtl b/components/model-catalog/blueprint-model/test-blueprint/baseconfiguration/Templates/hostname-template.vtl
new file mode 100644 (file)
index 0000000..1e80b6d
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration xmlns:junos="http://xml.juniper.net/junos/17.4R1/junos">
+   <system xmlns="http://yang.juniper.net/junos-qfx/conf/system">
+      <host-name operation="delete" />
+      <host-name operation="create">$hostname</host-name>
+   </system>
+</configuration>
index 0bbcba9..b59a738 100644 (file)
               "entry_schema": {\r
                 "type": "string"\r
               }\r
+            },\r
+            "artifact-prefix-names": {\r
+              "required": false,\r
+              "description": "Template , Resource Assignment Artifact Prefix names",\r
+              "type": "list",\r
+              "entry_schema": {\r
+                "type": "string"\r
+              }\r
             }\r
           },\r
           "outputs": {\r
@@ -43,5 +51,5 @@
       }\r
     }\r
   },\r
-  "derived_from": "tosca.nodes.Component"
+  "derived_from": "tosca.nodes.Component"\r
 }
\ No newline at end of file
index 139597f..25244b1 100644 (file)
@@ -1,2 +1,25 @@
+#  Copyright (c) 2019 Bell Canada.
+#
+#  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.
 
+class ResolutionHelper:
 
+  def __init__(self, component_function):
+    self.component_function = component_function
+
+  def resolve_and_generate_message_from_template_prefix(self, artifact_prefix):
+    return self.component_function.resolveAndGenerateMessage(artifact_prefix)
+
+  def resolve_and_generate_message(self, artifact_mapping, artifact_template):
+    return self.component_function.resolveAndGenerateMessage(artifact_mapping,
+                                                             artifact_template)
index cdaf840..341aae7 100644 (file)
@@ -1,7 +1,6 @@
 from netconf_constant import CONFIG_TARGET_RUNNING, CONFIG_TARGET_CANDIDATE, \
   CONFIG_DEFAULT_OPERATION_REPLACE
 
-
 class NetconfClient:
 
   def __init__(self, log, component_function, requirement_name):
@@ -28,7 +27,6 @@ class NetconfClient:
 
   def get_config(self, message_id, filter="",
       config_target=CONFIG_TARGET_RUNNING, message_timeout=30):
-    self.log.info("in the ncclient getConfig {}", message_id)
     device_response = self.netconf_rpc_client.getConfig(message_id, filter,
                                                         config_target,
                                                         message_timeout)