Fediversity/deployment/check/netbox-ips/nixosTest.nix
Kiara Grouwstra e64457a4d0
netbox: unpass system
Signed-off-by: Kiara Grouwstra <kiara@procolix.eu>
2025-11-06 09:50:43 +01:00

92 lines
2.8 KiB
Nix

{
lib,
pkgs,
sources,
...
}:
let
inherit (pkgs.callPackage ../../utils.nix { }) evalOption;
backendPort = builtins.toString 8080;
tfBackend = fragment: {
address = "http://localhost:${backendPort}/state/${fragment}";
};
inherit
(pkgs.callPackage ../../run {
inherit sources;
})
tf-netbox-store-ips
tf-netbox-get-ip
;
netbox-store-ips = evalOption "tf-netbox-store-ips" tf-netbox-store-ips {
httpBackend = tfBackend "proxmox-test/store-ips";
startAddress = "192.168.10.236/24";
endAddress = "192.168.10.240/24";
};
netbox-get-ip = evalOption "tf-netbox-get-ip" tf-netbox-get-ip {
httpBackend = tfBackend "proxmox-test/get-ip";
};
netboxUser = "netbox";
netboxPassword = "netbox";
changePassword = pkgs.writeText "change-password.py" ''
from users.models import User
u = User.objects.get(username='${netboxUser}')
u.set_password('${netboxPassword}')
u.save()
'';
in
{
_class = "nixosTest";
name = "netbox-ips";
nodes.deployer =
{ ... }:
{
imports = [
../../modules/terraform-backend
];
environment.systemPackages = [
pkgs.jq
(pkgs.callPackage ../../run/tf-netbox-store-ips/tf.nix { })
(pkgs.callPackage ../../run/tf-netbox-get-ip/tf.nix { })
];
services.terraform-backend = {
enable = true;
settings = {
LISTEN_ADDR = ":${backendPort}";
# FIXME randomly generate this
KMS_KEY = "tsjxw9NjKUBUlzbTnD7orqIAdEmpGYRARvxD51jtY+o=";
};
};
services.netbox = {
enable = true;
# FIXME randomly generate this
secretKeyFile = pkgs.writeText "netbox-secret" "634da8232803a8155a58584d3186127000207e079d600fc10a890e5cd59c2f4b8f0e0654005944d2ce87f5be9c22ceebec66";
port = 8001;
};
systemd.services.netbox.serviceConfig.TimeoutStartSec = "15m";
};
extraTestScript = ''
deployer.succeed("""
netbox-manage createsuperuser --noinput --user "${netboxUser}" --email "test@domain.tld" >&2
cat '${changePassword}' | netbox-manage shell
""")
netbox_token = deployer.succeed("""
curl -X POST -H "Content-Type: application/json" -H "Accept: application/json" http://localhost:8001/api/users/tokens/provision/ --data '{"username":"${netboxUser}","password":"${netboxPassword}"}' | jq -r .key
""").strip()
ip_range_id = deployer.succeed(f"""
export NETBOX_SERVER_URL="localhost:8001"
export NETBOX_API_TOKEN="{netbox_token}"
${lib.getExe netbox-store-ips.run} | jq -r '.id.value'
""").strip()
ipv4 = deployer.succeed(f"""
export NETBOX_SERVER_URL="localhost:8001"
export NETBOX_API_TOKEN="{netbox_token}"
export TF_VAR_ip_range_id={ip_range_id}
${lib.getExe netbox-get-ip.run} | jq -r '.ipv4.value'
""").strip()
assert ipv4 == "192.168.10.236/24"
'';
}