diff options
11 files changed, 142 insertions, 45 deletions
diff --git a/cds-ui/client/src/app/common/utility/zipfile-extraction.component.ts b/cds-ui/client/src/app/common/utility/zipfile-extraction.component.ts index fcadee816..279405a6b 100644 --- a/cds-ui/client/src/app/common/utility/zipfile-extraction.component.ts +++ b/cds-ui/client/src/app/common/utility/zipfile-extraction.component.ts @@ -39,11 +39,21 @@ export class ZipfileExtractionComponent implements OnInit { private entryDefinition: string; validfile: boolean = false; uploadedFileName: string; - + filesData: any = []; + constructor(private loader: LoaderService) { } ngOnInit() { } + + create() { + this.filesData.forEach((path) => { + let index = path.name.indexOf("/"); + let name = path.name.slice(index + 1, path.name.length); + this.zipFile.file(name, path.data); + }); + } + async buildFileViewData(zip) { this.validfile = false; this.paths = []; 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 08f1ca130..9367c0638 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 @@ -244,9 +244,39 @@ export class EditorComponent implements OnInit { }) this.fileExtension = this.selectedFile.substr(this.selectedFile.lastIndexOf('.') + 1); this.setEditorMode(); - if(this.options == '3') - { - this.editorReadOnly= true; + if (this.options == '3') { + this.editorReadOnly = true; + } + } + + setEditorMode() { + switch (this.fileExtension) { + case "xml": + this.mode = 'xml'; + break; + case "py": + this.mode = 'python'; + break; + case "kts": + this.mode = 'kotlin'; + break; + case "kt": + this.mode = 'kotlin'; + break; + case "txt": + this.mode = 'text'; + break; + case "meta": + this.mode = 'text'; + break; + case "vtl": + this.mode = 'velocity'; + break; + case "properties": + this.mode = 'properties'; + break; + default: + this.mode = 'json'; } } @@ -256,7 +286,6 @@ export class EditorComponent implements OnInit { .then(blob => { const formData = new FormData(); formData.append("file", blob); - // this.editorService.enrich("/enrich-blueprint/", formData) this.editorService.enrich(formData) .subscribe( (response) => { @@ -276,8 +305,6 @@ export class EditorComponent implements OnInit { }); } - - saveToBackend() { this.create(); this.zipFile.generateAsync({ type: "blob" }) @@ -346,30 +373,7 @@ export class EditorComponent implements OnInit { this.editorService.downloadCBA("/" + this.artifactName + "/" + this.artifactVersion); } - setEditorMode() { - switch (this.fileExtension) { - case "xml": - this.mode = 'xml'; - break; - case "py": - this.mode = 'python'; - break; - case "kts": - this.mode = 'kotlin'; - break; - case "txt": - this.mode = 'text'; - break; - case "meta": - this.mode = 'text'; - break; - case "vtl": - this.mode = 'velocity'; - break; - default: - this.mode = 'json'; - } - } + selectFolder(node) { this.currentFilePath = ''; diff --git a/components/scripts/python/ccsdk_netconf/common.py b/components/scripts/python/ccsdk_netconf/common.py index 66c7a98b5..457d46019 100644 --- a/components/scripts/python/ccsdk_netconf/common.py +++ b/components/scripts/python/ccsdk_netconf/common.py @@ -12,6 +12,7 @@ # 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. +from netconf_constant import * from org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution import ResourceResolutionExtensionsKt @@ -21,9 +22,45 @@ class ResolutionHelper: self.component_function = component_function def resolve_and_generate_message_from_template_prefix(self, artifact_prefix): + """Get the template resolved in the current workflow execution by the artifact prefix + + :param artifact_prefix: + :return: template + """ return ResourceResolutionExtensionsKt.contentFromResolvedArtifact(self.component_function, artifact_prefix) def retrieve_resolved_template_from_database(self, key, artifact_template): + """Get the template resolved and stored with resolution-key and matching with the artifact name + + :param key: + :param artifact_template: + :return: + """ return ResourceResolutionExtensionsKt.storedContentFromResolvedArtifact(self.component_function, key, artifact_template) + def set_execution_attribute_response_data(self, response_data): + """For the current node execution, set the attribute value of response-data + + :param response_data: + :return: + """ + self.component_function.setAttribute(ATTRIBUTE_RESPONSE_DATA, response_data) + + def get_node_template_attribute(self, node_template_name, attribute_key): + """get attribute value for a specific node template of the current workflow + + :param node_template_name: + :param attribute_key: + :return: JsonNode + """ + self.component_function.getNodeTemplateAttribute(node_template_name, attribute_key) + + def get_input_value(self, key): + """Get input value of the current node template execution + + :param key: + :return: JsonNode + """ + self.component_function.bluePrintRuntimeService.getInputValue(key) + diff --git a/components/scripts/python/ccsdk_netconf/netconfclient.py b/components/scripts/python/ccsdk_netconf/netconfclient.py index 74ac7e3bc..2d4829363 100644 --- a/components/scripts/python/ccsdk_netconf/netconfclient.py +++ b/components/scripts/python/ccsdk_netconf/netconfclient.py @@ -63,6 +63,3 @@ class NetconfClient: def get(self, filter_content): device_response = self.netconf_rpc_client.get(filter_content) return device_response - - def set_execution_attribute_response_data(self, response_data): - self.component_function.setAttribute(ATTRIBUTE_RESPONSE_DATA, response_data) diff --git a/docs/designtime.rst b/docs/designtime.rst index 68da0a1f6..ac0af5132 100644 --- a/docs/designtime.rst +++ b/docs/designtime.rst @@ -16,7 +16,7 @@ Prerequisite * Gather the cloud parameters: -instantiation: +Instantiation: ~~~~~~~~~~~~~~ Have the HEAT template along with the HEAT environment file (or) Have the Helm chart along with the Values.yaml file @@ -40,7 +40,7 @@ While doing so, identify the resources using the same process to be resolved; fo Services: -========= +-------- .. toctree:: :maxdepth: 1 diff --git a/docs/installation.rst b/docs/installation.rst index 2f9ce48e7..ef51fa034 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -2,6 +2,10 @@ .. http://creativecommons.org/licenses/by/4.0 .. Copyright (C) 2019 IBM. + +User Guide +========== + Installation ------------ @@ -63,4 +67,22 @@ Result replicaset.apps/cds-cds-6bd674dc77 1 1 1 2m replicaset.apps/cds-controller-blueprints-545bbf98cf 1 1 1 2m NAME DESIRED CURRENT AGE - statefulset.apps/cds-cds-db 1 1 2m
\ No newline at end of file + statefulset.apps/cds-cds-db 1 1 2m + + + +Running CDS UI: +--------------- + +Client: +~~~~~~~ +Install Node.js and angularCLI. Refer https://angular.io/guide/quickstart +npm install in the directory cds/cds-ui/client +npm run build - to build UI module + + +Loopback Server: +~~~~~~~~~~~~~~~~ + +npm install in the directory cds/cds-ui/server +npm start should bring you the CDS UI page in your local machine with the link https://127.0.0.1:3000/
\ No newline at end of file diff --git a/ms/blueprintsprocessor/functions/cli-executor/src/main/kotlin/internal/scripts/InternalSimpleCli.kt b/ms/blueprintsprocessor/functions/cli-executor/src/main/kotlin/internal/scripts/InternalSimpleCli.kt index cf27cc2de..15365e176 100644 --- a/ms/blueprintsprocessor/functions/cli-executor/src/main/kotlin/internal/scripts/InternalSimpleCli.kt +++ b/ms/blueprintsprocessor/functions/cli-executor/src/main/kotlin/internal/scripts/InternalSimpleCli.kt @@ -19,11 +19,12 @@ package internal.scripts import org.onap.ccsdk.cds.blueprintsprocessor.core.api.data.ExecutionServiceInput +import org.onap.ccsdk.cds.blueprintsprocessor.functions.cli.executor.cliDeviceInfo +import org.onap.ccsdk.cds.blueprintsprocessor.functions.cli.executor.getSshClientService import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.AbstractScriptComponentFunction import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.ComponentScriptExecutor -import org.onap.ccsdk.cds.blueprintsprocessor.ssh.sshClientService import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive -import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintDependencyService + import org.slf4j.LoggerFactory open class TestCliScriptFunction : AbstractScriptComponentFunction() { @@ -54,10 +55,10 @@ open class Check : AbstractScriptComponentFunction() { override suspend fun processNB(executionRequest: ExecutionServiceInput) { // Get the Device Information from the DSL Model - val deviceInformation = bluePrintRuntimeService.resolveDSLExpression("device-properties") + val deviceInformation = cliDeviceInfo("device-properties") // Get the Client Service - val sshClientService = BluePrintDependencyService.sshClientService(deviceInformation) + val sshClientService = getSshClientService(deviceInformation) sshClientService.startSessionNB() diff --git a/ms/blueprintsprocessor/functions/cli-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/cli/executor/CliExecutorExtensions.kt b/ms/blueprintsprocessor/functions/cli-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/cli/executor/CliExecutorExtensions.kt index bc9b7103c..ad95759a9 100644 --- a/ms/blueprintsprocessor/functions/cli-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/cli/executor/CliExecutorExtensions.kt +++ b/ms/blueprintsprocessor/functions/cli-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/cli/executor/CliExecutorExtensions.kt @@ -17,7 +17,20 @@ package org.onap.ccsdk.cds.blueprintsprocessor.functions.cli.executor +import com.fasterxml.jackson.databind.JsonNode +import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.AbstractComponentFunction +import org.onap.ccsdk.cds.blueprintsprocessor.ssh.service.BlueprintSshClientService +import org.onap.ccsdk.cds.blueprintsprocessor.ssh.sshClientService +import org.onap.ccsdk.cds.controllerblueprints.core.service.BluePrintDependencyService + /** * Register the CLI module exposed dependency */ +fun AbstractComponentFunction.cliDeviceInfo(requirementName: String): JsonNode { + return bluePrintRuntimeService.resolveDSLExpression(requirementName) +} + +fun AbstractComponentFunction.getSshClientService(cliDeviceInfo: JsonNode): BlueprintSshClientService { + return BluePrintDependencyService.sshClientService(cliDeviceInfo) +} diff --git a/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/db/service/BlueprintProcessorCatalogServiceImpl.kt b/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/db/service/BlueprintProcessorCatalogServiceImpl.kt index 9ce45d11e..3e0f3516f 100755 --- a/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/db/service/BlueprintProcessorCatalogServiceImpl.kt +++ b/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/db/service/BlueprintProcessorCatalogServiceImpl.kt @@ -117,6 +117,10 @@ class BlueprintProcessorCatalogServiceImpl(bluePrintRuntimeValidatorService: Blu blueprintModelRepository.deleteByArtifactNameAndArtifactVersion(artifactName, artifactVersion) val deployFile = normalizedPathName(bluePrintLoadConfiguration.blueprintDeployPath, artifactName, artifactVersion) + + val cacheKey = BluePrintFileUtils.compileCacheKey(deployFile) + BluePrintCompileCache.cleanClassLoader(cacheKey) + deleteNBDir(deployFile).let { if (it) log.info("Deleted deployed blueprint model :$artifactName::$artifactVersion") else log.info("Fail to delete deployed blueprint model :$artifactName::$artifactVersion") diff --git a/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/db/service/ControllerBlueprintCatalogServiceImpl.kt b/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/db/service/ControllerBlueprintCatalogServiceImpl.kt index 66b5d00c4..4c02fda12 100755 --- a/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/db/service/ControllerBlueprintCatalogServiceImpl.kt +++ b/ms/blueprintsprocessor/modules/commons/db-lib/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/db/service/ControllerBlueprintCatalogServiceImpl.kt @@ -21,14 +21,13 @@ package org.onap.ccsdk.cds.blueprintsprocessor.db.service import org.onap.ccsdk.cds.blueprintsprocessor.db.primary.domain.BlueprintModel import org.onap.ccsdk.cds.blueprintsprocessor.db.primary.domain.BlueprintModelContent import org.onap.ccsdk.cds.blueprintsprocessor.db.primary.repository.BlueprintModelRepository -import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants -import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintException +import org.onap.ccsdk.cds.controllerblueprints.core.* import org.onap.ccsdk.cds.controllerblueprints.core.common.ApplicationConstants import org.onap.ccsdk.cds.controllerblueprints.core.config.BluePrintLoadConfiguration import org.onap.ccsdk.cds.controllerblueprints.core.data.ErrorCode -import org.onap.ccsdk.cds.controllerblueprints.core.deleteDir import org.onap.ccsdk.cds.controllerblueprints.core.interfaces.BluePrintValidatorService -import org.onap.ccsdk.cds.controllerblueprints.core.normalizedPath +import org.onap.ccsdk.cds.controllerblueprints.core.scripts.BluePrintCompileCache +import org.onap.ccsdk.cds.controllerblueprints.core.utils.BluePrintFileUtils import org.slf4j.LoggerFactory import org.springframework.dao.DataIntegrityViolationException import org.springframework.stereotype.Service @@ -85,6 +84,12 @@ class ControllerBlueprintCatalogServiceImpl(bluePrintDesignTimeValidatorService: throw BluePrintException("Not a valid Archive file(${archiveFile.absolutePath})") } + // cleanup up deploy folder for the Blueprint + val blueprintDeploy = normalizedPathName(bluePrintLoadConfiguration.blueprintDeployPath, + artifactName, artifactVersion) + val cacheKey = BluePrintFileUtils.compileCacheKey(blueprintDeploy) + BluePrintCompileCache.cleanClassLoader(cacheKey) + blueprintModelRepository.findByArtifactNameAndArtifactVersion(artifactName!!, artifactVersion!!)?.let { log.info("Overwriting blueprint model :$artifactName::$artifactVersion") blueprintModelRepository.deleteByArtifactNameAndArtifactVersion(artifactName, artifactVersion) diff --git a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/scripts/BluePrintCompilerCache.kt b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/scripts/BluePrintCompilerCache.kt index fa6b0ab97..f90e27f4d 100644 --- a/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/scripts/BluePrintCompilerCache.kt +++ b/ms/controllerblueprints/modules/blueprint-core/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/core/scripts/BluePrintCompilerCache.kt @@ -39,6 +39,10 @@ object BluePrintCompileCache { fun cleanClassLoader(key: String) { if(hasClassLoader(key)){ + // Make sure to close all classloader loaded resources before we let go of it. + // This fixes a Delete failure message on filesystem that keeps locks on opened jars; + // like Windows and NFS. + classLoaderCache.get(key).close() classLoaderCache.invalidate(key) log.info("Cleaned compiled cache($key)") }else{ |