summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Layher <mdlayher@gmail.com>2020-06-07 22:41:43 -0400
committerMatt Layher <mdlayher@gmail.com>2020-06-14 10:07:16 -0400
commitf1a4b100fd198678a737759ce0cae994f4f75a58 (patch)
tree117e3b1b011b42a071cd8ffa10ee2f11d2261d58
parent92c3267ad4adcf5db15baf2cbb25c15f65b6b86f (diff)
nixos/corerad: add settings option to supersede configFile
Signed-off-by: Matt Layher <mdlayher@gmail.com>
-rw-r--r--nixos/modules/services/networking/corerad.nix43
-rw-r--r--nixos/tests/corerad.nix35
2 files changed, 67 insertions, 11 deletions
diff --git a/nixos/modules/services/networking/corerad.nix b/nixos/modules/services/networking/corerad.nix
index 1a2c4aec6651..2d4d414aae10 100644
--- a/nixos/modules/services/networking/corerad.nix
+++ b/nixos/modules/services/networking/corerad.nix
@@ -4,14 +4,48 @@ with lib;
let
cfg = config.services.corerad;
+
+ writeTOML = name: x:
+ pkgs.runCommandNoCCLocal name { } ''
+ echo '${builtins.toJSON x}' | ${pkgs.go-toml}/bin/jsontoml > $out
+ '';
+
in {
- meta = {
- maintainers = with maintainers; [ mdlayher ];
- };
+ meta.maintainers = with maintainers; [ mdlayher ];
options.services.corerad = {
enable = mkEnableOption "CoreRAD IPv6 NDP RA daemon";
+ settings = mkOption {
+ type = types.uniq types.attrs;
+ example = literalExample ''
+ {
+ interfaces = [
+ # eth0 is an upstream interface monitoring for IPv6 router advertisements.
+ {
+ name = "eth0";
+ monitor = true;
+ }
+ # eth1 is a downstream interface advertising IPv6 prefixes for SLAAC.
+ {
+ name = "eth1";
+ advertise = true;
+ prefix = [{ prefix = "::/64"; }];
+ }
+ ];
+ # Optionally enable Prometheus metrics.
+ debug = {
+ address = "localhost:9430";
+ prometheus = true;
+ };
+ }
+ '';
+ description = ''
+ Configuration for CoreRAD, see <link xlink:href="https://github.com/mdlayher/corerad/blob/master/internal/config/default.toml"/>
+ for supported values. Ignored if configFile is set.
+ '';
+ };
+
configFile = mkOption {
type = types.path;
example = literalExample "\"\${pkgs.corerad}/etc/corerad/corerad.toml\"";
@@ -27,6 +61,9 @@ in {
};
config = mkIf cfg.enable {
+ # Prefer the config file over settings if both are set.
+ services.corerad.configFile = mkDefault (writeTOML "corerad.toml" cfg.settings);
+
systemd.services.corerad = {
description = "CoreRAD IPv6 NDP RA daemon";
after = [ "network.target" ];
diff --git a/nixos/tests/corerad.nix b/nixos/tests/corerad.nix
index 741fa448f680..72ab255b1916 100644
--- a/nixos/tests/corerad.nix
+++ b/nixos/tests/corerad.nix
@@ -3,7 +3,7 @@ import ./make-test-python.nix (
nodes = {
router = {config, pkgs, ...}: {
config = {
- # This machines simulates a router with IPv6 forwarding and a static IPv6 address.
+ # This machine simulates a router with IPv6 forwarding and a static IPv6 address.
boot.kernel.sysctl = {
"net.ipv6.conf.all.forwarding" = true;
};
@@ -14,13 +14,25 @@ import ./make-test-python.nix (
enable = true;
# Serve router advertisements to the client machine with prefix information matching
# any IPv6 /64 prefixes configured on this interface.
- configFile = pkgs.writeText "corerad.toml" ''
- [[interfaces]]
- name = "eth1"
- advertise = true
- [[interfaces.prefix]]
- prefix = "::/64"
- '';
+ #
+ # This configuration is identical to the example in the CoreRAD NixOS module.
+ settings = {
+ interfaces = [
+ {
+ name = "eth0";
+ monitor = true;
+ }
+ {
+ name = "eth1";
+ advertise = true;
+ prefix = [{ prefix = "::/64"; }];
+ }
+ ];
+ debug = {
+ address = "localhost:9430";
+ prometheus = true;
+ };
+ };
};
};
};
@@ -66,5 +78,12 @@ import ./make-test-python.nix (
assert (
"/64 scope global temporary" in addrs
), "SLAAC temporary address was not configured on client after router advertisement"
+
+ with subtest("Verify HTTP debug server is configured"):
+ out = router.succeed("curl localhost:9430/metrics")
+
+ assert (
+ "corerad_build_info" in out
+ ), "Build info metric was not found in Prometheus output"
'';
})