mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-26 08:53:21 +00:00
nixos/tests/netbox-upgrade: init
Test that the upgrade from NetBox 3.3 to NetBox 3.5 runs fine
This commit is contained in:
parent
d1b0a9543d
commit
de8086be4f
@ -519,6 +519,7 @@ in {
|
|||||||
networking.scripted = handleTest ./networking.nix { networkd = false; };
|
networking.scripted = handleTest ./networking.nix { networkd = false; };
|
||||||
netbox = handleTest ./web-apps/netbox.nix { inherit (pkgs) netbox; };
|
netbox = handleTest ./web-apps/netbox.nix { inherit (pkgs) netbox; };
|
||||||
netbox_3_3 = handleTest ./web-apps/netbox.nix { netbox = pkgs.netbox_3_3; };
|
netbox_3_3 = handleTest ./web-apps/netbox.nix { netbox = pkgs.netbox_3_3; };
|
||||||
|
netbox-upgrade = handleTest ./web-apps/netbox-upgrade.nix {};
|
||||||
# TODO: put in networking.nix after the test becomes more complete
|
# TODO: put in networking.nix after the test becomes more complete
|
||||||
networkingProxy = handleTest ./networking-proxy.nix {};
|
networkingProxy = handleTest ./networking-proxy.nix {};
|
||||||
nextcloud = handleTest ./nextcloud {};
|
nextcloud = handleTest ./nextcloud {};
|
||||||
|
85
nixos/tests/web-apps/netbox-upgrade.nix
Normal file
85
nixos/tests/web-apps/netbox-upgrade.nix
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
import ../make-test-python.nix ({ lib, pkgs, ... }: let
|
||||||
|
oldNetbox = pkgs.netbox_3_3;
|
||||||
|
in {
|
||||||
|
name = "netbox-upgrade";
|
||||||
|
|
||||||
|
meta = with lib.maintainers; {
|
||||||
|
maintainers = [ minijackson ];
|
||||||
|
};
|
||||||
|
|
||||||
|
nodes.machine = { config, ... }: {
|
||||||
|
services.netbox = {
|
||||||
|
enable = true;
|
||||||
|
package = oldNetbox;
|
||||||
|
secretKeyFile = pkgs.writeText "secret" ''
|
||||||
|
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
services.nginx = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
recommendedProxySettings = true;
|
||||||
|
|
||||||
|
virtualHosts.netbox = {
|
||||||
|
default = true;
|
||||||
|
locations."/".proxyPass = "http://localhost:${toString config.services.netbox.port}";
|
||||||
|
locations."/static/".alias = "/var/lib/netbox/static/";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
users.users.nginx.extraGroups = [ "netbox" ];
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [ 80 ];
|
||||||
|
|
||||||
|
specialisation.upgrade.configuration.services.netbox.package = lib.mkForce pkgs.netbox;
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript = { nodes, ... }:
|
||||||
|
let
|
||||||
|
apiVersion = version: lib.pipe version [
|
||||||
|
(lib.splitString ".")
|
||||||
|
(lib.take 2)
|
||||||
|
(lib.concatStringsSep ".")
|
||||||
|
];
|
||||||
|
oldApiVersion = apiVersion oldNetbox.version;
|
||||||
|
newApiVersion = apiVersion pkgs.netbox.version;
|
||||||
|
in
|
||||||
|
''
|
||||||
|
start_all()
|
||||||
|
machine.wait_for_unit("netbox.target")
|
||||||
|
machine.wait_for_unit("nginx.service")
|
||||||
|
machine.wait_until_succeeds("journalctl --since -1m --unit netbox --grep Listening")
|
||||||
|
|
||||||
|
def api_version(headers):
|
||||||
|
header = [header for header in headers.splitlines() if header.startswith("API-Version:")][0]
|
||||||
|
return header.split()[1]
|
||||||
|
|
||||||
|
def check_api_version(version):
|
||||||
|
headers = machine.succeed(
|
||||||
|
"curl -sSfL http://localhost/api/ --head -H 'Content-Type: application/json'"
|
||||||
|
)
|
||||||
|
assert api_version(headers) == version
|
||||||
|
|
||||||
|
with subtest("NetBox version is the old one"):
|
||||||
|
check_api_version("${oldApiVersion}")
|
||||||
|
|
||||||
|
# Somehow, even though netbox-housekeeping.service has After=netbox.service,
|
||||||
|
# netbox-housekeeping.service and netbox.service still get started at the
|
||||||
|
# same time, making netbox-housekeeping fail (can't really do some house
|
||||||
|
# keeping job if the database is not correctly formed).
|
||||||
|
#
|
||||||
|
# So we don't check that the upgrade went well, we just check that
|
||||||
|
# netbox.service is active, and that netbox-housekeeping can be run
|
||||||
|
# successfully afterwards.
|
||||||
|
#
|
||||||
|
# This is not good UX, but the system should be working nonetheless.
|
||||||
|
machine.execute("${nodes.machine.system.build.toplevel}/specialisation/upgrade/bin/switch-to-configuration test >&2")
|
||||||
|
|
||||||
|
machine.wait_for_unit("netbox.service")
|
||||||
|
machine.succeed("systemctl start netbox-housekeeping.service")
|
||||||
|
|
||||||
|
with subtest("NetBox version is the new one"):
|
||||||
|
check_api_version("${newApiVersion}")
|
||||||
|
'';
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user