util: Add bls module

- Add functions for appending kernel parameters to the
Boot Loader Specification (BLS) as needed.

Signed-off-by: Renata Ravanelli <rravanel@redhat.com>
This commit is contained in:
Renata Ravanelli 2024-02-19 10:30:34 -03:00 committed by Tomáš Hozza
parent 2b868fbe75
commit ddf4478ea9
2 changed files with 36 additions and 19 deletions

34
osbuild/util/bls.py Normal file
View file

@ -0,0 +1,34 @@
"""
Function for appending parameters to
Boot Loader Specification (BLS).
"""
import glob
from typing import List
def options_append(root_path: str, kernel_arguments: List[str]) -> None:
"""
Add kernel arguments to the Boot Loader Specification (BLS) configuration files.
There is unlikely to be more than one BLS config, but just in case, we'll iterate over them.
Parameters
----------
root_path (str): The root path for locating BLS configuration files.
kernel_arguments (list): A list of kernel arguments to be added.
"""
bls_glob = f"{root_path}/loader/entries/*.conf"
bls_conf_files = glob.glob(bls_glob)
if len(bls_conf_files) == 0:
raise RuntimeError(f"no BLS configuration found in {bls_glob}")
for entry in bls_conf_files:
# Read in the file and then append to the options line.
with open(entry, encoding="utf8") as f:
lines = f.read().splitlines()
with open(entry, "w", encoding="utf8") as f:
for line in lines:
if line.startswith('options '):
f.write(f"{line} {' '.join(kernel_arguments)}\n")
else:
f.write(f"{line}\n")

View file

@ -7,11 +7,11 @@ the tree or in a mount.
"""
import glob
import sys
from urllib.parse import urlparse
import osbuild.api
from osbuild.util import bls
SCHEMA_2 = r"""
"options": {
@ -60,24 +60,7 @@ def main(paths, tree, options):
assert url.path.startswith("/")
bootroot = root + url.path
# There is unlikely to be more than one bls config, but just
# in case we'll iterate over them.
entries = []
for entry in glob.glob(f"{bootroot}/loader/entries/*.conf"):
entries.append(entry)
# Read in the file and then append to the options line.
with open(entry, encoding="utf8") as f:
lines = f.read().splitlines()
with open(entry, "w", encoding="utf8") as f:
for line in lines:
if line.startswith('options '):
f.write(f"{line} {' '.join(kopts)}\n")
else:
f.write(f"{line}\n")
assert len(entries) != 0
print(f"Added {','.join(kopts)} to: {','.join(entries)}")
return 0
bls.options_append(bootroot, kopts)
if __name__ == '__main__':