mirror of
https://github.com/nix-community/home-manager.git
synced 2025-03-31 04:04:32 +00:00
podman: use type in attr name of built quadlets
This commit is contained in:
parent
ba3f62b84b
commit
6c1f46df15
6 changed files with 43 additions and 37 deletions
|
@ -9,11 +9,17 @@ let
|
|||
|
||||
createQuadletSource = name: containerDef:
|
||||
let
|
||||
dependencyBySuffix = type: name:
|
||||
if (hasInfix ".${type}" name) then
|
||||
let baseName = elemAt (splitString ".${type}" name) 0;
|
||||
in if (hasAttr baseName cfg.internal.builtQuadlets) then
|
||||
[ (cfg.internal.builtQuadlets.${baseName}) ]
|
||||
extractQuadletReference = type: value:
|
||||
let
|
||||
regex = "([a-zA-Z0-9_-]+\\." + type + ").*";
|
||||
parts = builtins.match regex value;
|
||||
in if parts == null then value else builtins.elemAt parts 0;
|
||||
|
||||
dependencyBySuffix = type: value:
|
||||
if (hasInfix ".${type}" value) then
|
||||
let name = extractQuadletReference type value;
|
||||
in if (hasAttr name cfg.internal.builtQuadlets) then
|
||||
[ (cfg.internal.builtQuadlets.${name}) ]
|
||||
else
|
||||
[ ]
|
||||
else
|
||||
|
@ -32,28 +38,27 @@ let
|
|||
++ (withResolverFor "volume" containerDef.volumes);
|
||||
|
||||
checkQuadletReference = types: value:
|
||||
let baseName = t: elemAt (splitString ".${t}" value) 0;
|
||||
in if builtins.isList value then
|
||||
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
|
||||
quadletBaseName = baseName type;
|
||||
quadletName = extractQuadletReference type value;
|
||||
quadletsOfType =
|
||||
filterAttrs (n: v: v.quadletData.resourceType == type)
|
||||
cfg.internal.builtQuadlets;
|
||||
in if (hasAttr quadletBaseName quadletsOfType) then
|
||||
in if (hasAttr quadletName quadletsOfType) then
|
||||
[
|
||||
(replaceStrings [ quadletBaseName ]
|
||||
[ "podman-${quadletBaseName}" ] value)
|
||||
(replaceStrings [ quadletName ] [ "podman-${quadletName}" ]
|
||||
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}.
|
||||
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.
|
||||
|
|
|
@ -20,7 +20,7 @@ let
|
|||
unpackPhase = ''
|
||||
mkdir -p $out/quadlets
|
||||
${concatStringsSep "\n" (map (v:
|
||||
"ln -s ${v.out}/quadlets/${v.quadletData.serviceName}.${v.quadletData.resourceType} $out/quadlets")
|
||||
"echo 'linking ${v.quadletData.serviceName}.${v.quadletData.resourceType}'; ln -s ${v.out}/quadlets/${v.quadletData.serviceName}.${v.quadletData.resourceType} $out/quadlets")
|
||||
quadlet.dependencies)}
|
||||
'';
|
||||
|
||||
|
@ -87,7 +87,8 @@ in {
|
|||
(lib.hm.dag.entryAfter [ "reloadSystemd" ] activationCleanupScript);
|
||||
|
||||
services.podman.internal.builtQuadlets = listToAttrs (map (pkg: {
|
||||
name = removePrefix "podman-" pkg.passthru.quadletData.serviceName;
|
||||
name = (removePrefix "podman-" pkg.passthru.quadletData.serviceName) + "."
|
||||
+ pkg.passthru.quadletData.resourceType;
|
||||
value = pkg;
|
||||
}) builtQuadlets);
|
||||
};
|
||||
|
|
|
@ -9,9 +9,9 @@ ContainerName=my-container
|
|||
Environment=
|
||||
Image=podman-my-img.image
|
||||
Label=nix.home-manager.managed=true
|
||||
Network=podman-my-net.network
|
||||
Network=podman-my-app.network
|
||||
Network=externalnet
|
||||
Volume=podman-my-vol.volume:/data
|
||||
Volume=podman-my-app.volume:/data
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
|
@ -29,7 +29,7 @@ Delegate=yes
|
|||
Type=notify
|
||||
NotifyAccess=all
|
||||
SyslogIdentifier=%N
|
||||
ExecStart=/nix/store/00000000000000000000000000000000-podman/bin/podman run --name my-container --cidfile=%t/%N.cid --replace --rm --cgroups=split --network my-net --network externalnet --sdnotify=conmon -d -v my-vol:/data --label nix.home-manager.managed=true docker.io/alpine:latest
|
||||
ExecStart=/nix/store/00000000000000000000000000000000-podman/bin/podman run --name my-container --cidfile=%t/%N.cid --replace --rm --cgroups=split --network my-app --network externalnet --sdnotify=conmon -d -v my-app:/data --label nix.home-manager.managed=true docker.io/alpine:latest
|
||||
|
||||
[Unit]
|
||||
Wants=podman-user-wait-network-online.service
|
||||
|
@ -39,7 +39,7 @@ SourcePath=/nix/store/00000000000000000000000000000000-home-container-podman-my-
|
|||
Requires=podman-my-img-image.service
|
||||
After=podman-my-img-image.service
|
||||
RequiresMountsFor=%t/containers
|
||||
Requires=podman-my-net-network.service
|
||||
After=podman-my-net-network.service
|
||||
Requires=podman-my-vol-volume.service
|
||||
After=podman-my-vol-volume.service
|
||||
Requires=podman-my-app-network.service
|
||||
After=podman-my-app-network.service
|
||||
Requires=podman-my-app-volume.service
|
||||
After=podman-my-app-volume.service
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# Automatically generated by home-manager for podman network configuration
|
||||
# DO NOT EDIT THIS FILE DIRECTLY
|
||||
#
|
||||
# my-net.network
|
||||
# my-app.network
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
WantedBy=multi-user.target
|
||||
|
@ -11,7 +11,7 @@ WantedBy=multi-user.target
|
|||
[X-Network]
|
||||
Gateway=192.168.123.1
|
||||
Label=nix.home-manager.managed=true
|
||||
NetworkName=my-net
|
||||
NetworkName=my-app
|
||||
Subnet=192.168.123.0/24
|
||||
|
||||
[Service]
|
||||
|
@ -19,7 +19,7 @@ Environment=PATH=/run/wrappers/bin:/usr/bin:/bin:/usr/sbin:/sbin:@shadow@/bin:/n
|
|||
ExecStartPre=/nix/store/00000000000000000000000000000000-await-podman-unshare
|
||||
RemainAfterExit=yes
|
||||
TimeoutStartSec=15
|
||||
ExecStart=/nix/store/00000000000000000000000000000000-podman/bin/podman network create --ignore --subnet 192.168.123.0/24 --gateway 192.168.123.1 --label nix.home-manager.managed=true my-net
|
||||
ExecStart=/nix/store/00000000000000000000000000000000-podman/bin/podman network create --ignore --subnet 192.168.123.0/24 --gateway 192.168.123.1 --label nix.home-manager.managed=true my-app
|
||||
SyslogIdentifier=%N
|
||||
Type=oneshot
|
||||
|
||||
|
@ -27,6 +27,6 @@ Type=oneshot
|
|||
Wants=podman-user-wait-network-online.service
|
||||
After=podman-user-wait-network-online.service
|
||||
After=network.target
|
||||
Description=Service for network my-net
|
||||
SourcePath=/nix/store/00000000000000000000000000000000-home-network-podman-my-net/quadlets/podman-my-net.network
|
||||
Description=Service for network my-app
|
||||
SourcePath=/nix/store/00000000000000000000000000000000-home-network-podman-my-app/quadlets/podman-my-app.network
|
||||
RequiresMountsFor=%t/containers
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# Automatically generated by home-manager for podman volume configuration
|
||||
# DO NOT EDIT THIS FILE DIRECTLY
|
||||
#
|
||||
# my-vol.volume
|
||||
# my-app.volume
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
WantedBy=multi-user.target
|
||||
|
@ -13,15 +13,15 @@ Environment=PATH=/run/wrappers/bin:/usr/bin:/bin:/usr/sbin:/sbin:@shadow@/bin:/n
|
|||
ExecStartPre=/nix/store/00000000000000000000000000000000-await-podman-unshare
|
||||
RemainAfterExit=yes
|
||||
TimeoutStartSec=15
|
||||
ExecStart=/nix/store/00000000000000000000000000000000-podman/bin/podman volume create --ignore --opt copy --opt device=tmpfs --opt type=tmpfs --label nix.home-manager.managed=true --label nix.home-manager.preserve=false my-vol
|
||||
ExecStart=/nix/store/00000000000000000000000000000000-podman/bin/podman volume create --ignore --opt copy --opt device=tmpfs --opt type=tmpfs --label nix.home-manager.managed=true --label nix.home-manager.preserve=false my-app
|
||||
SyslogIdentifier=%N
|
||||
Type=oneshot
|
||||
|
||||
[Unit]
|
||||
Wants=podman-user-wait-network-online.service
|
||||
After=podman-user-wait-network-online.service
|
||||
Description=Service for volume my-vol
|
||||
SourcePath=/nix/store/00000000000000000000000000000000-home-volume-podman-my-vol/quadlets/podman-my-vol.volume
|
||||
Description=Service for volume my-app
|
||||
SourcePath=/nix/store/00000000000000000000000000000000-home-volume-podman-my-app/quadlets/podman-my-app.volume
|
||||
RequiresMountsFor=%t/containers
|
||||
|
||||
[X-Volume]
|
||||
|
@ -30,4 +30,4 @@ Device=tmpfs
|
|||
Label=nix.home-manager.managed=true
|
||||
Label=nix.home-manager.preserve=false
|
||||
Type=tmpfs
|
||||
VolumeName=my-vol
|
||||
VolumeName=my-app
|
||||
|
|
|
@ -18,17 +18,17 @@
|
|||
containers = {
|
||||
"my-container" = {
|
||||
image = "my-img.image";
|
||||
network = [ "my-net.network" "externalnet" ];
|
||||
volumes = [ "my-vol.volume:/data" ];
|
||||
network = [ "my-app.network" "externalnet" ];
|
||||
volumes = [ "my-app.volume:/data" ];
|
||||
};
|
||||
"my-container-bld" = { image = "my-bld.build"; };
|
||||
};
|
||||
images."my-img" = { image = "docker.io/alpine:latest"; };
|
||||
networks."my-net" = {
|
||||
networks."my-app" = {
|
||||
gateway = "192.168.123.1";
|
||||
subnet = "192.168.123.0/24";
|
||||
};
|
||||
volumes."my-vol" = {
|
||||
volumes."my-app" = {
|
||||
device = "tmpfs";
|
||||
preserve = false;
|
||||
type = "tmpfs";
|
||||
|
@ -41,8 +41,8 @@
|
|||
containerFile=$configPath/podman-my-container.service
|
||||
containerBldFile=$configPath/podman-my-container-bld.service
|
||||
imageFile=$configPath/podman-my-img-image.service
|
||||
networkFile=$configPath/podman-my-net-network.service
|
||||
volumeFile=$configPath/podman-my-vol-volume.service
|
||||
networkFile=$configPath/podman-my-app-network.service
|
||||
volumeFile=$configPath/podman-my-app-volume.service
|
||||
assertFileExists $buildFile
|
||||
assertFileExists $containerFile
|
||||
assertFileExists $containerBldFile
|
||||
|
|
Loading…
Add table
Reference in a new issue