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 {
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 = rec {
sshd = {
pkg = constructors.sshd {
extraSSHDConfig = ''
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 ? ""
, instanceName ? "tomcat${instanceSuffix}"
@ -6,7 +6,7 @@
, serverPort ? 8005
, httpPort ? 8080, httpsPort ? 8443, ajpPort ? 8009
, commonLibs ? []
, type
, type ? null
, properties ? {}
}:
@ -33,8 +33,10 @@ in
rec {
name = instanceName;
inherit pkg type catalinaBaseDir;
inherit pkg catalinaBaseDir;
tomcatPort = httpPort;
providesContainer = containerName;
} // lib.optionalAttrs (type != null) {
inherit type;
} // properties

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,6 +3,8 @@
{ dbus-daemon ? null
, dysnomiaProperties ? {}
, dysnomiaContainers ? {}
, containerProviders ? []
, extraDysnomiaContainersPath ? []
, processManagerContainerSettings ? {}
}:
@ -21,10 +23,11 @@ createManagedProcess {
process = "${disnix}/bin/disnix-service";
path = [ nix dysnomiaPkg disnix inetutils ];
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" ];
dependencies = lib.optional (dbus-daemon != null) dbus-daemon.pkg;
dependencies = lib.optional (dbus-daemon != null) dbus-daemon.pkg
++ map (containerProvider: containerProvider.pkg) containerProviders;
credentials = {
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
# Take some default system properties, override them with the specified Dysnomia properties
@ -22,7 +33,7 @@ let
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" {
inherit processManager;
};
@ -43,6 +54,10 @@ let
wrapper = {};
} // processManagerContainer) dysnomiaContainers;
containerProvidersContainerPath = map (containerProvider: "${containerProvider.pkg}/etc/dysnomia/containers") containerProviders;
containerProvidersModulesPath = map (containerProvider: "${containerProvider.pkg}/libexec/dysnomia") containerProviders;
# Generate container configuration files
containersDir = stdenv.mkDerivation {
name = "dysnomia-containers";
@ -66,5 +81,6 @@ let
in
{
DYSNOMIA_PROPERTIES = dysnomiaPropertiesFile;
DYSNOMIA_CONTAINERS_PATH = containersDir;
DYSNOMIA_CONTAINERS_PATH = builtins.concatStringsSep ":" ([containersDir] ++ containerProvidersContainerPath ++ extraDysnomiaContainersPath);
DYSNOMIA_MODULES_PATH = builtins.concatStringsSep ":" containerProvidersModulesPath;
}