From 0dc188e006ea95e71e3428c02e2c367f8229a595 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 26 May 2026 18:22:18 +0200 Subject: [PATCH] units: do not fail if imds is not configured In https://bugzilla.redhat.com/show_bug.cgi?id=2481466, it is reported that systemd-imds-early-network.service fails on AWS EC2 instance with: > No IMDS endpoint information provided or detected, cannot operate. The service will be started on various systems where it doesn't have enough configuration to run. The systemd-imds-generator only does some superficial checks, so the tool should not mark the boot as failed it turns out that IMDS is not supported. --- src/imds/imdsd.c | 7 +++++-- units/systemd-imds-early-network.service.in | 5 +++++ units/systemd-imds-import.service.in | 5 +++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/imds/imdsd.c b/src/imds/imdsd.c index 9c194c0900..5ad1935721 100644 --- a/src/imds/imdsd.c +++ b/src/imds/imdsd.c @@ -24,6 +24,7 @@ #include "errno-util.h" #include "escape.h" #include "event-util.h" +#include "exit-status.h" #include "fd-util.h" #include "format-ifname.h" #include "format-table.h" @@ -63,7 +64,7 @@ * https://docs.hetzner.cloud/reference/cloud#description/server-metadata * * Some notes: - * - IMDS service are heavily rate limited, and hence we want to centralize requests in one place and cache + * - IMDS service are heavily rate-limited, and hence we want to centralize requests in one place and cache * - In order to isolate IMDS access this expects that traffic to the IMDS address 169.254.169.254 is * generally prohibited (via a prohibit route), but our service uses fwmark 0x7FFF0815, which (via source * routing) can bypass this route. @@ -1851,7 +1852,9 @@ static int cmdline_run(void) { /* Process the request when invoked via the command line (i.e. not via Varlink) */ - r = imds_configured(LOG_ERR); + r = imds_configured(LOG_INFO); + if (r == -EOPNOTSUPP) + return EXIT_NOTCONFIGURED; if (r < 0) return r; diff --git a/units/systemd-imds-early-network.service.in b/units/systemd-imds-early-network.service.in index b4241237f0..23b35e6337 100644 --- a/units/systemd-imds-early-network.service.in +++ b/units/systemd-imds-early-network.service.in @@ -21,3 +21,8 @@ After=sys-devices-virtual-dmi-id.device ExecStart={{LIBEXECDIR}}/systemd-imdsd --setup-network Type=oneshot RemainAfterExit=yes + +# The tool returns EXIT_NOTCONFIGURED if the configuration required for basic +# operation is not found. Do not treat this as error, because the service can +# be started on generic systems that do not have complete IMDS support. +SuccessExitStatus=NOTCONFIGURED diff --git a/units/systemd-imds-import.service.in b/units/systemd-imds-import.service.in index d27e59778f..4a6c83ae7d 100644 --- a/units/systemd-imds-import.service.in +++ b/units/systemd-imds-import.service.in @@ -23,3 +23,8 @@ Before=shutdown.target Type=oneshot RemainAfterExit=yes ExecStart={{LIBEXECDIR}}/systemd-imds --import + +# The tool returns EXIT_NOTCONFIGURED if the configuration required for basic +# operation is not found. Do not treat this as error, because the service can +# be started on generic systems that do not have complete IMDS support. +SuccessExitStatus=NOTCONFIGURED