aab4e7c7805daf605a62ee143cb2ac774ce57028
[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     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
128 }
129
130
131 /*
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.
136  */
137 class ImportDefinition {
138     @get:JsonIgnore
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
146 }
147
148 /*
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.
153  */
154 class PropertyDefinition {
155     @get:JsonIgnore
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
168 }
169
170
171 /*
172 3.5.10 Attribute definition
173
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.
179  */
180
181 class AttributeDefinition {
182     @get:JsonIgnore
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
193 }
194
195 /*
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).
198  */
199 class OperationDefinition {
200     @get:JsonIgnore
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
206 }
207
208 class Implementation {
209     lateinit var primary: String
210     var dependencies: MutableList<String>? = null
211 }
212
213 /*
214 3.5.14 Interface definition
215 An interface definition defines a named interface that can be associated with a Node or Relationship Type
216  */
217 class InterfaceDefinition {
218     @get:JsonIgnore
219     var id: String? = null
220     var type: String? = null
221     var operations: MutableMap<String, OperationDefinition>? = null
222     var inputs: MutableMap<String, PropertyDefinition>? = null
223 }
224
225 /*
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.
228  */
229 class EventFilterDefinition {
230     @get:JsonIgnore
231     var id: String? = null
232     lateinit var node: String
233     var requirement: String? = null
234     var capability: String? = null
235 }
236
237 /*
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.
240  */
241 class TriggerDefinition {
242     @get:JsonIgnore
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
253 }
254
255 /*
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)
262  */
263 class Activity {
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
270 }
271
272 /*
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.
275  */
276 class PreConditionDefinition {
277     @get:JsonIgnore
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>
283 }
284
285 /*
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.
288  */
289 class Step {
290     @get:JsonIgnore
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
303 }
304
305 /*
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.
308  */
309
310 class CapabilityDefinition {
311     @get:JsonIgnore
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
319 }
320
321 /*
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).
324  */
325 class RequirementDefinition {
326     @get:JsonIgnore
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
333 }
334
335 /*
336 3.6.4 Artifact Type
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.
338  */
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
344
345 }
346
347 /*
348 3.6.6 Data Type
349 A Data Type definition defines the schema for new named datatypes in TOSCA.
350  */
351
352 class DataType : EntityType() {
353     var constraints: MutableList<ConstraintClause>? = null
354 }
355
356 /*
357 3.6.9 Node Type
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.
359
360  */
361
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
367 }
368
369 /*
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.
372  */
373
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
379 }
380
381 /*
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.
384 */
385
386 class RelationshipType : EntityType() {
387     var interfaces: MutableMap<String, InterfaceDefinition>? = null
388     @get:JsonProperty("valid_target_types")
389     var validTargetTypes: ArrayList<String>? = null
390 }
391
392 /*
393 3.6.11 Group Type
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.
398  */
399
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
405
406 }
407
408 /*
409     3.6.12 Policy Type
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).
413  */
414 class PolicyType : EntityType() {
415     lateinit var targets: MutableList<String>
416 }
417
418 /*
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.
421  */
422 class CapabilityAssignment {
423     @get:JsonIgnore
424     var id: String? = null
425     var attributes: MutableMap<String, JsonNode>? = null
426     var properties: MutableMap<String, JsonNode>? = null
427 }
428
429 /*
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.
432  */
433 class GroupDefinition {
434     @get:JsonIgnore
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
442 }
443
444 /*
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.).
447  */
448 class PolicyDefinition {
449     @get:JsonIgnore
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
456 }
457
458
459 /*
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.
462  */
463 class TopologyTemplate {
464     @get:JsonIgnore
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
477 }
478
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>
484 }
485
486 class EntrySchema {
487     lateinit var type: String
488     var constraints: MutableList<ConstraintClause>? = null
489 }
490
491 class InterfaceAssignment {
492     @get:JsonIgnore
493     var id: String? = null
494     var operations: MutableMap<String, OperationAssignment>? = null
495     var inputs: MutableMap<String, JsonNode>? = null
496 }
497
498 /*
499 3.7.3 Node Template
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.
501  */
502
503 open class NodeTemplate {
504     @get:JsonIgnore
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
520 }
521
522 class OperationAssignment {
523     @get:JsonIgnore
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
529 }
530
531 /*
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.
534  */
535
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
544 }
545
546 /*
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.
549  */
550
551 class RequirementAssignment {
552     @get:JsonIgnore
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
558 }
559
560
561 class Workflow {
562     @get:JsonIgnore
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
568 }
569
570
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
576 }
577
578 /*
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.
581  */
582
583 @JsonPropertyOrder(value = ["toscaDefinitionsVersion", "description", "metadata", "imports", "dsl_definitions",
584     "topologyTemplate"])
585 class ServiceTemplate : Cloneable {
586     @get:JsonIgnore
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
608
609     override public fun clone(): ServiceTemplate {
610         return super.clone() as ServiceTemplate
611     }
612 }
613
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
620 }
621