async rebuild
This commit is contained in:
@@ -21,6 +21,17 @@ let
|
||||
(map (app: ({ name = app.name; envFile = [ ]; } // app.runtime.setup)) appsList);
|
||||
allCronsConfigs = concatRuntimeLists "cron";
|
||||
allVMConfigs = builtins.filter (app: app.runtime.vm != null) appsList;
|
||||
containerUnitNames = map (name: "podman-${name}.service") (builtins.attrNames mergedContainers);
|
||||
setupUnitNames = map (setup: "${setup.name}-setup.service") allSetupConfigs;
|
||||
reconcileUnitNames = containerUnitNames ++ setupUnitNames;
|
||||
reconcileUnits = lib.concatMapStringsSep " " lib.escapeShellArg reconcileUnitNames;
|
||||
reconcileTrigger = pkgs.writeText "syscfg-containers-reconcile-trigger.json" (builtins.toJSON {
|
||||
containers = mergedContainers;
|
||||
setup = map (setup: {
|
||||
inherit (setup) name trigger envFile;
|
||||
script = toString setup.script;
|
||||
}) allSetupConfigs;
|
||||
});
|
||||
mkPathSetup = cfg:
|
||||
let
|
||||
effectiveCfg = {
|
||||
@@ -62,12 +73,26 @@ in {
|
||||
'';
|
||||
startAt = "weekly";
|
||||
};
|
||||
syscfg-containers-reconcile = {
|
||||
description = "Queue OCI container restarts after configuration changes";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
restartTriggers = [ reconcileTrigger ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
};
|
||||
script = ''
|
||||
${lib.optionalString (reconcileUnitNames != []) ''
|
||||
${pkgs.systemd}/bin/systemctl --no-block restart ${reconcileUnits}
|
||||
''}
|
||||
'';
|
||||
};
|
||||
}
|
||||
// builtins.listToAttrs (
|
||||
map (name: {
|
||||
name = "podman-${name}";
|
||||
value.serviceConfig.Type = lib.mkForce "exec";
|
||||
}) (builtins.attrNames config.virtualisation.oci-containers.containers)
|
||||
value.restartIfChanged = false;
|
||||
}) (builtins.attrNames mergedContainers)
|
||||
)
|
||||
// mkNamedUnits (e: {
|
||||
name = "${e.name}-vm";
|
||||
@@ -99,7 +124,7 @@ in {
|
||||
# wants = [ "podman-${e.name}-${e.trigger}.service" ];
|
||||
partOf = [ "podman-${e.name}-${e.trigger}.service" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
restartTriggers = [ e.script ];
|
||||
restartIfChanged = false;
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
Restart = "on-failure";
|
||||
|
||||
Reference in New Issue
Block a user