From d86f8ab9fe4b68a4b6407740aab064f13cd9ee4c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rados=C5=82aw=20Piliszek?= <radoslaw.piliszek@gmail.com>
Date: Mon, 15 Jun 2020 10:41:57 +0200
Subject: [PATCH] Fix issues with Prometheus config generation

related to newly introduced merge mechanism.
1) Per-host overrides cannot be run_once.
2) Since merge_yaml is silent about missing files, it ignored
   the fact that no proper file was given due to wrong variable
   being referenced (see the closed bug).

Change-Id: I6db4af4c6e3364838bdae510f300038b0c1560b0
Closes-Bug: #1882460
---
 ansible/roles/prometheus/tasks/config.yml | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/ansible/roles/prometheus/tasks/config.yml b/ansible/roles/prometheus/tasks/config.yml
index eee74466cd..b371b6b845 100644
--- a/ansible/roles/prometheus/tasks/config.yml
+++ b/ansible/roles/prometheus/tasks/config.yml
@@ -56,24 +56,35 @@
   notify:
     - Restart prometheus-server container
 
-- name: Find prometheus config overrides
+- name: Find prometheus common config overrides
   find:
     # NOTE(wszumski): Non-existent paths don't produce a failure
     paths:
       - "{{ node_custom_config }}/prometheus/prometheus.yml.d"
+    patterns: "*.yml"
+  delegate_to: localhost
+  register: prometheus_common_config_overrides_result
+  run_once: true
+
+- name: Find prometheus host config overrides
+  find:
+    # NOTE(wszumski): Non-existent paths don't produce a failure
+    paths:
       - "{{ node_custom_config }}/prometheus/{{ inventory_hostname }}/prometheus.yml.d"
     patterns: "*.yml"
   delegate_to: localhost
-  register: prometheus_config_overrides_result
-  run_once: true
+  register: prometheus_host_config_overrides_result
+  # NOTE(yoctozepto): this cannot be run_once
+  run_once: false
 
 - name: Copying over prometheus config file
   become: true
   vars:
     service: "{{ prometheus_services['prometheus-server'] }}"
-    overrides: "{{ prometheus_config_overrides_result.files | map(attribute='path') | list }}"
+    common_overrides: "{{ prometheus_common_config_overrides_result.files | map(attribute='path') | list }}"
+    host_overrides: "{{ prometheus_host_config_overrides_result.files | map(attribute='path') | list }}"
   merge_yaml:
-    sources: "{{ [prometheus_config_file] + overrides }}"
+    sources: "{{ [item] + common_overrides + host_overrides }}"
     dest: "{{ node_config_directory }}/prometheus-server/prometheus.yml"
     mode: "0660"
     extend_lists: true