[DOCS] Allow override for microservice image repo
[dcaegen2.git] / docs / sections / dcaeservice_helm_template.rst
1 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
2 .. http://creativecommons.org/licenses/by/4.0
3
4 Using Helm to deploy DCAE Microservices
5 =======================================
6
7 Background
8 ----------
9
10 Prior to the ONAP Honolulu release, DCAE microservices were deployed
11 using the Cloudify orchestration tool. Each microservice had a Cloudify
12 *blueprint* containing the information needed for Cloudify to deploy the
13 microservice. The DCAE team provided a Cloudify plugin that used the
14 Kubernetes API to create the Kubernetes resources (including a
15 Kubernetes Deployment and a Kubernetes Service) that make up a running
16 instance of the microservice.
17
18 Beginning with the Honolulu release, DCAE is migrating to a new approach
19 for deploying DCAE microservices. Instead of using Cloudify with a
20 Cloudify blueprint for each microservice, DCAE will use Helm to deploy
21 microservices. Each microservice will have a Helm chart instead of a
22 Cloudify blueprint. In the Honolulu release, four DCAE microservices
23 (the VES and HV-VES collectors, the PNF registration handler, and the
24 TCA Gen2 analytics service) moved to Helm deployment. All four of these
25 are deployed “statically”–that is, they are deployed when DCAE is
26 installed and run continuously.
27
28 DCAE Service Templates - Introduction
29 -------------------------------------
30
31 It would be possible to write a Helm chart for each microservice, each
32 completely unrelated. We are taking a different approach. We are
33 providing shared Helm templates that (approximately) create the same
34 Kubernetes resources that the Cloudify plugin created when it processed
35 a blueprint. Creating a Helm chart for a microservice involves setting
36 up a Helm chart directory, which can be done by copying the chart
37 directory for an existing microservice and changing the ``Chart.yaml``
38 file (to set the name, description, and version of the chart) and the
39 ``values.yaml`` file (to customize the templates for the target
40 microservice).
41
42 Once a chart for a microservice has been created, the chart can be used
43 to deploy the microservice, on demand, into a running instance of ONAP
44 and DCAE. This is similar to how we deployed microservices on demand
45 using a Cloudify blueprint and the Cloudify Manager (or the DCAE
46 deployment handler).
47
48 The bulk of this document describes the different parameters that can be
49 set in the ``values.yaml`` file. There are two sets of parameters. One
50 set comes from the ONAP OOM common templates used by all of the ONAP
51 components that deployed via Helm. The other set consists of parameters
52 that are specific to the DCAE shared templates.
53
54 DCAE Service Templates - Location and content
55 ---------------------------------------------
56 The DCAE shared Helm charts for microservices are maintained in the
57 OOM repository, in the ``oom/kubernetes/dcaegen2-services/common/dcaegen2-services-common``
58 directory.  In this directory subtree are:
59
60 - ``Chart.yaml``: the usual Helm chart definition file.
61 - ``requirements.yaml``: the dependencies for the chart.  Only the OOM "common" chart is needed.
62 - ``values.yaml``: the file is present for completion, but there are no locally-defined values.
63 - ``templates/_configmap.tpl``: a template that sets up a configMap containing the microservices initial configuration and,
64    if needed, a configMap for filebeat logging configuration.
65 - ``templates/_deployment.tpl``: a template that sets up a Kubernetes Deployment for the microservice.
66 - ``templates/_filebeat-config.tpl``: a template containing the standard filebeat configuration for microservices that use filebeat logging.
67     It's used in the ``templates/_configmap.tpl`` template.
68 - ``templates/_job.tpl``: a template that creates a Kubernetes Job that runs when a microservice is deleted.  The job brings up a container
69    that removes the microservice configuration information from Consul.
70
71 Setting variables in ``values.yaml`` for individual microservices
72 -----------------------------------------------------------------
73
74 Variables used by ONAP OOM common templates
75 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
76
77 **image**:
78
79 Name and tag of the Docker image for the microservice.
80 Required. The image repository is set using the OOM common
81 ``repositoryGenerator.repository`` template. Normally this points to the
82 ONAP image repository, but it can be overridden on a global basis or a
83 per-chart basis. See the OOM documentation for more details.
84
85 Example:
86
87 ::
88
89    image: onap/org.onap.dcaegen2.services.prh.prh-app-server:1.5.6
90
91 **imageRepositoryOverride**:
92
93 Alternative repository for the Docker image for the microservice.
94 Optional.  If this value is set, the Docker image for the microservice
95 will be pulled from the repository specified by this value, instead of
96 from the repository set by ``repositoryGenerator.repository``.  Note that
97 this alternative repository is used only for the microservice image and
98 not for other images (such as images for initContainers).  Note also that
99 the alternative repository must not use any form of authentication,
100 because there is no way to provide credentials for the repository.
101
102 Example:
103
104 ::
105
106   imageRepositoryOverride: "myrepo.example.org:5000"
107
108 **global.pullPolicy** and **pullPolicy**:
109
110 These settings control when
111 the image is pulled from the repository. ``Always`` means the image is
112 always pulled from the repository when a container is created from the
113 image, while ``IfNotPresent`` means that the image is pulled from the
114 repository only if the image is not already present on the host machine
115 where the container is being created. Typical ONAP OOM practice is to
116 set ``pullPolicy`` to ``Always`` in the chart. During development and
117 testing, this can be overriden during the Helm install with
118 ``global.pullPolicy`` set to ``IfNotPresent``, to speed up deployment by
119 reducing the number of times images are pulled from the repository.
120
121 Example:
122
123 ::
124
125    pullPolicy: Always
126
127 **readinessCheck**:
128
129 Many microservices depend on having other services
130 up and running in the DCAE and ONAP environment–services like AAF to get
131 certificates or DMaaP to communicate with other services.
132 ``readinessCheck.wait_for`` is a list of the *containers* that the
133 microservice needs to have available. If this parameter is present, an
134 initContainer will run and wait for all of the listed containers to
135 become ready. (Unfortunately, it’s necessary to know the name of a
136 *container*; it isn’t sufficient to list the name of a service.)
137
138 Example:
139
140 ::
141
142    readinessCheck:
143      wait_for:
144        - dcae-config-binding-service
145        - aaf-cm
146
147 **readiness**:
148
149 If this parameter is present, a Kubernetes readiness
150 probe will be configured for the microservice. The template supports
151 either an HTTP(S) readiness probe or a script-based readiness probe. The
152 parameter has the following fields that apply to both types:
153
154 1. ``initialDelaySeconds``: The number of seconds to wait after container startup before attempting the first readiness probe. *[Optional, default 5]*
155 2. ``periodSeconds``: The number of seconds between readiness probes. *[Optional, default 15]*
156 3. ``timeoutSeconds``: The number of seconds to wait for a connection to the container before timing out. *[Optional, default 1]*
157 4. ``probeType``: The type of readiness probe–``httpGet`` for an HTTP probe or ``exec`` for a script-based probe. *[Optional, default ``httpGet``]*
158
159 For HTTP(S) readiness probes, the following fields are *required*:
160
161 1. ``scheme``: ``HTTP`` or ``HTTPS``
162 2. ``path``: the path to the readiness probe API endpoint on the container
163 3. ``port``: the *container port* on which the microservice is listening for readiness probe requests.
164    (This is the *internal* port, not a NodePort or Ingress port.)
165
166 For script-based readiness probe, the following field is *required*:
167  1. ``command``: an array consisting of the command to be executed to run
168     the readiness probe and any command arguments that are needed.
169
170 Example (HTTP probe):
171
172 ::
173
174    readiness:
175      initialDelaySeconds: 5
176      periodSeconds: 15
177      path: /heartbeat
178      scheme: HTTP
179      port: 8100
180
181 Example (script-based probe):
182
183 ::
184
185    readiness:
186      type: exec
187      initialDelaySeconds: 5
188      periodSeconds: 15
189      timeoutSeconds: 2
190      command:
191      - /opt/ves-hv-collector/healthcheck.sh
192
193 Variables used by the DCAE services common templates
194 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
195
196 **applicationConfig:**
197
198 *[Optional]*. Initial configuration for
199 microservice. Pushed into Consul for retrieval by config-binding-service
200 and mapped to a file mounted at ``/app-config``. This is a YAML object
201 with keys and values as needed for the specific microservice. It will be
202 converted to JSON before being pushed to Consul or mounted as a file. If
203 not present, defaults to an empty object ({}).
204
205 *Note: Due to a bug in the Honolulu release (DCAEGEN2-2782), it is
206 necessary to supply an ``applicationConfig`` in the ``values.yaml`` for
207 a microservice even if the microservice does not have any configuration.
208 The workaround is to supply an empty configuration:*
209
210 ::
211
212    applicationConfig: {}
213
214 *This is being fixed in the Istanbul release.*
215
216 **applicationEnv:**
217
218 Microservice-specific environment variables to be
219 set for the microservice’s container. Environment variables can be set
220 to literal string values or a value from a Kubernetes Secret that has
221 been set up using the ONAP OOM common secret template.
222
223 For a literal string value, use the environment variable name as the
224 key, and the desired string as the value:
225
226 ::
227
228    applicationEnv:
229      EXAMPLE_ENV_VAR: "example variable content"
230
231 For a value taken from a secret, use the environment variable name as
232 the key and set the value to an object with the following fields:
233
234 1. ``secretUid``: *[Required]* The ``uid`` of the secret (set up with the
235    ONAP OOM common secret template) from which the value will be taken.
236 2. ``key``: *[Required]* The key within the secret that holds the desired value.
237    (A secret can contain several values, each with its own key. One frequently
238    used form of secrets contains login credentials, with keys for username
239    and password.)
240
241 Example of an environment variable set from a secret:
242
243 ::
244
245    applicationEnv:
246      EXAMPLE_PASSWORD:
247        secretUid: example-secret
248        key: password
249
250 The ``applicationEnv`` section of ``values.yaml`` can contain an
251 arbitrary number of environment variables and can contain both literal
252 values and values from secrets. ``applicationEnv`` is optional. If it is
253 not present in the ``values.yaml`` file, no microservice-specific
254 environment variables will be set for the microservice’s container.
255
256 Note that ``applicationEnv`` is a YAML object (or “dictionary”), not an
257 array.
258
259 **externalVolumes:**
260
261 Controls microservice-specific volumes and volume
262 mounts. Allows a microservice to access an externally-created data
263 store. Currently only configMaps are supported. ``externalVolumes`` is a
264 YAML array of objects. Each object has three required fields and two
265 optional fields:
266
267 1. ``name``: *[Required]* The Kubernetes name of the configMap to be mounted.
268    The value is a case sensitive string. Because the names of configMaps are
269    sometimes set at deployment time (for instance, to prefix the Helm release to
270    the name), the string can be a Helm template fragment that will be expanded
271    at deployment time.
272 2. ``type``: *[Required]* For now, this is always ``configMap``. This is a
273    case-insensitive string.
274 3. ``mountPath``: *[Required]* The path to the mount point for the volume
275    in the container file system. The value is a case-sensitive string.
276 4. ``readOnly``: *[Optional]* Boolean flag. Set to ``true`` to mount the volume
277    as read-only. Defaults to ``false``.
278 5. ``optional``: *[Optional]* Boolean flag. Set to ``true`` to make the
279    configMap optional (i.e., to allow the microservice’s pod to start even
280    if the configMap doesn’t exist). If set to ``false``, the configMap must
281    be present in order for the microservice’s pod to start. Defaults to
282    ``true``. *Note that this default is the opposite of the Kubernetes
283    default. We’ve done this to be consistent with the behavior of the DCAE
284    Cloudify plugin for Kubernetes (``k8splugin``), which always set
285    ``optional`` to ``true`` and did not allow for overriding this value.*
286
287 Example of an ``externalVolumes`` section:
288
289 ::
290
291    externalVolumes:
292      - name: my-example-configmap
293        type: configmap
294        mountPath: /opt/app/config
295      - name: '{{ include "common.release" . }}-another-example'
296        type: configmap
297        mountPath: /opt/app/otherconfig
298
299 The dcaegen2-services-common deployment template will set up a volume
300 pointing to the specific configMap in the microservice’s pod and a
301 volume mount (mounted at ``mountPath`` on the microservice’s container.)
302
303 The ``externalVolumes`` section is optional. If it is not present, no
304 external volumes will be set up for the microservice.
305
306 **certDirectory:**
307
308 Path to the directory in the microservice’s
309 container file system where TLS-certificate information from AAF should
310 be mounted. This is an optional field. When it is present, the
311 dcaegen2-services-common deployment template will set up an
312 initContainer that retrieves the certificate information into a shared
313 volume, which will then be mounted at the path specified by
314 ``certDirectory``.
315
316 Example:
317
318 ::
319
320    certDirectory: /etc/ves-hv/ssl
321
322 **tlsServer:**
323
324 Boolean flag. If set to ``true``, the
325 dcaegen2-services-common deployment will configure the initContainer
326 described above to fetch a server certificate for the microservice. If
327 set to ``false``, the initContainer will fetch only a CA certificate for
328 the AAF certificate authority. ``tlsServer`` is optional. The value
329 defaults to ``false``. ``tlsServer`` is ignored if ``certDirectory`` is
330 not set.
331
332 **logDirectory:**
333
334 Path to the directory where the microservice writes
335 its log files. ``logDirectory`` is optional. If ``logDirectory`` is
336 present, the dcaegen2-services-common deployment template will deploy a
337 sidecar container that forwards the log file content to a log server.
338
339 Example:
340
341 ::
342
343    logDirectory: /var/log/ONAP/dcae-hv-ves-collector
344
345 Note that ONAP is moving away from the sidecar approach and encouraging
346 applications (including DCAE microservices) to write log information to
347 ``stdout`` and ``stderr``.
348
349 **policies:**
350
351 If present, the dcaegen2-services-common deployment
352 template will deploy a sidecar container that polls the ONAP policy
353 subsystem for policy-driven configuration information.
354
355 ``policies`` is a YAML object (“dictionary”) that can contain the
356 following keys:
357
358 1. ``policyID``: *[Optional]* A string representation of a JSON array of policy ID
359    values that the sidecar should monitor.   Default ‘[]’.
360 2. ``filter``: *[Optional]* A string representation of a JSON array of regular
361     expressions that match policy IDs that the sidecar should monitory. Default ‘[]’.
362 3. ``duration``: *[Optional]* The interval (in seconds) between polling requests
363    made by the sidecar to the policy subsystem. Default: 2600.
364
365 Example:
366
367 ::
368
369    policies:
370      policyID: |
371        '["onap.vfirewall.tca","abc"]'
372      filter: |
373        '["DCAE.Config_vfirewall_.*"]'
374      duration: 300
375
376 **dcaePolicySyncImage:**
377
378 Name and tag of the policy sidecar image to be
379 used. Required if the policy sidecar is being used. The image repository
380 is set using the OOM common ``repositoryGenerator.repository`` template.
381 Normally this points to the ONAP image repository, but it can be
382 overridden on a global basis or a per-chart basis. See the OOM
383 documentation for more details.
384
385 Example:
386
387 ::
388
389    dcaePolicySyncImage: onap/org.onap.dcaegen2.deployments.dcae-services-policy-sync:1.0.1
390
391 **consulLoaderImage:**
392
393 Name and tag of the consul loader image to be
394 used. Required. The consul loader image runs in an initContainer that
395 loads application configuration information into Consul. The image
396 repository is set using the OOM common
397 ``repositoryGenerator.repository`` template. Normally this points to the
398 ONAP image repository, but it can be overridden on a global basis or a
399 per-chart basis. See the OOM documentation for more details.
400
401 Example:
402
403 ::
404
405    consulLoaderImage: onap/org.onap.dcaegen2.deployments.consul-loader-container:1.1.0
406
407 **tlsImage:**
408
409 Name and tag of the TLS initialization image to be used.
410 Required if the microservice is configured to act as a TLS client and/or
411 server using AAF certificates. The TLS initialization image runs in an
412 initContainer and pulls TLS certificate information from AAF and stores
413 it in a volume on the microservice’s pod. The image repository is set
414 using the OOM common ``repositoryGenerator.repository`` template.
415 Normally this points to the ONAP image repository, but it can be
416 overridden on a global basis or a per-chart basis. See the OOM
417 documentation for more details.
418
419 Example:
420
421 ::
422
423    tlsImage: onap/org.onap.dcaegen2.deployments.tls-init-container:2.1.0
424
425 **certProcessorImage:**
426
427 Name and tag of the CMPv2 certificate
428 initialization image to be used. Required if the microservice is
429 configured to act as a TLS client and/or server using CMPv2
430 certificates. This image runs in an initContainer and sets up trust
431 stores and keystores for CMPv2 use. The image repository is set using
432 the OOM common ``repositoryGenerator.repository`` template. Normally
433 this points to the ONAP image repository, but it can be overridden on a
434 global basis or a per-chart basis. See the OOM documentation for more
435 details.
436
437 Example:
438
439 ::
440
441    onap/org.onap.oom.platform.cert-service.oom-certservice-post-processor:2.1.0
442
443
444 Deploying multiple instances of a microservice
445 ----------------------------------------------
446 The dcaegen2-services-common charts can be used to deploy multiple instances of the same microservice.  To do this successfully,
447 it's necessary to make sure that any Kubernetes service that the microservice exposes has different service names for each instance and,
448 if the service is exposed outside the Kubernetes cluster, a different external port assignment.  This can be done by overriding the default
449 settings in the ``values.yaml`` file.
450
451 As an example, consider the DCAE VES collector (``dcae-ves-collector``).  One instance of the VES collector is deployed by default when DCAE is installed using the ONAP installation
452 process.  It exposes a service with the name ``dcae-ves-collector`` which is also exposed outside the Kubernetes cluster on NodePort 30417.
453
454 To deploy a second instance of the VES collector, we can create a YAML override file to define the service exposed by the second instance.  The following
455 override file (``ves2.yaml``) will name the service as ``dcae-ves-collector-2`` and expose it on port 30499:
456
457 ::
458
459   service:
460     name: dcae-ves-collector-2
461     ports:
462       - name: http
463         port: 8443
464         plain_port: 8080
465         port_protocol: http
466         nodePort: 99
467         useNodePortExt: true
468
469 In the directory containing the ``dcae-ves-collector`` chart and the file ``ves.yaml``, running the following command will deploy a second instance
470 of the VES collector:
471
472 ``helm install -n onap --set global.masterPassword=whatever --set pullPolicy=IfNotPresent -f ves2.yaml ves2 .``
473
474 This creates a new Helm release called ``ves2``.   The instance can be removed with:
475
476 ``helm delete -n onap ves2``
477
478 Note that if a component is using TLS with an AAF certificate, the DCAE certificate would need to include the new service name.
479 If a component is using an external certificate (CMPv2), the override file would need to supply the proper parameters to get a certificate with
480 correct common name/SAN.
481
482 Also note that if the chart for ``dcae-ves-collector`` has been pushed into a Helm repository, the ``helm install`` command can refer to the
483 repository (for instance, ``local/dcae-ves-collector``) instead of using the chart on the local filesystem.
484
485
486 Dynamic Topic and Feed Provisioning
487 -----------------------------------
488 This section introduces details on creation of dynamic Dmaap Topics in Message Router and Feeds in Data Router via DCAE helm charts.
489
490 Provisioning support through DCAE common-service template
491 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
492
493 When using DCAE common-service template in microservice chart ``deployment.yaml`` file it is required to include ``dcaegen2-services-common.microserviceDeployment`` template.
494 The dcaegen2-services-common include necessary ``common.dmaap.provisioning.initContainer`` template which provisions topics and feeds on Dmaap Message Router and Data Router.
495
496 Example : Including ``dcaegen2-services-common.microserviceDeployment`` template in ``deployment.yaml``.
497
498 ::
499
500   {{ include "dcaegen2-services-common.microserviceDeployment" . }}
501
502 The ``common.dmaap.provisioning.initContainer`` template included in DCAE ``dcaegen2-services-common.microserviceDeployment`` makes use of
503 dmaap-bc client image to create Topics on Message Router and Feeds on Data Router microservice, with the help of ``dbc-client.sh`` script,
504 it uses Bus Controller REST API to create resources.
505
506 If the resource creation is successful via script, the response is logged in file with appropriate naming convention.
507
508 .. note::
509   The configuration provided via ``values.yaml`` file, is consumed by ``common.dmaap.provisioning.initContainer`` template which runs two
510   init-container, First named init-dmaap-provisioning for creating resources on Dmaap, Second named init-merge-config which updates application config
511   with response generated as an outcome of operation by init-dmaap-provisioning container.
512
513 The figure below shows Dmaap Topics, Feeds Provisioning architecture via dcae-service-common helm charts.
514
515 ..
516   The following diagram has been created on https://app.diagrams.net/. There is an editable version of the diagram
517   in repository under path docs/sections/images/dmaap_provisioning_architecture_diagram.drawio, import file to update diagram.
518
519 .. image:: images/dmaap_provisioning.png
520
521 Configuration to be added in ``values.yaml`` file.
522
523 .. note::
524   For more information on attributes that are set in ``values.yaml`` for Data Router Feed, Publisher and Subscriber, Message Router Topic creation,
525   you can refer DMaaP Bus Controller API documentation at: https://docs.onap.org/projects/onap-dmaap-buscontroller/en/latest/apis/api.html
526
527 Dmaap Data Router Feeds creation input can be provided in below format. It consumes list of Feeds.
528
529 .. note::
530   For DR Feed creation except ``feedName``, ``feedDescription``, ``feedVersion`` avoid update on other attributes.
531   All other attributes are mandatory, contains required default values.
532
533 ::
534
535   drFeedConfig:
536     - feedName: bulk_pm_feed
537       owner: dcaecm
538       feedVersion: 0.0
539       asprClassification: unclassified
540       feedDescription: DFC Feed Creation
541
542 Once the Feeds creation is successful we can attach Publisher and Subscriber to Feeds.
543
544 Dmaap Data Router Publisher config:
545
546 .. note::
547   For DR Publisher creation except ``feedName`` avoid update on other attribute.
548   All other attributes are mandatory, contains required default values.
549
550 ::
551
552   drPubConfig:
553     - feedName: bulk_pm_feed
554       dcaeLocationName: loc00
555
556 Dmaap Data Router Subscriber config:
557
558 .. note::
559   For DR Subscriber creation except ``feedName`` avoid update on other attributes.
560   Attribute username, userpwd will be updated via init-merge-config init-container of ``common.dmaap.provisioning.initContainer`` template.
561   In case dcae-pm-mapper microservice is not the Subscriber, attribute deliveryURL need to be updated and privilegedSubscriber can be updated to False.
562   All other attributes are mandatory, contains required default values.
563
564 ::
565
566   drSubConfig:
567     - feedName: bulk_pm_feed
568       decompress: True
569       username: ${DR_USERNAME}
570       userpwd: ${DR_PASSWORD}
571       dcaeLocationName: loc00
572       privilegedSubscriber: True
573       deliveryURL: https://dcae-pm-mapper:8443/delivery
574
575 Dmaap Message Router Topics creation input can be provided in below format. It consumes list of Topics.
576 Also we can attach Message Router Publisher and Subscriber at same time while creation of Topic.
577
578 .. note::
579   For Message Router Topic creation except ``topicName`` and ``topicDescription``  avoid update on other attributes.
580   All other attributes are mandatory, contains required default values.
581
582 ::
583
584   mrTopicsConfig:
585     - topicName: PERFORMANCE_MEASUREMENTS
586       topicDescription: Description about Topic
587       owner: dcaecm
588       tnxEnabled: false
589       clients:
590         - dcaeLocationName: san-francisco
591           clientRole: org.onap.dcae.pmPublisher
592           action:
593             - pub
594             - view
595
596 Volume configuration for configMap to be provided in ``values.yaml`` file.
597
598 ::
599
600   volumes:
601     - name: feeds-config
602       path: /opt/app/config/feeds
603     - name: drpub-config
604       path: /opt/app/config/dr_pubs
605     - name: drsub-config
606       path: /opt/app/config/dr_subs
607     - name: topics-config
608       path: /opt/app/config/topics
609
610
611 For example directory containing ``dcae-datafile-collector``, ``dcae-pm-mapper`` chart under
612 dcaegen2-services in OOM repository we can find examples for Feed and Topic creation.
613
614 Provisioning support through DCAE When using custom deployment.yaml
615 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
616
617 When using custom ``deployment.yaml`` it is required explicitly to include ``common.dmaap.provisioning.initContainer`` template in
618 initContainer specs of ``deployment.yaml`` file.
619
620 Example : Including ``common.dmaap.provisioning.initContainer`` template in ``deployment.yaml`` file.
621
622 ::
623
624   {{- include "common.dmaap.provisioning.initContainer" . | nindent XX }}
625
626 Note also need to take care of the ``Volumes`` that are required to be mounted on Application Pod in ``deployment.yaml``.
627
628 ::
629
630   {{- include "common.dmaap.provisioning._volumes" . | nindent XX -}}
631
632 Configuration to be added in ``values.yaml`` file is similar to described in ``Provisioning support through DCAE common-service template``.
633
634 Removal of Data Router Feed, Publisher and Subscriber Or Message Router Topic
635 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
636
637 DCAE does not support automatic removal of Feed, Publisher and Subscriber from Data Router or Topic from Message Router at present.
638 So it is the responsibility of operator to manually remove Feeds and associated Publisher or Subscriber from Data Router and Topics
639 from Message Router after uninstalling microservice charts which created resources on installation.
640
641 Reference to DMAAP Bus Controller API documentation to figure out steps for manual removal of resources.
642 https://docs.onap.org/projects/onap-dmaap-buscontroller/en/latest/apis/api.html