It can be that service is not enabled but UnitFilePreset=enabled (case for Application Extension): ``` Loaded: loaded (/lib/systemd/system/cpu-report.service; disabled; vendor preset: enabled) ``` This makes existing logic skip enabling the service. Signed-off-by: Stepan Blyschak <stepanb@nvidia.com>
This commit is contained in:
parent
91f611157a
commit
7eb6abdc7b
@ -454,14 +454,25 @@ class HostConfigDaemon:
|
||||
|
||||
return feature_names, feature_suffixes
|
||||
|
||||
def get_systemd_unit_state(self, unit):
|
||||
""" Returns service configuration """
|
||||
|
||||
cmd = "sudo systemctl show {} --property UnitFileState".format(unit)
|
||||
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
stdout, stderr = proc.communicate()
|
||||
if proc.returncode != 0:
|
||||
syslog.syslog(syslog.LOG_ERR, "Failed to get status of {}: rc={} stderr={}".format(unit, proc.returncode, stderr))
|
||||
return 'invalid' # same as systemd's "invalid indicates that it could not be determined whether the unit file is enabled".
|
||||
|
||||
props = dict([line.split("=") for line in stdout.decode().strip().splitlines()])
|
||||
return props["UnitFileState"]
|
||||
|
||||
def enable_feature(self, feature_names, feature_suffixes):
|
||||
start_cmds = []
|
||||
for feature_name in feature_names:
|
||||
# Check if it is already enabled, if yes skip the system call
|
||||
cmd = "sudo systemctl status {}.{} | grep Loaded".format(feature_name, feature_suffixes[-1])
|
||||
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
(stdout, stderr) = proc.communicate()
|
||||
if "enabled" in str(stdout):
|
||||
unit_file_state = self.get_systemd_unit_state("{}.{}".format(feature_name, feature_suffixes[-1]))
|
||||
if unit_file_state == "enabled":
|
||||
continue
|
||||
|
||||
for suffix in feature_suffixes:
|
||||
@ -485,10 +496,8 @@ class HostConfigDaemon:
|
||||
stop_cmds = []
|
||||
for feature_name in feature_names:
|
||||
# Check if it is already disabled, if yes skip the system call
|
||||
cmd = "sudo systemctl status {}.{} | grep Loaded".format(feature_name, feature_suffixes[-1])
|
||||
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
(stdout, stderr) = proc.communicate()
|
||||
if "disabled" in str(stdout) or "masked" in str(stdout):
|
||||
unit_file_state = self.get_systemd_unit_state("{}.{}".format(feature_name, feature_suffixes[-1]))
|
||||
if unit_file_state in ("disabled", "masked"):
|
||||
continue
|
||||
|
||||
for suffix in reversed(feature_suffixes):
|
||||
|
Loading…
Reference in New Issue
Block a user