From 06baa8f63f6b07b1d8f9d48b4601b78d17ddbb2a Mon Sep 17 00:00:00 2001
From: Michal Nasiadka <mnasiadka@gmail.com>
Date: Mon, 20 Nov 2023 22:13:29 +0000
Subject: [PATCH] fluentd: Use labels for transition to v5

Depends-On: https://review.opendev.org/c/openstack/kolla/+/901508
Change-Id: I8c7d3de95d0f1f8e57a993b8c3417d90459e19be
---
 ansible/roles/common/tasks/config.yml         | 51 +++++++++++++++++++
 .../templates/conf/input/00-global.conf.j2    |  2 +-
 .../templates/conf/input/02-mariadb.conf.j2   |  4 +-
 .../templates/conf/input/03-rabbitmq.conf.j2  |  2 +-
 .../conf/input/04-openstack-wsgi.conf.j2      |  2 +-
 .../templates/conf/input/05-libvirt.conf.j2   |  2 +-
 .../conf/input/10-openvswitch.conf.j2         |  4 +-
 .../roles/common/templates/fluentd.json.j2    |  8 ++-
 requirements-core.yml                         |  6 +++
 9 files changed, 68 insertions(+), 13 deletions(-)

diff --git a/ansible/roles/common/tasks/config.yml b/ansible/roles/common/tasks/config.yml
index a2c03ad0cb..f53464f84b 100644
--- a/ansible/roles/common/tasks/config.yml
+++ b/ansible/roles/common/tasks/config.yml
@@ -39,6 +39,57 @@
   command: systemd-tmpfiles --create
   when: kolla_container_engine == 'podman'
 
+- name: Ensure fluentd image is present for label check
+  vars:
+    service_name: "fluentd"
+    service: "{{ common_services[service_name] }}"
+  become: true
+  kolla_container:
+    action: "ensure_image"
+    common_options: "{{ docker_common_options }}"
+    image: "{{ service.image }}"
+  when: enable_fluentd | bool
+
+- name: Fetch fluentd Docker image labels
+  vars:
+    service_name: "fluentd"
+    service: "{{ common_services[service_name] }}"
+  become: true
+  docker_image_info:
+    name: "{{ service.image }}"
+  register: fluentd_labels_docker
+  when:
+    - kolla_container_engine == "docker"
+    - enable_fluentd | bool
+
+- name: Set fluentd facts
+  set_fact:
+    fluentd_cmd: "{{ fluentd_labels_docker.images[0].ContainerConfig.Labels.fluentd_binary | default('td-agent') }}"
+    fluentd_user: "{{ fluentd_labels_docker.images[0].ContainerConfig.Labels.fluentd_user | default('td-agent') }}"
+  when:
+    - kolla_container_engine == "docker"
+    - enable_fluentd | bool
+
+- name: Fetch fluentd Podman image labels
+  vars:
+    service_name: "fluentd"
+    service: "{{ common_services[service_name] }}"
+  become: true
+  podman_image_info:
+    name: "{{ service.image }}"
+  register: fluentd_labels_podman
+  when:
+    - kolla_container_engine == "podman"
+    - enable_fluentd | bool
+
+- name: Set fluentd facts
+  set_fact:
+    fluentd_cmd: "{{ fluentd_labels_podman.images[0].ContainerConfig.Labels.fluentd_binary | default('td-agent') }}"
+    fluentd_user: "{{ fluentd_labels_podman.images[0].ContainerConfig.Labels.fluentd_user | default('td-agent') }}"
+  when:
+    - kolla_container_engine == "podman"
+    - enable_fluentd | bool
+
 - name: Copying over config.json files for services
   template:
     src: "{{ item.key }}.json.j2"
diff --git a/ansible/roles/common/templates/conf/input/00-global.conf.j2 b/ansible/roles/common/templates/conf/input/00-global.conf.j2
index d3bdb2dec7..1c0a3d25b1 100644
--- a/ansible/roles/common/templates/conf/input/00-global.conf.j2
+++ b/ansible/roles/common/templates/conf/input/00-global.conf.j2
@@ -9,7 +9,7 @@
                 "/var/log/kolla/*/*-error.log",
                 "/var/log/kolla/*/*_access.log",
                 "/var/log/kolla/*/*_error.log"]
-  pos_file /var/run/td-agent/kolla-openstack.pos
+  pos_file /var/run/{{ fluentd_user }}/kolla-openstack.pos
   tag kolla.*
   ignore_repeated_permission_error true
   enable_watch_timer false
diff --git a/ansible/roles/common/templates/conf/input/02-mariadb.conf.j2 b/ansible/roles/common/templates/conf/input/02-mariadb.conf.j2
index f4ed045f81..cafbe03015 100644
--- a/ansible/roles/common/templates/conf/input/02-mariadb.conf.j2
+++ b/ansible/roles/common/templates/conf/input/02-mariadb.conf.j2
@@ -3,7 +3,7 @@
 <source>
   @type tail
   path /var/log/kolla/mariadb/mariadb.log
-  pos_file /var/run/td-agent/mariadb.pos
+  pos_file /var/run/{{ fluentd_user }}/mariadb.pos
   tag infra.mariadb
   enable_watch_timer false
   <parse>
@@ -15,7 +15,7 @@
 <source>
   @type tail
   path /var/log/kolla/mariadb/xinetd.log
-  pos_file /var/run/td-agent/mariadb-xinetd.pos
+  pos_file /var/run/{{ fluentd_user }}/mariadb-xinetd.pos
   tag infra.mariadb-xinetd
   ignore_repeated_permission_error true
   enable_watch_timer false
diff --git a/ansible/roles/common/templates/conf/input/03-rabbitmq.conf.j2 b/ansible/roles/common/templates/conf/input/03-rabbitmq.conf.j2
index 9fb1b3dc3e..e7b3099c77 100644
--- a/ansible/roles/common/templates/conf/input/03-rabbitmq.conf.j2
+++ b/ansible/roles/common/templates/conf/input/03-rabbitmq.conf.j2
@@ -1,7 +1,7 @@
 <source>
   @type tail
   path /var/log/kolla/rabbitmq/rabbit@{{ ansible_facts.hostname }}.log
-  pos_file /var/run/td-agent/rabbit.pos
+  pos_file /var/run/{{ fluentd_user }}/rabbit.pos
   tag infra.rabbit
   enable_watch_timer false
   <parse>
diff --git a/ansible/roles/common/templates/conf/input/04-openstack-wsgi.conf.j2 b/ansible/roles/common/templates/conf/input/04-openstack-wsgi.conf.j2
index f94edf8a6a..cf41b25275 100644
--- a/ansible/roles/common/templates/conf/input/04-openstack-wsgi.conf.j2
+++ b/ansible/roles/common/templates/conf/input/04-openstack-wsgi.conf.j2
@@ -2,7 +2,7 @@
 <source>
   @type tail
   path /var/log/kolla/*/*-access.log,/var/log/kolla/*/*-error.log,/var/log/kolla/*/*_access.log,/var/log/kolla/*/*_error.log
-  pos_file /var/run/td-agent/kolla-openstack-wsgi.pos
+  pos_file /var/run/{{ fluentd_user }}/kolla-openstack-wsgi.pos
   tag kolla.*
   enable_watch_timer false
   <parse>
diff --git a/ansible/roles/common/templates/conf/input/05-libvirt.conf.j2 b/ansible/roles/common/templates/conf/input/05-libvirt.conf.j2
index 249e52b214..de8c650547 100644
--- a/ansible/roles/common/templates/conf/input/05-libvirt.conf.j2
+++ b/ansible/roles/common/templates/conf/input/05-libvirt.conf.j2
@@ -1,7 +1,7 @@
 <source>
   @type tail
   path /var/log/kolla/libvirt/libvirtd.log
-  pos_file /var/run/td-agent/libvirt.pos
+  pos_file /var/run/{{ fluentd_user }}/libvirt.pos
   tag infra.libvirt
   enable_watch_timer false
   <parse>
diff --git a/ansible/roles/common/templates/conf/input/10-openvswitch.conf.j2 b/ansible/roles/common/templates/conf/input/10-openvswitch.conf.j2
index f08272bdf9..edde2872a6 100644
--- a/ansible/roles/common/templates/conf/input/10-openvswitch.conf.j2
+++ b/ansible/roles/common/templates/conf/input/10-openvswitch.conf.j2
@@ -1,7 +1,7 @@
 <source>
   @type tail
   path /var/log/kolla/openvswitch/ovs-vswitchd.log
-  pos_file /var/run/td-agent/openvswitch.pos
+  pos_file /var/run/{{ fluentd_user }}/openvswitch.pos
   tag infra.openvswitch
   enable_watch_timer false
   <parse>
@@ -16,7 +16,7 @@
 <source>
   @type tail
   path /var/log/kolla/openvswitch/ovsdb-server.log
-  pos_file /var/run/td-agent/openvswitchdb.pos
+  pos_file /var/run/{{ fluentd_user }}/openvswitchdb.pos
   tag infra.openvswitchdb
   enable_watch_timer false
   <parse>
diff --git a/ansible/roles/common/templates/fluentd.json.j2 b/ansible/roles/common/templates/fluentd.json.j2
index 712182c14a..82302aa0c1 100644
--- a/ansible/roles/common/templates/fluentd.json.j2
+++ b/ansible/roles/common/templates/fluentd.json.j2
@@ -1,10 +1,8 @@
-{% set fluentd_user = 'td-agent' %}
-{% set fluentd_dir = '/etc/td-agent' %}
-{% set fluentd_conf = 'td-agent.conf' %}
-{% set fluentd_cmd = '/usr/sbin/td-agent' %}
+{% set fluentd_dir = '/etc/' + (fluentd_cmd | default('td-agent')) %}
+{% set fluentd_conf = (fluentd_cmd | default('td-agent')) + '.conf' %}
 
 {
-    "command": "{{ fluentd_cmd }} -o /var/log/kolla/fluentd/fluentd.log",
+    "command": "{{ fluentd_cmd }} -c {{ fluentd_dir }}/{{ fluentd_conf }} -o /var/log/kolla/fluentd/fluentd.log",
     "config_files": [
         {
             "source": "{{ container_config_directory }}/td-agent.conf",
diff --git a/requirements-core.yml b/requirements-core.yml
index 9f118a3f42..d5016a62f8 100644
--- a/requirements-core.yml
+++ b/requirements-core.yml
@@ -12,3 +12,9 @@ collections:
   - name: community.general
     source: https://galaxy.ansible.com
     version: <7
+  - name: community.docker
+    source: https://galaxy.ansible.com
+    version: <4
+  - name: containers.podman
+    source: https://galaxy.ansible.com
+    version: <2