Add new plugin aap_containerized
Resolves: RHEL-75977 Signed-off-by: Jan Jansky <jjansky@redhat.com>
This commit is contained in:
parent
3083db955b
commit
96c98ac225
143
sos-RHEL-75977-new-plugin-aap_containerized.patch
Normal file
143
sos-RHEL-75977-new-plugin-aap_containerized.patch
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
From 8fb859dea4366ac446fab1855ce3a163e6312d25 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Nagoor Shaik <nshaik@redhat.com>
|
||||||
|
Date: Thu, 2 Jan 2025 10:05:24 +0530
|
||||||
|
Subject: [PATCH] added new AAP Containerized plugin
|
||||||
|
|
||||||
|
Signed-off-by: Nagoor Shaik <nshaik@redhat.com>
|
||||||
|
---
|
||||||
|
sos/report/plugins/aap_containerized.py | 123 ++++++++++++++++++++++++
|
||||||
|
1 file changed, 123 insertions(+)
|
||||||
|
create mode 100644 sos/report/plugins/aap_containerized.py
|
||||||
|
|
||||||
|
diff --git a/sos/report/plugins/aap_containerized.py b/sos/report/plugins/aap_containerized.py
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..543104d3
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/sos/report/plugins/aap_containerized.py
|
||||||
|
@@ -0,0 +1,123 @@
|
||||||
|
+# Copyright (c) 2025 Nagoor Shaik <nshaik@redhat.com>
|
||||||
|
+
|
||||||
|
+# This file is part of the sos project: https://github.com/sosreport/sos
|
||||||
|
+#
|
||||||
|
+# This copyrighted material is made available to anyone wishing to use,
|
||||||
|
+# modify, copy, or redistribute it subject to the terms and conditions of
|
||||||
|
+# version 2 of the GNU General Public License.
|
||||||
|
+#
|
||||||
|
+# See the LICENSE file in the source distribution for further information.
|
||||||
|
+
|
||||||
|
+import os
|
||||||
|
+from sos.report.plugins import Plugin, RedHatPlugin, PluginOpt
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+class AAPContainerized(Plugin, RedHatPlugin):
|
||||||
|
+ """Collects details about AAP Containerized setup
|
||||||
|
+ under a user's home directory"""
|
||||||
|
+
|
||||||
|
+ short_desc = "AAP Containerized Setup"
|
||||||
|
+ plugin_name = "aap_containerized"
|
||||||
|
+ profiles = ("sysmgmt", "ansible",)
|
||||||
|
+ packages = ("podman",)
|
||||||
|
+
|
||||||
|
+ option_list = [
|
||||||
|
+ PluginOpt(
|
||||||
|
+ "username",
|
||||||
|
+ default="",
|
||||||
|
+ val_type=str,
|
||||||
|
+ desc="Username that was used to setup "
|
||||||
|
+ "AAP containerized installation"
|
||||||
|
+ ),
|
||||||
|
+ PluginOpt(
|
||||||
|
+ "directory",
|
||||||
|
+ default="",
|
||||||
|
+ val_type=str,
|
||||||
|
+ desc="Absolute path to AAP containers volume directory. "
|
||||||
|
+ "Defaults to 'aap' under provided user's home directory"
|
||||||
|
+ )
|
||||||
|
+ ]
|
||||||
|
+
|
||||||
|
+ def setup(self):
|
||||||
|
+ # Check if username is passed as argument
|
||||||
|
+ username = self.get_option("username")
|
||||||
|
+ if not username:
|
||||||
|
+ self._log_error("Username is mandatory to collect "
|
||||||
|
+ "AAP containerized setup logs")
|
||||||
|
+ return
|
||||||
|
+
|
||||||
|
+ # Grab aap installation directory under user's home
|
||||||
|
+ if not self.get_option("directory"):
|
||||||
|
+ user_home_directory = os.path.expanduser(f"~{username}")
|
||||||
|
+ aap_directory_name = self.path_join(user_home_directory, "aap")
|
||||||
|
+ else:
|
||||||
|
+ aap_directory_name = self.get_option("directory")
|
||||||
|
+
|
||||||
|
+ # Don't collect cert and key files from the installation directory
|
||||||
|
+ if self.path_exists(aap_directory_name):
|
||||||
|
+ forbidden_paths = [
|
||||||
|
+ self.path_join(aap_directory_name, path)
|
||||||
|
+ for path in [
|
||||||
|
+ "containers",
|
||||||
|
+ "tls",
|
||||||
|
+ "controller/etc/*.cert",
|
||||||
|
+ "controller/etc/*.key",
|
||||||
|
+ "eda/etc/*.cert",
|
||||||
|
+ "eda/etc/*.key",
|
||||||
|
+ "gateway/etc/*.cert",
|
||||||
|
+ "gateway/etc/*.key",
|
||||||
|
+ "hub/etc/*.cert",
|
||||||
|
+ "hub/etc/*.key",
|
||||||
|
+ "hub/etc/keys/*.pem",
|
||||||
|
+ "postgresql/*.crt",
|
||||||
|
+ "postgresql/*.key",
|
||||||
|
+ "receptor/etc/*.crt",
|
||||||
|
+ "receptor/etc/*.key",
|
||||||
|
+ "receptor/etc/*.pem",
|
||||||
|
+ "redis/*.crt",
|
||||||
|
+ "redis/*.key",
|
||||||
|
+ ]
|
||||||
|
+ ]
|
||||||
|
+ self.add_forbidden_path(forbidden_paths)
|
||||||
|
+ self.add_copy_spec(aap_directory_name)
|
||||||
|
+ else:
|
||||||
|
+ self._log_error(f"Directory {aap_directory_name} does not exist "
|
||||||
|
+ "or invalid absolute path provided")
|
||||||
|
+
|
||||||
|
+ # Gather output of following podman commands as user
|
||||||
|
+ podman_commands = [
|
||||||
|
+ (f"su - {username} -c 'podman info --debug'", "podman_info"),
|
||||||
|
+ (f"su - {username} -c 'podman ps -a --format json'",
|
||||||
|
+ "podman_ps_all_json"),
|
||||||
|
+ ]
|
||||||
|
+
|
||||||
|
+ for command, filename in podman_commands:
|
||||||
|
+ self.add_cmd_output(command, suggest_filename=filename)
|
||||||
|
+
|
||||||
|
+ # Collect AAP container names
|
||||||
|
+ aap_containers = self._get_aap_container_names(username)
|
||||||
|
+
|
||||||
|
+ # Copy podman container log files in plugin sub directory
|
||||||
|
+ # under aap_containers_log
|
||||||
|
+ for container in aap_containers:
|
||||||
|
+ log_file = f"{container}.log"
|
||||||
|
+ self.add_cmd_output(
|
||||||
|
+ f"su - {username} -c 'podman logs {container}'",
|
||||||
|
+ suggest_filename=f"{log_file}",
|
||||||
|
+ subdir="aap_containers_log"
|
||||||
|
+ )
|
||||||
|
+
|
||||||
|
+ # Function to fetch podman container names
|
||||||
|
+ def _get_aap_container_names(self, username):
|
||||||
|
+ try:
|
||||||
|
+ cmd = f"su - {username} -c 'podman ps -a --format {{{{.Names}}}}'"
|
||||||
|
+ cmd_out = self.exec_cmd(cmd)
|
||||||
|
+ return cmd_out['output'].strip().split("\n")
|
||||||
|
+ except Exception:
|
||||||
|
+ self._log_error("Error retrieving Podman containers")
|
||||||
|
+ return []
|
||||||
|
+
|
||||||
|
+ # Check and enable plugin on a AAP Containerized host
|
||||||
|
+ def check_enabled(self):
|
||||||
|
+ ps = self.exec_cmd("ps --noheaders axco command")
|
||||||
|
+ return "awx-manage" in ps["output"] and "aap-gateway" in ps["output"]
|
||||||
|
--
|
||||||
|
2.47.1
|
||||||
|
|
8
sos.spec
8
sos.spec
@ -5,7 +5,7 @@
|
|||||||
Summary: A set of tools to gather troubleshooting information from a system
|
Summary: A set of tools to gather troubleshooting information from a system
|
||||||
Name: sos
|
Name: sos
|
||||||
Version: 4.8.2
|
Version: 4.8.2
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
Group: Applications/System
|
Group: Applications/System
|
||||||
Source0: https://github.com/sosreport/sos/archive/%{version}/sos-%{version}.tar.gz
|
Source0: https://github.com/sosreport/sos/archive/%{version}/sos-%{version}.tar.gz
|
||||||
Source1: sos-audit-%{auditversion}.tgz
|
Source1: sos-audit-%{auditversion}.tgz
|
||||||
@ -22,6 +22,7 @@ Recommends: python3-pexpect
|
|||||||
Recommends: python3-pyyaml
|
Recommends: python3-pyyaml
|
||||||
Conflicts: vdsm < 4.40
|
Conflicts: vdsm < 4.40
|
||||||
Obsoletes: sos-collector <= 1.9
|
Obsoletes: sos-collector <= 1.9
|
||||||
|
Patch1: sos-RHEL-75977-new-plugin-aap_containerized.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Sos is a set of tools that gathers information about system
|
Sos is a set of tools that gathers information about system
|
||||||
@ -32,6 +33,7 @@ support technicians and developers.
|
|||||||
%prep
|
%prep
|
||||||
%setup -qn %{name}-%{version}
|
%setup -qn %{name}-%{version}
|
||||||
%setup -T -D -a1 -q
|
%setup -T -D -a1 -q
|
||||||
|
%patch -P 1 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%py3_build
|
%py3_build
|
||||||
@ -104,6 +106,10 @@ of the system. Currently storage and filesystem commands are audited.
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Jan 24 2025 Jan Jansky <jjansky@redhat.com> = 4.8.2-2
|
||||||
|
- Add new plugin aap_containerized
|
||||||
|
Resolves: RHEL-75977
|
||||||
|
|
||||||
* Tue Jan 07 2025 Jan Jansky <jjansky@redhat.com> = 4.8.2-1
|
* Tue Jan 07 2025 Jan Jansky <jjansky@redhat.com> = 4.8.2-1
|
||||||
- Update to 4.8.2 in RHEL 10
|
- Update to 4.8.2 in RHEL 10
|
||||||
Resolves: RHEL-72943
|
Resolves: RHEL-72943
|
||||||
|
Loading…
Reference in New Issue
Block a user