Add constructor functions for deploying container provider services with Disnix

This commit is contained in:
Sander van der Burg 2020-04-20 20:46:19 +02:00 committed by Sander van der Burg
parent daca434313
commit 4b4250e0b6
6 changed files with 204 additions and 0 deletions

View File

@ -0,0 +1,56 @@
{ pkgs
, stateDir
, logDir
, runtimeDir
, cacheDir
, tmpDir
, forceDisableUserChange
, processManager
}:
let
constructors = import ../services-agnostic/constructors.nix {
inherit pkgs stateDir logDir runtimeDir cacheDir tmpDir forceDisableUserChange processManager;
};
in
{
simpleWebappApache = import ./simple-webapp-apache.nix {
apacheConstructorFun = constructors.simpleWebappApache;
dysnomia = pkgs.dysnomia.override (origArgs: {
enableApacheWebApplication = true;
});
};
simpleAppservingTomcat = import ./simple-appserving-tomcat.nix {
inherit stateDir;
tomcatConstructorFun = constructors.simpleAppservingTomcat;
dysnomia = pkgs.dysnomia.override (origArgs: {
enableTomcatWebApplication = true;
});
};
mysql = import ./mysql.nix {
inherit runtimeDir;
mysqlConstructorFun = constructors.mysql;
dysnomia = pkgs.dysnomia.override (origArgs: {
enableMySQLDatabase = true;
});
};
simpleMongodb = import ./simplemongodb.nix {
inherit (pkgs) stdenv;
mongodbConstructorFun = constructors.simpleMongodb;
dysnomia = pkgs.dysnomia.override (origArgs: {
enableMongoDatabase = true;
});
};
extendableSupervisord = import ./extendable-supervisord.nix {
inherit stateDir;
inherit (pkgs) stdenv;
supervisordConstructorFun = constructors.extendableSupervisord;
dysnomia = pkgs.dysnomia.override (origArgs: {
enableSupervisordProgram = true;
});
};
}

View File

@ -0,0 +1,28 @@
{supervisordConstructorFun, stdenv, dysnomia, stateDir}:
{instanceSuffix ? "", inetHTTPServerPort ? 9001, postInstall ? "", type}:
let
instanceName = "supervisord${instanceSuffix}";
supervisordTargetDir = "${stateDir}/lib/${instanceName}/conf.d";
pkg = supervisordConstructorFun {
inherit instanceSuffix inetHTTPServerPort;
postInstall = ''
# Add Dysnomia container configuration file for Supervisord
mkdir -p $out/etc/dysnomia/containers
cat > $out/etc/dysnomia/containers/supervisord-program${instanceSuffix} <<EOF
supervisordTargetDir="${supervisordTargetDir}"
EOF
# Copy the Dysnomia module that manages a Supervisord program
mkdir -p $out/libexec/dysnomia
ln -s ${dysnomia}/libexec/dysnomia/supervisord-program $out/libexec/dysnomia
'';
};
in
{
name = "supervisord${instanceSuffix}";
inherit pkg type supervisordTargetDir;
providesContainer = "supervisord-program";
}

View File

@ -0,0 +1,32 @@
{mysqlConstructorFun, dysnomia, runtimeDir}:
{port ? 3306, instanceSuffix ? "", type}:
let
mysqlSocket = "${runtimeDir}/mysqld${instanceSuffix}/mysqld${instanceSuffix}.sock";
pkg = mysqlConstructorFun {
inherit port instanceSuffix;
postInstall = ''
# Add Dysnomia container configuration file for MySQL database
mkdir -p $out/etc/dysnomia/containers
cat > $out/etc/dysnomia/containers/mysql-database${instanceSuffix} <<EOF
mysqlPort=${toString port}
mysqlUsername=root
mysqlPassword=
mysqlSocket=${mysqlSocket}
EOF
# Copy the Dysnomia module that manages MySQL database
mkdir -p $out/libexec/dysnomia
ln -s ${dysnomia}/libexec/dysnomia/mysql-database $out/libexec/dysnomia
'';
};
in
rec {
name = "mysql${instanceSuffix}";
mysqlPort = port;
inherit pkg type mysqlSocket;
providesContainer = "mysql-database${instanceSuffix}";
}

View File

@ -0,0 +1,31 @@
{tomcatConstructorFun, dysnomia, stateDir}:
{instanceSuffix ? "", serverPort ? 8005, httpPort ? 8080, httpsPort ? 8443, ajpPort ? 8009, commonLibs ? [], type}:
let
catalinaBaseDir = "${stateDir}/tomcat${instanceSuffix}";
pkg = tomcatConstructorFun {
inherit instanceSuffix serverPort httpPort httpsPort ajpPort commonLibs;
postInstall = ''
# Add Dysnomia container configuration file for a Tomcat web application
mkdir -p $out/etc/dysnomia/containers
cat > $out/etc/dysnomia/containers/tomcat-webapplication${instanceSuffix} <<EOF
tomcatPort=${toString httpPort}
catalinaBaseDir=${catalinaBaseDir}
EOF
# Copy the Dysnomia module that manages MySQL database
mkdir -p $out/libexec/dysnomia
ln -s ${dysnomia}/libexec/dysnomia/tomcat-webapplication $out/libexec/dysnomia
'';
};
in
rec {
name = "simpleAppservingTomcat${instanceSuffix}";
inherit pkg type catalinaBaseDir;
tomcatPort = httpPort;
providesContainer = "tomcat-webapplication${instanceSuffix}";
}

View File

@ -0,0 +1,27 @@
{apacheConstructorFun, dysnomia}:
{instanceSuffix ? "", port ? 80, modules ? [], serverName ? "localhost", serverAdmin, documentRoot ? ./webapp, extraConfig ? "", enablePHP ? false, filesetOwner ? null, type}:
let
pkg = apacheConstructorFun {
inherit instanceSuffix port modules serverName serverAdmin documentRoot extraConfig enablePHP;
postInstall = ''
# Add Dysnomia container configuration file for the Apache HTTP server
mkdir -p $out/etc/dysnomia/containers
cat > $out/etc/dysnomia/containers/apache-webapplication${instanceSuffix} <<EOF
httpPort=${toString port}
documentRoot=${documentRoot}
EOF
# Copy the Dysnomia module that manages an Apache web application
mkdir -p $out/libexec/dysnomia
ln -s ${dysnomia}/libexec/dysnomia/apache-webapplication $out/libexec/dysnomia
'';
};
in
{
name = "simpleWebappApache${instanceSuffix}";
inherit pkg type port;
providesContainer = "apache-webapplication";
} // (if filesetOwner == null then {} else {
inherit filesetOwner;
})

View File

@ -0,0 +1,30 @@
{mongodbConstructorFun, stdenv, dysnomia}:
{instanceSuffix ? "", bindIP ? "127.0.0.1", port ? 27017, mongoDumpArgs ? null, mongoRestoreArgs ? null, type}:
let
pkg = mongodbConstructorFun {
inherit instanceSuffix bindIP port;
postInstall = ''
# Add Dysnomia container configuration file for MongoDB
mkdir -p $out/etc/dysnomia/containers
cat > $out/etc/dysnomia/containers/mongo-database${instanceSuffix} <<EOF
${stdenv.lib.optionalString (mongoDumpArgs != null) (toString mongoDumpArgs)}"}
${stdenv.lib.optionalString (mongoRestoreArgs != null) (toString mongoRestoreArgs)}"}
EOF
# Copy the Dysnomia module that manages a Mongo database
mkdir -p $out/libexec/dysnomia
ln -s ${dysnomia}/libexec/dysnomia/mongo-database $out/libexec/dysnomia
'';
};
in
{
name = "mongodb${instanceSuffix}";
inherit pkg type bindIP port;
providesContainer = "mongo-database";
} // (if mongoDumpArgs == null then {} else {
inherit mongoDumpArgs;
}) // (if mongoRestoreArgs == null then {} else {
inherit mongoRestoreArgs;
})