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
31 * @author Brinda Santh
33 open class EntityType {
35 var id: String? = null
36 var description: String? = null
37 var version: String = "1.0.0"
38 var metadata: MutableMap<String, String>? = null
39 @get:JsonProperty("derived_from")
40 lateinit var derivedFrom: String
41 var attributes: MutableMap<String, AttributeDefinition>? = null
42 var properties: MutableMap<String, PropertyDefinition>? = null
46 5.3.2 tosca.datatypes.Credential
47 The Credential type is a complex TOSCA data Type used when describing
48 authorization credentials used to access network accessible resources.
52 var id: String? = null
53 var protocol: String? = null
54 @get:JsonProperty("token_type")
55 lateinit var tokenType: String
56 lateinit var token: String
57 var keys: MutableMap<String, String>? = null
58 lateinit var user: String
62 3.5.2 Constraint clause
63 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.
65 class ConstraintClause {
66 @get:JsonProperty("equal")
67 var equal: JsonNode? = null
68 @get:JsonProperty("greater_than")
69 var greaterThan: Any? = null
70 @get:JsonProperty("greater_or_equal")
71 var greaterOrEqual: Any? = null
72 @get:JsonProperty("less_than")
73 var lessThan: Any? = null
74 @get:JsonProperty("less_or_equal")
75 var lessOrEqual: Any? = null
76 @get:JsonProperty("in_range")
77 var inRange: Any? = null
78 @get:JsonProperty("valid_values")
79 var validValues: MutableList<JsonNode>? = null
80 @get:JsonProperty("length")
81 var length: Any? = null
82 @get:JsonProperty("min_length")
83 var minLength: Any? = null
84 @get:JsonProperty("max_length")
85 var maxLength: Any? = null
86 var pattern: String? = null
87 var schema: String? = null
91 3.5.4 Node Filter definition
92 A node filter definition defines criteria for selection of a TOSCA Node Template based upon the template’s property values, capabilities and capability properties.
95 class NodeFilterDefinition {
96 var properties: MutableMap<String, PropertyDefinition>? = null
97 var capabilities: MutableList<String>? = null
101 3.5.5 Repository definition
102 A repository definition defines a named external repository which contains deployment
103 and implementation artifacts that are referenced within the TOSCA Service Template.
105 class RepositoryDefinition {
107 var id: String? = null
108 var description: String? = null
109 lateinit var url: String
110 var credential: Credential? = null
115 3.5.6 Artifact definition
116 An artifact definition defines a named, typed file that can be associated with Node Type
117 or Node Template and used by orchestration engine to facilitate deployment and implementation of interface operations.
119 class ArtifactDefinition {
121 var id: String? = null
122 lateinit var type: String
123 lateinit var file: String
124 var repository: String? = null
125 var description: String? = null
126 @get:JsonProperty("deploy_Path")
127 var deployPath: String? = null
128 var properties: MutableMap<String, JsonNode>? = null
133 3.5.7 Import definition
134 An import definition is used within a TOSCA Service Template to locate and uniquely name
135 another TOSCA Service Template file which has type and template definitions to be imported (included)
136 and referenced within another Service Template.
138 class ImportDefinition {
140 var id: String? = null
141 lateinit var file: String
142 var repository: String? = null
143 @get:JsonProperty("namespace_uri")
144 var namespaceUri: String? = null
145 @get:JsonProperty("namespace_prefix")
146 var namespacePrefix: String? = null
150 3.5.8 Property definition A property definition defines a named, typed value and related data that can be associated with an
151 entity defined in this specification (e.g., Node Types, Relationship Types, Capability Types, etc.).
152 Properties are used by template authors to provide input values to TOSCA entities which indicate their “desired state” when they are
153 instantiated. The value of a property can be retrieved using the get_property function within TOSCA Service Templates.
155 class PropertyDefinition {
157 var id: String? = null
158 var description: String? = null
159 var required: Boolean? = null
160 lateinit var type: String
161 @get:JsonProperty("default")
162 var defaultValue: JsonNode? = null
163 var status: String? = null
164 var constraints: MutableList<ConstraintClause>? = null
165 @get:JsonProperty("entry_schema")
166 var entrySchema: EntrySchema? = null
167 // Mainly used in Workflow Outputs
168 @get:ApiModelProperty(notes = "Property Value, It may be Expression or Json type values")
169 var value: JsonNode? = null
174 3.5.10 Attribute definition
176 An attribute definition defines a named, typed value that can be associated with an entity defined in this
177 specification (e.g., a Node, Relationship or Capability Type). Specifically, it is used to expose the
178 “actual state” of some property of a TOSCA entity after it has been deployed and instantiated
179 (as set by the TOSCA orchestrator). Attribute values can be retrieved via the get_attribute function
180 from the instance model and used as values to other entities within TOSCA Service Templates.
183 class AttributeDefinition {
185 var id: String? = null
186 var description: String? = null
187 var required: Boolean? = null
188 lateinit var type: String
189 @JsonProperty("default")
190 var defaultValue: JsonNode? = null
191 var status: String? = null
192 var constraints: MutableList<ConstraintClause>? = null
193 @JsonProperty("entry_schema")
194 var entrySchema: EntrySchema? = null
198 3.5.13 Operation definition
199 An operation definition defines a named function or procedure that can be bound to an implementation artifact (e.g., a script).
201 class OperationDefinition {
203 var id: String? = null
204 var description: String? = null
205 var implementation: Implementation? = null
206 var inputs: MutableMap<String, PropertyDefinition>? = null
207 var outputs: MutableMap<String, PropertyDefinition>? = null
210 class Implementation {
211 var primary: String? = null
212 var dependencies: MutableList<String>? = null
213 @get:JsonProperty("operation_host")
214 var operationHost: String = BluePrintConstants.PROPERTY_SELF
215 //Timeout value in seconds
216 var timeout: Int = 180
220 3.5.14 Interface definition
221 An interface definition defines a named interface that can be associated with a Node or Relationship Type
223 class InterfaceDefinition {
225 var id: String? = null
226 var type: String? = null
227 var operations: MutableMap<String, OperationDefinition>? = null
228 var inputs: MutableMap<String, PropertyDefinition>? = null
232 3.5.15 Event Filter definition
233 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.
235 class EventFilterDefinition {
237 var id: String? = null
238 lateinit var node: String
239 var requirement: String? = null
240 var capability: String? = null
244 3.5.16 Trigger definition TODO
245 A trigger definition defines the event, condition and action that is used to “trigger” a policy it is associated with.
247 class TriggerDefinition {
249 var id: String? = null
250 var description: String? = null
251 @get:JsonProperty("event_type")
252 lateinit var eventType: String
253 @get:JsonProperty("target_filter")
254 var targetFilter: EventFilterDefinition? = null
255 var condition: ConditionClause? = null
256 var constraint: ConditionClause? = null
257 var method: String? = null
258 lateinit var action: String
262 3.5.17 Workflow activity definition
263 A workflow activity defines an operation to be performed in a TOSCA workflow. Activities allows to:
264 · Delegate the workflow for a node expected to be provided by the orchestrator
265 · Set the state of a node
266 · Call an operation defined on a TOSCA interface of a node, relationship or group
267 · Inline another workflow defined in the topology (to allow reusability)
270 var delegate: String? = null
271 @get:JsonProperty("set_state")
272 var setState: String? = null
273 @get:JsonProperty("call_operation")
274 var callOperation: String? = null
275 var inlines: ArrayList<String>? = null
279 3.5.20 Workflow precondition definition
280 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.
282 class PreConditionDefinition {
284 var id: String? = null
285 lateinit var target: String
286 @get:JsonProperty("target_relationship")
287 lateinit var targetRelationship: String
288 lateinit var condition: ArrayList<ConditionClause>
292 3.5.21 Workflow step definition
293 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.
297 var id: String? = null
298 var description: String? = null
299 var target: String? = null
300 @JsonProperty("target_relationship")
301 var targetRelationship: String? = null
302 @JsonProperty("operation_host")
303 var operationHost: String? = null
304 var activities: ArrayList<Activity>? = null
305 @get:JsonProperty("on_success")
306 var onSuccess: ArrayList<String>? = null
307 @get:JsonProperty("on_failure")
308 var onFailure: ArrayList<String>? = null
312 3.6.2 Capability definition
313 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.
316 class CapabilityDefinition {
318 var id: String? = null
319 lateinit var type: String
320 var description: String? = null
321 var properties: MutableMap<String, PropertyDefinition>? = null
322 @get:JsonProperty("valid_source_types")
323 var validSourceTypes: MutableList<String>? = null
324 var occurrences: MutableList<Any>? = null
328 3.6.3 Requirement definition
329 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).
331 class RequirementDefinition {
333 var id: String? = null
334 var description: String? = null
335 var capability: String? = null
336 var node: String? = null
337 var relationship: String? = null
338 var occurrences: MutableList<Any>? = null
343 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.
345 class ArtifactType : EntityType() {
346 @get:JsonProperty("mime_type")
347 var mimeType: String? = null
348 @get:JsonProperty("file_ext")
349 var fileExt: MutableList<String>? = null
355 A Data Type definition defines the schema for new named datatypes in TOSCA.
358 class DataType : EntityType() {
359 var constraints: MutableList<ConstraintClause>? = null
364 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.
368 class NodeType : EntityType() {
369 var capabilities: MutableMap<String, CapabilityDefinition>? = null
370 var requirements: MutableMap<String, RequirementDefinition>? = null
371 var interfaces: MutableMap<String, InterfaceDefinition>? = null
372 var artifacts: MutableMap<String, ArtifactDefinition>? = null
376 3.6.8 Requirement Type
377 A Requirement Type is a reusable entity that describes a kind of requirement that a Node Type can declare to expose.
378 The TOSCA Simple Profile seeks to simplify the need for declaring specific Requirement Types
379 from nodes and instead rely upon nodes declaring their features sets using TOSCA Capability Types
380 along with a named Feature notation.
383 class RequirementType : EntityType() {
384 var requirements: MutableMap<String, RequirementDefinition>? = null
385 var capabilities: MutableMap<String, CapabilityDefinition>? = null
386 var interfaces: MutableMap<String, InterfaceDefinition>? = null
387 var artifacts: MutableMap<String, ArtifactDefinition>? = null
391 3.6.10 Relationship Type
392 A Relationship Type is a reusable entity that defines the type of one or more relationships between Node Types or Node Templates.
395 class RelationshipType : EntityType() {
396 var interfaces: MutableMap<String, InterfaceDefinition>? = null
397 @get:JsonProperty("valid_target_types")
398 var validTargetTypes: ArrayList<String>? = null
403 A Group Type defines logical grouping types for nodes, typically for different management purposes.
404 Groups can effectively be viewed as logical nodes that are not part of the physical deployment topology
405 of an application, yet can have capabilities and the ability to attach policies and interfaces
406 that can be applied (depending on the group type) to its member nodes.
409 class GroupType : EntityType() {
410 var members: MutableList<String>? = null
411 var requirements: ArrayList<RequirementDefinition>? = null
412 var capabilities: MutableMap<String, CapabilityDefinition>? = null
413 var interfaces: MutableMap<String, InterfaceDefinition>? = null
419 A Policy Type defines a type of requirement that affects or governs an application or service’s
420 topology at some stage of its lifecycle, but is not explicitly part of the topology itself
421 (i.e., it does not prevent the application or service from being deployed or run if it did not exist).
423 class PolicyType : EntityType() {
424 lateinit var targets: MutableList<String>
428 3.7.1 Capability assignment
429 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.
431 class CapabilityAssignment {
433 var id: String? = null
434 var attributes: MutableMap<String, JsonNode>? = null
435 var properties: MutableMap<String, JsonNode>? = null
439 3.7.4 Relationship Template
440 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.
442 class GroupDefinition {
444 var id: String? = null
445 lateinit var type: String
446 var description: String? = null
447 var metadata: MutableMap<String, String>? = null
448 var properties: MutableMap<String, JsonNode>? = null
449 var members = ArrayList<String>()
450 var interfaces: MutableMap<String, InterfaceDefinition>? = null
454 3.7.6 Policy definition
455 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.).
457 class PolicyDefinition {
459 var id: String? = null
460 lateinit var type: String
461 var description: String? = null
462 var metadata: MutableMap<String, String>? = null
463 var properties: MutableMap<String, JsonNode>? = null
464 var targets: MutableList<String>? = null
469 3.8 Topology Template definition
470 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.
472 class TopologyTemplate {
474 var id: String? = null
475 var description: String? = null
476 var inputs: MutableMap<String, PropertyDefinition>? = null
477 @get:JsonProperty("node_templates")
478 var nodeTemplates: MutableMap<String, NodeTemplate>? = null
479 @get:JsonProperty("relationship_templates")
480 var relationshipTemplates: MutableMap<String, RelationshipTemplate>? = null
481 var policies: MutableMap<String, PolicyDefinition>? = null
482 var outputs: MutableMap<String, PropertyDefinition>? = null
483 @get:JsonProperty("substitution_mappings")
484 var substitutionMappings: Any? = null
485 var workflows: MutableMap<String, Workflow>? = null
488 class SubstitutionMapping {
489 @get:JsonProperty("node_type")
490 lateinit var nodeType: String
491 lateinit var capabilities: ArrayList<String>
492 lateinit var requirements: ArrayList<String>
496 lateinit var type: String
497 var constraints: MutableList<ConstraintClause>? = null
500 class InterfaceAssignment {
502 var id: String? = null
503 var operations: MutableMap<String, OperationAssignment>? = null
504 var inputs: MutableMap<String, JsonNode>? = null
509 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.
512 open class NodeTemplate {
514 var id: String? = null
515 var description: String? = null
516 lateinit var type: String
517 var metadata: MutableMap<String, String>? = null
518 var directives: MutableList<String>? = null
519 //@get:JsonSerialize(using = PropertyDefinitionValueSerializer::class)
520 var properties: MutableMap<String, JsonNode>? = null
521 var attributes: MutableMap<String, JsonNode>? = null
522 var capabilities: MutableMap<String, CapabilityAssignment>? = null
523 var requirements: MutableMap<String, RequirementAssignment>? = null
524 var interfaces: MutableMap<String, InterfaceAssignment>? = null
525 var artifacts: MutableMap<String, ArtifactDefinition>? = null
526 @get:JsonProperty("node_filter")
527 var nodeFilter: NodeFilterDefinition? = null
528 var copy: String? = null
531 class OperationAssignment {
533 var id: String? = null
534 var description: String? = null
535 var implementation: Implementation? = null
536 var inputs: MutableMap<String, JsonNode>? = null
537 var outputs: MutableMap<String, JsonNode>? = null
541 3.7.4 Relationship Template
542 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.
545 class RelationshipTemplate {
546 var type: String? = null
547 var description: String? = null
548 var metadata: MutableMap<String, String>? = null
549 var properties: MutableMap<String, PropertyDefinition>? = null
550 var attributes: MutableMap<String, JsonNode>? = null
551 var interfaces: MutableMap<String, InterfaceDefinition>? = null
552 var copy: String? = null
556 3.7.2 Requirement assignment
557 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.
560 class RequirementAssignment {
562 var id: String? = null
563 var capability: String? = null
564 var node: String? = null
565 //Relationship Type or Relationship Template
566 var relationship: String? = null
572 var id: String? = null
573 var description: String? = null
574 var steps: MutableMap<String, Step>? = null
575 var preconditions: ArrayList<PreConditionDefinition>? = null
576 var inputs: MutableMap<String, PropertyDefinition>? = null
577 var outputs: MutableMap<String, PropertyDefinition>? = null
581 class ConditionClause {
582 var and: ArrayList<MutableMap<String, Any>>? = null
583 var or: ArrayList<MutableMap<String, Any>>? = null
584 @get:JsonProperty("assert")
585 var assertConditions: ArrayList<MutableMap<String, Any>>? = null
589 3.9 Service Template definition
590 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.
593 @JsonPropertyOrder(value = ["toscaDefinitionsVersion", "description", "metadata", "imports", "dsl_definitions",
595 class ServiceTemplate : Cloneable {
597 var id: String? = null
598 @get:JsonProperty("tosca_definitions_version")
599 var toscaDefinitionsVersion: String = "controller_blueprint_1_0_0"
600 var metadata: MutableMap<String, String>? = null
601 var description: String? = null
602 @get:JsonProperty("dsl_definitions")
603 var dslDefinitions: MutableMap<String, JsonNode>? = null
604 var repositories: MutableMap<String, RepositoryDefinition>? = null
605 var imports: MutableList<ImportDefinition>? = null
606 @get:JsonProperty("artifact_types")
607 var artifactTypes: MutableMap<String, ArtifactType>? = null
608 @get:JsonProperty("data_types")
609 var dataTypes: MutableMap<String, DataType>? = null
610 @get:JsonProperty("relationship_types")
611 var relationshipTypes: MutableMap<String, RelationshipType>? = null
612 @get:JsonProperty("node_types")
613 var nodeTypes: MutableMap<String, NodeType>? = null
614 @get:JsonProperty("policy_types")
615 var policyTypes: MutableMap<String, PolicyType>? = null
616 @get:JsonProperty("topology_template")
617 var topologyTemplate: TopologyTemplate? = null
619 override public fun clone(): ServiceTemplate {
620 return super.clone() as ServiceTemplate
624 class ToscaMetaData {
625 lateinit var toscaMetaFileVersion: String
626 lateinit var csarVersion: String
627 lateinit var createdBy: String
628 lateinit var entityDefinitions: String
629 var templateTags: String? = null