diff options
Diffstat (limited to 'ms/blueprintsprocessor/functions')
5 files changed, 233 insertions, 33 deletions
diff --git a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutor.kt b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutor.kt index 0f35e6338..2a227ebe1 100644 --- a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutor.kt +++ b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutor.kt @@ -48,6 +48,7 @@ open class ComponentRemotePythonExecutor(private val remoteScriptExecutionServic const val ATTRIBUTE_PREPARE_ENV_LOG = "prepare-environment-logs" const val ATTRIBUTE_EXEC_CMD_LOG = "execute-command-logs" + const val ATTRIBUTE_RESPONSE_DATA = "response-data" } override suspend fun processNB(executionRequest: ExecutionServiceInput) { diff --git a/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorDSL.kt b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorDSL.kt new file mode 100644 index 000000000..fee87498d --- /dev/null +++ b/ms/blueprintsprocessor/functions/python-executor/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorDSL.kt @@ -0,0 +1,163 @@ +/* + * Copyright © 2019 IBM. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.functions.python.executor + +import com.fasterxml.jackson.databind.JsonNode +import com.fasterxml.jackson.databind.node.ArrayNode +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes +import org.onap.ccsdk.cds.controllerblueprints.core.asJsonPrimitive +import org.onap.ccsdk.cds.controllerblueprints.core.asJsonType +import org.onap.ccsdk.cds.controllerblueprints.core.data.DataType +import org.onap.ccsdk.cds.controllerblueprints.core.data.NodeTemplate +import org.onap.ccsdk.cds.controllerblueprints.core.data.NodeType +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.AbstractNodeTemplateImplBuilder +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.PropertiesAssignmentBuilder +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.dataType +import org.onap.ccsdk.cds.controllerblueprints.core.dsl.nodeType +import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils + +/** Component Extensions **/ +fun BluePrintTypes.nodeTypeComponentRemotePythonExecutor(): NodeType { + return nodeType(id = "component-remote-python-executor", version = BluePrintConstants.DEFAULT_VERSION_NUMBER, + derivedFrom = BluePrintConstants.MODEL_TYPE_NODE_COMPONENT, + description = "This is Remote Python Execution Component.") { + + attribute(ComponentRemotePythonExecutor.ATTRIBUTE_PREPARE_ENV_LOG, BluePrintConstants.DATA_TYPE_STRING, + false) + attribute(ComponentRemotePythonExecutor.ATTRIBUTE_EXEC_CMD_LOG, BluePrintConstants.DATA_TYPE_LIST, + false) { + entrySchema(BluePrintConstants.DATA_TYPE_STRING) + } + attribute(ComponentRemotePythonExecutor.ATTRIBUTE_RESPONSE_DATA, BluePrintConstants.DATA_TYPE_JSON, + false) + + operation("ComponentRemotePythonExecutor", "ComponentRemotePythonExecutor Operation") { + inputs { + property(ComponentRemotePythonExecutor.INPUT_ENDPOINT_SELECTOR, BluePrintConstants.DATA_TYPE_STRING, + false, "Remote Container or Server selector name.") { + defaultValue(ComponentRemotePythonExecutor.DEFAULT_SELECTOR) + } + property(ComponentRemotePythonExecutor.INPUT_DYNAMIC_PROPERTIES, BluePrintConstants.DATA_TYPE_JSON, + false, "Dynamic Json Content or DSL Json reference.") + + property(ComponentRemotePythonExecutor.INPUT_ARGUMENT_PROPERTIES, BluePrintConstants.DATA_TYPE_JSON, + false, "Argument Json Content or DSL Json reference.") + + property(ComponentRemotePythonExecutor.INPUT_COMMAND, BluePrintConstants.DATA_TYPE_STRING, + true, "Command to execute.") + + property(ComponentRemotePythonExecutor.INPUT_PACKAGES, BluePrintConstants.DATA_TYPE_LIST, + false, "Packages to install based on type.") { + entrySchema("dt-system-packages") + } + } + } + } +} + +fun BluePrintTypes.dataTypeDtSystemPackages(): DataType { + return dataType(id = "dt-system-packages", version = BluePrintConstants.DEFAULT_VERSION_NUMBER, + derivedFrom = BluePrintConstants.MODEL_TYPE_DATATYPES_ROOT, + description = "This represent System Package Data Type") { + property("type", BluePrintConstants.DATA_TYPE_LIST, true, "") { + constrain { + entrySchema(BluePrintConstants.DATA_TYPE_STRING) + validValues(arrayListOf("ansible_galaxy".asJsonPrimitive(), "pip".asJsonPrimitive())) + } + } + property("package", BluePrintConstants.DATA_TYPE_LIST, true, "") { + entrySchema(BluePrintConstants.DATA_TYPE_STRING) + } + } +} + +/** Component Builder */ +fun BluePrintTypes.nodeTemplateComponentRemotePythonExecutor(id: String, + description: String, + block: ComponentRemotePythonExecutorNodeTemplateImplBuilder.() -> Unit) + : NodeTemplate { + return ComponentRemotePythonExecutorNodeTemplateImplBuilder(id, description).apply(block).build() +} + +class ComponentRemotePythonExecutorNodeTemplateImplBuilder(id: String, description: String) : + AbstractNodeTemplateImplBuilder<ComponentRemotePythonExecutorInputAssignmentBuilder, + ComponentRemotePythonExecutorOutputAssignmentBuilder>(id, "component-remote-python-executor", + "ComponentRemotePythonExecutor", description) + +class DtSystemPackageDataTypeBuilder : PropertiesAssignmentBuilder() { + + fun type(type: String) = type(type.asJsonPrimitive()) + + fun type(type: JsonNode) { + property("type", type) + } + + fun packages(packages: String) = packages(packages.asJsonType()) + + fun packages(packages: List<String>) = packages(packages.asJsonType()) + + fun packages(packages: JsonNode) { + property("package", packages) + } +} + +class ComponentRemotePythonExecutorInputAssignmentBuilder : PropertiesAssignmentBuilder() { + + private var packageList: ArrayNode? = null + + fun endpointSelector(endpointSelector: String) = endpointSelector(endpointSelector.asJsonPrimitive()) + + fun endpointSelector(endpointSelector: JsonNode) { + property(ComponentRemotePythonExecutor.INPUT_ENDPOINT_SELECTOR, endpointSelector) + } + + fun dynamicProperties(dynamicProperties: String) = dynamicProperties(dynamicProperties.asJsonType()) + + fun dynamicProperties(dynamicProperties: JsonNode) { + property(ComponentRemotePythonExecutor.INPUT_DYNAMIC_PROPERTIES, dynamicProperties) + } + + fun argumentProperties(argumentProperties: String) = argumentProperties(argumentProperties.asJsonType()) + + fun argumentProperties(argumentProperties: JsonNode) { + property(ComponentRemotePythonExecutor.INPUT_ARGUMENT_PROPERTIES, argumentProperties) + } + + fun command(command: String) = command(command.asJsonPrimitive()) + + fun command(command: JsonNode) { + property(ComponentRemotePythonExecutor.INPUT_COMMAND, command) + } + + fun packages(block: DtSystemPackageDataTypeBuilder.() -> Unit) { + if (packageList == null) + packageList = JacksonUtils.objectMapper.createArrayNode() + val dtSysyemPackagePropertyAssignments = DtSystemPackageDataTypeBuilder().apply(block).build() + packageList!!.add(dtSysyemPackagePropertyAssignments.asJsonType()) + } + + override fun build(): MutableMap<String, JsonNode> { + val propertyAssignments = super.build() + if (packageList != null) { + propertyAssignments[ComponentRemotePythonExecutor.INPUT_PACKAGES] = packageList!! + } + return propertyAssignments + } +} + +class ComponentRemotePythonExecutorOutputAssignmentBuilder : PropertiesAssignmentBuilder()
\ No newline at end of file diff --git a/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorDSLTest.kt b/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorDSLTest.kt new file mode 100644 index 000000000..5c4b59034 --- /dev/null +++ b/ms/blueprintsprocessor/functions/python-executor/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/python/executor/ComponentRemotePythonExecutorDSLTest.kt @@ -0,0 +1,56 @@ +/* + * Copyright © 2019 IBM. + * + * 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. + */ + +package org.onap.ccsdk.cds.blueprintsprocessor.functions.python.executor + +import org.junit.Test +import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintTypes +import kotlin.test.assertNotNull + +class ComponentRemotePythonExecutorDSLTest { + + @Test + fun testNodeTypeComponentRemotePythonExecutor() { + val nodeType = BluePrintTypes.nodeTypeComponentRemotePythonExecutor() + //println(nodeType.asJsonString(true)) + assertNotNull(nodeType, "failed to generate nodeTypeComponentRemotePythonExecutor") + } + + @Test + fun testNodeTemplateComponentRemotePythonExecutor() { + val nodeTemplate = BluePrintTypes.nodeTemplateComponentRemotePythonExecutor("test-nodetemplate", + "test nodetemplate") { + operation("test operation") { + inputs { + endpointSelector("remote-container") + command("python sample.py") + dynamicProperties("""{ + "prop1" : "1234", + "prop2" : true, + "prop3" : 23 + }""".trimIndent()) + argumentProperties("""["one", "two"]""") + packages { + type("pip") + packages(arrayListOf("ncclient", "lxml")) + } + } + } + } + //println(nodeTemplate.asJsonString(true)) + assertNotNull(nodeTemplate, "failed to generate nodeTemplateComponentRemotePythonExecutor") + } +}
\ No newline at end of file diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionComponentDSL.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionComponentDSL.kt index c71541efd..a44750d11 100644 --- a/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionComponentDSL.kt +++ b/ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionComponentDSL.kt @@ -94,65 +94,49 @@ class ComponentResourceResolutionNodeTemplateImplBuilder(id: String, description class ComponentResourceResolutionInputAssignmentBuilder : PropertiesAssignmentBuilder() { - fun requestId(requestId: String) { - requestId(requestId.asJsonPrimitive()) - } + fun requestId(requestId: String) = requestId(requestId.asJsonPrimitive()) fun requestId(requestId: JsonNode) { property(ResourceResolutionComponent.INPUT_REQUEST_ID, requestId) } - fun resourceId(resourceId: String) { - resourceId(resourceId.asJsonPrimitive()) - } + fun resourceId(resourceId: String) = resourceId(resourceId.asJsonPrimitive()) fun resourceId(resourceId: JsonNode) { property(ResourceResolutionComponent.INPUT_RESOURCE_ID, resourceId) } - fun actionName(actionName: String) { - actionName(actionName.asJsonPrimitive()) - } + fun actionName(actionName: String) = actionName(actionName.asJsonPrimitive()) fun actionName(actionName: JsonNode) { property(ResourceResolutionComponent.INPUT_ACTION_NAME, actionName) } - fun resolutionKey(resolutionKey: String) { - resolutionKey(resolutionKey.asJsonPrimitive()) - } + fun resolutionKey(resolutionKey: String) = resolutionKey(resolutionKey.asJsonPrimitive()) fun resolutionKey(resolutionKey: JsonNode) { property(ResourceResolutionComponent.INPUT_RESOLUTION_KEY, resolutionKey) } - fun dynamicProperty(dynamicProperty: String) { - dynamicProperty(dynamicProperty.asJsonType()) - } + fun dynamicProperties(dynamicProperties: String) = dynamicProperties(dynamicProperties.asJsonType()) - fun dynamicProperty(dynamicProperty: JsonNode) { - property(ResourceResolutionComponent.INPUT_DYNAMIC_PROPERTIES, dynamicProperty) + fun dynamicProperties(dynamicProperties: JsonNode) { + property(ResourceResolutionComponent.INPUT_DYNAMIC_PROPERTIES, dynamicProperties) } - fun occurrence(occurrence: Int) { - occurrence(occurrence.asJsonPrimitive()) - } + fun occurrence(occurrence: Int) = occurrence(occurrence.asJsonPrimitive()) fun occurrence(resolutionKey: JsonNode) { property(ResourceResolutionComponent.INPUT_OCCURRENCE, resolutionKey) } - fun storeResult(storeResult: Boolean) { - storeResult(storeResult.asJsonPrimitive()) - } + fun storeResult(storeResult: Boolean) = storeResult(storeResult.asJsonPrimitive()) fun storeResult(storeResult: JsonNode) { property(ResourceResolutionComponent.INPUT_STORE_RESULT, storeResult) } - fun resourceType(resourceType: String) { - resourceType(resourceType.asJsonPrimitive()) - } + fun resourceType(resourceType: String) = resourceType(resourceType.asJsonPrimitive()) fun resourceType(resourceType: JsonNode) { property(ResourceResolutionComponent.INPUT_RESOURCE_TYPE, resourceType) @@ -171,17 +155,13 @@ class ComponentResourceResolutionInputAssignmentBuilder : PropertiesAssignmentBu class ComponentResourceResolutionOutputAssignmentBuilder : PropertiesAssignmentBuilder() { - fun status(status: String) { - status(status.asJsonPrimitive()) - } + fun status(status: String) = status(status.asJsonPrimitive()) fun status(status: JsonNode) { property(ResourceResolutionComponent.OUTPUT_STATUS, status) } - fun resourceAssignmentParams(resourceAssignmentParams: String) { - resourceAssignmentParams(resourceAssignmentParams.asJsonType()) - } + fun resourceAssignmentParams(resourceAssignmentParams: String) = resourceAssignmentParams(resourceAssignmentParams.asJsonType()) fun resourceAssignmentParams(resourceAssignmentParams: JsonNode) { property(ResourceResolutionComponent.OUTPUT_RESOURCE_ASSIGNMENT_PARAMS, resourceAssignmentParams) diff --git a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionComponentDSLTest.kt b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionComponentDSLTest.kt index 16052ae74..d0566785e 100644 --- a/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionComponentDSLTest.kt +++ b/ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/ResourceResolutionComponentDSLTest.kt @@ -42,7 +42,7 @@ class ResourceResolutionComponentDSLTest { resourceType("vnf") storeResult(false) artifactPrefixNames(arrayListOf("template1", "template2")) - dynamicProperty("""{ + dynamicProperties("""{ "prop1" : "1234", "prop2" : true, "prop3" : 23 |