imds-generator: replace static Condition=initrd by a check in the generator

After looking at the unit, I'm not sure if systemd-imds-import.service
is supposed to run in the host system or not. But if it is supposed to
only run in the initrd, then the static condition in the unit file gives
as the worst behaviour: the generator does not do any checks if we are
in the initrd or not, and if it enabled the unit, it'll influence the
transaction ordering (possibly causing loops or additional work) and
then the unit will be unconditionally skipped. So replace the static
condition by a check in the generator. If the user specifies
systemd.imds.import on the commandline, it'll be honoured also in the
host.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2026-05-26 13:58:53 +01:00
committed by Luca Boccassi
parent 3f33f4d057
commit c621879e35
2 changed files with 7 additions and 6 deletions
+7 -4
View File
@@ -6,6 +6,7 @@
#include "fileio.h"
#include "generator.h"
#include "imds-util.h"
#include "initrd-util.h"
#include "log.h"
#include "parse-util.h"
#include "proc-cmdline.h"
@@ -13,8 +14,8 @@
#include "string-util.h"
#include "virt.h"
static int arg_enabled = -1; /* Whether we shall offer local IMDS APIs */
static bool arg_import = true; /* Whether we shall import IMDS credentials, SSH keys, … into the local system */
static int arg_enabled = -1; /* Whether we shall offer local IMDS APIs */
static int arg_import = -1; /* Whether we shall import IMDS credentials, SSH keys, … into the local system */
static ImdsNetworkMode arg_network_mode = IMDS_NETWORK_DEFAULT;
static int parse_proc_cmdline_item(const char *key, const char *value, void *data) {
@@ -179,8 +180,10 @@ static int run(const char *dest, const char *dest_early, const char *dest_late)
if (r < 0)
return log_error_errno(r, "Failed to hook DMI id device before systemd-imdsd@.service: %m");
if (arg_import) {
/* Enable that we import IMDS data */
if (arg_import < 0)
arg_import = in_initrd();
if (arg_import > 0) {
/* Enable the import of IMDS data */
r = generator_add_symlink(dest_early, SPECIAL_SYSINIT_TARGET, "wants", SYSTEM_DATA_UNIT_DIR "/systemd-imds-import.service");
if (r < 0)
return log_error_errno(r, "Failed to hook in systemd-imds-import.service: %m");
-2
View File
@@ -19,8 +19,6 @@ Before=sysinit.target systemd-firstboot.service
Conflicts=shutdown.target
Before=shutdown.target
ConditionPathExists=/etc/initrd-release
[Service]
Type=oneshot
RemainAfterExit=yes