From f77c67fa0ee613a505f4abd2c8120d7225e94595 Mon Sep 17 00:00:00 2001
From: Kien Nguyen <kiennt65@viettel.com.vn>
Date: Thu, 24 Jan 2019 17:38:13 +0700
Subject: [PATCH] [Vitrage] Add Prometheus datasource configuration

Vitrage supports new Prometheus configuration now [1].
Kolla should allow user to configure this configuration
file.

[1] https://review.openstack.org/#/c/630514/

Change-Id: I84072d90b0342c6d460ee733ba646a5fb787faa9
---
 ansible/roles/vitrage/handlers/main.yml       |  2 ++
 ansible/roles/vitrage/tasks/config.yml        | 24 +++++++++++++++----
 ansible/roles/vitrage/tasks/precheck.yml      |  8 +++++++
 .../vitrage/templates/vitrage-graph.json.j2   |  8 ++++++-
 .../roles/vitrage/templates/vitrage.conf.j2   |  5 ++++
 5 files changed, 42 insertions(+), 5 deletions(-)

diff --git a/ansible/roles/vitrage/handlers/main.yml b/ansible/roles/vitrage/handlers/main.yml
index 06ddd25a11..5cbb6d0562 100644
--- a/ansible/roles/vitrage/handlers/main.yml
+++ b/ansible/roles/vitrage/handlers/main.yml
@@ -57,6 +57,7 @@
     vitrage_conf: "{{ vitrage_confs.results|selectattr('item.key', 'equalto', service_name)|first }}"
     policy_overwriting: "{{ vitrage_policy_overwriting.results|selectattr('item.key', 'equalto', service_name)|first }}"
     vitrage_graph_container: "{{ check_vitrage_containers.results|selectattr('item.key', 'equalto', service_name)|first }}"
+    vitrage_prometheus_conf: "{{ vitrage_prometheus_conf.results|selectattr('item.key', 'equalto', service_name)|first }}"
   become: true
   kolla_docker:
     action: "recreate_or_restart_container"
@@ -73,6 +74,7 @@
       or vitrage_conf.changed | bool
       or policy_overwriting.changed | bool
       or vitrage_graph_container.changed | bool
+      or vitrage_prometheus_conf.changed | bool
 
 - name: Restart vitrage-ml container
   vars:
diff --git a/ansible/roles/vitrage/tasks/config.yml b/ansible/roles/vitrage/tasks/config.yml
index 42c739af11..07ff0de082 100644
--- a/ansible/roles/vitrage/tasks/config.yml
+++ b/ansible/roles/vitrage/tasks/config.yml
@@ -33,7 +33,7 @@
   template:
     src: "{{ item.key }}.json.j2"
     dest: "{{ node_config_directory }}/{{ item.key }}/config.json"
-    mode: "0770"
+    mode: "0660"
   become: true
   register: vitrage_config_jsons
   when:
@@ -58,7 +58,7 @@
       - "{{ node_config_directory }}/config/vitrage/{{ item.key }}.conf"
       - "{{ node_config_directory }}/config/vitrage/{{ inventory_hostname }}/vitrage.conf"
     dest: "{{ node_config_directory }}/{{ item.key }}/vitrage.conf"
-    mode: "0770"
+    mode: "0660"
   become: true
   register: vitrage_confs
   when:
@@ -75,18 +75,34 @@
   template:
     src: "wsgi-vitrage.conf.j2"
     dest: "{{ node_config_directory }}/{{ item }}/wsgi-vitrage.conf"
-    mode: "0770"
+    mode: "0660"
   become: true
   with_items:
     - "vitrage-api"
   notify:
     - Restart vitrage-api container
 
+- name: Copying over prometheus_conf.yml file for service
+  vars:
+    service: "{{ vitrage_services['vitrage-graph'] }}"
+  template:
+    src: "{{ node_custom_config }}/vitrage/prometheus_conf.yaml"
+    dest: "{{ node_config_directory }}/vitrage-graph/prometheus_conf.yaml"
+    mode: "0660"
+  become: true
+  register: vitrage_prometheus_conf
+  when:
+    - enable_vitrage_prometheus_datasource | bool
+    - inventory_hostname in groups[service.group]
+    - service.enabled | bool
+  notify:
+    - Restart vitrage-graph container
+
 - name: Copying over existing policy file
   template:
     src: "{{ vitrage_policy_file_path }}"
     dest: "{{ node_config_directory }}/{{ item.key }}/{{ vitrage_policy_file }}"
-    mode: "0770"
+    mode: "0660"
   become: true
   register: vitrage_policy_overwriting
   when:
diff --git a/ansible/roles/vitrage/tasks/precheck.yml b/ansible/roles/vitrage/tasks/precheck.yml
index e91ab4d8d8..63f52c2e7c 100644
--- a/ansible/roles/vitrage/tasks/precheck.yml
+++ b/ansible/roles/vitrage/tasks/precheck.yml
@@ -14,3 +14,11 @@
   when:
     - container_facts['vitrage_api'] is not defined
     - inventory_hostname in groups['vitrage-api']
+
+- name: Checking custom prometheus_conf.yaml exists
+  local_action: stat_path="{{ node_custom_config }}/vitrage/prometheus_conf.yaml"
+  register: result
+  run_once: true
+  failed_when: not result.stat.exists
+  when:
+    - enable_vitrage_prometheus_datasource | bool
diff --git a/ansible/roles/vitrage/templates/vitrage-graph.json.j2 b/ansible/roles/vitrage/templates/vitrage-graph.json.j2
index 9f576f3e77..59b350712e 100644
--- a/ansible/roles/vitrage/templates/vitrage-graph.json.j2
+++ b/ansible/roles/vitrage/templates/vitrage-graph.json.j2
@@ -6,7 +6,13 @@
             "dest": "/etc/vitrage/vitrage.conf",
             "owner": "vitrage",
             "perm": "0644"
-        }{% if vitrage_policy_file is defined %},
+        }{% if enable_vitrage_prometheus_datasource | bool %},
+        {
+            "source": "{{ container_config_directory }}/prometheus_conf.yaml",
+            "dest": "/etc/vitrage/prometheus_conf.yaml",
+            "owner": "vitrage",
+            "perm": "0644"
+        }{% endif %}{% if vitrage_policy_file is defined %},
         {
             "source": "{{ container_config_directory }}/{{ vitrage_policy_file }}",
             "dest": "/etc/vitrage/{{ vitrage_policy_file }}",
diff --git a/ansible/roles/vitrage/templates/vitrage.conf.j2 b/ansible/roles/vitrage/templates/vitrage.conf.j2
index dd87af560c..def9f284e0 100644
--- a/ansible/roles/vitrage/templates/vitrage.conf.j2
+++ b/ansible/roles/vitrage/templates/vitrage.conf.j2
@@ -82,3 +82,8 @@ trace_sqlalchemy = true
 hmac_keys = {{ osprofiler_secret }}
 connection_string = {{ osprofiler_backend_connection_string }}
 {% endif %}
+
+{% if enable_vitrage_prometheus_datasource | bool %}
+[prometheus]
+config_file = /etc/vitrage/prometheus_conf.yaml
+{% endif %}