From 8bb071912b32e858cfc4daba1a5683d5c62f1955 Mon Sep 17 00:00:00 2001 From: Nicholas Hassan Date: Mon, 17 Feb 2025 18:30:06 +1030 Subject: [PATCH] podman: warn if values match a quadlet only by name --- modules/services/podman-linux/containers.nix | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/modules/services/podman-linux/containers.nix b/modules/services/podman-linux/containers.nix index 93c02990..8b4c1db8 100644 --- a/modules/services/podman-linux/containers.nix +++ b/modules/services/podman-linux/containers.nix @@ -32,20 +32,32 @@ let ++ (withResolverFor "volume" containerDef.volumes); checkQuadletReference = types: value: - if builtins.isList value then + let baseName = t: elemAt (splitString ".${t}" value) 0; + in if builtins.isList value then builtins.concatLists (map (checkQuadletReference types) value) else let type = findFirst (t: hasInfix ".${t}" value) null types; in if (type != null) then let - baseName = elemAt (splitString ".${type}" value) 0; + quadletBaseName = baseName type; quadletsOfType = filterAttrs (n: v: v.quadletData.resourceType == type) cfg.internal.builtQuadlets; - in if (hasAttr baseName quadletsOfType) then - [ (replaceStrings [ baseName ] [ "podman-${baseName}" ] value) ] + in if (hasAttr quadletBaseName quadletsOfType) then + [ + (replaceStrings [ quadletBaseName ] + [ "podman-${quadletBaseName}" ] value) + ] else [ value ] + else if ((hasInfix "/nix/store" value) == false + && hasAttr value cfg.internal.builtQuadlets) then + lib.warn '' + A value for Podman container '${name}' might use a reference to another quadlet: ${value}. + Append the type '.${ + cfg.internal.builtQuadlets.${value}.quadletData.resourceType + }' to '${baseName value}' if this is intended. + '' [ value ] else [ value ];