Best Python code snippet using lisa_python
kdumpcrash.py
Source:kdumpcrash.py  
...245        total_memory = free.get_total_memory()246        if "T" in total_memory and float(total_memory.strip("T")) > 1:247            # System memory is more than 1T, need to change the dump path248            # and set crashkernel=2G249            kdump.config_resource_disk_dump_path(250                self._get_resource_disk_dump_path(node)251            )252            self.crash_kernel = "2G"253            self.timeout_of_dump_crash = 1200254            if float(total_memory.strip("T")) > 6:255                self.timeout_of_dump_crash = 2000256        kdump.config_crashkernel_memory(self.crash_kernel)257        kdump.enable_kdump_service()258        # Cleaning up any previous crash dump files259        node.execute(260            f"mkdir -p {kdump.dump_path} && rm -rf {kdump.dump_path}/*",261            shell=True,262            sudo=True,263        )...kdump.py
Source:kdump.py  
...257        # Update grub258        update_cmd = self._get_crashkernel_update_cmd(crashkernel)259        result = self.node.execute(update_cmd, sudo=True, shell=True)260        result.assert_exit_code(message="Failed to update grub")261    def config_resource_disk_dump_path(self, dump_path: str) -> None:262        """263        If the system memory size is bigger than 1T, the default size of /var/crash264        may not be enough to store the dump file, need to configure the dump path.265        The distro which may not have enough space, need override this method.266        """267        return268    def enable_kdump_service(self) -> None:269        """270        This method enables the kdump service.271        """272        service = self.node.tools[Service]273        service.enable_service(self._get_kdump_service_name())274    def restart_kdump_service(self) -> None:275        """276        This method restarts the kdump service.277        """278        service = self.node.tools[Service]279        service.restart_service(self._get_kdump_service_name())280    def set_unknown_nmi_panic(self) -> None:281        """282        /proc/sys/kernel/unknown_nmi_panic:283        The value in this file affects behavior of handling NMI. When the value is284        non-zero, unknown NMI is trapped and then panic occurs. If need to dump the285        crash, the value should be set 1. Some architectures don't provide architected286        NMIs,such as ARM64, the system doesn't have this file, we don't need to set287        either.288        """289        nmi_panic_file = PurePath("/proc/sys/kernel/unknown_nmi_panic")290        if self.node.shell.exists(nmi_panic_file):291            sysctl = self.node.tools[Sysctl]292            sysctl.write("kernel.unknown_nmi_panic", "1")293    @retry(exceptions=LisaException, tries=60, delay=1)294    def _check_kexec_crash_loaded(self) -> None:295        """296        Sometimes it costs a while to load the value, so define this method as @retry297        """298        # If the dump_path is not "/var/crash", for example it is "/mnt/crash",299        # the kdump service may start before the /mnt is mounted. That will cause300        # "Dump path /mnt/crash does not exist" error. We need to restart it.301        if self.dump_path != "/var/crash":302            self.restart_kdump_service()303        cat = self.node.tools[Cat]304        result = cat.run(self.kexec_crash, force_run=True)305        if "1" != result.stdout:306            raise LisaException(f"{self.kexec_crash} file's value is not 1.")307    def _check_crashkernel_in_cmdline(self, crashkernel_memory: str) -> None:308        cat = self.node.tools[Cat]309        result = cat.run("/proc/cmdline", force_run=True)310        if f"crashkernel={crashkernel_memory}" not in result.stdout:311            raise LisaException(312                f"crashkernel={crashkernel_memory} boot parameter is not present in"313                "kernel cmdline"314            )315    def _check_crashkernel_memory_reserved(self) -> None:316        cat = self.node.tools[Cat]317        result = cat.run(self.iomem, force_run=True)318        if "Crash kernel" not in result.stdout:319            raise LisaException(320                f"No find 'Crash kernel' in {self.iomem}. Memory isn't reserved for"321                "crash kernel"322            )323    def check_crashkernel_loaded(self, crashkernel_memory: str) -> None:324        # Check crashkernel parameter in cmdline325        self._check_crashkernel_in_cmdline(crashkernel_memory)326        # Check crash kernel loaded327        if not self.node.shell.exists(PurePosixPath(self.kexec_crash)):328            raise LisaException(329                f"{self.kexec_crash} file doesn't exist. Kexec crash is not loaded."330            )331        self._check_kexec_crash_loaded()332        # Check if memory is reserved for crash kernel333        self._check_crashkernel_memory_reserved()334class KdumpRedhat(KdumpBase):335    @property336    def command(self) -> str:337        return "kdumpctl"338    def _install(self) -> bool:339        assert isinstance(self.node.os, Redhat)340        self.node.os.install_packages("kexec-tools")341        return self._check_exists()342    def _get_crashkernel_cfg_file(self) -> str:343        if self.node.os.information.version >= "8.0.0-0" and not isinstance(344            self.node.os, Oracle345        ):346            # For Redhat 8 and later version, we can use grubby command to config347            # crashkernel. No need to get the crashkernel cfg file348            return ""349        else:350            return "/etc/default/grub"351    def _get_crashkernel_update_cmd(self, crashkernel: str) -> str:352        if self.node.os.information.version >= "8.0.0-0" and not isinstance(353            self.node.os, Oracle354        ):355            return (356                "grubby --update-kernel=/boot/vmlinuz-$(uname -r)"357                f' --args="crashkernel={crashkernel}"'358            )359        else:360            if self.node.shell.exists(PurePosixPath("/sys/firmware/efi")):361                # System with UEFI firmware362                grub_file_path = self.node.execute(363                    "find /boot/efi/EFI/* -name grub.cfg", shell=True, sudo=True364                )365                return f"grub2-mkconfig -o {grub_file_path}"366            else:367                # System with BIOS firmware368                return "grub2-mkconfig -o /boot/grub2/grub.cfg"369    def config_resource_disk_dump_path(self, dump_path: str) -> None:370        """371        If the system memory size is bigger than 1T, the default size of /var/crash372        may not be enough to store the dump file, need to change the dump path373        """374        kdump_conf = "/etc/kdump.conf"375        self.dump_path = dump_path376        # Change dump path in kdump conf377        sed = self.node.tools[Sed]378        sed.substitute(379            match_lines="^path",380            regexp="path",381            replacement="#path",382            file=kdump_conf,383            sudo=True,...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
