Make container providers configurable for the disnix-service

This commit is contained in:
Sander van der Burg 2021-03-03 20:19:00 +01:00 committed by Sander van der Burg
parent a2ef6d1936
commit 820dc58edf
13 changed files with 138 additions and 31 deletions

View File

@ -14,9 +14,13 @@ let
constructors = import ../../services-agnostic/constructors.nix { constructors = import ../../services-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir spoolDir forceDisableUserChange processManager; inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir spoolDir forceDisableUserChange processManager;
}; };
containerProviderConstructors = import ../../service-containers-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir spoolDir forceDisableUserChange processManager;
};
in in
rec { rec {
sshd = rec { sshd = {
pkg = constructors.sshd { pkg = constructors.sshd {
extraSSHDConfig = '' extraSSHDConfig = ''
UsePAM yes UsePAM yes

View File

@ -0,0 +1,51 @@
{ pkgs ? import <nixpkgs> { inherit system; }
, system ? builtins.currentSystem
, stateDir ? "/var"
, runtimeDir ? "${stateDir}/run"
, logDir ? "${stateDir}/log"
, spoolDir ? "${stateDir}/spool"
, cacheDir ? "${stateDir}/cache"
, tmpDir ? (if stateDir == "/var" then "/tmp" else "${stateDir}/tmp")
, forceDisableUserChange ? false
, processManager
}:
let
constructors = import ../../services-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir spoolDir forceDisableUserChange processManager;
};
containerProviderConstructors = import ../../service-containers-agnostic/constructors.nix {
inherit pkgs stateDir runtimeDir logDir tmpDir cacheDir spoolDir forceDisableUserChange processManager;
};
in
rec {
sshd = {
pkg = constructors.sshd {
extraSSHDConfig = ''
UsePAM yes
'';
};
};
dbus-daemon = {
pkg = constructors.dbus-daemon {
packages = [ pkgs.disnix ];
};
};
apache = containerProviderConstructors.simpleWebappApache {
serverAdmin = "root@localhost";
documentRoot = "/var/www";
enablePHP = true;
};
mysql = containerProviderConstructors.mysql {};
disnix-service = {
pkg = constructors.disnix-service {
inherit dbus-daemon;
containerProviders = [ apache mysql ];
};
};
}

View File

@ -1,4 +1,4 @@
{tomcatConstructorFun, dysnomia, stateDir}: {tomcatConstructorFun, lib, dysnomia, stateDir}:
{ instanceSuffix ? "" { instanceSuffix ? ""
, instanceName ? "tomcat${instanceSuffix}" , instanceName ? "tomcat${instanceSuffix}"
@ -6,7 +6,7 @@
, serverPort ? 8005 , serverPort ? 8005
, httpPort ? 8080, httpsPort ? 8443, ajpPort ? 8009 , httpPort ? 8080, httpsPort ? 8443, ajpPort ? 8009
, commonLibs ? [] , commonLibs ? []
, type , type ? null
, properties ? {} , properties ? {}
}: }:
@ -33,8 +33,10 @@ in
rec { rec {
name = instanceName; name = instanceName;
inherit pkg type catalinaBaseDir; inherit pkg catalinaBaseDir;
tomcatPort = httpPort; tomcatPort = httpPort;
providesContainer = containerName; providesContainer = containerName;
} // lib.optionalAttrs (type != null) {
inherit type;
} // properties } // properties

View File

@ -1,16 +1,16 @@
{apacheConstructorFun, dysnomia, forceDisableUserChange}: {apacheConstructorFun, lib, dysnomia, forceDisableUserChange}:
{ instanceSuffix ? "", instanceName ? "apache${instanceSuffix}" { instanceSuffix ? "", instanceName ? "apache${instanceSuffix}"
, containerName ? "apache-webapplication${instanceSuffix}" , containerName ? "apache-webapplication${instanceSuffix}"
, port ? 80 , port ? 80
, modules ? [], serverName ? "localhost" , modules ? [], serverName ? "localhost"
, serverAdmin , serverAdmin
, documentRoot ? ./webapp , documentRoot ? ../../services-agnostic/http-server-common/webapp
, extraConfig ? "" , extraConfig ? ""
, enableCGI ? false , enableCGI ? false
, enablePHP ? false , enablePHP ? false
, filesetOwner ? null , filesetOwner ? null
, type , type ? null
, properties ? {} , properties ? {}
}: }:
@ -33,8 +33,10 @@ let
in in
{ {
name = instanceName; name = instanceName;
inherit pkg type port documentRoot; inherit pkg port documentRoot;
providesContainer = containerName; providesContainer = containerName;
} // lib.optionalAttrs (type != null) {
inherit type;
} // (if forceDisableUserChange || filesetOwner == null then {} else { } // (if forceDisableUserChange || filesetOwner == null then {} else {
inherit filesetOwner; inherit filesetOwner;
}) // properties }) // properties

View File

@ -23,10 +23,12 @@ in
enableApacheWebApplication = true; enableApacheWebApplication = true;
}); });
inherit forceDisableUserChange; inherit forceDisableUserChange;
inherit (pkgs) lib;
}; };
simpleAppservingTomcat = import ./apache-tomcat/simple-appserving-tomcat.nix { simpleAppservingTomcat = import ./apache-tomcat/simple-appserving-tomcat.nix {
inherit stateDir; inherit stateDir;
inherit (pkgs) lib;
tomcatConstructorFun = constructors.simpleAppservingTomcat; tomcatConstructorFun = constructors.simpleAppservingTomcat;
dysnomia = pkgs.dysnomia.override (origArgs: { dysnomia = pkgs.dysnomia.override (origArgs: {
enableTomcatWebApplication = true; enableTomcatWebApplication = true;
@ -38,6 +40,7 @@ in
dysnomia = pkgs.dysnomia.override (origArgs: { dysnomia = pkgs.dysnomia.override (origArgs: {
enableInfluxDatabase = true; enableInfluxDatabase = true;
}); });
inherit (pkgs) lib;
}; };
simpleMongodb = import ./mongodb/simplemongodb.nix { simpleMongodb = import ./mongodb/simplemongodb.nix {
@ -49,6 +52,7 @@ in
}; };
mysql = import ./mysql { mysql = import ./mysql {
inherit (pkgs) lib;
inherit runtimeDir; inherit runtimeDir;
mysqlConstructorFun = constructors.mysql; mysqlConstructorFun = constructors.mysql;
dysnomia = pkgs.dysnomia.override (origArgs: { dysnomia = pkgs.dysnomia.override (origArgs: {
@ -58,6 +62,7 @@ in
postgresql = import ./postgresql { postgresql = import ./postgresql {
inherit runtimeDir; inherit runtimeDir;
inherit (pkgs) lib;
postgresqlConstructorFun = constructors.postgresql; postgresqlConstructorFun = constructors.postgresql;
dysnomia = pkgs.dysnomia.override (origArgs: { dysnomia = pkgs.dysnomia.override (origArgs: {
enablePostgreSQLDatabase = true; enablePostgreSQLDatabase = true;
@ -66,7 +71,7 @@ in
extendableSupervisord = import ./supervisord/extendable-supervisord.nix { extendableSupervisord = import ./supervisord/extendable-supervisord.nix {
inherit stateDir; inherit stateDir;
inherit (pkgs) stdenv; inherit (pkgs) lib;
supervisordConstructorFun = constructors.extendableSupervisord; supervisordConstructorFun = constructors.extendableSupervisord;
dysnomia = pkgs.dysnomia.override (origArgs: { dysnomia = pkgs.dysnomia.override (origArgs: {
enableSupervisordProgram = true; enableSupervisordProgram = true;
@ -74,6 +79,7 @@ in
}; };
svnserve = import ./svnserve { svnserve = import ./svnserve {
inherit (pkgs) lib;
svnserveConstructorFun = constructors.svnserve; svnserveConstructorFun = constructors.svnserve;
dysnomia = pkgs.dysnomia.override (origArgs: { dysnomia = pkgs.dysnomia.override (origArgs: {
enableSubversionRepository = true; enableSubversionRepository = true;

View File

@ -1,5 +1,16 @@
{influxdbConstructorFun, dysnomia}: {influxdbConstructorFun, lib, dysnomia}:
{instanceSuffix ? "", instanceName ? "influxdb${instanceSuffix}", containerName ? "influx-database${instanceSuffix}", rpcBindIP ? "127.0.0.1", rpcPort ? 8088, httpBindIP ? "", httpPort ? 8086, extraConfig ? "", type, properties ? {}}:
{ instanceSuffix ? ""
, instanceName ? "influxdb${instanceSuffix}"
, containerName ? "influx-database${instanceSuffix}"
, rpcBindIP ? "127.0.0.1"
, rpcPort ? 8088
, httpBindIP ? ""
, httpPort ? 8086
, extraConfig ? ""
, type ? null
, properties ? {}
}:
let let
pkg = influxdbConstructorFun { pkg = influxdbConstructorFun {
@ -20,8 +31,10 @@ let
in in
rec { rec {
name = instanceName; name = instanceName;
inherit pkg type; inherit pkg;
influxdbUsername = instanceName; influxdbUsername = instanceName;
influxdbHttpPort = httpPort; influxdbHttpPort = httpPort;
providesContainer = containerName; providesContainer = containerName;
} // lib.optionalAttrs (type != null) {
inherit type;
} // properties } // properties

View File

@ -6,7 +6,7 @@
, port ? 27017 , port ? 27017
, mongoDumpArgs ? null , mongoDumpArgs ? null
, mongoRestoreArgs ? null , mongoRestoreArgs ? null
, type , type ? null
, properties ? {} , properties ? {}
}: }:
@ -30,9 +30,11 @@ let
in in
{ {
name = instanceName; name = instanceName;
inherit pkg type bindIP port; inherit pkg bindIP port;
mongoPort = port; mongoPort = port;
providesContainer = containerName; providesContainer = containerName;
} // lib.optionalAttrs (type != null) {
inherit type;
} // (if mongoDumpArgs == null then {} else { } // (if mongoDumpArgs == null then {} else {
inherit mongoDumpArgs; inherit mongoDumpArgs;
}) // (if mongoRestoreArgs == null then {} else { }) // (if mongoRestoreArgs == null then {} else {

View File

@ -1,9 +1,9 @@
{mysqlConstructorFun, dysnomia, runtimeDir}: {mysqlConstructorFun, lib, dysnomia, runtimeDir}:
{ instanceSuffix ? "", instanceName ? "mysql${instanceSuffix}" { instanceSuffix ? "", instanceName ? "mysql${instanceSuffix}"
, port ? 3306 , port ? 3306
, containerName ? "mysql-database${instanceSuffix}" , containerName ? "mysql-database${instanceSuffix}"
, type , type ? null
, properties ? {} , properties ? {}
}: }:
@ -44,7 +44,9 @@ rec {
name = instanceName; name = instanceName;
mysqlPort = port; mysqlPort = port;
inherit pkg type mysqlSocket mysqlUsername; inherit pkg mysqlSocket mysqlUsername;
providesContainer = containerName; providesContainer = containerName;
} // lib.optionalAttrs (type != null) {
inherit type;
} // properties } // properties

View File

@ -1,9 +1,9 @@
{postgresqlConstructorFun, dysnomia, runtimeDir}: {postgresqlConstructorFun, lib, dysnomia, runtimeDir}:
{ instanceSuffix ? "", instanceName ? "postgresql${instanceSuffix}" { instanceSuffix ? "", instanceName ? "postgresql${instanceSuffix}"
, containerName ? "postgresql-database${instanceSuffix}" , containerName ? "postgresql-database${instanceSuffix}"
, port ? 5432 , port ? 5432
, type , type ? null
, properties ? {} , properties ? {}
}: }:
@ -32,7 +32,9 @@ rec {
postgresqlPort = port; postgresqlPort = port;
postgresqlUsername = username; postgresqlUsername = username;
inherit pkg type; inherit pkg;
providesContainer = containerName; providesContainer = containerName;
} // lib.optionalAttrs (type != null) {
inherit type;
} // properties } // properties

View File

@ -1,10 +1,10 @@
{supervisordConstructorFun, stdenv, dysnomia, stateDir}: {supervisordConstructorFun, lib, dysnomia, stateDir}:
{ instanceSuffix ? "", instanceName ? "supervisord${instanceSuffix}" { instanceSuffix ? "", instanceName ? "supervisord${instanceSuffix}"
, containerName ? "supervisord-program${instanceSuffix}" , containerName ? "supervisord-program${instanceSuffix}"
, inetHTTPServerPort ? 9001 , inetHTTPServerPort ? 9001
, postInstall ? "" , postInstall ? ""
, type , type ? null
, properties ? {} , properties ? {}
}: }:
@ -28,6 +28,8 @@ let
in in
{ {
name = instanceName; name = instanceName;
inherit pkg type supervisordTargetDir; inherit pkg supervisordTargetDir;
providesContainer = containerName; providesContainer = containerName;
} // lib.optionalAttrs (type != null) {
inherit type;
} // properties } // properties

View File

@ -1,11 +1,11 @@
{svnserveConstructorFun, dysnomia}: {svnserveConstructorFun, lib, dysnomia}:
{ instanceSuffix ? "", instanceName ? "svnserve${instanceSuffix}" { instanceSuffix ? "", instanceName ? "svnserve${instanceSuffix}"
, containerName ? "subversion-repository${instanceSuffix}" , containerName ? "subversion-repository${instanceSuffix}"
, port ? 3690 , port ? 3690
, svnBaseDir , svnBaseDir
, svnGroup ? "root" , svnGroup ? "root"
, type , type ? null
, properties ? {} , properties ? {}
}: }:
@ -28,6 +28,8 @@ let
in in
{ {
name = instanceName; name = instanceName;
inherit pkg type svnGroup svnBaseDir; inherit pkg svnGroup svnBaseDir;
providesContainer = containerName; providesContainer = containerName;
} // lib.optionalAttrs (type != null) {
inherit type;
} // properties } // properties

View File

@ -3,6 +3,8 @@
{ dbus-daemon ? null { dbus-daemon ? null
, dysnomiaProperties ? {} , dysnomiaProperties ? {}
, dysnomiaContainers ? {} , dysnomiaContainers ? {}
, containerProviders ? []
, extraDysnomiaContainersPath ? []
, processManagerContainerSettings ? {} , processManagerContainerSettings ? {}
}: }:
@ -21,10 +23,11 @@ createManagedProcess {
process = "${disnix}/bin/disnix-service"; process = "${disnix}/bin/disnix-service";
path = [ nix dysnomiaPkg disnix inetutils ]; path = [ nix dysnomiaPkg disnix inetutils ];
environment = import ./dysnomia-env.nix { environment = import ./dysnomia-env.nix {
inherit stdenv lib writeTextFile nix-processmgmt processManager dysnomiaProperties dysnomiaContainers processManagerContainerSettings; inherit stdenv lib writeTextFile nix-processmgmt processManager dysnomiaProperties dysnomiaContainers containerProviders extraDysnomiaContainersPath processManagerContainerSettings;
}; };
daemonExtraArgs = [ "--daemon" ]; daemonExtraArgs = [ "--daemon" ];
dependencies = lib.optional (dbus-daemon != null) dbus-daemon.pkg; dependencies = lib.optional (dbus-daemon != null) dbus-daemon.pkg
++ map (containerProvider: containerProvider.pkg) containerProviders;
credentials = { credentials = {
groups = { groups = {

View File

@ -1,4 +1,15 @@
{stdenv, lib, writeTextFile, nix-processmgmt, processManager, dysnomiaProperties, dysnomiaContainers, processManagerContainerSettings}: { stdenv
, lib
, writeTextFile
, nix-processmgmt
, processManager
, dysnomiaProperties
, dysnomiaContainers
, containerProviders
, extraDysnomiaContainersPath
, processManagerContainerSettings
}:
let let
# Take some default system properties, override them with the specified Dysnomia properties # Take some default system properties, override them with the specified Dysnomia properties
@ -22,7 +33,7 @@ let
text = printProperties _dysnomiaProperties; text = printProperties _dysnomiaProperties;
}; };
# For process manager that manages the disnix-serivce, expose it as a container # For process managers that manages the disnix-service, expose it as a container
processManagerDysnomiaModule = import "${nix-processmgmt}/nixproc/derive-dysnomia-process-type.nix" { processManagerDysnomiaModule = import "${nix-processmgmt}/nixproc/derive-dysnomia-process-type.nix" {
inherit processManager; inherit processManager;
}; };
@ -43,6 +54,10 @@ let
wrapper = {}; wrapper = {};
} // processManagerContainer) dysnomiaContainers; } // processManagerContainer) dysnomiaContainers;
containerProvidersContainerPath = map (containerProvider: "${containerProvider.pkg}/etc/dysnomia/containers") containerProviders;
containerProvidersModulesPath = map (containerProvider: "${containerProvider.pkg}/libexec/dysnomia") containerProviders;
# Generate container configuration files # Generate container configuration files
containersDir = stdenv.mkDerivation { containersDir = stdenv.mkDerivation {
name = "dysnomia-containers"; name = "dysnomia-containers";
@ -66,5 +81,6 @@ let
in in
{ {
DYSNOMIA_PROPERTIES = dysnomiaPropertiesFile; DYSNOMIA_PROPERTIES = dysnomiaPropertiesFile;
DYSNOMIA_CONTAINERS_PATH = containersDir; DYSNOMIA_CONTAINERS_PATH = builtins.concatStringsSep ":" ([containersDir] ++ containerProvidersContainerPath ++ extraDysnomiaContainersPath);
DYSNOMIA_MODULES_PATH = builtins.concatStringsSep ":" containerProvidersModulesPath;
} }