745671ac922dc2adbccef634ab5f7bca630a54b2
[ccsdk/cds.git] /
1 /*
2  * Copyright © 2017-2018 AT&T Intellectual Property.
3  * Modifications Copyright © 2018-2019 IBM.
4  *
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
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  */
17 @file:Suppress("unused")
18
19 package org.onap.ccsdk.cds.controllerblueprints.core.data
20
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
28 /**
29  *
30  *
31  * @author Brinda Santh
32  */
33 open class EntityType {
34     @get:JsonIgnore
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
43 }
44
45 /*
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.
49  */
50 class Credential {
51     @get:JsonIgnore
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
59 }
60
61 /*
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.
64  */
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
88 }
89
90 /*
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.
93  */
94
95 class NodeFilterDefinition {
96     var properties: MutableMap<String, PropertyDefinition>? = null
97     var capabilities: MutableList<String>? = null
98 }
99
100 /*
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.
104 */
105 class RepositoryDefinition {
106     @get:JsonIgnore
107     var id: String? = null
108     var description: String? = null
109     lateinit var url: String
110     var credential: Credential? = null
111 }
112
113
114 /*
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.
118  */
119 class ArtifactDefinition {
120     @get:JsonIgnore
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
129 }
130
131
132 /*
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.
137  */
138 class ImportDefinition {
139     @get:JsonIgnore
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
147 }
148
149 /*
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.
154  */
155 class PropertyDefinition {
156     @get:JsonIgnore
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
170 }
171
172
173 /*
174 3.5.10 Attribute definition
175
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.
181  */
182
183 class AttributeDefinition {
184     @get:JsonIgnore
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
195 }
196
197 /*
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).
200  */
201 class OperationDefinition {
202     @get:JsonIgnore
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
208 }
209
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
217 }
218
219 /*
220 3.5.14 Interface definition
221 An interface definition defines a named interface that can be associated with a Node or Relationship Type
222  */
223 class InterfaceDefinition {
224     @get:JsonIgnore
225     var id: String? = null
226     var type: String? = null
227     var operations: MutableMap<String, OperationDefinition>? = null
228     var inputs: MutableMap<String, PropertyDefinition>? = null
229 }
230
231 /*
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.
234  */
235 class EventFilterDefinition {
236     @get:JsonIgnore
237     var id: String? = null
238     lateinit var node: String
239     var requirement: String? = null
240     var capability: String? = null
241 }
242
243 /*
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.
246  */
247 class TriggerDefinition {
248     @get:JsonIgnore
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
259 }
260
261 /*
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)
268  */
269 class Activity {
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
276 }
277
278 /*
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.
281  */
282 class PreConditionDefinition {
283     @get:JsonIgnore
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>
289 }
290
291 /*
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.
294  */
295 class Step {
296     @get:JsonIgnore
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
309 }
310
311 /*
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.
314  */
315
316 class CapabilityDefinition {
317     @get:JsonIgnore
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
325 }
326
327 /*
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).
330  */
331 class RequirementDefinition {
332     @get:JsonIgnore
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
339 }
340
341 /*
342 3.6.4 Artifact Type
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.
344  */
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
350
351 }
352
353 /*
354 3.6.6 Data Type
355 A Data Type definition defines the schema for new named datatypes in TOSCA.
356  */
357
358 class DataType : EntityType() {
359     var constraints: MutableList<ConstraintClause>? = null
360 }
361
362 /*
363 3.6.9 Node Type
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.
365
366  */
367
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
373 }
374
375 /*
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.
381  */
382
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
388 }
389
390 /*
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.
393 */
394
395 class RelationshipType : EntityType() {
396     var interfaces: MutableMap<String, InterfaceDefinition>? = null
397     @get:JsonProperty("valid_target_types")
398     var validTargetTypes: ArrayList<String>? = null
399 }
400
401 /*
402 3.6.11 Group Type
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.
407  */
408
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
414
415 }
416
417 /*
418     3.6.12 Policy Type
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).
422  */
423 class PolicyType : EntityType() {
424     lateinit var targets: MutableList<String>
425 }
426
427 /*
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.
430  */
431 class CapabilityAssignment {
432     @get:JsonIgnore
433     var id: String? = null
434     var attributes: MutableMap<String, JsonNode>? = null
435     var properties: MutableMap<String, JsonNode>? = null
436 }
437
438 /*
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.
441  */
442 class GroupDefinition {
443     @get:JsonIgnore
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
451 }
452
453 /*
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.).
456  */
457 class PolicyDefinition {
458     @get:JsonIgnore
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
465 }
466
467
468 /*
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.
471  */
472 class TopologyTemplate {
473     @get:JsonIgnore
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
486 }
487
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>
493 }
494
495 class EntrySchema {
496     lateinit var type: String
497     var constraints: MutableList<ConstraintClause>? = null
498 }
499
500 class InterfaceAssignment {
501     @get:JsonIgnore
502     var id: String? = null
503     var operations: MutableMap<String, OperationAssignment>? = null
504     var inputs: MutableMap<String, JsonNode>? = null
505 }
506
507 /*
508 3.7.3 Node Template
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.
510  */
511
512 open class NodeTemplate {
513     @get:JsonIgnore
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
529 }
530
531 class OperationAssignment {
532     @get:JsonIgnore
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
538 }
539
540 /*
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.
543  */
544
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
553 }
554
555 /*
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.
558  */
559
560 class RequirementAssignment {
561     @get:JsonIgnore
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
567 }
568
569
570 class Workflow {
571     @get:JsonIgnore
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
578 }
579
580
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
586 }
587
588 /*
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.
591  */
592
593 @JsonPropertyOrder(value = ["toscaDefinitionsVersion", "description", "metadata", "imports", "dsl_definitions",
594     "topologyTemplate"])
595 class ServiceTemplate : Cloneable {
596     @get:JsonIgnore
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
618
619     override public fun clone(): ServiceTemplate {
620         return super.clone() as ServiceTemplate
621     }
622 }
623
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
630 }
631