mirror of
https://github.com/SebastianWendel/nixpkgs.git
synced 2024-09-20 12:29:02 +02:00
Merge pull request #289278 from mkg20001/incusui
modules/incus: add ui flag
This commit is contained in:
commit
f542eeb243
|
@ -97,6 +97,12 @@ in
|
|||
considered failed and systemd will attempt to restart it.
|
||||
'';
|
||||
};
|
||||
|
||||
ui = {
|
||||
enable = lib.mkEnableOption (lib.mdDoc "(experimental) Incus UI");
|
||||
|
||||
package = lib.mkPackageOption pkgs [ "incus" "ui" ] { };
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -165,10 +171,12 @@ in
|
|||
"${config.boot.zfs.package}/lib/udev"
|
||||
];
|
||||
|
||||
environment = {
|
||||
environment = lib.mkMerge [ {
|
||||
# Override Path to the LXC template configuration directory
|
||||
INCUS_LXC_TEMPLATE_CONFIG = "${pkgs.lxcfs}/share/lxc/config";
|
||||
};
|
||||
} (lib.mkIf (cfg.ui.enable) {
|
||||
"INCUS_UI" = cfg.ui.package;
|
||||
}) ];
|
||||
|
||||
serviceConfig = {
|
||||
ExecStart = "${cfg.package}/bin/incusd --group incus-admin";
|
||||
|
|
|
@ -9,5 +9,6 @@
|
|||
lxd-to-incus = import ./lxd-to-incus.nix { inherit system pkgs; };
|
||||
preseed = import ./preseed.nix { inherit system pkgs; };
|
||||
socket-activated = import ./socket-activated.nix { inherit system pkgs; };
|
||||
ui = import ./ui.nix {inherit system pkgs;};
|
||||
virtual-machine = handleTestOn [ "x86_64-linux" ] ./virtual-machine.nix { inherit system pkgs; };
|
||||
}
|
||||
|
|
63
nixos/tests/incus/ui.nix
Normal file
63
nixos/tests/incus/ui.nix
Normal file
|
@ -0,0 +1,63 @@
|
|||
import ../make-test-python.nix ({ pkgs, lib, ... }: {
|
||||
name = "incus-ui";
|
||||
|
||||
meta = {
|
||||
maintainers = lib.teams.lxc.members;
|
||||
};
|
||||
|
||||
nodes.machine = { lib, ... }: {
|
||||
virtualisation = {
|
||||
incus.enable = true;
|
||||
incus.ui.enable = true;
|
||||
};
|
||||
|
||||
environment.systemPackages =
|
||||
let
|
||||
seleniumScript = pkgs.writers.writePython3Bin "selenium-script"
|
||||
{
|
||||
libraries = with pkgs.python3Packages; [ selenium ];
|
||||
} ''
|
||||
from selenium import webdriver
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.firefox.options import Options
|
||||
from selenium.webdriver.support.ui import WebDriverWait
|
||||
|
||||
options = Options()
|
||||
options.add_argument("--headless")
|
||||
service = webdriver.FirefoxService(executable_path="${lib.getExe pkgs.geckodriver}") # noqa: E501
|
||||
|
||||
driver = webdriver.Firefox(options=options, service=service)
|
||||
driver.implicitly_wait(10)
|
||||
driver.get("https://localhost:8443/ui")
|
||||
|
||||
wait = WebDriverWait(driver, 60)
|
||||
|
||||
assert len(driver.find_elements(By.CLASS_NAME, "l-application")) > 0
|
||||
assert len(driver.find_elements(By.CLASS_NAME, "l-navigation__drawer")) > 0
|
||||
|
||||
driver.close()
|
||||
'';
|
||||
in
|
||||
with pkgs; [ curl firefox-unwrapped geckodriver seleniumScript ];
|
||||
};
|
||||
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_unit("sockets.target")
|
||||
machine.wait_for_unit("incus.service")
|
||||
machine.wait_for_file("/var/lib/incus/unix.socket")
|
||||
|
||||
# Configure incus listen address
|
||||
machine.succeed("incus config set core.https_address :8443")
|
||||
machine.succeed("systemctl restart incus")
|
||||
|
||||
# Check that the INCUS_UI environment variable is populated in the systemd unit
|
||||
machine.succeed("cat /etc/systemd/system/incus.service | grep 'INCUS_UI'")
|
||||
|
||||
# Ensure the endpoint returns an HTML page with 'Incus UI' in the title
|
||||
machine.succeed("curl -kLs https://localhost:8443/ui | grep '<title>Incus UI</title>'")
|
||||
|
||||
# Ensure the application is actually rendered by the Javascript
|
||||
machine.succeed("PYTHONUNBUFFERED=1 selenium-script")
|
||||
'';
|
||||
})
|
Loading…
Reference in a new issue