From 22a47e47becbc71e7a28b0c7a4147072c6b36c9e Mon Sep 17 00:00:00 2001 From: "Muneeb H. Jan" Date: Thu, 30 Jan 2025 11:58:11 +0100 Subject: [PATCH 1/5] [Feat] Allow multiple globalmon instances per host --- .../ansible/project/roles/globalmon/defaults/main.yml | 9 +++++---- cloudmon/ansible/project/roles/globalmon/tasks/main.yml | 2 +- cloudmon/ansible/project/start_globalmon.yaml | 2 +- cloudmon/ansible/project/stop_globalmon.yaml | 2 +- cloudmon/plugin/globalmon.py | 3 +++ 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/cloudmon/ansible/project/roles/globalmon/defaults/main.yml b/cloudmon/ansible/project/roles/globalmon/defaults/main.yml index 880ecf5..85da6b3 100644 --- a/cloudmon/ansible/project/roles/globalmon/defaults/main.yml +++ b/cloudmon/ansible/project/roles/globalmon/defaults/main.yml @@ -7,20 +7,21 @@ distro_lookup_path: globalmon_os_user: "cloudmon" globalmon_os_group: "cloudmon" -globalmon_systemd_service_name: "cloudmon-globalmon.service" +globalmon_suffix: "prod" +globalmon_systemd_service_name: "cloudmon-globalmon_{{ globalmon_suffix }}.service" globalmon_systemd_unit_path: "{{ ('/etc/systemd/system/'+ globalmon_systemd_service_name) }}" globalmon_image: "quay.io/stackmon/globalmon" globalmon_config_dir: "/etc/cloudmon" -globalmon_config_file_name: "cloudmon-globalmon.yaml" +globalmon_config_file_name: "cloudmon-globalmon_{{ globalmon_suffix }}.yaml" globalmon_config_path: "{{ globalmon_config_dir }}/{{ globalmon_config_file_name }}" -globalmon_log_dir: "/var/log/globalmon" +globalmon_log_dir: "/var/log/globalmon/{{ globalmon_suffix }}" globalmon_secure_config_file_name: "cloudmon-globalmon-secure.yaml" globalmon_secure_config_path: "{{ globalmon_config_dir }}/{{ globalmon_secure_config_file_name }}" globalmon_env_file_name: "globalmon_env" globalmon_env_path: "{{ globalmon_config_dir }}/{{ globalmon_env_file_name }}" # globalmon_config: # globalmon_secure_config: -globalmon_container_name: "cloudmon_globalmon" +globalmon_container_name: "cloudmon_globalmon_{{ globalmon_suffix }}" container_command: "podman" container_runtime: "/usr/bin/{{ container_command }}" diff --git a/cloudmon/ansible/project/roles/globalmon/tasks/main.yml b/cloudmon/ansible/project/roles/globalmon/tasks/main.yml index 1b4d624..da3ad9f 100644 --- a/cloudmon/ansible/project/roles/globalmon/tasks/main.yml +++ b/cloudmon/ansible/project/roles/globalmon/tasks/main.yml @@ -53,7 +53,7 @@ mode: "{{ item.mode | default(omit) }}" loop: - { dest: "{{ globalmon_config_dir }}", mode: "0755" } - - { dest: "{{ globalmon_log_dir }}", mode: "0777" } + - { dest: "{{ globalmon_log_dir }}", mode: "0766" } - name: Write env become: true diff --git a/cloudmon/ansible/project/start_globalmon.yaml b/cloudmon/ansible/project/start_globalmon.yaml index 5d124ee..f55545b 100644 --- a/cloudmon/ansible/project/start_globalmon.yaml +++ b/cloudmon/ansible/project/start_globalmon.yaml @@ -7,5 +7,5 @@ tasks: - name: Start globalmon ansible.builtin.service: - name: "cloudmon-globalmon" + name: "{{ globalmon_service_name }}" state: "started" diff --git a/cloudmon/ansible/project/stop_globalmon.yaml b/cloudmon/ansible/project/stop_globalmon.yaml index 6eb05e0..81951ee 100644 --- a/cloudmon/ansible/project/stop_globalmon.yaml +++ b/cloudmon/ansible/project/stop_globalmon.yaml @@ -7,5 +7,5 @@ tasks: - name: Stop globalmon ansible.builtin.service: - name: "cloudmon-globalmon" + name: "{{ globalmon_service_name }}" state: "stopped" diff --git a/cloudmon/plugin/globalmon.py b/cloudmon/plugin/globalmon.py index 6764a9f..6140bc7 100644 --- a/cloudmon/plugin/globalmon.py +++ b/cloudmon/plugin/globalmon.py @@ -157,6 +157,7 @@ def provision(self, options): globalmon_secure_cfg = dict(clouds=clouds_creds) extravars = dict( + globalmon_suffix = environment, globalmon_group_name=globalmon_config.ansible_group_name, globalmon_image=globalmon_config.image, globalmon_config_dir="/home/ubuntu", @@ -184,6 +185,7 @@ def stop(self, options): globalmon_config.zone, ) extravars = dict( + globalmon_service_name=f"cloudmon-globalmon_{globalmon_config.environment}", globalmon_group_name=globalmon_config.ansible_group_name, ) r = ansible_runner.run( @@ -205,6 +207,7 @@ def start(self, options): globalmon_config.zone, ) extravars = dict( + globalmon_service_name=f"cloudmon-globalmon_{globalmon_config.environment}", globalmon_group_name=globalmon_config.ansible_group_name, ) r = ansible_runner.run( From b83b266075b7abca28a6a503e0fbadd513be55ca Mon Sep 17 00:00:00 2001 From: "Muneeb H. Jan" Date: Thu, 30 Jan 2025 14:40:15 +0100 Subject: [PATCH 2/5] [Style] Fix linting --- cloudmon/plugin/globalmon.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cloudmon/plugin/globalmon.py b/cloudmon/plugin/globalmon.py index 6140bc7..c07af00 100644 --- a/cloudmon/plugin/globalmon.py +++ b/cloudmon/plugin/globalmon.py @@ -157,7 +157,7 @@ def provision(self, options): globalmon_secure_cfg = dict(clouds=clouds_creds) extravars = dict( - globalmon_suffix = environment, + globalmon_suffix=environment, globalmon_group_name=globalmon_config.ansible_group_name, globalmon_image=globalmon_config.image, globalmon_config_dir="/home/ubuntu", @@ -184,8 +184,9 @@ def stop(self, options): "Stopping Globalmon in monitoring zone %s", globalmon_config.zone, ) + environment = globalmon_config.environment extravars = dict( - globalmon_service_name=f"cloudmon-globalmon_{globalmon_config.environment}", + globalmon_service_name=f"cloudmon-globalmon_{environment}", globalmon_group_name=globalmon_config.ansible_group_name, ) r = ansible_runner.run( @@ -206,8 +207,9 @@ def start(self, options): "Starting Globalmon in monitoring zone %s", globalmon_config.zone, ) + environment = globalmon_config.environment extravars = dict( - globalmon_service_name=f"cloudmon-globalmon_{globalmon_config.environment}", + globalmon_service_name=f"cloudmon-globalmon_{environment}", globalmon_group_name=globalmon_config.ansible_group_name, ) r = ansible_runner.run( From 7899c6bb9b2aca11fd9e4530aa1906514530798c Mon Sep 17 00:00:00 2001 From: "Muneeb H. Jan" Date: Mon, 3 Feb 2025 11:22:51 +0100 Subject: [PATCH 3/5] [Fix] Restore permission --- cloudmon/ansible/project/roles/globalmon/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloudmon/ansible/project/roles/globalmon/tasks/main.yml b/cloudmon/ansible/project/roles/globalmon/tasks/main.yml index da3ad9f..1b4d624 100644 --- a/cloudmon/ansible/project/roles/globalmon/tasks/main.yml +++ b/cloudmon/ansible/project/roles/globalmon/tasks/main.yml @@ -53,7 +53,7 @@ mode: "{{ item.mode | default(omit) }}" loop: - { dest: "{{ globalmon_config_dir }}", mode: "0755" } - - { dest: "{{ globalmon_log_dir }}", mode: "0766" } + - { dest: "{{ globalmon_log_dir }}", mode: "0777" } - name: Write env become: true From 8386237c09464c89fd2a941b67ea637925128690 Mon Sep 17 00:00:00 2001 From: "Muneeb H. Jan" Date: Mon, 3 Feb 2025 11:23:19 +0100 Subject: [PATCH 4/5] [Feat] Use combination of zone and env as config key --- cloudmon/plugin/globalmon.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/cloudmon/plugin/globalmon.py b/cloudmon/plugin/globalmon.py index c07af00..f5d98fb 100644 --- a/cloudmon/plugin/globalmon.py +++ b/cloudmon/plugin/globalmon.py @@ -65,13 +65,15 @@ def process_config(self): def process_plugin_entry(self, plugin_ref, matrix_entry, plugin): env_name = matrix_entry.env zone = matrix_entry.monitoring_zone - globalmon_config = self.globalmon_configs.setdefault( - zone, GlobalmonConfig()) + key = f"{zone}_{env_name}" # Unique key per env + zone + + globalmon_config = self.globalmon_configs.setdefault(key, GlobalmonConfig()) globalmon_config.environment = env_name globalmon_config.zone = zone ansible_group_name = plugin.globalmons_inventory_group_name globalmon_config.ansible_group_name = ansible_group_name globalmon_config.image = plugin_ref.image + config = None # Read config file @@ -89,21 +91,15 @@ def process_plugin_entry(self, plugin_ref, matrix_entry, plugin): raise RuntimeError("Globalmon config not found. Please either use --config-dir and relative path for globalmon config in cloudmon config OR use --insecure option with full path of globalmon config in cloudmon config") # noqa globalmon_config.services = config["services"] - globalmon_config.watch_clouds[env_name] = dict( - # which services services=globalmon_config.services, - # how cloud is named cloud=plugin.cloud_name, ) def provision(self, options): - - for _, globalmon_config in self.globalmon_configs.items(): - self.log.info( - "Provisioning Globalmon in monitoring zone %s", - globalmon_config.zone, - ) + for key, globalmon_config in self.globalmon_configs.items(): + self.log.info("Provisioning Globalmon in monitoring zone %s for env %s", + globalmon_config.zone, globalmon_config.environment) statsd_group_name = self.config.model.get_monitoring_zone_by_name( globalmon_config.zone @@ -176,7 +172,8 @@ def provision(self, options): verbosity=3, ) if r.rc != 0: - raise RuntimeError("Error provisioning Globalmon") + raise RuntimeError(f"Error provisioning Globalmon in {zone} for {environment}") + def stop(self, options): for _, globalmon_config in self.globalmon_configs.items(): From 9ac0d17f0f195df8cac203befeb5a8a4919c5c9b Mon Sep 17 00:00:00 2001 From: "Muneeb H. Jan" Date: Thu, 6 Feb 2025 11:14:25 +0100 Subject: [PATCH 5/5] [Style] Fix linting errors --- cloudmon/plugin/globalmon.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/cloudmon/plugin/globalmon.py b/cloudmon/plugin/globalmon.py index f5d98fb..2421016 100644 --- a/cloudmon/plugin/globalmon.py +++ b/cloudmon/plugin/globalmon.py @@ -66,8 +66,9 @@ def process_plugin_entry(self, plugin_ref, matrix_entry, plugin): env_name = matrix_entry.env zone = matrix_entry.monitoring_zone key = f"{zone}_{env_name}" # Unique key per env + zone - - globalmon_config = self.globalmon_configs.setdefault(key, GlobalmonConfig()) + + globalmon_config = self.globalmon_configs.setdefault( + key, GlobalmonConfig()) globalmon_config.environment = env_name globalmon_config.zone = zone ansible_group_name = plugin.globalmons_inventory_group_name @@ -98,8 +99,10 @@ def process_plugin_entry(self, plugin_ref, matrix_entry, plugin): def provision(self, options): for key, globalmon_config in self.globalmon_configs.items(): - self.log.info("Provisioning Globalmon in monitoring zone %s for env %s", - globalmon_config.zone, globalmon_config.environment) + self.log.info( + "Provisioning Globalmon in monitoring zone %s for env %s", + globalmon_config.zone, + globalmon_config.environment) statsd_group_name = self.config.model.get_monitoring_zone_by_name( globalmon_config.zone @@ -172,8 +175,8 @@ def provision(self, options): verbosity=3, ) if r.rc != 0: - raise RuntimeError(f"Error provisioning Globalmon in {zone} for {environment}") - + raise RuntimeError( + f"Error provisioning Globalmon in {zone} for {environment}") # noqa def stop(self, options): for _, globalmon_config in self.globalmon_configs.items():