| From 346f46d882416c45b9c3b12b4da85da2cbd5cdbb Mon Sep 17 00:00:00 2001 |
| From: Sam Kunz <samkunz@google.com> |
| Date: Thu, 23 Sep 2021 23:35:02 +0000 |
| Subject: [PATCH] [policies] Add package manager for COS. |
| |
| --- |
| sos/policies/distros/cos.py | 4 +++ |
| sos/policies/package_managers/cos.py | 39 ++++++++++++++++++++++++++++ |
| 2 files changed, 43 insertions(+) |
| create mode 100644 sos/policies/package_managers/cos.py |
| |
| diff --git a/sos/policies/distros/cos.py b/sos/policies/distros/cos.py |
| index 7b03b9d9..b17aa444 100644 |
| --- a/sos/policies/distros/cos.py |
| +++ b/sos/policies/distros/cos.py |
| @@ -10,6 +10,7 @@ |
| |
| from sos.report.plugins import CosPlugin |
| from sos.policies.distros import LinuxPolicy |
| +from sos.policies.package_managers.cos import CosPackageManager |
| |
| |
| def _blank_or_comment(line): |
| @@ -42,6 +43,9 @@ class CosPolicy(LinuxPolicy): |
| probe_runtime=probe_runtime) |
| self.valid_subclasses += [CosPlugin] |
| |
| + self.package_manager = CosPackageManager(chroot=sysroot, |
| + remote_exec=remote_exec) |
| + |
| @classmethod |
| def check(cls, remote=''): |
| if remote: |
| diff --git a/sos/policies/package_managers/cos.py b/sos/policies/package_managers/cos.py |
| new file mode 100644 |
| index 00000000..664e77c6 |
| --- /dev/null |
| +++ b/sos/policies/package_managers/cos.py |
| @@ -0,0 +1,39 @@ |
| +# 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 json |
| + |
| +from sos.policies.package_managers import PackageManager |
| + |
| + |
| +class CosPackageManager(PackageManager): |
| + """Subclass for Container-Optimized OS (COS). |
| + |
| + By design, COS does not have a package manager. However, package |
| + information can be aquired by parsing the contents of the file |
| + '/etc/cos-package-info.json'. |
| + """ |
| + |
| + def get_pkg_list(self): |
| + """Returns dictionary of packages. |
| + |
| + This COS specific method only returns packages installed on the root |
| + file system. |
| + """ |
| + if len(self.packages): |
| + return self.packages |
| + |
| + with open("/etc/cos-package-info.json") as f: |
| + data = json.load(f) |
| + for p in data["installedPackages"]: |
| + self.packages[p["name"]] = { |
| + "name": p["name"], |
| + "version": p['ebuild_version'].split('-')[0], |
| + } |
| + |
| + return self.packages |
| -- |
| 2.31.0 |
| |