Add Capability Definition validations and add custom capabilities Types for content, mapping, netconf, ssh and sftp
Change-Id: I6a89d20280852034ce6ee56d2a9e97d3aab9c2db
Issue-ID: CCSDK-484
Signed-off-by: Muthuramalingam, Brinda Santh(bs2796) <bs2796@att.com>
}\r
},\r
"capabilities": {\r
- "dg-node": {},\r
- "content": {\r
- "properties": {\r
- "type": "json"\r
- }\r
- }\r
+ "dg-node": {}\r
},\r
"interfaces": {\r
"CONFIG": {\r
"capabilities": {\r
"dg-node": {\r
"type": "tosca.capabilities.Node"\r
- },\r
- "content": {\r
- "type": "tosca.capability.Content",\r
- "properties": {\r
- "type": {\r
- "required": false,\r
- "type": "string",\r
- "default": "json"\r
- },\r
- "content": {\r
- "required": false,\r
- "type": "string"\r
- }\r
- }\r
}\r
},\r
"requirements": {\r
},\r
"capabilities": {\r
"content": {\r
- "type": "tosca.capability.Content",\r
+ "type": "tosca.capabilities.Content",\r
"properties": {\r
"content": {\r
"required": true,\r
}\r
},\r
"mapping": {\r
- "type": "tosca.capability.Mapping",\r
+ "type": "tosca.capabilities.Mapping",\r
"properties": {\r
"mapping": {\r
"required": false,\r
"capabilities": {
"dg-node": {
"type": "tosca.capabilities.Node"
- },
- "content": {
- "type": "tosca.capability.Content",
- "properties": {
- "type": {
- "required": false,
- "type": "string",
- "default": "json"
- },
- "content": {
- "required": true,
- "type": "string"
- }
- }
}
},
"requirements": {
"capabilities": {\r
"dg-node": {\r
"type": "tosca.capabilities.Node"\r
- },\r
- "content": {\r
- "type": "tosca.capability.Content",\r
- "properties": {\r
- "type": {\r
- "required": false,\r
- "type": "string",\r
- "default": "json"\r
- },\r
- "content": {\r
- "required": true,\r
- "type": "string"\r
- }\r
- }\r
}\r
},\r
"requirements": {\r
"capabilities": {\r
"dg-node": {\r
"type": "tosca.capabilities.Node"\r
- },\r
- "content": {\r
- "type": "tosca.capability.Content",\r
- "properties": {\r
- "type": {\r
- "required": false,\r
- "type": "string",\r
- "default": "json"\r
- },\r
- "content": {\r
- "required": false,\r
- "type": "string"\r
- }\r
- }\r
}\r
},\r
"requirements": {\r
"capabilities": {\r
"dg-node": {\r
"type": "tosca.capabilities.Node"\r
- },\r
- "content": {\r
- "type": "tosca.capability.Content",\r
- "properties": {\r
- "type": {\r
- "required": false,\r
- "type": "string",\r
- "default": "json"\r
- },\r
- "content": {\r
- "required": false,\r
- "type": "string"\r
- }\r
- }\r
}\r
},\r
"requirements": {\r
*/\r
\r
package org.onap.ccsdk.apps.controllerblueprints.core\r
+\r
/**\r
* BluePrintConstants\r
*\r
const val MODEL_TYPE_NODES_COMPONENT_PYTHON: String = "tosca.nodes.component.Python"\r
const val MODEL_TYPE_NODES_COMPONENT_JAVA_SCRIPT: String = "tosca.nodes.component.JavaScript"\r
\r
- const val MODEL_TYPE_ARTIFACT_TYPE_IMPLEMENTATION ="tosca.artifacts.Implementation"\r
+ const val MODEL_TYPE_ARTIFACT_TYPE_IMPLEMENTATION = "tosca.artifacts.Implementation"\r
\r
const val MODEL_TYPE_DATA_TYPE_DYNAMIC = "tosca.datatypes.Dynamic"\r
\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_NODE = "tosca.capabilities.Node"\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_COMPUTE = "tosca.capabilities.Compute"\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_NETWORK = "tosca.capabilities.Network"\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_STORAGE = "tosca.capabilities.Storage"\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT = "tosca.capabilities.Endpoint"\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_PUBLIC = "tosca.capabilities.Endpoint.Public"\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_ADMIN = "tosca.capabilities.Endpoint.Admin"\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_DATABASE = "tosca.capabilities.Endpoint.Database"\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_ATTACHMENT = "tosca.capabilities.Attachment"\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_OPERATION_SYSTEM = "tosca.capabilities.OperatingSystem"\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_BINDABLE = "tosca.capabilities.network.Bindable"\r
+ // Custom capabilities\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_CONTENT = "tosca.capabilities.Content"\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_MAPPING = "tosca.capabilities.Mapping"\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_NETCONF = "tosca.capabilities.Netconf"\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_SSH = "tosca.capabilities.Ssh"\r
+ const val MODEL_TYPE_CAPABILITY_TYPE_SFTP = "tosca.capabilities.Sftp"\r
+\r
const val EXPRESSION_GET_INPUT: String = "get_input"\r
const val EXPRESSION_GET_ATTRIBUTE: String = "get_attribute"\r
const val EXPRESSION_GET_ARTIFACT: String = "get_artifact"\r
BluePrintConstants.MODEL_TYPE_DATA_TYPE_DYNAMIC\r
)\r
\r
+ @Deprecated("This has to move to Relationship Types Model Drive")\r
@JvmStatic\r
val validRelationShipDerivedFroms: MutableList<String> = arrayListOf(\r
BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_ROOT,\r
BluePrintConstants.MODEL_TYPE_RELATIONSHIPS_ROUTES_TO\r
)\r
\r
+ @Deprecated("This has to move to Capability Types Model Drive")\r
+ @JvmStatic\r
+ val validCapabilityTypes: MutableList<String> = arrayListOf(\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITIES_ROOT,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_NODE,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_COMPUTE,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_NETWORK,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_STORAGE,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_PUBLIC,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_ADMIN,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_ENDPOINT_DATABASE,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_ATTACHMENT,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_OPERATION_SYSTEM,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_BINDABLE,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_CONTENT,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_MAPPING,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_NETCONF,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_SSH,\r
+ BluePrintConstants.MODEL_TYPE_CAPABILITY_TYPE_SFTP\r
+ )\r
+\r
@JvmStatic\r
fun validModelTypes(): List<String> {\r
val validTypes: MutableList<String> = arrayListOf()\r
class CapabilityDefinition {\r
@get:JsonIgnore\r
var id: String? = null\r
- var type: String? = null\r
+ lateinit var type: String\r
var description: String? = null\r
var properties: MutableMap<String, PropertyDefinition>? = null\r
@get:JsonProperty("valid_source_types")\r
}\r
\r
nodeType.properties?.let { validatePropertyDefinitions(nodeType.properties!!) }\r
+ nodeType.capabilities?.let { validateCapabilityDefinitions(nodeTypeName, nodeType) }\r
nodeType.requirements?.let { validateRequirementDefinitions(nodeTypeName, nodeType) }\r
nodeType.interfaces?.let { validateInterfaceDefinitions(nodeType.interfaces!!) }\r
paths.removeAt(paths.lastIndex)\r
\r
}\r
\r
+ @Throws(BluePrintException::class)\r
+ open fun validateCapabilityDefinitions(nodeTypeName: String, nodeType: NodeType) {\r
+ val capabilities = nodeType.capabilities\r
+ paths.add("capabilities")\r
+ capabilities?.forEach { capabilityName, capabilityDefinition ->\r
+ paths.add(capabilityName)\r
+\r
+ validateCapabilityDefinition(nodeTypeName, nodeType, capabilityName, capabilityDefinition)\r
+\r
+ paths.removeAt(paths.lastIndex)\r
+ }\r
+ paths.removeAt(paths.lastIndex)\r
+ }\r
+\r
+ @Throws(BluePrintException::class)\r
+ open fun validateCapabilityDefinition(nodeTypeName: String, nodeType: NodeType, capabilityName: String,\r
+ capabilityDefinition: CapabilityDefinition) {\r
+ val capabilityType = capabilityDefinition.type\r
+ check(BluePrintTypes.validCapabilityTypes.contains(capabilityType)) {\r
+ throw BluePrintException(format("Failed to get CapabilityType({}) for NodeType({})",\r
+ capabilityType, nodeTypeName))\r
+ }\r
+ }\r
+\r
@Throws(BluePrintException::class)\r
open fun validateRequirementDefinitions(nodeName: String, nodeType: NodeType) {\r
paths.add("requirements")\r
},\r
"capabilities": {\r
"content": {\r
- "type": "tosca.capability.Content",\r
+ "type": "tosca.capabilities.Content",\r
"properties": {\r
"content": {\r
"required": true,\r
}\r
},\r
"mapping": {\r
- "type": "tosca.capability.Mapping",\r
+ "type": "tosca.capabilities.Mapping",\r
"properties": {\r
"mapping": {\r
"required": false,\r
"capabilities": {
"dg-node": {
"type": "tosca.capabilities.Node"
- },
- "content": {
- "type": "tosca.capability.Content",
- "properties": {
- "type": {
- "required": false,
- "type": "string",
- "default": "json"
- },
- "content": {
- "required": true,
- "type": "string"
- }
- }
}
},
"requirements": {
"capabilities": {\r
"dg-node": {\r
"type": "tosca.capabilities.Node"\r
- },\r
- "content": {\r
- "type": "tosca.capability.Content",\r
- "properties": {\r
- "type": {\r
- "required": false,\r
- "type": "string",\r
- "default": "json"\r
- },\r
- "content": {\r
- "required": true,\r
- "type": "string"\r
- }\r
- }\r
}\r
},\r
"requirements": {\r
"capabilities": {\r
"dg-node": {\r
"type": "tosca.capabilities.Node"\r
- },\r
- "content": {\r
- "type": "tosca.capability.Content",\r
- "properties": {\r
- "type": {\r
- "required": false,\r
- "type": "string",\r
- "default": "json"\r
- },\r
- "content": {\r
- "required": false,\r
- "type": "string"\r
- }\r
- }\r
}\r
},\r
"requirements": {\r
"capabilities": {\r
"dg-node": {\r
"type": "tosca.capabilities.Node"\r
- },\r
- "content": {\r
- "type": "tosca.capability.Content",\r
- "properties": {\r
- "type": {\r
- "required": false,\r
- "type": "string",\r
- "default": "json"\r
- },\r
- "content": {\r
- "required": false,\r
- "type": "string"\r
- }\r
- }\r
}\r
},\r
"requirements": {\r
"version": "1.0.0",\r
"capabilities": {\r
"netconf": {\r
- "type": "tosca.capability.Netconf",\r
+ "type": "tosca.capabilities.Netconf",\r
"properties": {\r
"login-key": {\r
"required": true,\r
"capabilities": {\r
"dg-node": {\r
"type": "tosca.capabilities.Node"\r
- },\r
- "content": {\r
- "type": "tosca.capability.Content",\r
- "properties": {\r
- "type": {\r
- "required": false,\r
- "type": "string",\r
- "default": "json"\r
- },\r
- "content": {\r
- "required": false,\r
- "type": "string"\r
- }\r
- }\r
}\r
},\r
"requirements": {\r
},\r
"capabilities": {\r
"content": {\r
- "type": "tosca.capability.Content",\r
+ "type": "tosca.capabilities.Content",\r
"properties": {\r
"content": {\r
"required": true,\r
}\r
},\r
"mapping": {\r
- "type": "tosca.capability.Mapping",\r
+ "type": "tosca.capabilities.Mapping",\r
"properties": {\r
"mapping": {\r
"required": false,\r
"version": "1.0.0",\r
"capabilities": {\r
"netconf": {\r
- "type": "tosca.capability.Netconf",\r
+ "type": "tosca.capabilities.Netconf",\r
"properties": {\r
"profile-name": {\r
"required": true,\r
}\r
},\r
"ssh": {\r
- "type": "tosca.capability.Ssh",\r
+ "type": "tosca.capabilities.Ssh",\r
"properties": {\r
"profile-name": {\r
"required": true,\r
}\r
},\r
"sftp": {\r
- "type": "tosca.capability.Sftp",\r
+ "type": "tosca.capabilities.Sftp",\r
"properties": {\r
"profile-name": {\r
"required": true,\r
"capabilities": {\r
"dg-node": {\r
"type": "tosca.capabilities.Node"\r
- },\r
- "content": {\r
- "type": "tosca.capability.Content",\r
- "properties": {\r
- "type": {\r
- "required": false,\r
- "type": "string",\r
- "default": "json"\r
- },\r
- "content": {\r
- "required": true,\r
- "type": "string"\r
- }\r
- }\r
}\r
},\r
"requirements": {\r
"version": "1.0.0",\r
"capabilities": {\r
"netconf": {\r
- "type": "tosca.capability.Netconf",\r
+ "type": "tosca.capabilities.Netconf",\r
"properties": {\r
"password": {\r
"required": false,\r
}\r
},\r
"ssh": {\r
- "type": "tosca.capability.Ssh",\r
+ "type": "tosca.capabilities.Ssh",\r
"properties": {\r
"password": {\r
"required": false,\r
}\r
},\r
"sftp": {\r
- "type": "tosca.capability.Sftp",\r
+ "type": "tosca.capabilities.Sftp",\r
"properties": {\r
"password": {\r
"required": false,\r
"type": "tosca.capabilities.Node"\r
},\r
"content": {\r
- "type": "tosca.capability.Content",\r
+ "type": "tosca.capabilities.Content",\r
"properties": {\r
"type": {\r
"required": false,\r
"type": "tosca.capabilities.Node"\r
},\r
"content": {\r
- "type": "tosca.capability.Content",\r
+ "type": "tosca.capabilities.Content",\r
"properties": {\r
"type": {\r
"required": false,\r
},\r
"capabilities": {\r
"content": {\r
- "type": "tosca.capability.Content",\r
+ "type": "tosca.capabilities.Content",\r
"properties": {\r
"content": {\r
"required": true,\r
}\r
},\r
"mapping": {\r
- "type": "tosca.capability.Mapping",\r
+ "type": "tosca.capabilities.Mapping",\r
"properties": {\r
"mapping": {\r
"required": false,\r
}\r
},\r
"capabilities": {\r
- "dg-node": {},\r
- "content": {\r
- "properties": {\r
- "type": "json"\r
- }\r
- }\r
+ "dg-node": {}\r
},\r
"interfaces": {\r
"CONFIG": {\r
}\r
},\r
"capabilities": {\r
- "dg-node": {},\r
- "content": {\r
- "properties": {\r
- "type": "json"\r
- }\r
- }\r
+ "dg-node": {}\r
},\r
"interfaces": {\r
"CONFIG": {\r
"capabilities" : {\r
"dg-node" : {\r
"type" : "tosca.capabilities.Node"\r
- },\r
- "content" : {\r
- "type" : "tosca.capability.Content",\r
- "properties" : {\r
- "type" : {\r
- "required" : false,\r
- "type" : "string",\r
- "default" : "json"\r
- },\r
- "content" : {\r
- "required" : false,\r
- "type" : "string"\r
- }\r
- }\r
}\r
},\r
"requirements" : {\r
},\r
"capabilities" : {\r
"content" : {\r
- "type" : "tosca.capability.Content",\r
+ "type" : "tosca.capabilities.Content",\r
"properties" : {\r
"content" : {\r
"required" : true,\r
}\r
},\r
"mapping" : {\r
- "type" : "tosca.capability.Mapping",\r
+ "type" : "tosca.capabilities.Mapping",\r
"properties" : {\r
"mapping" : {\r
"required" : false,\r
"version" : "1.0.0",\r
"capabilities" : {\r
"netconf" : {\r
- "type" : "tosca.capability.Netconf",\r
+ "type" : "tosca.capabilities.Netconf",\r
"properties" : {\r
"login-key" : {\r
"required" : true,\r
"capabilities" : {\r
"dg-node" : {\r
"type" : "tosca.capabilities.Node"\r
- },\r
- "content" : {\r
- "type" : "tosca.capability.Content",\r
- "properties" : {\r
- "type" : {\r
- "required" : false,\r
- "type" : "string",\r
- "default" : "json"\r
- },\r
- "content" : {\r
- "required" : true,\r
- "type" : "string"\r
- }\r
- }\r
}\r
},\r
"requirements" : {\r
"is-start-flow" : false\r
},\r
"capabilities" : {\r
- "dg-node" : { },\r
- "content" : {\r
- "properties" : {\r
- "type" : "json"\r
- }\r
- }\r
+ "dg-node" : { }\r
},\r
"requirements" : {\r
"component-dependency" : {\r
"is-start-flow" : false\r
},\r
"capabilities" : {\r
- "dg-node" : { },\r
- "content" : {\r
- "properties" : {\r
- "type" : "json"\r
- }\r
- }\r
+ "dg-node" : { }\r
},\r
"requirements" : {\r
"component-dependency" : {\r