From 50abf90f59cc41d0e93c24e327ae9611930eee5c Mon Sep 17 00:00:00 2001
From: Christian Berendt <berendt@osism.tech>
Date: Thu, 7 Sep 2023 14:40:13 +0200
Subject: [PATCH] ceilometer: process custom event_pipeline.yaml with
 merge_yaml

Allow more flexibility by adding a host specific template. Also
using the merge_yaml action allow us to drop the logic around deciding
which template to use.

Change-Id: I41a3226679c622e5e98df074cee195e8436ea45b
---
 ansible/roles/ceilometer/tasks/config.yml     | 31 +++----------------
 ...-yaml-event-pipeline-bee198be62ebd6a9.yaml |  8 +++++
 2 files changed, 13 insertions(+), 26 deletions(-)
 create mode 100644 releasenotes/notes/ceilometer-merge-yaml-event-pipeline-bee198be62ebd6a9.yaml

diff --git a/ansible/roles/ceilometer/tasks/config.yml b/ansible/roles/ceilometer/tasks/config.yml
index a4b46e96fd..2835ec4be2 100644
--- a/ansible/roles/ceilometer/tasks/config.yml
+++ b/ansible/roles/ceilometer/tasks/config.yml
@@ -252,41 +252,20 @@
   notify:
     - Restart ceilometer-notification container
 
-- name: Check custom event_pipeline.yaml exists
-  stat:
-    path: "{{ node_custom_config }}/ceilometer/event_pipeline.yaml"
-  delegate_to: localhost
-  register: ceilometer_event_pipeline_file
-
 - name: Copying over event_pipeline.yaml
   vars:
     service: "{{ ceilometer_services['ceilometer-notification'] }}"
-  copy:
-    src: "{{ node_custom_config }}/ceilometer/event_pipeline.yaml"
-    dest: "{{ node_config_directory }}/ceilometer-notification/event_pipeline.yaml"
-    force: True
-    mode: "0660"
-  become: true
-  register: ceilometer_event_pipeline_overwriting
-  when:
-    - ceilometer_event_pipeline_file.stat.exists
-    - inventory_hostname in groups[service.group]
-    - service.enabled | bool
-  notify:
-    - Restart ceilometer-notification container
-
-- name: Copying over event_pipeline.yaml for notification service
-  vars:
-    service: "{{ ceilometer_services['ceilometer-notification'] }}"
-  template:
-    src: "event_pipeline.yaml.j2"
+  merge_yaml:
+    sources:
+      - "{{ role_path }}/templates/event_pipeline.yaml.j2"
+      - "{{ node_custom_config }}/ceilometer/event_pipeline.yaml"
+      - "{{ node_custom_config }}/ceilometer/{{ inventory_hostname }}/event_pipeline.yaml"
     dest: "{{ node_config_directory }}/ceilometer-notification/event_pipeline.yaml"
     mode: "0660"
   become: true
   when:
     - inventory_hostname in groups[service.group]
     - service.enabled | bool
-    - not ceilometer_event_pipeline_file.stat.exists
   notify:
     - Restart ceilometer-notification container
 
diff --git a/releasenotes/notes/ceilometer-merge-yaml-event-pipeline-bee198be62ebd6a9.yaml b/releasenotes/notes/ceilometer-merge-yaml-event-pipeline-bee198be62ebd6a9.yaml
new file mode 100644
index 0000000000..2d0f0505c5
--- /dev/null
+++ b/releasenotes/notes/ceilometer-merge-yaml-event-pipeline-bee198be62ebd6a9.yaml
@@ -0,0 +1,8 @@
+---
+features:
+  - |
+    A custom ``event_pipeline.yaml`` file for the Ceilometer notification
+    service is now processed with ``merge_yaml``. This allows Jinja2 to be
+    used. Furthermore, it is possible to have a global
+    ``event_pipeline.yaml`` and host-specific ``event_pipeline.yaml``
+    files.