nixos/ntpd-rs: Handle configuring NTP pools (#403903)

Changed files
+27 -5
nixos
modules
services
networking
tests
+1 -1
nixos/modules/services/networking/ntp/ntpd-rs.nix
···
};
source = lib.mkIf cfg.useNetworkingTimeServers (
map (ts: {
-
mode = "server";
address = ts;
}) config.networking.timeServers
);
···
};
source = lib.mkIf cfg.useNetworkingTimeServers (
map (ts: {
+
mode = if lib.strings.hasInfix "pool" ts then "pool" else "server";
address = ts;
}) config.networking.timeServers
);
+26 -4
nixos/tests/ntpd-rs.nix
···
client = {
services.ntpd-rs = {
enable = true;
-
metrics.enable = true;
useNetworkingTimeServers = false;
settings = {
source = [
···
};
};
server = {
-
networking.firewall.allowedUDPPorts = [ 123 ];
services.ntpd-rs = {
enable = true;
metrics.enable = true;
settings = {
server = [
{ listen = "[::]:123"; }
];
···
for machine in (server, client):
machine.wait_for_unit('multi-user.target')
machine.succeed('systemctl is-active ntpd-rs.service')
-
machine.succeed('systemctl is-active ntpd-rs-metrics.service')
-
machine.succeed('curl http://localhost:9975/metrics | grep ntp_uptime_seconds')
'';
}
)
···
client = {
services.ntpd-rs = {
enable = true;
+
metrics.enable = false;
useNetworkingTimeServers = false;
settings = {
source = [
···
};
};
server = {
+
networking.firewall = {
+
allowedTCPPorts = [
+
9975
+
];
+
allowedUDPPorts = [
+
123
+
];
+
};
+
services.ntpd-rs = {
enable = true;
metrics.enable = true;
settings = {
+
observability = {
+
metrics-exporter-listen = "[::]:9975";
+
};
server = [
{ listen = "[::]:123"; }
];
···
for machine in (server, client):
machine.wait_for_unit('multi-user.target')
machine.succeed('systemctl is-active ntpd-rs.service')
+
+
client.fail('systemctl is-active ntpd-rs-metrics.service')
+
server.succeed('systemctl is-active ntpd-rs-metrics.service')
+
+
server.wait_for_open_port(9975)
+
client.succeed('curl http://server:9975/metrics | grep ntp_uptime_seconds')
+
server.fail('curl --fail --connect-timeout 2 http://client:9975/metrics | grep ntp_uptime_seconds')
+
+
client.succeed("ntp-ctl status | grep server:123")
+
server.succeed("ntp-ctl status | grep '\[::\]:123'")
+
+
client.succeed("grep '^mode = \"server\"' $(systemctl status ntpd-rs | grep -oE '/nix/store[^ ]*ntpd-rs.toml')")
+
server.succeed("grep '^mode = \"pool\"' $(systemctl status ntpd-rs | grep -oE '/nix/store[^ ]*ntpd-rs.toml')")
'';
}
)