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