diff options
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 @@ -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> |