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
|
# ================================================================================
# Copyright (c) 2017-2020 AT&T Intellectual Property. All rights reserved.
# Copyright (c) 2020 Pantheon.tech. All rights reserved.
# Copyright (c) 2020 Nokia. 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=========================================================
#
tosca_definitions_version: cloudify_dsl_1_3
plugins:
k8s:
executor: 'central_deployment_agent'
package_name: k8splugin
package_version: 3.1.0
data_types:
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
dcae.types.TLSInfo:
description: >
Information for using TLS (HTTPS). (The properties all have to be declared as not
required, otherwise the tls_info property on the node would also be required.)
properties:
cert_directory:
description: >
The path in the container where the component expects to find TLS-related data.
type: string
required: false
use_tls:
description: >
Flag indicating whether TLS (HTTPS) is to be used
type: boolean
required: false
dcae.types.ExternalCertParameters:
description: >
Certificate parameters for external TLS info
properties:
common_name:
description: >
Common name which should be present in certificate
type: string
required: false
default: ""
sans:
description: >
List of Subject Alternative Names (SANs) which should be present in certificate
type: string
required: false
default: ""
dcae.types.ExternalTLSInfo:
description: >
Information for using external TLS.
properties:
external_cert_directory:
description: >
The path in the container where the component expects to find TLS-related data.
type: string
required: false
default: "/opt/app/dcae-certificate/external"
use_external_tls:
description: >
Flag indicating whether external TLS is to be used
type: boolean
required: false
default: true
ca_name:
description: >
Name of Certificate Authority configured on CertService side
type: string
required: false
default: "RA"
cert_type:
description: >
Type of output certificates
type: string
required: false
default: "P12"
external_certificate_parameters:
description: >
Certificate parameters for external TLS info
type: dcae.types.ExternalCertParameters
required: false
node_types:
dcae.nodes.ContainerizedComponent:
# Base type for all containerized components
# Captures common properties and interfaces
derived_from: cloudify.nodes.Root
properties:
image:
type: string
description: Full uri of the Docker image
application_config:
default: {}
description: >
Application configuration for this component. The data structure 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: >
Copied from the auxiliary portion of the component spec that contains things
like healthcheck definitions for the component. Health checks are
optional.
resource_config:
default: {}
description: >
This is used to specify the cpu and memory request and limit for container.
Please specify "requests" property and/or a "limits" property, with subproproperties
for cpu and memory. (https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/)
log_info:
type: dcae.types.LoggingInfo
description: >
Information for setting up centralized logging via ELK.
required: false
tls_info:
type: dcae.types.TLSInfo
description: >
Information for setting up TLS (HTTPS).
required: false
external_cert:
type: dcae.types.ExternalTLSInfo
description: >
Information for setting up external TLS
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 host where the container is being launched.
default: false
location_id:
type: string
description: >
The identifier for the location where the component is to be deployed.
If absent, the plugin uses its configured default location, typically the location
where the plugin is running (the central site). Also used to supply a location to
the DMaaP bus controller if the component is being provisioned as a publisher or
subscriber to a DMaaP feed or topic.
required: false
interfaces:
dcae.interfaces.update:
scale:
implementation: k8s.k8splugin.scale
update_image:
implementation: k8s.k8splugin.update_image
# The ContainerizedServiceComponent node type is to be used for DCAE service components.
#
# The plugin deploys the component into a Kubernetes cluster with a very specific choice
# of Kubernetes elements that are deliberately not under the control of the blueprint author.
# The idea is to deploy all service components in a consistent way, with the details abstracted
# away from the blueprint author. The plugin is responsible for:
# * Generation of the service component name
# * Managing of service component configuration information
dcae.nodes.ContainerizedServiceComponent:
derived_from: dcae.nodes.ContainerizedComponent
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. Not used by the plugin. Here for backward compatibility.
default: Null
required: False
service_component_name_override:
type: string
description: >
Manually override and set the name for this component. If this
is set, then the name will not be auto-generated. Using this feature provides
a service component with a fixed name that's known in advance, but care must be taken
to avoid attempting to deploy two components with the same name. If the component
exposes any ports, the k8s Service created by the plugin will use service_component_name_override
as the DNS host name.
default: Null
interfaces:
cloudify.interfaces.lifecycle:
create:
# Generate service component name and populate config into Consul
implementation: k8s.k8splugin.create_for_components
start:
# Create k8s entities for the component and start
implementation: k8s.k8splugin.create_and_start_container_for_components
stop:
# Stop and remove k8s entities associated with the component
implementation: k8s.k8splugin.stop_and_remove_container
delete:
# Delete configuration from Consul
implementation: k8s.k8splugin.cleanup_discovery
dcae.interfaces.policy:
# This is to be invoked by the policy handler upon policy updates
policy_update:
implementation: k8s.k8splugin.policy_update
# This node type is intended for DCAE service components that use DMaaP and must use the
# DMaaP plugin.
dcae.nodes.ContainerizedServiceComponentUsingDmaap:
derived_from: dcae.nodes.ContainerizedServiceComponent
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, populate config into Consul, set up runtime properties for DMaaP plugin
implementation: k8s.k8splugin.create_for_components_with_streams
# ContainerizedApplication is intended to be more of an all-purpose Docker container node
# for non-componentized applications.
dcae.nodes.ContainerizedApplication:
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: k8s.k8splugin.create_and_start_container
stop:
# Stop and remove Docker container
implementation: k8s.k8splugin.stop_and_remove_container
dcae.interfaces.scale:
scale:
implementation: k8s.k8splugin.scale
dcae.interfaces.update:
update_image:
implementation: k8s.k8splugin.update_image
|