Initial version of a declarative fcron

This commit is contained in:
Sander van der Burg 2021-03-03 21:49:38 +01:00 committed by Sander van der Burg
parent 820dc58edf
commit 72a510c26b
4 changed files with 59 additions and 6 deletions

View File

@ -123,7 +123,13 @@ rec {
};
fcron = {
pkg = constructors.fcron {};
pkg = constructors.declarativeFcron {
fcrontabPerUser = {
systab = ''
@ 1 echo hello >> /tmp/hello
'';
};
};
requiresUniqueIdsFor = [ "uids" "gids" ];
};

View File

@ -63,7 +63,12 @@ in
fcron = import ./fcron {
inherit createManagedProcess stateDir spoolDir runtimeDir tmpDir forceDisableUserChange;
inherit (pkgs) writeTextFile fcron;
inherit (pkgs) lib writeTextFile fcron;
};
declarativeFcron = import ./fcron/declarative.nix {
inherit createManagedProcess stateDir spoolDir runtimeDir tmpDir forceDisableUserChange;
inherit (pkgs) lib writeTextFile fcron;
};
hydra-evaluator = import ./hydra/hydra-evaluator.nix {

View File

@ -0,0 +1,32 @@
{createManagedProcess, writeTextFile, lib, fcron, stateDir, runtimeDir, tmpDir, spoolDir, forceDisableUserChange}:
{ instanceSuffix ? ""
, instanceName ? "fcron${instanceSuffix}"
, initialize ? ""
, fcrontabPerUser
}:
let
fcronSpoolDir = "${spoolDir}/${instanceName}";
in
import ./default.nix {
inherit createManagedProcess writeTextFile lib fcron stateDir runtimeDir tmpDir spoolDir forceDisableUserChange;
} {
inherit instanceSuffix instanceName;
initialize = ''
${lib.concatMapStrings (user:
let
fcrontab = builtins.getAttr user fcrontabPerUser;
fcrontabFile = writeTextFile {
name = "fcrontab-${user}";
text = fcrontab;
};
in
''
cp ${fcrontabFile} ${fcronSpoolDir}/${user}.orig
''
) (builtins.attrNames fcrontabPerUser)}
${initialize}
'';
}

View File

@ -1,5 +1,5 @@
{createManagedProcess, writeTextFile, fcron, stateDir, runtimeDir, tmpDir, spoolDir, forceDisableUserChange}:
{instanceSuffix ? "", instanceName ? "fcron${instanceSuffix}"}:
{createManagedProcess, writeTextFile, lib, fcron, stateDir, runtimeDir, tmpDir, spoolDir, forceDisableUserChange}:
{instanceSuffix ? "", instanceName ? "fcron${instanceSuffix}", initialize ? ""}:
let
fcronSpoolDir = "${spoolDir}/${instanceName}";
@ -24,11 +24,19 @@ in
createManagedProcess {
name = instanceName;
inherit instanceName;
initialize = ''
mkdir -p ${fcronSpoolDir}
mkdir -p ${fcronEtcDir}
cp ${configFile} ${fcronEtcDir}/fcron.conf
chmod 644 ${fcronEtcDir}/fcron.conf
${lib.optionalString (!forceDisableUserChange) ''
chown root:${group} ${fcronEtcDir}/fcron.conf
''}
${initialize}
'';
process = "${fcron}/bin/fcron";
args = [ "--configfile" configFile ];
args = [ "--configfile" "${fcronEtcDir}/fcron.conf" ];
foregroundProcessExtraArgs = [ "--foreground" "--nosyslog" ];
daemonExtraArgs = [ "--background" ];
@ -39,6 +47,8 @@ createManagedProcess {
users = {
"${user}" = {
inherit group;
homeDir = fcronSpoolDir;
createHomeDir = true;
description = "Fcron user";
};
};