From 0ddfd2d3ec9c7a5b6fd673416ada972998b0481c Mon Sep 17 00:00:00 2001 From: Leonhard Kost Date: Mon, 9 Feb 2026 18:15:12 +0100 Subject: [PATCH] fix(dyndns): finally make it work --- nixos/server/dyndns.nix | 15 +++++++++------ nixos/server/dyndns.py | 7 ++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/nixos/server/dyndns.nix b/nixos/server/dyndns.nix index 96b5fe3..faab3a3 100644 --- a/nixos/server/dyndns.nix +++ b/nixos/server/dyndns.nix @@ -3,15 +3,18 @@ pkgs, ... }: +let + pyenv = pkgs.python3.withPackages (ps: with ps; [ nc-dnsapi ]); +in { users.groups.dyndns = { }; users.users.dyndns = { isSystemUser = true; group = "dyndns"; - packages = [ pkgs.python313Packages.nc-dnsapi ]; }; systemd.timers."dyndns" = { + requires = [ "network-online.target" ]; wantedBy = [ "timers.target" ]; timerConfig = { OnBootSec = "5m"; @@ -22,11 +25,11 @@ systemd.services."dyndns" = { script = '' - NC_CUSTOMER=${"$(cat " + config.age.secrets.nc_customer.path + ")"} - NC_API_PASSWORD=${"$(cat " + config.age.secrets.nc_api_password.path + ")"} - NC_API_KEY=${"$(cat " + config.age.secrets.nc_api_key.path + ")"} - NC_DOMAIN=${"$(cat " + config.age.secrets.nc_domain.path + ")"} - ${pkgs.python313}/bin/python3 -c "${builtins.readFile ./dyndns.py}" + NC_CUSTOMER=${"$(cat " + config.age.secrets.nc_customer.path + ")"} \ + NC_API_PASSWORD=${"$(cat " + config.age.secrets.nc_api_password.path + ")"} \ + NC_API_KEY=${"$(cat " + config.age.secrets.nc_api_key.path + ")"} \ + NC_DOMAIN=${"$(cat " + config.age.secrets.nc_domain.path + ")"} \ + ${pyenv.interpreter} ${./dyndns.py} ''; serviceConfig = { Type = "oneshot"; diff --git a/nixos/server/dyndns.py b/nixos/server/dyndns.py index 9b8dda3..5e401f6 100644 --- a/nixos/server/dyndns.py +++ b/nixos/server/dyndns.py @@ -6,7 +6,7 @@ api_password = os.environ["NC_API_PASSWORD"] api_key = os.environ["NC_API_KEY"] domain = os.environ["NC_DOMAIN"] -ip = str(urllib3.request("GET", "https://api.ipify.org").data) +ip = urllib3.request("GET", "https://api.ipify.org").data.decode("ascii") with Client(customer, api_key, api_password) as api: to_be_updated = [] @@ -21,5 +21,6 @@ with Client(customer, api_key, api_password) as api: api.update_dns_records(domain, to_be_updated) zone = api.dns_zone(domain) - zone.ttl = 300 - api.update_dns_zone(domain, zone) + if zone.ttl != 300: + zone.ttl = 300 + api.update_dns_zone(domain, zone)