nix: inline the swarm sub-path aliases at their use sites
autheliaCfg/forgeCfg/vmCfg/vlCfg were local re-exports of hyperhiveCfg.swarm.<subpath> — a shape that hides the full option path from grep, the same hazard #4356 fixed for the tls alias. Removed the six let-bindings and spelled the full hyperhiveCfg.swarm.<subpath>.<field> path at every use site instead. None of the read fields (url, machine, hiveClientPrefix, agentClientSuffix, domain, port) sit on the old side of a mkRenamedOptionModule in deploy.nix, so inlining the alias's own current path is correct as-is. Refs #4363 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
815f977d7c
commit
276bf8531a
6 changed files with 21 additions and 28 deletions
|
|
@ -30,8 +30,6 @@ let
|
|||
# operator sees, not a coercion error from here.
|
||||
domainBase = if swarmDomain == null then "invalid" else swarmDomain;
|
||||
|
||||
autheliaCfg = hyperhiveCfg.swarm.authelia;
|
||||
|
||||
# The collector names its components `<kind>/<owner>`, where `<owner>` is a
|
||||
# hive name for the per-hive pipelines and this literal for the swarm tier's
|
||||
# own. The two share one namespace and are merged with `//`, so a hive named
|
||||
|
|
@ -647,8 +645,8 @@ in
|
|||
|
||||
systemd.services.swarm-otel-oidc-secret = lib.mkIf deployCfg.authelia.enable {
|
||||
description = "deliver the swarm collector's OIDC client secret from authelia";
|
||||
after = [ "container@${autheliaCfg.machine}.service" ];
|
||||
requires = [ "container@${autheliaCfg.machine}.service" ];
|
||||
after = [ "container@${hyperhiveCfg.swarm.authelia.machine}.service" ];
|
||||
requires = [ "container@${hyperhiveCfg.swarm.authelia.machine}.service" ];
|
||||
before = [ "container@${cfg.machine}.service" ];
|
||||
wantedBy = [ "container@${cfg.machine}.service" ];
|
||||
serviceConfig = {
|
||||
|
|
@ -855,7 +853,7 @@ in
|
|||
# there is no version of this collector that runs without one.
|
||||
# Stated as an assertion rather than a fallback because a guessed
|
||||
# issuer URL evaluates cleanly and refuses every hive at runtime.
|
||||
assertion = autheliaCfg.url != null;
|
||||
assertion = hyperhiveCfg.swarm.authelia.url != null;
|
||||
message = ''
|
||||
services.hyperhive.deploy.swarm-otel.enable is true but
|
||||
services.hyperhive.swarm.authelia.url is null: every hive
|
||||
|
|
@ -1065,7 +1063,7 @@ in
|
|||
# A path, never a value — nothing here may read the
|
||||
# secret, or it lands in the store world-readable.
|
||||
client_secret_file = collectorSecretPath;
|
||||
token_url = "${autheliaCfg.url}/api/oidc/token";
|
||||
token_url = "${hyperhiveCfg.swarm.authelia.url}/api/oidc/token";
|
||||
# The scope authelia's bearer-authz check looks for.
|
||||
# The client is REGISTERED for it (the collector's
|
||||
# entry sets `bearerAuthz`), but prometheus asks for
|
||||
|
|
@ -1287,13 +1285,13 @@ in
|
|||
lib.mapAttrs' (
|
||||
h: _:
|
||||
lib.nameValuePair "oidc/${h}" {
|
||||
issuer_url = autheliaCfg.url;
|
||||
issuer_url = hyperhiveCfg.swarm.authelia.url;
|
||||
# The audience this hive's client is registered to
|
||||
# request, and the reason one hive's token is refused by
|
||||
# another hive's receiver. Same expression authelia
|
||||
# registers it under — a second spelling here would deny
|
||||
# every hive, as a 401 that blames the token.
|
||||
audience = "${autheliaCfg.hiveClientPrefix}${h}";
|
||||
audience = "${hyperhiveCfg.swarm.authelia.hiveClientPrefix}${h}";
|
||||
# ⛔ DO NOT ADD `issuer_ca_path` HERE. The failure it
|
||||
# causes is invisible to every check we have.
|
||||
#
|
||||
|
|
@ -1336,7 +1334,7 @@ in
|
|||
# a real swarm-controller push gets a healthy-looking 401.
|
||||
// {
|
||||
"oidc/${swarmTierName}" = {
|
||||
issuer_url = autheliaCfg.url;
|
||||
issuer_url = hyperhiveCfg.swarm.authelia.url;
|
||||
audience = config.services.hyperhive.swarm.controller.queueClientId;
|
||||
};
|
||||
}
|
||||
|
|
@ -1351,7 +1349,7 @@ in
|
|||
client_id = cfg.clientId;
|
||||
# A path, never a value. Same file the scrape side reads.
|
||||
client_secret_file = collectorSecretPath;
|
||||
token_url = "${autheliaCfg.url}/api/oidc/token";
|
||||
token_url = "${hyperhiveCfg.swarm.authelia.url}/api/oidc/token";
|
||||
# Registered is not requested: a client that does not ASK
|
||||
# for the scope gets a token carrying none, and one that
|
||||
# does not ask for an audience gets `aud: []`.
|
||||
|
|
|
|||
Loading…
Reference in a new issue