2 * Copyright © 2017-2018 AT&T Intellectual Property.
3 * Modifications Copyright © 2018-2019 IBM.
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 @file:Suppress("unused")
19 package org.onap.ccsdk.cds.controllerblueprints.core.data
21 import com.fasterxml.jackson.annotation.JsonIgnore
22 import com.fasterxml.jackson.annotation.JsonProperty
23 import com.fasterxml.jackson.annotation.JsonPropertyOrder
24 import com.fasterxml.jackson.databind.JsonNode
25 import io.swagger.annotations.ApiModelProperty
26 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintConstants
27 import org.onap.ccsdk.cds.controllerblueprints.core.asJsonType
32 * @author Brinda Santh
34 open class EntityType {
37 var id: String? = null
38 var description: String? = null
39 var version: String = "1.0.0"
40 var metadata: MutableMap<String, String>? = null
41 @get:JsonProperty("derived_from")
42 lateinit var derivedFrom: String
43 var attributes: MutableMap<String, AttributeDefinition>? = null
44 var properties: MutableMap<String, PropertyDefinition>? = null
48 5.3.2 tosca.datatypes.Credential
49 The Credential type is a complex TOSCA data Type used when describing
50 authorization credentials used to access network accessible resources.
55 var id: String? = null
56 var protocol: String? = null
57 @get:JsonProperty("token_type")
58 lateinit var tokenType: String
59 lateinit var token: String
60 var keys: MutableMap<String, String>? = null
61 lateinit var user: String
65 3.5.2 Constraint clause
66 A constraint clause defines an operation along with one or more compatible values that can be used to define a constraint on a property or parameter’s allowed values when it is defined in a TOSCA Service Template or one of its entities.
68 class ConstraintClause {
70 var equal: JsonNode? = null
71 @get:JsonProperty("greater_than")
72 var greaterThan: JsonNode? = null
73 @get:JsonProperty("greater_or_equal")
74 var greaterOrEqual: JsonNode? = null
75 @get:JsonProperty("less_than")
76 var lessThan: JsonNode? = null
77 @get:JsonProperty("less_or_equal")
78 var lessOrEqual: JsonNode? = null
79 @get:JsonProperty("in_range")
80 var inRange: MutableList<JsonNode>? = null
81 @get:JsonProperty("valid_values")
82 var validValues: MutableList<JsonNode>? = null
83 var length: JsonNode? = null
84 @get:JsonProperty("min_length")
85 var minLength: JsonNode? = null
86 @get:JsonProperty("max_length")
87 var maxLength: JsonNode? = null
88 var pattern: String? = null
89 var schema: String? = null
93 3.5.4 Node Filter definition
94 A node filter definition defines criteria for selection of a TOSCA Node Template based upon the template’s property values, capabilities and capability properties.
97 class NodeFilterDefinition {
98 var properties: MutableMap<String, PropertyDefinition>? = null
99 var capabilities: MutableList<String>? = null
103 3.5.5 Repository definition
104 A repository definition defines a named external repository which contains deployment
105 and implementation artifacts that are referenced within the TOSCA Service Template.
107 class RepositoryDefinition {
110 var id: String? = null
111 var description: String? = null
112 lateinit var url: String
113 var credential: Credential? = null
117 3.5.6 Artifact definition
118 An artifact definition defines a named, typed file that can be associated with Node Type
119 or Node Template and used by orchestration engine to facilitate deployment and implementation of interface operations.
121 class ArtifactDefinition {
124 var id: String? = null
125 lateinit var type: String
126 lateinit var file: String
127 var repository: String? = null
128 var description: String? = null
129 @get:JsonProperty("deploy_Path")
130 var deployPath: String? = null
131 var properties: MutableMap<String, JsonNode>? = null
135 3.5.7 Import definition
136 An import definition is used within a TOSCA Service Template to locate and uniquely name
137 another TOSCA Service Template file which has type and template definitions to be imported (included)
138 and referenced within another Service Template.
140 class ImportDefinition {
143 var id: String? = null
144 lateinit var file: String
145 var repository: String? = null
146 @get:JsonProperty("namespace_uri")
147 var namespaceUri: String? = null
148 @get:JsonProperty("namespace_prefix")
149 var namespacePrefix: String? = null
153 3.5.8 Property definition A property definition defines a named, typed value and related data that can be associated with an
154 entity defined in this specification (e.g., Node Types, Relationship Types, Capability Types, etc.).
155 Properties are used by template authors to provide input values to TOSCA entities which indicate their “desired state” when they are
156 instantiated. The value of a property can be retrieved using the get_property function within TOSCA Service Templates.
158 class PropertyDefinition {
161 var id: String? = null
162 var description: String? = null
163 var required: Boolean? = null
164 lateinit var type: String
165 @get:JsonProperty("input-param")
166 var inputparam: Boolean? = null
167 @get:JsonProperty("default")
168 var defaultValue: JsonNode? = null
169 var status: String? = null
170 var constraints: MutableList<ConstraintClause>? = null
171 @get:JsonProperty("entry_schema")
172 var entrySchema: EntrySchema? = null
173 @get:JsonProperty("external-schema")
174 var externalSchema: String? = null
175 var metadata: MutableMap<String, String>? = null
176 // Mainly used in Workflow Outputs
177 @get:ApiModelProperty(notes = "Property Value, It may be Expression or Json type values")
178 var value: JsonNode? = null
182 3.5.10 Attribute definition
184 An attribute definition defines a named, typed value that can be associated with an entity defined in this
185 specification (e.g., a Node, Relationship or Capability Type). Specifically, it is used to expose the
186 “actual state” of some property of a TOSCA entity after it has been deployed and instantiated
187 (as set by the TOSCA orchestrator). Attribute values can be retrieved via the get_attribute function
188 from the instance model and used as values to other entities within TOSCA Service Templates.
191 class AttributeDefinition {
193 var id: String? = null
194 var description: String? = null
195 var required: Boolean? = null
196 lateinit var type: String
197 @JsonProperty("default")
198 var defaultValue: JsonNode? = null
199 var status: String? = null
200 var constraints: MutableList<ConstraintClause>? = null
201 @JsonProperty("entry_schema")
202 var entrySchema: EntrySchema? = null
203 // Mainly used in DSL definitions
204 @get:ApiModelProperty(notes = "Attribute Value, It may be Expression or Json type values")
205 var value: JsonNode? = null
209 3.5.13 Operation definition
210 An operation definition defines a named function or procedure that can be bound to an implementation artifact (e.g., a script).
212 class OperationDefinition {
215 var id: String? = null
216 var description: String? = null
217 var implementation: Implementation? = null
218 var inputs: MutableMap<String, PropertyDefinition>? = null
219 var outputs: MutableMap<String, PropertyDefinition>? = null
222 class Implementation {
223 var primary: String? = null
224 var dependencies: MutableList<String>? = null
225 @get:JsonProperty("operation_host")
226 var operationHost: String = BluePrintConstants.PROPERTY_SELF
227 // Timeout value in seconds
228 var timeout: Int = 180
229 var lock: LockAssignment? = null
232 class LockAssignment {
233 lateinit var key: JsonNode
234 var acquireTimeout: JsonNode = Integer(180).asJsonType()
238 3.5.14 Interface definition
239 An interface definition defines a named interface that can be associated with a Node or Relationship Type
241 class InterfaceDefinition {
244 var id: String? = null
245 var type: String? = null
246 var operations: MutableMap<String, OperationDefinition>? = null
247 var inputs: MutableMap<String, PropertyDefinition>? = null
251 3.5.15 Event Filter definition
252 An event filter definition defines criteria for selection of an attribute, for the purpose of monitoring it, within a TOSCA entity, or one its capabilities.
254 class EventFilterDefinition {
257 var id: String? = null
258 lateinit var node: String
259 var requirement: String? = null
260 var capability: String? = null
264 3.5.16 Trigger definition TODO
265 A trigger definition defines the event, condition and action that is used to “trigger” a policy it is associated with.
267 class TriggerDefinition {
270 var id: String? = null
271 var description: String? = null
272 @get:JsonProperty("event_type")
273 lateinit var eventType: String
274 @get:JsonProperty("target_filter")
275 var targetFilter: EventFilterDefinition? = null
276 var condition: ConditionClause? = null
277 var constraint: ConditionClause? = null
278 var method: String? = null
279 lateinit var action: String
283 3.5.17 Workflow activity definition
284 A workflow activity defines an operation to be performed in a TOSCA workflow. Activities allows to:
285 · Delegate the workflow for a node expected to be provided by the orchestrator
286 · Set the state of a node
287 · Call an operation defined on a TOSCA interface of a node, relationship or group
288 · Inline another workflow defined in the topology (to allow reusability)
292 var delegate: String? = null
293 @get:JsonProperty("set_state")
294 var setState: String? = null
295 @get:JsonProperty("call_operation")
296 var callOperation: String? = null
297 var inlines: ArrayList<String>? = null
301 3.5.20 Workflow precondition definition
302 A workflow condition can be used as a filter or precondition to check if a workflow can be processed or not based on the state of the instances of a TOSCA topology deployment. When not met, the workflow will not be triggered.
304 class PreConditionDefinition {
307 var id: String? = null
308 lateinit var target: String
309 @get:JsonProperty("target_relationship")
310 lateinit var targetRelationship: String
311 lateinit var condition: ArrayList<ConditionClause>
315 3.5.21 Workflow step definition
316 A workflow step allows to define one or multiple sequenced activities in a workflow and how they are connected to other steps in the workflow. They are the building blocks of a declarative workflow.
321 var id: String? = null
322 var description: String? = null
323 var target: String? = null
324 @JsonProperty("target_relationship")
325 var targetRelationship: String? = null
326 @JsonProperty("operation_host")
327 var operationHost: String? = null
328 var activities: ArrayList<Activity>? = null
329 @get:JsonProperty("on_success")
330 var onSuccess: ArrayList<String>? = null
331 @get:JsonProperty("on_failure")
332 var onFailure: ArrayList<String>? = null
336 3.6.2 Capability definition
337 A capability definition defines a named, typed set of data that can be associated with Node Type or Node Template to describe a transparent capability or feature of the software component the node describes.
340 class CapabilityDefinition {
342 var id: String? = null
343 lateinit var type: String
344 var description: String? = null
345 var properties: MutableMap<String, PropertyDefinition>? = null
346 @get:JsonProperty("valid_source_types")
347 var validSourceTypes: MutableList<String>? = null
348 var occurrences: MutableList<Any>? = null
352 3.6.3 Requirement definition
353 The Requirement definition describes a named requirement (dependencies) of a TOSCA Node Type or Node template which needs to be fulfilled by a matching Capability definition declared by another TOSCA modelable entity. The requirement definition may itself include the specific name of the fulfilling entity (explicitly) or provide an abstract type, along with additional filtering characteristics, that a TOSCA orchestrator can use to fulfill the capability at runtime (implicitly).
355 class RequirementDefinition {
358 var id: String? = null
359 var description: String? = null
360 var capability: String? = null
361 var node: String? = null
362 var relationship: String? = null
363 var occurrences: MutableList<Any>? = null
368 An Artifact Type is a reusable entity that defines the type of one or more files that are used to define implementation or deployment artifacts that are referenced by nodes or relationships on their operations.
370 class ArtifactType : EntityType() {
372 @get:JsonProperty("mime_type")
373 var mimeType: String? = null
374 @get:JsonProperty("file_ext")
375 var fileExt: MutableList<String>? = null
380 A Data Type definition defines the schema for new named datatypes in TOSCA.
383 class DataType : EntityType() {
384 var constraints: MutableList<ConstraintClause>? = null
389 A Node Type is a reusable entity that defines the type of one or more Node Templates. As such, a Node Type defines the structure of observable properties via a Properties Definition, the Requirements and Capabilities of the node as well as its supported interfaces.
393 class NodeType : EntityType() {
394 var capabilities: MutableMap<String, CapabilityDefinition>? = null
395 var requirements: MutableMap<String, RequirementDefinition>? = null
396 var interfaces: MutableMap<String, InterfaceDefinition>? = null
397 var artifacts: MutableMap<String, ArtifactDefinition>? = null
401 3.6.8 Requirement Type
402 A Requirement Type is a reusable entity that describes a kind of requirement that a Node Type can declare to expose.
403 The TOSCA Simple Profile seeks to simplify the need for declaring specific Requirement Types
404 from nodes and instead rely upon nodes declaring their features sets using TOSCA Capability Types
405 along with a named Feature notation.
408 class RequirementType : EntityType() {
409 var requirements: MutableMap<String, RequirementDefinition>? = null
410 var capabilities: MutableMap<String, CapabilityDefinition>? = null
411 var interfaces: MutableMap<String, InterfaceDefinition>? = null
412 var artifacts: MutableMap<String, ArtifactDefinition>? = null
416 3.6.10 Relationship Type
417 A Relationship Type is a reusable entity that defines the type of one or more relationships between Node Types or Node Templates.
420 class RelationshipType : EntityType() {
421 var interfaces: MutableMap<String, InterfaceDefinition>? = null
422 @get:JsonProperty("valid_target_types")
423 var validTargetTypes: MutableList<String>? = null
428 A Group Type defines logical grouping types for nodes, typically for different management purposes.
429 Groups can effectively be viewed as logical nodes that are not part of the physical deployment topology
430 of an application, yet can have capabilities and the ability to attach policies and interfaces
431 that can be applied (depending on the group type) to its member nodes.
434 class GroupType : EntityType() {
435 var members: MutableList<String>? = null
436 var requirements: ArrayList<RequirementDefinition>? = null
437 var capabilities: MutableMap<String, CapabilityDefinition>? = null
438 var interfaces: MutableMap<String, InterfaceDefinition>? = null
443 A Policy Type defines a type of requirement that affects or governs an application or service’s
444 topology at some stage of its lifecycle, but is not explicitly part of the topology itself
445 (i.e., it does not prevent the application or service from being deployed or run if it did not exist).
447 class PolicyType : EntityType() {
449 lateinit var targets: MutableList<String>
453 3.7.1 Capability assignment
454 A capability assignment allows node template authors to assign values to properties and attributes for a named capability definition that is part of a Node Template’s type definition.
456 class CapabilityAssignment {
459 var id: String? = null
460 var attributes: MutableMap<String, JsonNode>? = null
461 var properties: MutableMap<String, JsonNode>? = null
465 3.7.4 Relationship Template
466 A Relationship Template specifies the occurrence of a manageable relationship between node templates as part of an application’s topology model that is defined in a TOSCA Service Template. A Relationship template is an instance of a specified Relationship Type and can provide customized properties, constraints or operations which override the defaults provided by its Relationship Type and its implementations.
468 class GroupDefinition {
471 var id: String? = null
472 lateinit var type: String
473 var description: String? = null
474 var metadata: MutableMap<String, String>? = null
475 var properties: MutableMap<String, JsonNode>? = null
476 var members = ArrayList<String>()
477 var interfaces: MutableMap<String, InterfaceDefinition>? = null
481 3.7.6 Policy definition
482 A policy definition defines a policy that can be associated with a TOSCA topology or top-level entity definition (e.g., group definition, node template, etc.).
484 class PolicyDefinition {
487 var id: String? = null
488 lateinit var type: String
489 var description: String? = null
490 var metadata: MutableMap<String, String>? = null
491 var properties: MutableMap<String, JsonNode>? = null
492 var targets: MutableList<String>? = null
496 3.8 Topology Template definition
497 This section defines the topology template of a cloud application. The main ingredients of the topology template are node templates representing components of the application and relationship templates representing links between the components. These elements are defined in the nested node_templates section and the nested relationship_templates sections, respectively. Furthermore, a topology template allows for defining input parameters, output parameters as well as grouping of node templates.
499 class TopologyTemplate {
502 var id: String? = null
503 var description: String? = null
504 var inputs: MutableMap<String, PropertyDefinition>? = null
505 @get:JsonProperty("node_templates")
506 var nodeTemplates: MutableMap<String, NodeTemplate>? = null
507 @get:JsonProperty("relationship_templates")
508 var relationshipTemplates: MutableMap<String, RelationshipTemplate>? = null
509 var policies: MutableMap<String, PolicyDefinition>? = null
510 var outputs: MutableMap<String, PropertyDefinition>? = null
511 @get:JsonProperty("substitution_mappings")
512 var substitutionMappings: Any? = null
513 var workflows: MutableMap<String, Workflow>? = null
516 class SubstitutionMapping {
517 @get:JsonProperty("node_type")
518 lateinit var nodeType: String
519 lateinit var capabilities: ArrayList<String>
520 lateinit var requirements: ArrayList<String>
524 lateinit var type: String
525 var constraints: MutableList<ConstraintClause>? = null
528 class InterfaceAssignment {
530 var id: String? = null
531 var operations: MutableMap<String, OperationAssignment>? = null
532 var inputs: MutableMap<String, JsonNode>? = null
537 A Node Template specifies the occurrence of a manageable software component as part of an application’s topology model which is defined in a TOSCA Service Template. A Node template is an instance of a specified Node Type and can provide customized properties, constraints or operations which override the defaults provided by its Node Type and its implementations.
540 open class NodeTemplate {
542 var id: String? = null
543 var description: String? = null
544 lateinit var type: String
545 var metadata: MutableMap<String, String>? = null
546 var directives: MutableList<String>? = null
547 // @get:JsonSerialize(using = PropertyDefinitionValueSerializer::class)
548 var properties: MutableMap<String, JsonNode>? = null
549 var attributes: MutableMap<String, JsonNode>? = null
550 var capabilities: MutableMap<String, CapabilityAssignment>? = null
551 var requirements: MutableMap<String, RequirementAssignment>? = null
552 var interfaces: MutableMap<String, InterfaceAssignment>? = null
553 var artifacts: MutableMap<String, ArtifactDefinition>? = null
554 @get:JsonProperty("node_filter")
555 var nodeFilter: NodeFilterDefinition? = null
556 var copy: String? = null
559 class OperationAssignment {
561 var id: String? = null
562 var description: String? = null
563 var implementation: Implementation? = null
564 var inputs: MutableMap<String, JsonNode>? = null
565 var outputs: MutableMap<String, JsonNode>? = null
569 3.7.4 Relationship Template
570 A Relationship Template specifies the occurrence of a manageable relationship between node templates as part of an application’s topology model that is defined in a TOSCA Service Template. A Relationship template is an instance of a specified Relationship Type and can provide customized properties, constraints or operations which override the defaults provided by its Relationship Type and its implementations.
573 class RelationshipTemplate {
575 var id: String? = null
576 lateinit var type: String
577 var description: String? = null
578 var metadata: MutableMap<String, String>? = null
579 var properties: MutableMap<String, JsonNode>? = null
580 var attributes: MutableMap<String, JsonNode>? = null
581 var interfaces: MutableMap<String, InterfaceDefinition>? = null
582 var copy: String? = null
586 3.7.2 Requirement assignment
587 A Requirement assignment allows template authors to provide either concrete names of TOSCA templates or provide abstract selection criteria for providers to use to find matching TOSCA templates that are used to fulfill a named requirement’s declared TOSCA Node Type.
590 class RequirementAssignment {
592 var id: String? = null
593 var capability: String? = null
594 var node: String? = null
595 // Relationship Type or Relationship Template
596 var relationship: String? = null
601 var id: String? = null
602 var description: String? = null
603 var steps: MutableMap<String, Step>? = null
604 var preconditions: ArrayList<PreConditionDefinition>? = null
605 var inputs: MutableMap<String, PropertyDefinition>? = null
606 var outputs: MutableMap<String, PropertyDefinition>? = null
609 class ConditionClause {
610 var and: ArrayList<MutableMap<String, Any>>? = null
611 var or: ArrayList<MutableMap<String, Any>>? = null
612 @get:JsonProperty("assert")
613 var assertConditions: ArrayList<MutableMap<String, Any>>? = null
617 3.9 Service Template definition
618 A TOSCA Service Template (YAML) document contains element definitions of building blocks for cloud application, or complete models of cloud applications. This section describes the top-level structural elements (TOSCA keynames) along with their grammars, which are allowed to appear in a TOSCA Service Template document.
622 value = ["toscaDefinitionsVersion", "description", "metadata", "imports", "dsl_definitions",
625 class ServiceTemplate : Cloneable {
628 var id: String? = null
629 @get:JsonProperty("tosca_definitions_version")
630 var toscaDefinitionsVersion: String = "controller_blueprint_1_0_0"
631 var metadata: MutableMap<String, String>? = null
632 var description: String? = null
633 @get:JsonProperty("dsl_definitions")
634 var dslDefinitions: MutableMap<String, JsonNode>? = null
635 var repositories: MutableMap<String, RepositoryDefinition>? = null
636 var imports: MutableList<ImportDefinition>? = null
637 @get:JsonProperty("artifact_types")
638 var artifactTypes: MutableMap<String, ArtifactType>? = null
639 @get:JsonProperty("data_types")
640 var dataTypes: MutableMap<String, DataType>? = null
641 @get:JsonProperty("relationship_types")
642 var relationshipTypes: MutableMap<String, RelationshipType>? = null
643 @get:JsonProperty("node_types")
644 var nodeTypes: MutableMap<String, NodeType>? = null
645 @get:JsonProperty("policy_types")
646 var policyTypes: MutableMap<String, PolicyType>? = null
647 @get:JsonProperty("topology_template")
648 var topologyTemplate: TopologyTemplate? = null
650 public override fun clone(): ServiceTemplate {
651 return super.clone() as ServiceTemplate
655 class ToscaMetaData {
656 lateinit var toscaMetaFileVersion: String
657 lateinit var csarVersion: String
658 lateinit var createdBy: String
659 lateinit var entityDefinitions: String
660 lateinit var templateName: String
661 lateinit var templateVersion: String
662 lateinit var templateTags: String
663 var templateType: String = BluePrintConstants.BLUEPRINT_TYPE_DEFAULT