1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-08 05:09:24 +00:00

systemd: systemd-systemctl: Support instance conf files during enable

Add ability to parse instance-specific conf files when
enabling an instance of a templated unit during postinstall.

(From OE-Core rev: 8d646cc4eec154e051f315de8736356c870a5ad5)

Signed-off-by: Nick Potenski <nick.potenski@garmin.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit baa0ecf3271008cf60cd830c54a71f191aebb81c)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Nick Potenski
2022-06-15 14:32:19 -05:00
committed by Richard Purdie
parent 284cd917f8
commit e056477ce0
@@ -11,6 +11,7 @@ import re
import sys
from collections import namedtuple
from itertools import chain
from pathlib import Path
version = 1.0
@@ -25,12 +26,16 @@ locations = list()
class SystemdFile():
"""Class representing a single systemd configuration file"""
def __init__(self, root, path):
def __init__(self, root, path, instance_unit_name):
self.sections = dict()
self._parse(root, path)
dirname = os.path.basename(path.name) + ".d"
for location in locations:
for path2 in sorted((root / location / "system" / dirname).glob("*.conf")):
files = (root / location / "system" / dirname).glob("*.conf")
if instance_unit_name:
inst_dirname = instance_unit_name + ".d"
files = chain(files, (root / location / "system" / inst_dirname).glob("*.conf"))
for path2 in sorted(files):
self._parse(root, path2)
def _parse(self, root, path):
@@ -195,8 +200,11 @@ class SystemdUnit():
# if we're enabling an instance, first extract the actual instance
# then figure out what the template unit is
template = re.match(r"[^@]+@(?P<instance>[^\.]*)\.", self.unit)
instance_unit_name = None
if template:
instance = template.group('instance')
if instance != "":
instance_unit_name = self.unit
unit = re.sub(r"@[^\.]*\.", "@.", self.unit, 1)
else:
instance = None
@@ -208,7 +216,7 @@ class SystemdUnit():
# ignore aliases
return
config = SystemdFile(self.root, path)
config = SystemdFile(self.root, path, instance_unit_name)
if instance == "":
try:
default_instance = config.get('Install', 'DefaultInstance')[0]