From 9baadb4c519b5e1429a7c544a3fbe6b9c051abf6 Mon Sep 17 00:00:00 2001 From: Xiaoxue Wang Date: Thu, 26 Sep 2024 14:56:25 +0800 Subject: [PATCH] feat: add spec and parser for etc_sysconfig_kernel (#4221) * feat: add spec and parser for etc_sysconfig_kernel Signed-off-by: Xiaoxue Wang * fix: test coverage to 100% for insights/specs/default.py Signed-off-by: Xiaoxue Wang --- insights/parsers/sysconfig.py | 26 +++++++++++++++++++ insights/specs/__init__.py | 1 + insights/specs/default.py | 1 + .../parsers/test_sysconfig_doc_examples.py | 11 ++++++++ .../tests/parsers/test_sysconfig_kernel.py | 22 ++++++++++++++++ insights/tests/test_specs.py | 9 +++++++ 6 files changed, 70 insertions(+) create mode 100644 insights/tests/parsers/test_sysconfig_kernel.py diff --git a/insights/parsers/sysconfig.py b/insights/parsers/sysconfig.py index 0bb1a01d40..d49d8f9e9d 100644 --- a/insights/parsers/sysconfig.py +++ b/insights/parsers/sysconfig.py @@ -36,6 +36,9 @@ KdumpSysconfig - file ``/etc/sysconfig/kdump`` ---------------------------------------------- +KernelSysconfig - file ``/etc/sysconfig/kernel`` +------------------------------------------------ + LibvirtGuestsSysconfig - file ``/etc/sysconfig/libvirt-guests`` --------------------------------------------------------------- @@ -350,6 +353,29 @@ def parse_content(self, content): setattr(self, key, self.data.get(key, '')) +@parser(Specs.sysconfig_kernel) +class KernelSysconfig(SysconfigOptions): + """ + This parser reads data from the ``/etc/sysconfig/kernel`` file. + + Typical content example:: + + # UPDATEDEFAULT specifies if new-kernel-pkg should make + # new kernels the default + UPDATEDEFAULT=yes + + # DEFAULTKERNEL specifies the default kernel package type + DEFAULTKERNEL=kernel + + Examples: + >>> kernel_syscfg.get('UPDATEDEFAULT') + 'yes' + >>> 'DEFAULTKERNEL' in kernel_syscfg + True + """ + pass + + @parser(Specs.sysconfig_libvirt_guests) class LibvirtGuestsSysconfig(SysconfigOptions): """ diff --git a/insights/specs/__init__.py b/insights/specs/__init__.py index 3c7205d46d..f45a4e2c70 100644 --- a/insights/specs/__init__.py +++ b/insights/specs/__init__.py @@ -756,6 +756,7 @@ class Specs(SpecSet): sysconfig_httpd = RegistryPoint() sysconfig_irqbalance = RegistryPoint() sysconfig_kdump = RegistryPoint() + sysconfig_kernel = RegistryPoint() sysconfig_libvirt_guests = RegistryPoint() sysconfig_memcached = RegistryPoint() sysconfig_mongod = RegistryPoint(multi_output=True) diff --git a/insights/specs/default.py b/insights/specs/default.py index 8440a895e7..94cd24508e 100644 --- a/insights/specs/default.py +++ b/insights/specs/default.py @@ -661,6 +661,7 @@ class DefaultSpecs(Specs): sys_vmbus_device_id = glob_file('/sys/bus/vmbus/devices/*/device_id') sysconfig_grub = simple_file("/etc/default/grub") # This is the file where the "/etc/sysconfig/grub" point to sysconfig_kdump = simple_file("etc/sysconfig/kdump") + sysconfig_kernel = simple_file("etc/sysconfig/kernel") sysconfig_libvirt_guests = simple_file("etc/sysconfig/libvirt-guests") sysconfig_network = simple_file("etc/sysconfig/network") sysconfig_nfs = simple_file("/etc/sysconfig/nfs") diff --git a/insights/tests/parsers/test_sysconfig_doc_examples.py b/insights/tests/parsers/test_sysconfig_doc_examples.py index e81026608c..72b050b438 100755 --- a/insights/tests/parsers/test_sysconfig_doc_examples.py +++ b/insights/tests/parsers/test_sysconfig_doc_examples.py @@ -2,6 +2,7 @@ from insights.parsers import sysconfig from insights.parsers.sysconfig import ChronydSysconfig, DockerSysconfig, DockerSysconfigStorage from insights.parsers.sysconfig import HttpdSysconfig, IrqbalanceSysconfig +from insights.parsers.sysconfig import KernelSysconfig from insights.parsers.sysconfig import LibvirtGuestsSysconfig, MemcachedSysconfig from insights.parsers.sysconfig import MongodSysconfig, NtpdSysconfig from insights.parsers.sysconfig import PrelinkSysconfig, VirtWhoSysconfig @@ -236,6 +237,15 @@ #PCSD_BIND_ADDR='::' """.strip() +KERNEL_SYSCONFIG = """ +# UPDATEDEFAULT specifies if new-kernel-pkg should make +# new kernels the default +UPDATEDEFAULT=yes + +# DEFAULTKERNEL specifies the default kernel package type +DEFAULTKERNEL=kernel +""".strip() + def test_sysconfig_doc(): env = { @@ -266,6 +276,7 @@ def test_sysconfig_doc(): 'oracleasm_syscfg': OracleasmSysconfig(context_wrap(ORACLEASM_SYSCONFIG)), 'stonith_syscfg': StonithSysconfig(context_wrap(STONITH_CONFIG)), 'pcsd_syscfg': PcsdSysconfig(context_wrap(PCSD_SYSCONFIG)), + 'kernel_syscfg': KernelSysconfig(context_wrap(KERNEL_SYSCONFIG)), } failed, total = doctest.testmod(sysconfig, globs=env) assert failed == 0 diff --git a/insights/tests/parsers/test_sysconfig_kernel.py b/insights/tests/parsers/test_sysconfig_kernel.py new file mode 100644 index 0000000000..3d4fa111cb --- /dev/null +++ b/insights/tests/parsers/test_sysconfig_kernel.py @@ -0,0 +1,22 @@ +from insights.parsers.sysconfig import KernelSysconfig +from insights.tests import context_wrap + +SYSCONFIG_KERNEL = """ +# UPDATEDEFAULT specifies if new-kernel-pkg should make +# new kernels the default +UPDATEDEFAULT=yes + +# DEFAULTKERNEL specifies the default kernel package type +DEFAULTKERNEL=kernel + +# MAKEDEBUG specifies if new-kernel-pkg should create non-default +# "debug" entries for new kernels. +MAKEDEBUG=yes +""".strip() + + +def test_sysconfig_nfs(): + result = KernelSysconfig(context_wrap(SYSCONFIG_KERNEL)) + assert result['UPDATEDEFAULT'] == 'yes' + assert result.get('DEFAULTKERNEL') == 'kernel' + assert result.get('MAKEDEBUG') == 'yes' diff --git a/insights/tests/test_specs.py b/insights/tests/test_specs.py index 89b372c959..da6a98604e 100644 --- a/insights/tests/test_specs.py +++ b/insights/tests/test_specs.py @@ -21,6 +21,7 @@ DatasourceProvider, RegistryPoint, SpecSet, command_with_args, foreach_collect, foreach_execute, glob_file, simple_command, simple_file, first_file, first_of) +from insights.specs.default import _make_rpm_formatter here = os.path.abspath(os.path.dirname(__file__)) @@ -436,3 +437,11 @@ def test_specs_collect(obfuscate): dr.COMPONENTS = defaultdict(lambda: defaultdict(set)) dr.TYPE_OBSERVERS = defaultdict(set) dr.ENABLED = defaultdict(lambda: True) + + +def test_specs_default_module_utils(): + rpm_formatter = _make_rpm_formatter([ + '"name":"%{NAME}"', + '"version":"%{VERSION}"' + ]) + assert ',"version":' in rpm_formatter