Files
nixos-docker-network/default.nix
2020-06-25 22:33:20 +02:00

52 lines
1.2 KiB
Nix

{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.docker-networks;
dockerNetwork = { ... }: {
options = {
usedBy = mkOption {
type = with types; listOf str;
default = [];
};
};
};
mkService = name: network: let
mkBefore = map (x: "docker-${x}.service") network.usedBy;
in rec {
wantedBy = [ "multi-user.target" ];
after = [ "docker.service" "docker.socket" ];
before = mkBefore;
requires = after;
serviceConfig = {
ExecStart = pkgs.writeScript "docker-network-create-${name}" ''
#!${pkgs.runtimeShell} -e
set -x
if [[ -z "$(${pkgs.docker}/bin/docker network ls | grep ${name} | tr -d '\n')" ]]; then
${pkgs.docker}/bin/docker network create ${name}
fi
'';
ExecStop = ''
${pkgs.docker}/bin/docker network rm ${name}
'';
RemainAfterExit="true";
Type="oneshot";
};
};
in
{
options.docker-networks = mkOption {
default = {};
type = types.attrsOf (types.submodule dockerNetwork);
description = "docker networks";
};
config = mkIf (cfg != {}) {
systemd.services = mapAttrs' (n: v: nameValuePair "docker-network-${n}" (mkService n v)) cfg;
};
}