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