mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-28 16:43:58 +00:00
120 lines
3.6 KiB
Nix
120 lines
3.6 KiB
Nix
import ../make-test-python.nix (
|
|
|
|
{
|
|
pkgs,
|
|
lib,
|
|
incus ? pkgs.incus-lts,
|
|
...
|
|
}:
|
|
|
|
let
|
|
releases = import ../../release.nix { configuration.documentation.enable = lib.mkForce false; };
|
|
|
|
container-image-metadata = releases.lxdContainerMeta.${pkgs.stdenv.hostPlatform.system};
|
|
container-image-rootfs = releases.lxdContainerImage.${pkgs.stdenv.hostPlatform.system};
|
|
in
|
|
{
|
|
name = "lxd-to-incus";
|
|
|
|
meta = {
|
|
maintainers = lib.teams.lxc.members;
|
|
};
|
|
|
|
nodes.machine =
|
|
{ lib, ... }:
|
|
{
|
|
virtualisation = {
|
|
diskSize = 6144;
|
|
cores = 2;
|
|
memorySize = 2048;
|
|
|
|
lxd.enable = true;
|
|
lxd.preseed = {
|
|
networks = [
|
|
{
|
|
name = "nixostestbr0";
|
|
type = "bridge";
|
|
config = {
|
|
"ipv4.address" = "10.0.100.1/24";
|
|
"ipv4.nat" = "true";
|
|
};
|
|
}
|
|
];
|
|
profiles = [
|
|
{
|
|
name = "default";
|
|
devices = {
|
|
eth0 = {
|
|
name = "eth0";
|
|
network = "nixostestbr0";
|
|
type = "nic";
|
|
};
|
|
root = {
|
|
path = "/";
|
|
pool = "nixostest_pool";
|
|
size = "35GiB";
|
|
type = "disk";
|
|
};
|
|
};
|
|
}
|
|
{
|
|
name = "nixos_notdefault";
|
|
devices = { };
|
|
}
|
|
];
|
|
storage_pools = [
|
|
{
|
|
name = "nixostest_pool";
|
|
driver = "dir";
|
|
}
|
|
];
|
|
};
|
|
|
|
incus = {
|
|
enable = true;
|
|
package = incus;
|
|
};
|
|
};
|
|
networking.nftables.enable = true;
|
|
};
|
|
|
|
testScript = ''
|
|
def lxd_wait_for_preseed(_) -> bool:
|
|
_, output = machine.systemctl("is-active lxd-preseed.service")
|
|
return ("inactive" in output)
|
|
|
|
def lxd_instance_is_up(_) -> bool:
|
|
status, _ = machine.execute("lxc exec container --disable-stdin --force-interactive /run/current-system/sw/bin/systemctl -- is-system-running")
|
|
return status == 0
|
|
|
|
def incus_instance_is_up(_) -> bool:
|
|
status, _ = machine.execute("incus exec container --disable-stdin --force-interactive /run/current-system/sw/bin/systemctl -- is-system-running")
|
|
return status == 0
|
|
|
|
with machine.nested("initialize lxd and resources"):
|
|
machine.wait_for_unit("sockets.target")
|
|
machine.wait_for_unit("lxd.service")
|
|
retry(lxd_wait_for_preseed)
|
|
|
|
machine.succeed("lxc image import ${container-image-metadata}/*/*.tar.xz ${container-image-rootfs}/*/*.tar.xz --alias nixos")
|
|
machine.succeed("lxc launch nixos container")
|
|
retry(lxd_instance_is_up)
|
|
|
|
machine.wait_for_unit("incus.service")
|
|
|
|
with machine.nested("run migration"):
|
|
machine.succeed("${pkgs.incus}/bin/lxd-to-incus --yes")
|
|
|
|
with machine.nested("verify resources migrated to incus"):
|
|
machine.succeed("incus config show container")
|
|
retry(incus_instance_is_up)
|
|
machine.succeed("incus exec container -- true")
|
|
machine.succeed("incus profile show default | grep nixostestbr0")
|
|
machine.succeed("incus profile show default | grep nixostest_pool")
|
|
machine.succeed("incus profile show nixos_notdefault")
|
|
machine.succeed("incus storage show nixostest_pool")
|
|
machine.succeed("incus network show nixostestbr0")
|
|
'';
|
|
}
|
|
)
|