From 3058b5bcd7eb4bcb9632fa0ec96ff7aebfd1922c Mon Sep 17 00:00:00 2001
From: Pierre Riteau <pierre@stackhpc.com>
Date: Thu, 7 Jul 2022 21:45:38 +0200
Subject: [PATCH] Support configuring the CloudKitty fetcher

Change-Id: I6d9ee98912120b9ece60ee22c7b0ad71dab8ed30
---
 ansible/roles/cloudkitty/defaults/main.yml        |  7 +++++++
 .../roles/cloudkitty/templates/cloudkitty.conf.j2 | 15 ++++++++++-----
 doc/source/reference/rating/cloudkitty-guide.rst  | 11 +++++++++++
 .../cloudkitty-fetcher-062e109d909449b0.yaml      |  5 +++++
 4 files changed, 33 insertions(+), 5 deletions(-)
 create mode 100644 releasenotes/notes/cloudkitty-fetcher-062e109d909449b0.yaml

diff --git a/ansible/roles/cloudkitty/defaults/main.yml b/ansible/roles/cloudkitty/defaults/main.yml
index e828edf9d..976e59238 100644
--- a/ansible/roles/cloudkitty/defaults/main.yml
+++ b/ansible/roles/cloudkitty/defaults/main.yml
@@ -174,6 +174,13 @@ cloudkitty_prometheus_url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | p
 # This means, HTTPS connections without validating the certificate used by prometheus.
 cloudkitty_prometheus_insecure_connections: false
 
+####################
+# Fetcher
+####################
+# Valid options are 'keystone', 'source', 'gnocchi', 'monasca' or 'prometheus'.
+# The default value is 'keystone', which matches the default in CloudKitty.
+cloudkitty_fetcher_backend: "keystone"
+
 ####################
 # Keystone
 ####################
diff --git a/ansible/roles/cloudkitty/templates/cloudkitty.conf.j2 b/ansible/roles/cloudkitty/templates/cloudkitty.conf.j2
index cb04b3b81..d597780a6 100644
--- a/ansible/roles/cloudkitty/templates/cloudkitty.conf.j2
+++ b/ansible/roles/cloudkitty/templates/cloudkitty.conf.j2
@@ -56,11 +56,6 @@ collector = {{ cloudkitty_collector_backend }}
 metrics_conf = /etc/cloudkitty/{{ cloudkitty_custom_metrics_yaml_file }}
 {% endif %}
 
-[fetcher_keystone]
-keystone_version = 3
-auth_section = keystone_authtoken
-region_name = {{ openstack_region_name }}
-
 {% if cloudkitty_collector_backend == "gnocchi" %}
 [collector_gnocchi]
 auth_section = keystone_authtoken
@@ -84,6 +79,16 @@ cafile = {{ cloudkitty_prometheus_cafile }}
 insecure = {{ cloudkitty_prometheus_insecure_connections }}
 {% endif %}
 
+[fetcher]
+backend = {{ cloudkitty_fetcher_backend }}
+
+{% if cloudkitty_fetcher_backend == "keystone" %}
+[fetcher_keystone]
+keystone_version = 3
+auth_section = keystone_authtoken
+region_name = {{ openstack_region_name }}
+{% endif %}
+
 [api]
 host_ip = {{ api_interface_address }}
 port = {{ cloudkitty_api_port }}
diff --git a/doc/source/reference/rating/cloudkitty-guide.rst b/doc/source/reference/rating/cloudkitty-guide.rst
index b74338d01..df5f79aa3 100644
--- a/doc/source/reference/rating/cloudkitty-guide.rst
+++ b/doc/source/reference/rating/cloudkitty-guide.rst
@@ -51,6 +51,17 @@ Alternatively, to use the Monasca collector backend:
 
    cloudkitty_collector_backend: monasca
 
+CloudKitty Fetcher Backend
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+CloudKitty natively supports multiple fetcher backends.
+
+By default Kolla Ansible uses the ``keystone`` backend. This can be changed
+using the ``cloudkitty_fetcher_backend`` option.
+
+You will need to provide extra configuration for non-default fetchers in
+``/etc/kolla/config/cloudkitty.conf``.
+
 Cloudkitty Storage Backend
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 
diff --git a/releasenotes/notes/cloudkitty-fetcher-062e109d909449b0.yaml b/releasenotes/notes/cloudkitty-fetcher-062e109d909449b0.yaml
new file mode 100644
index 000000000..3ee3b554a
--- /dev/null
+++ b/releasenotes/notes/cloudkitty-fetcher-062e109d909449b0.yaml
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Adds support for configuring the CloudKitty fetcher using
+    ``cloudkitty_fetcher_backend``.
-- 
GitLab