summaryrefslogtreecommitdiffstats
path: root/docker/docker-node-type.yaml
blob: fba4ccb1d5875786b50bd096098f742222a37110 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
# ================================================================================
# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============LICENSE_END=========================================================
#
# ECOMP is a trademark and service mark of AT&T Intellectual Property.
tosca_definitions_version: cloudify_dsl_1_3

imports:
    - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml

plugins:
  docker:
    executor: 'central_deployment_agent'
    package_name: dockerplugin
    package_version: 3.3.0


data_types:
  # NOTE: These data types were copied from the k8s node type in order to have 
  # consistent node properties between docker and k8s. Perhaps we should make
  # these data_types common somehow?
  dcae.types.MSBRegistration:
    description: >
      Information for registering an HTTP service into MSB.  It's optional to do so,
      but if MSB registration is desired at least the port property must be provided.
      If 'port' property is not provided, the plugin will not do the registration.
      (The properties all have to be declared as not required, otherwise the
      'msb_registration' property on the node would also be required.)
    properties:
      port:
        description: The container port at which the service is exposed
        type: string
        required: false
      version:
        description: The version identifier for the service
        type: string
        required: false
      url_path:
        description: The URL path (e.g., "/api", not the full URL) to the service endpoint
        type: string
        required: false
      uses_ssl:
        description: Set to true if service endpoint uses SSL (TLS)
        type: boolean
        required: false

  dcae.types.LoggingInfo:
    description: >
      Information for setting up centralized logging via ELK using a "sidecar" container.
      If 'log_directory' is not provided, the plugin will not set up ELK logging.
      (The properties all have to be declared as not required, otherwise the
      'log_info' property on the node would also be required.)
    properties:
      log_directory:
        description: >
          The path in the container where the component writes its logs.
          If the component is following the EELF requirements, this would be
          the directory where the four EELF files are being written.
          (Other logs can be placed in the directory--if their names in '.log',
          they'll also be sent into ELK.)
        type: string
        required: false
      alternate_fb_path:
        description: >
          Hope not to use this.  By default, the plugin will mount the log volume
          at /var/log/onap/<component_type> in the sidecar container's file system.
          'alternate_fb_path' allows overriding the default.  Will affect how the log
          data can be found in the ELK system.
        type: string
        required: false


node_types:
    # The DockerContainerForComponents node type is to be used for DCAE service components that 
    # are to be run in a Docker container.  This node type goes beyond that of a ordinary Docker
    # plugin where it has DCAE platform specific functionality:
    #
    #   * Generation of the service component name
    #   * Managing of service component configuration information
    #
    # The Docker run command arguments are intentionally not visible. This node type is
    # not intended to be a generic all-purpose Docker container thing. This should be thought
    # to be an interface to how Docker containers are to be run in the rework context.
    dcae.nodes.DockerContainerForComponents:
        derived_from: cloudify.nodes.Root
        properties:
            service_component_type:
                type: string
                description: Service component type of the application being run in the container

            service_id:
                type: string
                description: >
                  Unique id for this DCAE service instance this component belongs to. This value
                  will be applied as a tag in the registration of this component with Consul.
                default: Null

            location_id:
                type: string
                description: >
                  Location id of where to run the container.
                  DEPRECATED - No longer used. Infer the location from the docker host service 
                    and/or node.
                default: Null

            service_component_name_override:
                type: string
                description: >
                    Manually override and set the name for this Docker container node. If this
                    is set, then the name will not be auto-generated. Platform services are the
                    specific use cases for using this parameter because they have static
                    names for example the CDAP broker.
                default: Null

            application_config:
                default: {}
                description: >
                  Application configuration for this Docker component. The data strcture is
                  expected to be a complex map (native YAML) and to be constructed and filled
                  by the creator of the blueprint.

            docker_config:
                default: {}
                description: >
                  This is what is the auxilary portion of the component spec that contains things
                  like healthcheck definitions for the Docker component. Health checks are
                  optional.

            image:
                type: string
                description: Full uri of the Docker image

            # The following properties are copied from k8s node type to be consistent.
            # However, these properties are not currently being used within the docker
            # plugin.
            log_info:
              type: dcae.types.LoggingInfo
              description: >
                Information for setting up centralized logging via ELK.
              required: false

            replicas:
              type: integer
              description: >
                The number of instances of the component that should be launched initially
              default: 1

            always_pull_image:
              type: boolean
              description: >
                Set to true if the orchestrator should always pull a new copy of the image 
                before deploying.  By default the orchestrator pulls only if the image is
                not already present on the Docker host where the container is being launched.
              default: false

        interfaces:
            cloudify.interfaces.lifecycle:
                create:
                    # Generate service component name and populate config into Consul
                    implementation: docker.dockerplugin.create_for_components
                start:
                    # Create Docker container and start
                    implementation: docker.dockerplugin.create_and_start_container_for_components
                stop:
                    # Stop and remove Docker container
                    implementation: docker.dockerplugin.stop_and_remove_container
                delete:
                    # Delete configuration from Consul
                    implementation: docker.dockerplugin.cleanup_discovery
            dcae.interfaces.policy:
                # This is to be invoked by the policy handler upon policy updates
                policy_update:
                    implementation: docker.dockerplugin.policy_update


    # This node type is intended for DCAE service components that use DMaaP and must use the 
    # DMaaP plugin.
    dcae.nodes.DockerContainerForComponentsUsingDmaap:
        derived_from: dcae.nodes.DockerContainerForComponents
        properties:
            streams_publishes:
                description: >
                  List of DMaaP streams used for publishing.

                  Message router items look like:
                    
                    name: topic00
                    location: mtc5
                    client_role: XXXX
                    type: message_router

                  Data router items look like:

                    name: feed00
                    location: mtc5
                    type: data_router

                  This information is forwarded to the dmaap plugin to provision
                default: []
            streams_subscribes:
                description: >
                  List of DMaaP streams used for subscribing.
                
                  Message router items look like:

                    name: topic00
                    location: mtc5
                    client_role: XXXX
                    type: message_router

                  Data router items look like:

                    name: feed00
                    location: mtc5
                    type: data_router
                    username: king
                    password: 123456
                    route: some-path
                    scheme: https

                  Note that username and password is optional. If not provided or null then the
                  plugin will generate them.

                default: []
        interfaces:
            cloudify.interfaces.lifecycle:
                create:
                    # Generate service component name and populate config into Consul
                    implementation: docker.dockerplugin.create_for_components_with_streams
                start:
                    # Create Docker container and start
                    implementation: docker.dockerplugin.create_and_start_container_for_components_with_streams


    # DockerContainerForPlatforms is intended for DCAE platform services.  Unlike the components,
    # platform services have well-known names and well-known ports.
    dcae.nodes.DockerContainerForPlatforms:
        derived_from: cloudify.nodes.Root
        properties:
            name:
                description: >
                  Container name used to register with Consul

            application_config:
                default: {}
                description: >
                  Application configuration for this Docker component. The data strcture is
                  expected to be a complex map (native YAML) and to be constructed and filled
                  by the creator of the blueprint.

            docker_config:
                default: {}
                description: >
                  This is what is the auxilary portion of the component spec that contains things
                  like healthcheck definitions for the Docker component. Health checks are
                  optional.

            image:
                type: string
                description: Full uri of the Docker image

            host_port:
                type: integer
                description: >
                  Network port that the platform service is expecting to expose on the host
                default: 0

            container_port:
                type: integer
                description: >
                  Network port that the platform service exposes in the container
                default: 0

            # The following properties are copied from k8s node type to be consistent.
            # However, these properties are not currently being used within the docker
            # plugin.
            msb_registration:
              type: dcae.types.MSBRegistration
              description: >
                Information for registering with MSB
              required: false

            log_info:
              type: dcae.types.LoggingInfo
              description: >
                Information for setting up centralized logging via ELK.
              required: false

            replicas:
              type: integer
              description: >
                The number of instances of the component that should be launched initially
              default: 1

            always_pull_image:
              type: boolean
              description: >
                Set to true if the orchestrator should always pull a new copy of the image 
                before deploying.  By default the orchestrator pulls only if the image is
                not already present on the Docker host where the container is being launched.
              default: false

        interfaces:
            cloudify.interfaces.lifecycle:
                create:
                    # Populate config into Consul
                    implementation: docker.dockerplugin.create_for_platforms
                start:
                    # Create Docker container and start
                    implementation: docker.dockerplugin.create_and_start_container_for_platforms
                stop:
                    # Stop and remove Docker container
                    implementation: docker.dockerplugin.stop_and_remove_container
                delete:
                    # Delete configuration from Consul
                    implementation: docker.dockerplugin.cleanup_discovery


    # DockerContainer is intended to be more of an all-purpose Docker container node
    # for non-componentized applications.
    dcae.nodes.DockerContainer:
        derived_from: cloudify.nodes.Root
        properties:
            name:
                type: string
                description: Name of the Docker container to be given
            image:
                type: string
                description: Full uri of the Docker image
        interfaces:
            cloudify.interfaces.lifecycle:
                start:
                    # Create Docker container and start
                    implementation: docker.dockerplugin.create_and_start_container
                stop:
                    # Stop and remove Docker container
                    implementation: docker.dockerplugin.stop_and_remove_container


    # TODO: Revisit using Docker swarm
    # The DockerSwarm node type provides the connection information of an available Docker swarm
    # cluster to be used to run Docker containers given search contraints like location.
    # This node type is not responsible for instantiating and managing the Docker swarm clusters.
  
    # The DockerHost node is responsible for selecting a pre-existing Docker host to run
    # Docker containers on. It is not responsible for instantiating new Docker hosts or expanding
    # more resources.
    dcae.nodes.SelectedDockerHost:
        derived_from: cloudify.nodes.Root
        properties:
            location_id:
                type: string
                description: Location id of the Docker host to use

            name_search:
                type: string
                description: String to use when matching for names
                default: component-dockerhost

            # REVIEW: This field should really be optional but because there's no functionality
            # that provides the dynamic solution sought after yet, it has been promoted to be
            # required.
            docker_host_override:
                type: string
                description: Docker hostname here is used as a manual override
                default: Null

        interfaces:
            cloudify.interfaces.lifecycle:
                create:
                    # Provide the Docker host to use for containers
                    implementation: docker.dockerplugin.select_docker_host
                delete:
                    implementation: docker.dockerplugin.unselect_docker_host