Source code for univention.management.console.modules.setup.netconf.modules.KernelModules
# SPDX-FileCopyrightText: 2024-2025 Univention GmbH
# SPDX-License-Identifier: AGPL-3.0-only
from univention.management.console.modules.setup.netconf.common import Executable
[docs]
class PhaseKernelModules(Executable):
"""(Un-)load kernel modules for VLAN, Bridging, Bonding."""
variable_name = "kernel/modules"
variable_separator = ";"
module_option = (
("8021q", "vlan-raw-device"),
("bridge", "bridge_ports"),
("bonding", "bond-slaves"),
)
priority = 95
executable = "/sbin/modprobe"
[docs]
def pre(self) -> None:
modules = self.get_configured_modules()
self.clean_known_modules(modules)
new_modules = self.scan_required_modules()
modules |= new_modules
self.set_configured_modules(modules)
self.load_modules(new_modules)
[docs]
def clean_known_modules(self, modules: set[str]) -> None:
modules.difference_update(module for module, _option in self.module_option)
[docs]
def scan_required_modules(self) -> set[str]:
modules = set()
for _name, iface in self.changeset.new_interfaces.all_interfaces:
for iface_option in iface.options:
for module, option in self.module_option:
if iface_option.startswith(option):
modules.add(module)
return modules
[docs]
def load_modules(self, modules: set[str]) -> None:
if modules:
cmd = [self.executable, *list(modules)]
self.call(cmd)