Compare commits

...

2 Commits

Author SHA1 Message Date
Emery Hemingway 42bd83603c Synit: depend-on initialization scripts 2023-11-25 21:07:34 +02:00
Emery Hemingway 7b19ca3492 Synit: undaemonize 2023-11-25 20:20:20 +02:00
4 changed files with 28 additions and 11 deletions

View File

@ -1,7 +1,9 @@
{ lib, writeTextFile, toPreserves }:
{ lib, runtimeShell, toPreserves, writeScript, writeTextFile }:
{ name, description, argv, environment, directory
# List of services that this configuration depends on.
# Shell instructions that specify how the state of the process should be initialized.
, initialize ? ""
# List of services that this configuration depends on.
, dependencies ? [ ]
# Daemon will not be started until all elements of depends-on are asserted.
# Example: [ "<service-state <milestone network> up>" ]
@ -39,6 +41,21 @@ in writeTextFile {
<depends-on ${serviceName} ${pkg.serviceName}>
'') dependencies)
+ (lib.strings.optionalString (initialize != "") (let
# TODO: depend the initialization on other dependencies?
initializeName = "initialize-${name}";
script = writeScript "${initializeName}.sh" ''
#!${runtimeShell}
${initialize}
'';
in ''
<depends-on ${serviceName} <service-state <daemon ${initializeName}> complete>>
<deamon ${initializeName} {
argv: [ "${script}" ]
restart: on-error
}>
''))
+ ''
<daemon ${name} ${toPreserves processSpec}>
'';

View File

@ -1,4 +1,4 @@
{ lib, writeTextFile }:
{ lib, runtimeShell, writeScript, writeTextFile, undaemonize }:
rec {
util = import ./util.nix { inherit lib; };
@ -6,12 +6,12 @@ rec {
toPreserves = util.toPreserves { };
createSynitDaemon = import ../../backends/synit/create-synit-daemon.nix {
inherit lib writeTextFile;
inherit lib runtimeShell writeScript writeTextFile;
inherit toPreserves;
};
generateSynitService =
import ../../backends/synit/generate-synit-service.nix {
inherit lib createSynitDaemon;
inherit lib createSynitDaemon undaemonize;
};
}

View File

@ -1,4 +1,4 @@
{ lib, createSynitDaemon }:
{ lib, createSynitDaemon, undaemonize }:
{ name, description, initialize, daemon, daemonArgs, instanceName, pidFile
, foregroundProcess, foregroundProcessArgs, path, environment, directory, umask
@ -6,12 +6,12 @@
let
generatedTargetSpecificArgs = {
inherit name description environment directory dependencies;
inherit name description environment directory dependencies initialize;
argv = if daemon != null then
[ daemon ] ++ daemonArgs
argv = if foregroundProcess != null then
[ foregroundProcess ] ++ foregroundProcessArgs
else
[ foregroundProcess ] ++ foregroundProcessArgs;
[ "${undaemonize}/bin/undaemonize" daemon ] ++ daemonArgs;
};
targetSpecificArgs = if builtins.isFunction overrides then

View File

@ -115,7 +115,7 @@ let
};
synit = import ../../backends/synit {
inherit (pkgs) lib writeTextFile;
inherit (pkgs) lib runtimeShell undaemonize writeScript writeTextFile;
};
in