summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cds-ui/application/.dockerignore (renamed from cds-ui/.dockerignore)0
-rw-r--r--cds-ui/application/Dockerfile (renamed from cds-ui/Dockerfile)0
-rw-r--r--cds-ui/application/pom.xml3
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.html6
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.scss9
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.ts135
-rw-r--r--cds-ui/client/src/app/feature-modules/blueprint/modify-template/modify-template.component.html4
-rw-r--r--components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/activation-blueprint.json13
-rw-r--r--components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/config-assign-pnf-mapping.json14
-rw-r--r--components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/config-deploy-pnf-mapping.json17
-rw-r--r--components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/data_types.json13
-rw-r--r--components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/resources_definition_types.json25
-rw-r--r--components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Scripts/python/RestconfConfigDeploy.py123
-rw-r--r--components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Templates/config-assign-restconf-configlet-template.vtl24
-rw-r--r--components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Templates/config-deploy-restconf-mount-template.vtl6
-rwxr-xr-xcomponents/model-catalog/resource-dictionary/starter-dictionary/entity.json15
-rw-r--r--ms/blueprintsprocessor/application/src/main/java/org/onap/ccsdk/cds/blueprintsprocessor/BlueprintHttpServer.java33
-rw-r--r--ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BasicAuthRestClientService.kt2
-rw-r--r--ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BlueprintWebClientService.kt9
-rw-r--r--ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/TokenAuthRestClientService.kt2
-rw-r--r--ms/blueprintsprocessor/modules/commons/rest-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/RestClientServiceTest.kt2
-rw-r--r--pom.xml6
22 files changed, 243 insertions, 218 deletions
diff --git a/cds-ui/.dockerignore b/cds-ui/application/.dockerignore
index 00137e31f..00137e31f 100644
--- a/cds-ui/.dockerignore
+++ b/cds-ui/application/.dockerignore
diff --git a/cds-ui/Dockerfile b/cds-ui/application/Dockerfile
index 5bf65f428..5bf65f428 100644
--- a/cds-ui/Dockerfile
+++ b/cds-ui/application/Dockerfile
diff --git a/cds-ui/application/pom.xml b/cds-ui/application/pom.xml
index 842655934..3ab1d338b 100644
--- a/cds-ui/application/pom.xml
+++ b/cds-ui/application/pom.xml
@@ -56,7 +56,7 @@ limitations under the License.
<goal>execute</goal>
</goals>
<configuration>
- <source>../TagVersion.groovy</source>
+ <source>${project.basedir}/../../TagVersion.groovy</source>
</configuration>
</execution>
</executions>
@@ -80,7 +80,6 @@ limitations under the License.
<name>${image.name}</name>
<build>
<cleanup>try</cleanup>
- <dockerFileDir>..</dockerFileDir>
<tags>
<tag>${project.docker.latestminortag.version}</tag>
<tag>${project.docker.latestfulltag.version}</tag>
diff --git a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.html b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.html
index 2b88bcfcf..1ce5bf5b7 100644
--- a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.html
+++ b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.html
@@ -23,9 +23,9 @@ limitations under the License.
<!-- <div style="width:inherit; height: inherit; position: fixed;z-index: 1; background-color: rgb(0,0,0);background-color: rgba(0,0,0,0.4);"></div> -->
<div style="display: flex;">
<div>
- <i class="fa fa-folder" aria-hidden="true" style="color:#3f51b5; font-size: 20px;margin: 3px; cursor: pointer;" (click)="enableNameInputEl('createFolder')"></i>
- <i class="fa fa-file" aria-hidden="true" style="color:#3f51b5; font-size: 18px; margin: 3px; cursor: pointer;" (click)="enableNameInputEl('createFile')"></i>
- <i class="fa fa-trash" aria-hidden="true" style="color:#3f51b5; font-size: 20px; margin: 3px; cursor: pointer;" (click)="deleteFolderOrFile('deleteFile')"></i>
+ <i class="fa fa-folder" aria-hidden="true" style="color:#3f51b5; font-size: 20px;margin: 3px; cursor: pointer;" [ngClass] ="{'fa-disabled': selectedFileObj.type == 'file' || selectedFileObj.type == ''}" (click)="enableNameInputEl('createFolder')"></i>
+ <i class="fa fa-file" aria-hidden="true" style="color:#3f51b5; font-size: 18px; margin: 3px; cursor: pointer;" [ngClass] ="{'fa-disabled' : selectedFileObj.type == 'file' ||selectedFileObj.type == ''}" (click)="enableNameInputEl('createFile')"></i>
+ <i class="fa fa-trash" aria-hidden="true" style="color:#3f51b5; font-size: 20px; margin: 3px; cursor: pointer;" [ngClass] ="{'fa-disabled' : selectedFileObj.type == ''}" (click)="deleteFolderOrFile('deleteFile')"></i>
</div>
<div>
<input *ngIf="isNameTextboxEnablled" type="text" (focusout)="createFolderOrFile($event)"/>
diff --git a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.scss b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.scss
index ad2e03833..fac43eb43 100644
--- a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.scss
+++ b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.scss
@@ -63,4 +63,13 @@ limitations under the License.
.background-highlight {
background-color: #3f51b5 !important;
color: white !important;
+ }
+
+ .fa-disabled {
+ opacity: 0.6;
+ pointer-events: none;
+ }
+
+ .mat-tree-node {
+ min-height: 40px !important;
} \ No newline at end of file
diff --git a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.ts b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.ts
index eaac8cbde..57d934b9a 100644
--- a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.ts
+++ b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/editor/editor.component.ts
@@ -85,9 +85,11 @@ export class EditorComponent implements OnInit {
activeNode: any;
selectedFolder: string;
activationBlueprint: string;
- isNameTextboxEnablled : boolean = false;
- fileAction : string;
- filetoDelete : string;
+ isNameTextboxEnablled: boolean = false;
+ fileAction: string;
+ filetoDelete: string;
+ currentFilePath: string = '';
+ selectedFileObj = { name: '', type: '' };
private transformer = (node: Node, level: number) => {
return {
@@ -118,9 +120,6 @@ export class EditorComponent implements OnInit {
this.dataSource.data = this.filesTree;
}
- fileClicked(file) {
- console.log('selected file:' + file);
- }
editorContent() {
this.editor.setTheme("eclipse");
this.editor.getEditor().setOptions({
@@ -162,7 +161,8 @@ export class EditorComponent implements OnInit {
this.filesData.forEach(fileNode => {
if (this.selectedFile && fileNode.name.includes(this.blueprintName.trim()) && fileNode.name.includes(this.selectedFile.trim())) {
fileNode.data = this.text;
- } else if (this.selectedFile && fileNode.name.includes(this.selectedFile.trim())) {
+ } else if (this.selectedFile && fileNode.name.includes(this.currentFilePath)) {
+ // this.selectedFile && fileNode.name.includes(this.selectedFile.trim())) {
fileNode.data = this.text;
}
});
@@ -184,8 +184,13 @@ export class EditorComponent implements OnInit {
}
selectFileToView(file) {
+ this.currentFilePath = '';
+ this.expandParents(file);
+ this.selectedFileObj.name = file.name;
+ this.selectedFileObj.type = 'file';
this.selectedFile = file.name;
this.filetoDelete = file.name;
+ this.currentFilePath = this.currentFilePath + this.selectedFile;
this.filesData.forEach((fileNode) => {
if (fileNode.name.includes(file.name)) {
this.text = fileNode.data;
@@ -247,48 +252,47 @@ export class EditorComponent implements OnInit {
}
selectFolder(node) {
+ this.currentFilePath = '';
+ this.expandParents(node);
this.selectedFolder = node.name;
this.filetoDelete = node.name;
- console.log(node);
- // this.createFolderOrFile(node.name, 'folder');
+ this.selectedFileObj.name = node.name;
+ this.selectedFileObj.type = 'folder';
+ this.currentFilePath = this.currentFilePath + this.selectedFolder + '/';
}
createFolderOrFile(name) {
- let newFilesData: [any] = this.filesData;
- let newFileNode = {
- name: '',
- data: ''
- }
- let newFileNode1 = {
- name: '',
- data: ''
- }
- for(let i=0; i< this.filesData.length; i++) {
- if (this.filesData[i].name.includes(this.selectedFolder)) {
- if(this.fileAction == 'createFolder') {
- newFileNode.name = this.filesData[i].name + name.srcElement.value + '/';
- newFileNode.data = '';
-
- newFileNode1.name = this.filesData[i].name + name.srcElement.value + '/README.md'
- newFileNode1.data = name.srcElement.value + ' Folder';
- } else {
- newFileNode.name = this.filesData[i].name + name.srcElement.value;
- newFileNode.data = '';
- }
- break;
+ if (name && name.srcElement.value !== null && name.srcElement.value !== '') {
+ let newFilesData: [any] = this.filesData;
+ let newFileNode = {
+ name: '',
+ data: ''
+ }
+ let newFileNode1 = {
+ name: '',
+ data: ''
+ }
+ if (this.fileAction == 'createFolder') {
+ newFileNode.name = this.currentFilePath + name.srcElement.value + '/'
+ newFileNode.data = '';
+ newFileNode1.name = this.currentFilePath + name.srcElement.value + '/README.md'
+ newFileNode1.data = name.srcElement.value + ' Folder';
+ this.filesData.push(newFileNode);
+ this.filesData.push(newFileNode1);
+ } else {
+ newFileNode.name = this.currentFilePath + name.srcElement.value;
+ newFileNode.data = '';
+ this.filesData.push(newFileNode);
}
+ this.arrangeTreeData(this.filesData);
}
-
- this.filesData.splice(this.findIndexForNewNode()+1, 0, newFileNode);
- this.filesData.splice(this.findIndexForNewNode()+1, 0, newFileNode1);
- this.arrangeTreeData(this.filesData);
}
findIndexForNewNode() {
let indexForNewNode;
- for(let i=0; i< this.filesData.length; i++) {
+ for (let i = 0; i < this.filesData.length; i++) {
if (this.filesData[i].name.includes(this.selectedFolder)) {
- indexForNewNode = i;
+ indexForNewNode = i;
}
}
return indexForNewNode;
@@ -300,7 +304,6 @@ export class EditorComponent implements OnInit {
paths.forEach((path) => {
const pathParts = path.name.split('/');
- // pathParts.shift();
let currentLevel = tree;
pathParts.forEach((part) => {
@@ -313,16 +316,16 @@ export class EditorComponent implements OnInit {
name: part,
children: [],
data: path.data,
- path : path.name
+ path: path.name
};
- if(part.trim() == this.blueprintName.trim()) {
- this.activationBlueprint = path.data;
- newPart.data = JSON.parse(this.activationBlueprint.toString());
+ if (part.trim() == this.blueprintName.trim()) {
+ this.activationBlueprint = path.data;
+ newPart.data = JSON.parse(this.activationBlueprint.toString());
console.log('newpart', newPart);
}
- if(newPart.name !== '') {
- currentLevel.push(newPart);
- currentLevel = newPart.children;
+ if (newPart.name !== '') {
+ currentLevel.push(newPart);
+ currentLevel = newPart.children;
}
}
});
@@ -333,20 +336,52 @@ export class EditorComponent implements OnInit {
this.updateBlueprint();
}
- enableNameInputEl(action) {
+ enableNameInputEl(action) {
this.fileAction = action;
- if (action == 'createFolder' || action == 'createFile') {
+ if (action == 'createFolder' || action == 'createFile') {
this.isNameTextboxEnablled = true;
}
}
deleteFolderOrFile(action) {
- for(let i=0;i< this.filesData.length ; i++) {
- if(this.filesData[i].name.includes(this.filetoDelete.trim())) {
+ for (let i = 0; i < this.filesData.length; i++) {
+ if (this.filesData[i].name.includes(this.filetoDelete.trim()) && this.filesData[i].name.includes(this.currentFilePath)) {
this.filesData.splice(i, 1);
- i = i-1;
+ i = i - 1;
}
}
this.arrangeTreeData(this.filesData);
}
+
+ expandParents(node) {
+ const parent = this.getParent(node);
+ this.treeControl.expand(parent);
+
+ if (parent && parent.level > 0) {
+ this.expandParents(parent);
+ }
+
+ console.log(this.currentFilePath);
+ }
+
+ getParent(node) {
+ const { treeControl } = this;
+ const currentLevel = treeControl.getLevel(node);
+
+ if (currentLevel < 1) {
+ // this.currentFilePath = this.currentFilePath + this.selectedFolder;
+ return null;
+ }
+
+ const startIndex = treeControl.dataNodes.indexOf(node) - 1;
+
+ for (let i = startIndex; i >= 0; i--) {
+ const currentNode = treeControl.dataNodes[i];
+
+ if (treeControl.getLevel(currentNode) < currentLevel) {
+ this.currentFilePath = currentNode.name + '/' + this.currentFilePath;
+ return currentNode;
+ }
+ }
+ }
}
diff --git a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/modify-template.component.html b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/modify-template.component.html
index a77be5ba0..754ba214c 100644
--- a/cds-ui/client/src/app/feature-modules/blueprint/modify-template/modify-template.component.html
+++ b/cds-ui/client/src/app/feature-modules/blueprint/modify-template/modify-template.component.html
@@ -33,12 +33,12 @@ limitations under the License.
<div style="width: 100%;height: 3em;">
<div style="display: flex;flex-direction: row-reverse">
<button class="btn-active" (click)="downloadCBA()">Download</button>
- <button [disabled]="!isEnriched" [ngClass]="{ 'mat-button-active': isEnriched, 'mat-button-disablled': !isEnriched}" mat-button [matMenuTriggerFor]="menu">Deploy</button>
+ <button class="mat-button-active" mat-button [matMenuTriggerFor]="menu">Deploy</button>
<mat-menu #menu="matMenu">
<button mat-menu-item>Deploy</button>
<button mat-menu-item>Test</button>
</mat-menu>
- <button [disabled]="!isEnriched" [ngClass]="{ 'btn-active': isEnriched, 'btn-disablled': !isEnriched}" class="btn-active">Publish</button>
+ <button [disabled]="!isEnriched" class="btn-active">Publish</button>
<button class="btn-active">Save</button>
<button class="btn-active">Enrich</button>
diff --git a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/activation-blueprint.json b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/activation-blueprint.json
index 628a7d04d..b3f5272b8 100644
--- a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/activation-blueprint.json
+++ b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/activation-blueprint.json
@@ -20,17 +20,11 @@
"file" : "Definitions/policy_types.json"
} ],
"dsl_definitions" : {
- "config-assign-properties" : {
- "resolution-key" : {
- "get_input" : "resolution-key"
- }
- },
"config-deploy-properties" : {
"resolution-key" : {
"get_input" : "resolution-key"
}
}
-
},
"topology_template" : {
"workflows" : {
@@ -49,13 +43,6 @@
"required" : true,
"type" : "string"
},
- "artifact-name" : {
- "required" : true,
- "type" : "list",
- "entry_schema" : {
- "type" : "string"
- }
- },
"store-result" : {
"required" : true,
"type" : "boolean"
diff --git a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/config-assign-pnf-mapping.json b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/config-assign-pnf-mapping.json
index fc8e1bf64..fe51488c7 100644
--- a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/config-assign-pnf-mapping.json
+++ b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/config-assign-pnf-mapping.json
@@ -1,13 +1 @@
-[
- {
- "name": "entity",
- "input-param": true,
- "property": {
- "type": "json"
- },
- "dictionary-name": "entity",
- "dictionary-source": "input",
- "dependencies": [
- ]
- }
-]
+[]
diff --git a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/config-deploy-pnf-mapping.json b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/config-deploy-pnf-mapping.json
index fc8e1bf64..2a866c9b5 100644
--- a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/config-deploy-pnf-mapping.json
+++ b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/config-deploy-pnf-mapping.json
@@ -1,11 +1,22 @@
[
{
- "name": "entity",
+ "name": "pnf-id",
"input-param": true,
"property": {
- "type": "json"
+ "type": "string"
},
- "dictionary-name": "entity",
+ "dictionary-name": "pnf-id",
+ "dictionary-source": "input",
+ "dependencies": [
+ ]
+ },
+ {
+ "name": "pnf-name",
+ "input-param": true,
+ "property": {
+ "type": "string"
+ },
+ "dictionary-name": "pnf-name",
"dictionary-source": "input",
"dependencies": [
]
diff --git a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/data_types.json b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/data_types.json
index e5aa763ba..9e9350c81 100644
--- a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/data_types.json
+++ b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/data_types.json
@@ -3,19 +3,18 @@
"dt-config-assign-properties" : {
"description" : "Dynamic DataType definition for workflow(config-assign).",
"version" : "1.0.0",
- "properties" : {
- "entity" : {
- "type" : "json"
- }
- },
+ "properties" : { },
"derived_from" : "tosca.datatypes.Dynamic"
},
"dt-config-deploy-properties" : {
"description" : "Dynamic DataType definition for workflow(config-deploy).",
"version" : "1.0.0",
"properties" : {
- "entity" : {
- "type" : "json"
+ "pnf-id" : {
+ "type" : "string"
+ },
+ "pnf-name" : {
+ "type" : "string"
}
},
"derived_from" : "tosca.datatypes.Dynamic"
diff --git a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/resources_definition_types.json b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/resources_definition_types.json
index 98a73b101..189cbf86f 100644
--- a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/resources_definition_types.json
+++ b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Definitions/resources_definition_types.json
@@ -1,10 +1,25 @@
{
- "entity" : {
- "tags" : "entity",
- "name" : "entity",
+ "pnf-id" : {
+ "tags" : "pnf-id",
+ "name" : "pnf-id",
"property" : {
- "description" : "entity",
- "type" : "json"
+ "description" : "pnf-id",
+ "type" : "string"
+ },
+ "updated-by" : "Rodrigo Ottero <rodrigo.ottero@est.tech>",
+ "sources" : {
+ "input" : {
+ "type" : "source-input",
+ "properties" : { }
+ }
+ }
+ },
+ "pnf-name" : {
+ "tags" : "pnf-name",
+ "name" : "pnf-name",
+ "property" : {
+ "description" : "pnf-name",
+ "type" : "string"
},
"updated-by" : "Rodrigo Ottero <rodrigo.ottero@est.tech>",
"sources" : {
diff --git a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Scripts/python/RestconfConfigDeploy.py b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Scripts/python/RestconfConfigDeploy.py
index 518666a76..01e2ec477 100644
--- a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Scripts/python/RestconfConfigDeploy.py
+++ b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Scripts/python/RestconfConfigDeploy.py
@@ -12,9 +12,8 @@
# 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.
-#
-# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================
+
from time import sleep
from org.onap.ccsdk.cds.blueprintsprocessor.functions.restconf.executor import \
@@ -25,88 +24,104 @@ from java.lang import Exception as JavaException
class RestconfConfigDeploy(RestconfComponentFunction):
log = globals()["log"]
- seconds_to_sleep = 5
- base_mount_url = "restconf/config/network-topology:network-topology/topology/topology-netconf/node/"
+ odl_status_check_limit = 10
+ odl_status_check_pause = 1
+ odl_status_check_url = "restconf/operational/network-topology:network-topology/topology/topology-netconf/node/"
+ base_odl_url = "restconf/config/network-topology:network-topology/topology/topology-netconf/node/"
server_identifier = "sdncodl"
configlet_template_name = "config-assign"
+ configlet_odl_resource = "/yang-ext:mount/mynetconf:netconflist"
def process(self, execution_request):
self.log.info("Started execution of process method")
try:
- self.log.info("getting resolution-key")
- resolution_key = self.getDynamicProperties("resolution-key").asText()
- self.log.info("resolution_key: {}", resolution_key)
-
- self.log.info("getting pnf-id")
- pnf_id = execution_request.payload.get("config-deploy-request").get("config-deploy-properties").get("entity").get("pnf-id")
- pnf_id = str(pnf_id).strip('\"')
- self.log.info("pnf-id: {}", pnf_id)
-
- self.log.info("mounting device {}", pnf_id)
- self.mount(pnf_id)
-
- self.log.info("sleeping for {} seconds", self.seconds_to_sleep)
- sleep(self.seconds_to_sleep)
-
- try:
- self.log.info("configuring device {}", pnf_id)
- self.apply_configuration(pnf_id, resolution_key, self.configlet_template_name)
- except Exception, err:
- self.log.error("an error occurred while configuring device {}", err)
- raise err
- finally:
- self.log.info("unmounting device {}", pnf_id)
- self.unmount(pnf_id)
-
- self.log.info("Ended execution of process method")
-
+ pnf_id, resolution_key = self.retrieve_parameters(execution_request)
+ self.interact_with_odl(pnf_id, resolution_key)
except JavaException, err:
self.log.error("Java Exception in the script", err)
raise err
except Exception, err:
- self.log.error("Python Exception in the script", err)
+ self.log.error("Python Exception in the script:" + str(err), err)
+ raise err
+ self.log.info("Ended execution of process method")
+
+ def retrieve_parameters(self, execution_request):
+ resolution_key = self.getDynamicProperties("resolution-key").asText()
+ self.log.info("resolution_key: {}", resolution_key)
+ pnf_id = execution_request.payload.get("config-deploy-request").get("config-deploy-properties").get("pnf-id")
+ pnf_id = str(pnf_id).strip('\"')
+ self.log.info("pnf-id: {}", pnf_id)
+ return pnf_id, resolution_key
+
+ def interact_with_odl(self, pnf_id, resolution_key):
+ try:
+ self.mount(pnf_id)
+ self.log_current_configlet(pnf_id)
+ self.apply_configuration(pnf_id, resolution_key, self.configlet_template_name)
+ except Exception, err:
+ self.log.error("an error occurred while configuring device {}", err)
raise err
+ finally:
+ self.log.info("unmounting device {}", pnf_id)
+ self.unmount(pnf_id)
def mount(self, pnf_id):
- self.log.info("meshing mount payload")
+ self.log.info("mounting device {}", pnf_id)
mount_payload = self.resolveAndGenerateMessage("config-deploy-mapping", "config-deploy-template")
self.log.info("mount payload: \n {}", mount_payload)
-
- # defining custom header
- headers = {
- "Content-Type": "application/xml"
- }
-
- url = self.base_mount_url + str(pnf_id)
+ headers = {"Content-Type": "application/xml"} # defining custom header
+ url = self.base_odl_url + str(pnf_id)
self.log.info("sending mount request, url: {}", url)
web_client_service = self.restClientService(self.server_identifier)
web_client_service.exchangeResource("PUT", url, mount_payload, headers)
+ self.wait_for_odl_to_mount(pnf_id)
- def unmount(self, pnf_id):
- url = self.base_mount_url + str(pnf_id)
- self.log.info("sending unmount request, url: {}", url)
+ def wait_for_odl_to_mount(self, pnf_id):
+ counter = 0
+ url = self.odl_status_check_url + pnf_id
+ self.log.info("url for ODL status check: {}", url)
web_client_service = self.restClientService(self.server_identifier)
- web_client_service.exchangeResource("DELETE", url, "")
+ expected_result = '"netconf-node-topology:connection-status":"connected"'
+ while counter < self.odl_status_check_limit:
+ result = web_client_service.exchangeResource("GET", url, "")
+ self.log.info("ODL status check result: {}", result)
+ if expected_result in result:
+ self.log.info("PNF was mounted successfully on ODL")
+ return None
+ sleep(1)
+ counter += 1
+ raise JavaException("PNF was not mounted on ODL, aborting configuration procedure")
+
+ def log_current_configlet(self, pnf_id):
+ self.log.info("retrieving configuration for device {}", pnf_id)
+ url = self.base_odl_url + pnf_id + self.configlet_odl_resource
+ self.log.info("sending GET request, url: {}", url)
+ web_client_service = self.restClientService(self.server_identifier)
+ result = web_client_service.exchangeResource("GET", url, "")
+ self.log.info("Current configuration: {}", result)
def apply_configuration(self, pnf_id, resolution_key, template_name):
+ self.log.info("configuring device {}", pnf_id)
self.log.info("Retrieving configlet from database (resolution-key: {}, template_name: {}",
resolution_key, template_name)
configlet = self.resolveFromDatabase(resolution_key, template_name)
self.log.info("Configlet: {}", configlet)
-
- # defining custom header
- headers = {
- "Content-Type": "application/yang.patch+json"
- }
-
- url = "restconf/config/network-topology:network-topology/topology/topology-netconf/node/" + pnf_id \
- + "/yang-ext:mount/mynetconf:netconflist"
+ headers = { "Content-Type": "application/yang.patch+json" } # defining custom header
+ url = self.base_odl_url + pnf_id + self.configlet_odl_resource
self.log.info("sending patch request, url: {}", url)
web_client_service = self.restClientService(self.server_identifier)
result = web_client_service.exchangeResource("PATCH", url, configlet, headers)
self.log.info("Configuration application result: {}", result)
+ def unmount(self, pnf_id):
+ url = self.base_odl_url + str(pnf_id)
+ self.log.info("sending unmount request, url: {}", url)
+ web_client_service = self.restClientService(self.server_identifier)
+ web_client_service.exchangeResource("DELETE", url, "")
+
def recover(self, runtime_exception, execution_request):
- self.log.info("Recover method, no code to execute")
- return None
+ self.log.info("Recover function called!")
+ self.log.error(runtime_exception.getMessage())
+ print self.bluePrintRuntimeService.getBluePrintError().addError(runtime_exception.getMessage())
+ return None \ No newline at end of file
diff --git a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Templates/config-assign-restconf-configlet-template.vtl b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Templates/config-assign-restconf-configlet-template.vtl
index 3812380ea..af91ba00d 100644
--- a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Templates/config-assign-restconf-configlet-template.vtl
+++ b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Templates/config-assign-restconf-configlet-template.vtl
@@ -10,8 +10,8 @@
"netconflist":{
"netconf":[
{
- "netconf-id":"40",
- "netconf-param":"4040"
+ "netconf-id":"10",
+ "netconf-param":"1000"
}
]
}
@@ -25,13 +25,29 @@
"netconflist":{
"netconf":[
{
- "netconf-id":"50",
- "netconf-param":"98765"
+ "netconf-id":"20",
+ "netconf-param":"2000"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "edit-id":"edit3",
+ "operation":"merge",
+ "target":"/",
+ "value":{
+ "netconflist":{
+ "netconf":[
+ {
+ "netconf-id":"30",
+ "netconf-param":"3000"
}
]
}
}
}
+
]
}
} \ No newline at end of file
diff --git a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Templates/config-deploy-restconf-mount-template.vtl b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Templates/config-deploy-restconf-mount-template.vtl
index 935177658..1f3f94d4e 100644
--- a/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Templates/config-deploy-restconf-mount-template.vtl
+++ b/components/model-catalog/blueprint-model/test-blueprint/capability_restconf/Templates/config-deploy-restconf-mount-template.vtl
@@ -1,13 +1,13 @@
<node xmlns="urn:TBD:params:xml:ns:yang:network-topology">
- <node-id>$entity.pnf-id</node-id>
+ <node-id>$pnf-id</node-id>
<key-based xmlns="urn:opendaylight:netconf-node-topology">
<key-id xmlns="urn:opendaylight:netconf-node-topology">ODL-private-key</key-id>
<username xmlns="urn:opendaylight:netconf-node-topology">netconf</username>
</key-based>
- <host xmlns="urn:opendaylight:netconf-node-topology">$entity.pnf-name</host>
+ <host xmlns="urn:opendaylight:netconf-node-topology">$pnf-name</host>
<port xmlns="urn:opendaylight:netconf-node-topology">6513</port>
<tcp-only xmlns="urn:opendaylight:netconf-node-topology">false</tcp-only>
- <protocol xmlns="urn:opendaylight:netconf-node-topology">
+ <protocol xmlns="urn:opendaylight:netconf-node-topology">
<name xmlns="urn:opendaylight:netconf-node-topology">TLS</name>
</protocol>
<max-connection-attempts xmlns="urn:opendaylight:netconf-node-topology">5</max-connection-attempts>
diff --git a/components/model-catalog/resource-dictionary/starter-dictionary/entity.json b/components/model-catalog/resource-dictionary/starter-dictionary/entity.json
deleted file mode 100755
index 83a32a922..000000000
--- a/components/model-catalog/resource-dictionary/starter-dictionary/entity.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name" : "entity",
- "tags" : "entity",
- "updated-by" : "Rodrigo Ottero <rodrigo.ottero@est.tech>",
- "property" : {
- "description" : "entity",
- "type" : "json"
- },
- "sources" : {
- "input" : {
- "type" : "source-input",
- "properties" : { }
- }
- }
-} \ No newline at end of file
diff --git a/ms/blueprintsprocessor/application/src/main/java/org/onap/ccsdk/cds/blueprintsprocessor/BlueprintHttpServer.java b/ms/blueprintsprocessor/application/src/main/java/org/onap/ccsdk/cds/blueprintsprocessor/BlueprintHttpServer.java
index ae75488c1..85ccd1f43 100644
--- a/ms/blueprintsprocessor/application/src/main/java/org/onap/ccsdk/cds/blueprintsprocessor/BlueprintHttpServer.java
+++ b/ms/blueprintsprocessor/application/src/main/java/org/onap/ccsdk/cds/blueprintsprocessor/BlueprintHttpServer.java
@@ -16,40 +16,19 @@
package org.onap.ccsdk.cds.blueprintsprocessor;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory;
-import org.springframework.boot.web.reactive.server.ReactiveWebServerFactory;
-import org.springframework.boot.web.server.WebServer;
-import org.springframework.http.server.reactive.HttpHandler;
+import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;
@Component
-public class BlueprintHttpServer {
-
- private static Logger log = LoggerFactory.getLogger(BlueprintHttpServer.class);
+public class BlueprintHttpServer implements WebServerFactoryCustomizer<NettyReactiveWebServerFactory> {
@Value("${blueprintsprocessor.httpPort}")
private Integer httpPort;
- @Autowired
- HttpHandler httpHandler;
-
- WebServer http;
-
- @PostConstruct
- public void start() {
- ReactiveWebServerFactory factory = new NettyReactiveWebServerFactory(httpPort);
- this.http = factory.getWebServer(this.httpHandler);
- this.http.start();
- }
-
- @PreDestroy
- public void stop() {
- this.http.stop();
+ @Override
+ public void customize(NettyReactiveWebServerFactory serverFactory) {
+ serverFactory.setPort(httpPort);
}
-}
+} \ No newline at end of file
diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BasicAuthRestClientService.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BasicAuthRestClientService.kt
index 7737fd1a5..67dbd0d72 100644
--- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BasicAuthRestClientService.kt
+++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BasicAuthRestClientService.kt
@@ -12,8 +12,6 @@
* 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.
- *
- * SPDX-License-Identifier: Apache-2.0
*/
package org.onap.ccsdk.cds.blueprintsprocessor.rest.service
diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BlueprintWebClientService.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BlueprintWebClientService.kt
index b34d66d19..94a575397 100644
--- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BlueprintWebClientService.kt
+++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/BlueprintWebClientService.kt
@@ -12,8 +12,6 @@
* 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.
- *
- * SPDX-License-Identifier: Apache-2.0
*/
package org.onap.ccsdk.cds.blueprintsprocessor.rest.service
@@ -59,12 +57,7 @@ interface BlueprintWebClientService {
}
fun convertToBasicHeaders(headers: Map<String, String>): Array<BasicHeader> {
- val convertedHeaders = Array<BasicHeader>(headers.size){ BasicHeader("","") }
- var currentElement = 0
- for ((name, value) in headers) {
- convertedHeaders[currentElement++] = BasicHeader(name, value)
- }
- return convertedHeaders
+ return headers.map{ BasicHeader(it.key, it.value)}.toTypedArray()
}
fun delete(path: String, headers: Array<BasicHeader>): String {
diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/TokenAuthRestClientService.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/TokenAuthRestClientService.kt
index 609267eb9..6f81ee1a8 100644
--- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/TokenAuthRestClientService.kt
+++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/TokenAuthRestClientService.kt
@@ -12,8 +12,6 @@
* 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.
- *
- * SPDX-License-Identifier: Apache-2.0
*/
package org.onap.ccsdk.cds.blueprintsprocessor.rest.service
diff --git a/ms/blueprintsprocessor/modules/commons/rest-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/RestClientServiceTest.kt b/ms/blueprintsprocessor/modules/commons/rest-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/RestClientServiceTest.kt
index 6da59399e..a02a8083b 100644
--- a/ms/blueprintsprocessor/modules/commons/rest-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/RestClientServiceTest.kt
+++ b/ms/blueprintsprocessor/modules/commons/rest-lib/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/rest/service/RestClientServiceTest.kt
@@ -13,8 +13,6 @@
* 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.
- *
- * SPDX-License-Identifier: Apache-2.0
*/
package org.onap.ccsdk.cds.blueprintsprocessor.rest.service
diff --git a/pom.xml b/pom.xml
index e229fa98a..8c989ba09 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,9 +36,9 @@ limitations under the License.
<description>CCSDK Controller Design Studio</description>
<modules>
- <!--<module>cds-ui</module>-->
- <module>components</module>
- <module>ms</module>
+ <module>cds-ui</module>
+ <!--<module>components</module>-->
+ <!--<module>ms</module>-->
</modules>
<url>https://wiki.onap.org</url>