2647083f4f61bde3453f0929e334eacc95fac68e
[ccsdk/cds.git] /
1 /*
2  * Copyright © 2017-2018 AT&T Intellectual Property.
3  * Modifications Copyright © 2018 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.apps.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
27 /**
28  *
29  *
30  * @author Brinda Santh
31  */
32 open class EntityType {
33     @get:JsonIgnore
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
42 }
43
44 /*
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.
48  */
49 class Credential {
50     @get:JsonIgnore
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
58 }
59
60 /*
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.
63  */
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
87 }
88
89 /*
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.
92  */
93
94 class NodeFilterDefinition {
95     var properties: MutableMap<String, PropertyDefinition>? = null
96     var capabilities: MutableList<String>? = null
97 }
98
99 /*
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.
103 */
104 class RepositoryDefinition {
105     @get:JsonIgnore
106     var id: String? = null
107     var description: String? = null
108     lateinit var url: String
109     var credential: Credential? = null
110 }
111
112
113 /*
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.
117  */
118 class ArtifactDefinition {
119     @get:JsonIgnore
120     var id: String? = null
121     var type: String? = null
122     var file: String? = null
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
128     var content: String? = null
129     @Deprecated("Mapping content is define by the Type")
130     var mappingContent: String? = null
131 }
132
133
134 /*
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.
139  */
140 class ImportDefinition {
141     @get:JsonIgnore
142     var id: String? = null
143     lateinit var file: String
144     var repository: String? = null
145     @get:JsonProperty("namespace_uri")
146     var namespaceUri: String? = null
147     @get:JsonProperty("namespace_prefix")
148     var namespacePrefix: String? = null
149 }
150
151 /*
152 3.5.8 Property definition A property definition defines a named, typed value and related data that can be associated with an
153 entity defined in this specification (e.g., Node Types, Relationship Types, Capability Types, etc.).
154 Properties are used by template authors to provide input values to TOSCA entities which indicate their “desired state” when they are
155 instantiated. The value of a property can be retrieved using the get_property function within TOSCA Service Templates.
156  */
157 class PropertyDefinition {
158     @get:JsonIgnore
159     var id: String? = null
160     var description: String? = null
161     var required: Boolean? = null
162     lateinit var type: String
163     @get:JsonProperty("default")
164     var defaultValue: JsonNode? = null
165     var status: String? = null
166     var constraints: MutableList<ConstraintClause>? = null
167     @get:JsonProperty("entry_schema")
168     var entrySchema: EntrySchema? = null
169     @get:ApiModelProperty(notes = "Property Value, It may be raw JSON or primitive data type values")
170     var value: JsonNode? = null
171 }
172
173
174 /*
175 3.5.10 Attribute definition
176
177 An attribute definition defines a named, typed value that can be associated with an entity defined in this
178 specification (e.g., a Node, Relationship or Capability Type).  Specifically, it is used to expose the
179 “actual state” of some property of a TOSCA entity after it has been deployed and instantiated
180 (as set by the TOSCA orchestrator). Attribute values can be retrieved via the get_attribute function
181 from the instance model and used as values to other entities within TOSCA Service Templates.
182  */
183
184 class AttributeDefinition {
185     @get:JsonIgnore
186     var id: String? = null
187     var description: String? = null
188     var required: Boolean? = null
189     lateinit var type: String
190     @JsonProperty("default")
191     var defaultValue: JsonNode? = null
192     var status: String? = null
193     var constraints: MutableList<ConstraintClause>? = null
194     @JsonProperty("entry_schema")
195     var entrySchema: EntrySchema? = null
196 }
197
198 /*
199 3.5.13 Operation definition
200 An operation definition defines a named function or procedure that can be bound to an implementation artifact (e.g., a script).
201  */
202 class OperationDefinition {
203     @get:JsonIgnore
204     var id: String? = null
205     var description: String? = null
206     var implementation: Implementation? = null
207     var inputs: MutableMap<String, PropertyDefinition>? = null
208     var outputs: MutableMap<String, PropertyDefinition>? = null
209 }
210
211 class Implementation {
212     lateinit var primary: String
213     var dependencies: MutableList<String>? = null
214 }
215
216 /*
217 3.5.14 Interface definition
218 An interface definition defines a named interface that can be associated with a Node or Relationship Type
219  */
220 class InterfaceDefinition {
221     @get:JsonIgnore
222     var id: String? = null
223     var type: String? = null
224     var operations: MutableMap<String, OperationDefinition>? = null
225     var inputs: MutableMap<String, PropertyDefinition>? = null
226 }
227
228 /*
229 3.5.15 Event Filter definition
230 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.
231  */
232 class EventFilterDefinition {
233     @get:JsonIgnore
234     var id: String? = null
235     lateinit var node: String
236     var requirement: String? = null
237     var capability: String? = null
238 }
239
240 /*
241 3.5.16 Trigger definition TODO
242 A trigger definition defines the event, condition and action that is used to “trigger” a policy it is associated with.
243  */
244 class TriggerDefinition {
245     @get:JsonIgnore
246     var id: String? = null
247     var description: String? = null
248     @get:JsonProperty("event_type")
249     lateinit var eventType: String
250     @get:JsonProperty("target_filter")
251     var targetFilter: EventFilterDefinition? = null
252     var condition: ConditionClause? = null
253     var constraint: ConditionClause? = null
254     var method: String? = null
255     lateinit var action: String
256 }
257
258 /*
259     3.5.17 Workflow activity definition
260     A workflow activity defines an operation to be performed in a TOSCA workflow. Activities allows to:
261     · Delegate the workflow for a node expected to be provided         by the orchestrator
262     · Set the state of a node
263     · Call an operation        defined on a TOSCA interface of a node, relationship or group
264     · Inline another workflow defined in the topology (to allow reusability)
265  */
266 class Activity {
267     var delegate: String? = null
268     @get:JsonProperty("set_state")
269     var setState: String? = null
270     @get:JsonProperty("call_operation")
271     var callOperation: String? = null
272     var inlines: ArrayList<String>? = null
273 }
274
275 /*
276 3.5.20 Workflow precondition definition
277 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.
278  */
279 class PreConditionDefinition {
280     @get:JsonIgnore
281     var id: String? = null
282     lateinit var target: String
283     @get:JsonProperty("target_relationship")
284     lateinit var targetRelationship: String
285     lateinit var condition: ArrayList<ConditionClause>
286 }
287
288 /*
289 3.5.21 Workflow step definition
290 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  */
292 class Step {
293     @get:JsonIgnore
294     var id: String? = null
295     var description: String? = null
296     var target: String? = null
297     @JsonProperty("target_relationship")
298     var targetRelationship: String? = null
299     @JsonProperty("operation_host")
300     var operationHost: String? = null
301     var activities: ArrayList<Activity>? = null
302     @get:JsonProperty("on_success")
303     var onSuccess: ArrayList<String>? = null
304     @get:JsonProperty("on_failure")
305     var onFailure: ArrayList<String>? = null
306 }
307
308 /*
309 3.6.2 Capability definition
310 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.
311  */
312
313 class CapabilityDefinition {
314     @get:JsonIgnore
315     var id: String? = null
316     lateinit var type: String
317     var description: String? = null
318     var properties: MutableMap<String, PropertyDefinition>? = null
319     @get:JsonProperty("valid_source_types")
320     var validSourceTypes: MutableList<String>? = null
321     var occurrences: MutableList<Any>? = null
322 }
323
324 /*
325 3.6.3 Requirement definition
326 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).
327  */
328 class RequirementDefinition {
329     @get:JsonIgnore
330     var id: String? = null
331     var description: String? = null
332     var capability: String? = null
333     var node: String? = null
334     var relationship: String? = null
335     var occurrences: MutableList<Any>? = null
336 }
337
338 /*
339 3.6.4 Artifact Type
340 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.
341  */
342 class ArtifactType : EntityType() {
343     @get:JsonProperty("mime_type")
344     var mimeType: String? = null
345     @get:JsonProperty("file_ext")
346     var fileExt: MutableList<String>? = null
347
348 }
349
350 /*
351 3.6.6 Data Type
352 A Data Type definition defines the schema for new named datatypes in TOSCA.
353  */
354
355 class DataType : EntityType() {
356     var constraints: MutableList<ConstraintClause>? = null
357 }
358
359 /*
360 3.6.9 Node Type
361 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
363  */
364
365 class NodeType : EntityType() {
366     var capabilities: MutableMap<String, CapabilityDefinition>? = null
367     var requirements: MutableMap<String, RequirementDefinition>? = null
368     var interfaces: MutableMap<String, InterfaceDefinition>? = null
369     var artifacts: MutableMap<String, ArtifactDefinition>? = null
370 }
371
372 /*
373 3.6.8 Requirement Type
374 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.
375  */
376
377 class RequirementType : EntityType() {
378     var requirements: MutableMap<String, RequirementDefinition>? = null
379     var capabilities: MutableMap<String, CapabilityDefinition>? = null
380     var interfaces: MutableMap<String, InterfaceDefinition>? = null
381     var artifacts: MutableMap<String, ArtifactDefinition>? = null
382 }
383
384 /*
385 3.6.10 Relationship Type
386 A Relationship Type is a reusable entity that defines the type of one or more relationships between Node Types or Node Templates.
387 */
388
389 class RelationshipType : EntityType() {
390     var interfaces: MutableMap<String, InterfaceDefinition>? = null
391     @get:JsonProperty("valid_target_types")
392     var validTargetTypes: ArrayList<String>? = null
393 }
394
395 /*
396 3.6.11 Group Type
397 A Group Type defines logical grouping types for nodes, typically for different management purposes.
398 Groups can effectively be viewed as logical nodes that are not part of the physical deployment topology
399  of an application, yet can have capabilities and the ability to attach policies and interfaces
400  that can be applied (depending on the group type) to its member nodes.
401  */
402
403 class GroupType : EntityType() {
404     var members: MutableList<String>? = null
405     var requirements: ArrayList<RequirementDefinition>? = null
406     var capabilities: MutableMap<String, CapabilityDefinition>? = null
407     var interfaces: MutableMap<String, InterfaceDefinition>? = null
408
409 }
410
411 /*
412     3.6.12 Policy Type
413     A Policy Type defines a type of requirement that affects or governs an application or service’s
414     topology at some stage of its lifecycle, but is not explicitly part of the topology itself
415     (i.e., it does not prevent the application or service from being deployed or run if it did not exist).
416  */
417 class PolicyType : EntityType() {
418     lateinit var targets: MutableList<String>
419 }
420
421 /*
422 3.7.1 Capability assignment
423 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.
424  */
425 class CapabilityAssignment {
426     @get:JsonIgnore
427     var id: String? = null
428     var attributes: MutableMap<String, JsonNode>? = null
429     var properties: MutableMap<String, JsonNode>? = null
430 }
431
432 /*
433 3.7.4 Relationship Template
434 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.
435  */
436 class GroupDefinition {
437     @get:JsonIgnore
438     var id: String? = null
439     lateinit var type: String
440     var description: String? = null
441     var metadata: MutableMap<String, String>? = null
442     var properties: MutableMap<String, JsonNode>? = null
443     var members = ArrayList<String>()
444     var interfaces: MutableMap<String, InterfaceDefinition>? = null
445 }
446
447 /*
448 3.7.6 Policy definition
449 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.).
450  */
451 class PolicyDefinition {
452     @get:JsonIgnore
453     var id: String? = null
454     lateinit var type: String
455     var description: String? = null
456     var metadata: MutableMap<String, String>? = null
457     var properties: MutableMap<String, JsonNode>? = null
458     var targets: MutableList<String>? = null
459 }
460
461
462 /*
463 3.8 Topology Template definition
464 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.
465  */
466 class TopologyTemplate {
467     @get:JsonIgnore
468     var id: String? = null
469     var description: String? = null
470     var inputs: MutableMap<String, PropertyDefinition>? = null
471     @get:JsonProperty("node_templates")
472     var nodeTemplates: MutableMap<String, NodeTemplate>? = null
473     @get:JsonProperty("relationship_templates")
474     var relationshipTemplates: MutableMap<String, RelationshipTemplate>? = null
475     var policies: MutableMap<String, PolicyDefinition>? = null
476     var outputs: MutableMap<String, PropertyDefinition>? = null
477     @get:JsonProperty("substitution_mappings")
478     var substitutionMappings: Any? = null
479     var workflows: MutableMap<String, Workflow>? = null
480 }
481
482 class SubstitutionMapping {
483     @get:JsonProperty("node_type")
484     lateinit var nodeType: String
485     lateinit var capabilities: ArrayList<String>
486     lateinit var requirements: ArrayList<String>
487 }
488
489 class EntrySchema {
490     lateinit var type: String
491     var constraints: MutableList<ConstraintClause>? = null
492 }
493
494 class InterfaceAssignment {
495     @get:JsonIgnore
496     var id: String? = null
497     var operations: MutableMap<String, OperationAssignment>? = null
498     var inputs: MutableMap<String, JsonNode>? = null
499 }
500
501 /*
502 3.7.3 Node Template
503 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.
504  */
505
506 open class NodeTemplate {
507     @get:JsonIgnore
508     var id: String? = null
509     var description: String? = null
510     lateinit var type: String
511     var metadata: MutableMap<String, String>? = null
512     var directives: MutableList<String>? = null
513     //@get:JsonSerialize(using = PropertyDefinitionValueSerializer::class)
514     var properties: MutableMap<String, JsonNode>? = null
515     var attributes: MutableMap<String, JsonNode>? = null
516     var capabilities: MutableMap<String, CapabilityAssignment>? = null
517     var requirements: MutableMap<String, RequirementAssignment>? = null
518     var interfaces: MutableMap<String, InterfaceAssignment>? = null
519     var artifacts: MutableMap<String, ArtifactDefinition>? = null
520     @get:JsonProperty("node_filter")
521     var nodeFilter: NodeFilterDefinition? = null
522     var copy: String? = null
523 }
524
525 class OperationAssignment {
526     @get:JsonIgnore
527     var id: String? = null
528     var description: String? = null
529     var implementation: Implementation? = null
530     var inputs: MutableMap<String, JsonNode>? = null
531     var outputs: MutableMap<String, JsonNode>? = null
532 }
533
534 /*
535 3.7.4 Relationship Template
536 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.
537  */
538
539 class RelationshipTemplate {
540     var type: String? = null
541     var description: String? = null
542     var metadata: MutableMap<String, String>? = null
543     var properties: MutableMap<String, PropertyDefinition>? = null
544     var attributes: MutableMap<String, JsonNode>? = null
545     var interfaces: MutableMap<String, InterfaceDefinition>? = null
546     var copy: String? = null
547 }
548
549 /*
550 3.7.2 Requirement assignment
551 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.
552  */
553
554 class RequirementAssignment {
555     @get:JsonIgnore
556     var id: String? = null
557     var capability: String? = null
558     var node: String? = null
559     //Relationship Type or Relationship Template
560     var relationship: String? = null
561 }
562
563
564 class Workflow {
565     @get:JsonIgnore
566     var id: String? = null
567     var description: String? = null
568     var steps: MutableMap<String, Step>? = null
569     var preconditions: ArrayList<PreConditionDefinition>? = null
570     var inputs: MutableMap<String, PropertyDefinition>? = null
571 }
572
573
574 class ConditionClause {
575     var and: ArrayList<MutableMap<String, Any>>? = null
576     var or: ArrayList<MutableMap<String, Any>>? = null
577     @get:JsonProperty("assert")
578     var assertConditions: ArrayList<MutableMap<String, Any>>? = null
579 }
580
581 /*
582 3.9 Service Template definition
583 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.
584  */
585
586 @JsonPropertyOrder(value = ["toscaDefinitionsVersion", "description", "metadata", "imports", "dsl_definitions",
587     "topologyTemplate"])
588 class ServiceTemplate : Cloneable {
589     @get:JsonIgnore
590     var id: String? = null
591     @get:JsonProperty("tosca_definitions_version")
592     var toscaDefinitionsVersion: String = "controller_blueprint_1_0_0"
593     var metadata: MutableMap<String, String>? = null
594     var description: String? = null
595     @get:JsonProperty("dsl_definitions")
596     var dslDefinitions: MutableMap<String, JsonNode>? = null
597     var repositories: MutableMap<String, RepositoryDefinition>? = null
598     var imports: MutableList<ImportDefinition>? = null
599     @get:JsonProperty("artifact_types")
600     var artifactTypes: MutableMap<String, ArtifactType>? = null
601     @get:JsonProperty("data_types")
602     var dataTypes: MutableMap<String, DataType>? = null
603     @get:JsonProperty("relationship_types")
604     var relationshipTypes: MutableMap<String, RelationshipType>? = null
605     @get:JsonProperty("node_types")
606     var nodeTypes: MutableMap<String, NodeType>? = null
607     @get:JsonProperty("policy_types")
608     var policyTypes: MutableMap<String, PolicyType>? = null
609     @get:JsonProperty("topology_template")
610     var topologyTemplate: TopologyTemplate? = null
611
612     override public fun clone(): ServiceTemplate {
613         return super.clone() as ServiceTemplate
614     }
615 }
616
617 class ToscaMetaData {
618     lateinit var toscaMetaFileVersion: String
619     lateinit var csarVersion: String
620     lateinit var createdBy: String
621     lateinit var entityDefinitions: String
622     var templateTags: String? = null
623 }
624