Files
k8scd/nix-infra-machine/app_modules/mongodb-pod/default.nix
T
2026-03-15 18:31:53 +01:00

62 lines
1.4 KiB
Nix

{ config, pkgs, lib, ... }:
let
appName = "mongodb-pod";
appPort = 27017;
cfg = config.infrastructure.${appName};
dataDir = "/var/lib/mongodb-pod";
execStartPreScript = pkgs.writeShellScript "preStart" ''
${pkgs.coreutils}/bin/mkdir -p ${dataDir}
'';
in
{
options.infrastructure.${appName} = {
enable = lib.mkEnableOption "infrastructure.mongodb-pod oci";
image = lib.mkOption {
type = lib.types.str;
description = "MongoDB Docker image to use.";
default = "mongo:6";
example = "mongo:4.4.29-focal";
};
bindToIp = lib.mkOption {
type = lib.types.str;
description = "IP address to bind.";
default = "127.0.0.1";
};
bindToPort = lib.mkOption {
type = lib.types.int;
description = "Port to bind.";
default = appPort;
};
};
config = lib.mkIf cfg.enable {
# https://stackoverflow.com/questions/42912755/how-to-create-a-db-for-mongodb-container-on-start-up
infrastructure.oci-containers.backend = "podman";
infrastructure.oci-containers.containers.${appName} = {
app = {
name = appName;
};
image = cfg.image;
autoStart = true;
ports = [
"${cfg.bindToIp}:${toString cfg.bindToPort}:27017"
];
bindToIp = cfg.bindToIp;
volumes = [
"${dataDir}:/data/db"
];
execHooks = {
ExecStartPre = [
"${execStartPreScript}"
];
};
};
};
}