2 * Copyright © 2017-2018 AT&T Intellectual Property.
3 * Modifications Copyright © 2018 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.apps.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
30 * @author Brinda Santh
32 open class EntityType {
34 var id: String? = null
35 var description: String? = null
36 var version: String = "1.0.0"
37 var metadata: MutableMap<String, String>? = null
38 @get:JsonProperty("derived_from")
39 lateinit var derivedFrom: String
40 var attributes: MutableMap<String, AttributeDefinition>? = null
41 var properties: MutableMap<String, PropertyDefinition>? = null
45 5.3.2 tosca.datatypes.Credential
46 The Credential type is a complex TOSCA data Type used when describing
47 authorization credentials used to access network accessible resources.
51 var id: String? = null
52 var protocol: String? = null
53 @get:JsonProperty("token_type")
54 lateinit var tokenType: String
55 lateinit var token: String
56 var keys: MutableMap<String, String>? = null
57 lateinit var user: String
61 3.5.2 Constraint clause
62 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.
64 class ConstraintClause {
65 @get:JsonProperty("equal")
66 var equal: JsonNode? = null
67 @get:JsonProperty("greater_than")
68 var greaterThan: Any? = null
69 @get:JsonProperty("greater_or_equal")
70 var greaterOrEqual: Any? = null
71 @get:JsonProperty("less_than")
72 var lessThan: Any? = null
73 @get:JsonProperty("less_or_equal")
74 var lessOrEqual: Any? = null
75 @get:JsonProperty("in_range")
76 var inRange: Any? = null
77 @get:JsonProperty("valid_values")
78 var validValues: MutableList<JsonNode>? = null
79 @get:JsonProperty("length")
80 var length: Any? = null
81 @get:JsonProperty("min_length")
82 var minLength: Any? = null
83 @get:JsonProperty("max_length")
84 var maxLength: Any? = null
85 var pattern: String? = null
86 var schema: String? = null
90 3.5.4 Node Filter definition
91 A node filter definition defines criteria for selection of a TOSCA Node Template based upon the template’s property values, capabilities and capability properties.
94 class NodeFilterDefinition {
95 var properties: MutableMap<String, PropertyDefinition>? = null
96 var capabilities: MutableList<String>? = null
100 3.5.5 Repository definition
101 A repository definition defines a named external repository which contains deployment
102 and implementation artifacts that are referenced within the TOSCA Service Template.
104 class RepositoryDefinition {
106 var id: String? = null
107 var description: String? = null
108 lateinit var url: String
109 var credential: Credential? = null
114 3.5.6 Artifact definition
115 An artifact definition defines a named, typed file that can be associated with Node Type
116 or Node Template and used by orchestration engine to facilitate deployment and implementation of interface operations.
118 class ArtifactDefinition {
120 var id: String? = null
121 lateinit var type: String
122 lateinit var file: String
123 var repository: String? = null
124 var description: String? = null
125 @get:JsonProperty("deploy_Path")
126 var deployPath: String? = null
127 var properties: MutableMap<String, JsonNode>? = null
132 3.5.7 Import definition
133 An import definition is used within a TOSCA Service Template to locate and uniquely name
134 another TOSCA Service Template file which has type and template definitions to be imported (included)
135 and referenced within another Service Template.
137 class ImportDefinition {
139 var id: String? = null
140 lateinit var file: String
141 var repository: String? = null
142 @get:JsonProperty("namespace_uri")
143 var namespaceUri: String? = null
144 @get:JsonProperty("namespace_prefix")
145 var namespacePrefix: String? = null
149 3.5.8 Property definition A property definition defines a named, typed value and related data that can be associated with an
150 entity defined in this specification (e.g., Node Types, Relationship Types, Capability Types, etc.).
151 Properties are used by template authors to provide input values to TOSCA entities which indicate their “desired state” when they are
152 instantiated. The value of a property can be retrieved using the get_property function within TOSCA Service Templates.
154 class PropertyDefinition {
156 var id: String? = null
157 var description: String? = null
158 var required: Boolean? = null
159 lateinit var type: String
160 @get:JsonProperty("default")
161 var defaultValue: JsonNode? = null
162 var status: String? = null
163 var constraints: MutableList<ConstraintClause>? = null
164 @get:JsonProperty("entry_schema")
165 var entrySchema: EntrySchema? = null
166 @get:ApiModelProperty(notes = "Property Value, It may be raw JSON or primitive data type values")
167 var value: JsonNode? = null
172 3.5.10 Attribute definition
174 An attribute definition defines a named, typed value that can be associated with an entity defined in this
175 specification (e.g., a Node, Relationship or Capability Type). Specifically, it is used to expose the
176 “actual state” of some property of a TOSCA entity after it has been deployed and instantiated
177 (as set by the TOSCA orchestrator). Attribute values can be retrieved via the get_attribute function
178 from the instance model and used as values to other entities within TOSCA Service Templates.
181 class AttributeDefinition {
183 var id: String? = null
184 var description: String? = null
185 var required: Boolean? = null
186 lateinit var type: String
187 @JsonProperty("default")
188 var defaultValue: JsonNode? = null
189 var status: String? = null
190 var constraints: MutableList<ConstraintClause>? = null
191 @JsonProperty("entry_schema")
192 var entrySchema: EntrySchema? = null
196 3.5.13 Operation definition
197 An operation definition defines a named function or procedure that can be bound to an implementation artifact (e.g., a script).
199 class OperationDefinition {
201 var id: String? = null
202 var description: String? = null
203 var implementation: Implementation? = null
204 var inputs: MutableMap<String, PropertyDefinition>? = null
205 var outputs: MutableMap<String, PropertyDefinition>? = null
208 class Implementation {
209 lateinit var primary: String
210 var dependencies: MutableList<String>? = null
214 3.5.14 Interface definition
215 An interface definition defines a named interface that can be associated with a Node or Relationship Type
217 class InterfaceDefinition {
219 var id: String? = null
220 var type: String? = null
221 var operations: MutableMap<String, OperationDefinition>? = null
222 var inputs: MutableMap<String, PropertyDefinition>? = null
226 3.5.15 Event Filter definition
227 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.
229 class EventFilterDefinition {
231 var id: String? = null
232 lateinit var node: String
233 var requirement: String? = null
234 var capability: String? = null
238 3.5.16 Trigger definition TODO
239 A trigger definition defines the event, condition and action that is used to “trigger” a policy it is associated with.
241 class TriggerDefinition {
243 var id: String? = null
244 var description: String? = null
245 @get:JsonProperty("event_type")
246 lateinit var eventType: String
247 @get:JsonProperty("target_filter")
248 var targetFilter: EventFilterDefinition? = null
249 var condition: ConditionClause? = null
250 var constraint: ConditionClause? = null
251 var method: String? = null
252 lateinit var action: String
256 3.5.17 Workflow activity definition
257 A workflow activity defines an operation to be performed in a TOSCA workflow. Activities allows to:
258 · Delegate the workflow for a node expected to be provided by the orchestrator
259 · Set the state of a node
260 · Call an operation defined on a TOSCA interface of a node, relationship or group
261 · Inline another workflow defined in the topology (to allow reusability)
264 var delegate: String? = null
265 @get:JsonProperty("set_state")
266 var setState: String? = null
267 @get:JsonProperty("call_operation")
268 var callOperation: String? = null
269 var inlines: ArrayList<String>? = null
273 3.5.20 Workflow precondition definition
274 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.
276 class PreConditionDefinition {
278 var id: String? = null
279 lateinit var target: String
280 @get:JsonProperty("target_relationship")
281 lateinit var targetRelationship: String
282 lateinit var condition: ArrayList<ConditionClause>
286 3.5.21 Workflow step definition
287 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.
291 var id: String? = null
292 var description: String? = null
293 var target: String? = null
294 @JsonProperty("target_relationship")
295 var targetRelationship: String? = null
296 @JsonProperty("operation_host")
297 var operationHost: String? = null
298 var activities: ArrayList<Activity>? = null
299 @get:JsonProperty("on_success")
300 var onSuccess: ArrayList<String>? = null
301 @get:JsonProperty("on_failure")
302 var onFailure: ArrayList<String>? = null
306 3.6.2 Capability definition
307 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.
310 class CapabilityDefinition {
312 var id: String? = null
313 lateinit var type: String
314 var description: String? = null
315 var properties: MutableMap<String, PropertyDefinition>? = null
316 @get:JsonProperty("valid_source_types")
317 var validSourceTypes: MutableList<String>? = null
318 var occurrences: MutableList<Any>? = null
322 3.6.3 Requirement definition
323 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).
325 class RequirementDefinition {
327 var id: String? = null
328 var description: String? = null
329 var capability: String? = null
330 var node: String? = null
331 var relationship: String? = null
332 var occurrences: MutableList<Any>? = null
337 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.
339 class ArtifactType : EntityType() {
340 @get:JsonProperty("mime_type")
341 var mimeType: String? = null
342 @get:JsonProperty("file_ext")
343 var fileExt: MutableList<String>? = null
349 A Data Type definition defines the schema for new named datatypes in TOSCA.
352 class DataType : EntityType() {
353 var constraints: MutableList<ConstraintClause>? = null
358 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.
362 class NodeType : EntityType() {
363 var capabilities: MutableMap<String, CapabilityDefinition>? = null
364 var requirements: MutableMap<String, RequirementDefinition>? = null
365 var interfaces: MutableMap<String, InterfaceDefinition>? = null
366 var artifacts: MutableMap<String, ArtifactDefinition>? = null
370 3.6.8 Requirement Type
371 A Requirement Type is a reusable entity that describes a kind of requirement that a Node Type can declare to expose. The TOSCA Simple Profile seeks to simplify the need for declaring specific Requirement Types from nodes and instead rely upon nodes declaring their features sets using TOSCA Capability Types along with a named Feature notation.
374 class RequirementType : EntityType() {
375 var requirements: MutableMap<String, RequirementDefinition>? = null
376 var capabilities: MutableMap<String, CapabilityDefinition>? = null
377 var interfaces: MutableMap<String, InterfaceDefinition>? = null
378 var artifacts: MutableMap<String, ArtifactDefinition>? = null
382 3.6.10 Relationship Type
383 A Relationship Type is a reusable entity that defines the type of one or more relationships between Node Types or Node Templates.
386 class RelationshipType : EntityType() {
387 var interfaces: MutableMap<String, InterfaceDefinition>? = null
388 @get:JsonProperty("valid_target_types")
389 var validTargetTypes: ArrayList<String>? = null
394 A Group Type defines logical grouping types for nodes, typically for different management purposes.
395 Groups can effectively be viewed as logical nodes that are not part of the physical deployment topology
396 of an application, yet can have capabilities and the ability to attach policies and interfaces
397 that can be applied (depending on the group type) to its member nodes.
400 class GroupType : EntityType() {
401 var members: MutableList<String>? = null
402 var requirements: ArrayList<RequirementDefinition>? = null
403 var capabilities: MutableMap<String, CapabilityDefinition>? = null
404 var interfaces: MutableMap<String, InterfaceDefinition>? = null
410 A Policy Type defines a type of requirement that affects or governs an application or service’s
411 topology at some stage of its lifecycle, but is not explicitly part of the topology itself
412 (i.e., it does not prevent the application or service from being deployed or run if it did not exist).
414 class PolicyType : EntityType() {
415 lateinit var targets: MutableList<String>
419 3.7.1 Capability assignment
420 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.
422 class CapabilityAssignment {
424 var id: String? = null
425 var attributes: MutableMap<String, JsonNode>? = null
426 var properties: MutableMap<String, JsonNode>? = null
430 3.7.4 Relationship Template
431 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.
433 class GroupDefinition {
435 var id: String? = null
436 lateinit var type: String
437 var description: String? = null
438 var metadata: MutableMap<String, String>? = null
439 var properties: MutableMap<String, JsonNode>? = null
440 var members = ArrayList<String>()
441 var interfaces: MutableMap<String, InterfaceDefinition>? = null
445 3.7.6 Policy definition
446 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.).
448 class PolicyDefinition {
450 var id: String? = null
451 lateinit var type: String
452 var description: String? = null
453 var metadata: MutableMap<String, String>? = null
454 var properties: MutableMap<String, JsonNode>? = null
455 var targets: MutableList<String>? = null
460 3.8 Topology Template definition
461 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.
463 class TopologyTemplate {
465 var id: String? = null
466 var description: String? = null
467 var inputs: MutableMap<String, PropertyDefinition>? = null
468 @get:JsonProperty("node_templates")
469 var nodeTemplates: MutableMap<String, NodeTemplate>? = null
470 @get:JsonProperty("relationship_templates")
471 var relationshipTemplates: MutableMap<String, RelationshipTemplate>? = null
472 var policies: MutableMap<String, PolicyDefinition>? = null
473 var outputs: MutableMap<String, PropertyDefinition>? = null
474 @get:JsonProperty("substitution_mappings")
475 var substitutionMappings: Any? = null
476 var workflows: MutableMap<String, Workflow>? = null
479 class SubstitutionMapping {
480 @get:JsonProperty("node_type")
481 lateinit var nodeType: String
482 lateinit var capabilities: ArrayList<String>
483 lateinit var requirements: ArrayList<String>
487 lateinit var type: String
488 var constraints: MutableList<ConstraintClause>? = null
491 class InterfaceAssignment {
493 var id: String? = null
494 var operations: MutableMap<String, OperationAssignment>? = null
495 var inputs: MutableMap<String, JsonNode>? = null
500 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.
503 open class NodeTemplate {
505 var id: String? = null
506 var description: String? = null
507 lateinit var type: String
508 var metadata: MutableMap<String, String>? = null
509 var directives: MutableList<String>? = null
510 //@get:JsonSerialize(using = PropertyDefinitionValueSerializer::class)
511 var properties: MutableMap<String, JsonNode>? = null
512 var attributes: MutableMap<String, JsonNode>? = null
513 var capabilities: MutableMap<String, CapabilityAssignment>? = null
514 var requirements: MutableMap<String, RequirementAssignment>? = null
515 var interfaces: MutableMap<String, InterfaceAssignment>? = null
516 var artifacts: MutableMap<String, ArtifactDefinition>? = null
517 @get:JsonProperty("node_filter")
518 var nodeFilter: NodeFilterDefinition? = null
519 var copy: String? = null
522 class OperationAssignment {
524 var id: String? = null
525 var description: String? = null
526 var implementation: Implementation? = null
527 var inputs: MutableMap<String, JsonNode>? = null
528 var outputs: MutableMap<String, JsonNode>? = null
532 3.7.4 Relationship Template
533 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.
536 class RelationshipTemplate {
537 var type: String? = null
538 var description: String? = null
539 var metadata: MutableMap<String, String>? = null
540 var properties: MutableMap<String, PropertyDefinition>? = null
541 var attributes: MutableMap<String, JsonNode>? = null
542 var interfaces: MutableMap<String, InterfaceDefinition>? = null
543 var copy: String? = null
547 3.7.2 Requirement assignment
548 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.
551 class RequirementAssignment {
553 var id: String? = null
554 var capability: String? = null
555 var node: String? = null
556 //Relationship Type or Relationship Template
557 var relationship: String? = null
563 var id: String? = null
564 var description: String? = null
565 var steps: MutableMap<String, Step>? = null
566 var preconditions: ArrayList<PreConditionDefinition>? = null
567 var inputs: MutableMap<String, PropertyDefinition>? = null
571 class ConditionClause {
572 var and: ArrayList<MutableMap<String, Any>>? = null
573 var or: ArrayList<MutableMap<String, Any>>? = null
574 @get:JsonProperty("assert")
575 var assertConditions: ArrayList<MutableMap<String, Any>>? = null
579 3.9 Service Template definition
580 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.
583 @JsonPropertyOrder(value = ["toscaDefinitionsVersion", "description", "metadata", "imports", "dsl_definitions",
585 class ServiceTemplate : Cloneable {
587 var id: String? = null
588 @get:JsonProperty("tosca_definitions_version")
589 var toscaDefinitionsVersion: String = "controller_blueprint_1_0_0"
590 var metadata: MutableMap<String, String>? = null
591 var description: String? = null
592 @get:JsonProperty("dsl_definitions")
593 var dslDefinitions: MutableMap<String, JsonNode>? = null
594 var repositories: MutableMap<String, RepositoryDefinition>? = null
595 var imports: MutableList<ImportDefinition>? = null
596 @get:JsonProperty("artifact_types")
597 var artifactTypes: MutableMap<String, ArtifactType>? = null
598 @get:JsonProperty("data_types")
599 var dataTypes: MutableMap<String, DataType>? = null
600 @get:JsonProperty("relationship_types")
601 var relationshipTypes: MutableMap<String, RelationshipType>? = null
602 @get:JsonProperty("node_types")
603 var nodeTypes: MutableMap<String, NodeType>? = null
604 @get:JsonProperty("policy_types")
605 var policyTypes: MutableMap<String, PolicyType>? = null
606 @get:JsonProperty("topology_template")
607 var topologyTemplate: TopologyTemplate? = null
609 override public fun clone(): ServiceTemplate {
610 return super.clone() as ServiceTemplate
614 class ToscaMetaData {
615 lateinit var toscaMetaFileVersion: String
616 lateinit var csarVersion: String
617 lateinit var createdBy: String
618 lateinit var entityDefinitions: String
619 var templateTags: String? = null