From 01679e56a35c6de4977b17f7d792181bab2baafb Mon Sep 17 00:00:00 2001 From: Zeeshan Ali Shah Date: Thu, 31 Mar 2022 13:05:59 +0500 Subject: [PATCH] Enable multiple arbitrary config-flags The config flags are a comma-seperated list of keys and values. This enables an operator to pass arbitrary configuration into the masakari-monitors configuration. Closes-Bug: #1941650 Change-Id: I3571bf7dfcb092ce5d04f439806e9a25465e16c5 --- src/config.yaml | 8 ++++++++ src/lib/charm/openstack/masakari_monitors.py | 6 ++++++ src/templates/masakarimonitors.conf | 3 +++ unit_tests/test_lib_charm_openstack_masakari_monitors.py | 8 ++++++++ 4 files changed, 25 insertions(+) diff --git a/src/config.yaml b/src/config.yaml index 8eb4ebc..1d9e207 100644 --- a/src/config.yaml +++ b/src/config.yaml @@ -3,3 +3,11 @@ options: type: string default: RegionOne description: OpenStack Region + config-flags: + type: string + default: + description: | + Setting multiple arbitrary config variables and these + will be converted into dictionary and masakarimonitors.conf will be populated + accordingly. This will enable an operator to have the flexibility for having + multiple arbitrary config flags. diff --git a/src/lib/charm/openstack/masakari_monitors.py b/src/lib/charm/openstack/masakari_monitors.py index 719deaa..0f47aa7 100644 --- a/src/lib/charm/openstack/masakari_monitors.py +++ b/src/lib/charm/openstack/masakari_monitors.py @@ -59,3 +59,9 @@ class MasakariMonitorsCharm(charms_openstack.charm.OpenStackCharm): def install(self): super(MasakariMonitorsCharm, self).install() + + # convert comma seprated list of config_flags into a dictionary + @charms_openstack.adapters.config_property + def user_config_flags(self): + return dict(map(lambda x: x.split('='), + self.config.get('config-flags').split(', '))) diff --git a/src/templates/masakarimonitors.conf b/src/templates/masakarimonitors.conf index 2fac4f7..74f1fd1 100644 --- a/src/templates/masakarimonitors.conf +++ b/src/templates/masakarimonitors.conf @@ -19,6 +19,9 @@ password = {{ identity_credentials.credentials_password }} project_domain_id = {{ identity_credentials.credentials_project_domain_id }} user_domain_id = {{ identity_credentials.credentials_user_domain_id }} region = {{ options.region }} +{% for key, value in options.config_flags.items() -%} +{{ key }} = {{ value }} +{% endfor -%} [callback] [cors] [healthcheck] diff --git a/unit_tests/test_lib_charm_openstack_masakari_monitors.py b/unit_tests/test_lib_charm_openstack_masakari_monitors.py index bee9687..45e45ff 100644 --- a/unit_tests/test_lib_charm_openstack_masakari_monitors.py +++ b/unit_tests/test_lib_charm_openstack_masakari_monitors.py @@ -51,3 +51,11 @@ class TestMasakariMonitorsCharm(Helper): c.request_credentials() keystone_relation.request_credentials.assert_called_once_with( 'masakari-monitors', project='services') + + def test_user_config_flags(self): + charm = self.\ + _patch_config_and_charm({'config-flags': 'k1=v1, k2=v2'}) + config = charm.user_config_flags() + # Add check here that configuration is as expected. + self.assertEqual(config.get('k1'), "v1") + self.assertEqual(config.get('k2'), "v2")