nixos/tests/incus: add lxd-to-incus migration test
This commit is contained in:
parent
95d0067cc0
commit
ffdcec2d94
6 changed files with 131 additions and 11 deletions
|
@ -150,10 +150,12 @@ in
|
||||||
after = [
|
after = [
|
||||||
"network-online.target"
|
"network-online.target"
|
||||||
"lxcfs.service"
|
"lxcfs.service"
|
||||||
] ++ (lib.optional cfg.socketActivation "incus.socket");
|
"incus.socket"
|
||||||
|
];
|
||||||
requires = [
|
requires = [
|
||||||
"lxcfs.service"
|
"lxcfs.service"
|
||||||
] ++ (lib.optional cfg.socketActivation "incus.socket");
|
"incus.socket"
|
||||||
|
];
|
||||||
wants = [
|
wants = [
|
||||||
"network-online.target"
|
"network-online.target"
|
||||||
];
|
];
|
||||||
|
@ -183,7 +185,7 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.sockets.incus = lib.mkIf cfg.socketActivation {
|
systemd.sockets.incus = {
|
||||||
description = "Incus UNIX socket";
|
description = "Incus UNIX socket";
|
||||||
wantedBy = [ "sockets.target" ];
|
wantedBy = [ "sockets.target" ];
|
||||||
|
|
||||||
|
@ -191,7 +193,6 @@ in
|
||||||
ListenStream = "/var/lib/incus/unix.socket";
|
ListenStream = "/var/lib/incus/unix.socket";
|
||||||
SocketMode = "0660";
|
SocketMode = "0660";
|
||||||
SocketGroup = "incus-admin";
|
SocketGroup = "incus-admin";
|
||||||
Service = "incus.service";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -224,16 +224,14 @@ in {
|
||||||
LimitNPROC = "infinity";
|
LimitNPROC = "infinity";
|
||||||
TasksMax = "infinity";
|
TasksMax = "infinity";
|
||||||
|
|
||||||
Restart = "on-failure";
|
|
||||||
TimeoutStartSec = "${cfg.startTimeout}s";
|
|
||||||
TimeoutStopSec = "30s";
|
|
||||||
|
|
||||||
# By default, `lxd` loads configuration files from hard-coded
|
# By default, `lxd` loads configuration files from hard-coded
|
||||||
# `/usr/share/lxc/config` - since this is a no-go for us, we have to
|
# `/usr/share/lxc/config` - since this is a no-go for us, we have to
|
||||||
# explicitly tell it where the actual configuration files are
|
# explicitly tell it where the actual configuration files are
|
||||||
Environment = lib.mkIf (config.virtualisation.lxc.lxcfs.enable)
|
Environment = lib.mkIf (config.virtualisation.lxc.lxcfs.enable)
|
||||||
"LXD_LXC_TEMPLATE_CONFIG=${pkgs.lxcfs}/share/lxc/config";
|
"LXD_LXC_TEMPLATE_CONFIG=${pkgs.lxcfs}/share/lxc/config";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unitConfig.ConditionPathExists = "!/var/lib/incus/.migrated-from-lxd";
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.lxd-preseed = lib.mkIf (cfg.preseed != null) {
|
systemd.services.lxd-preseed = lib.mkIf (cfg.preseed != null) {
|
||||||
|
|
|
@ -6,9 +6,8 @@
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
container = import ./container.nix { inherit system pkgs; };
|
container = import ./container.nix { inherit system pkgs; };
|
||||||
|
lxd-to-incus = import ./lxd-to-incus.nix { inherit system pkgs; };
|
||||||
preseed = import ./preseed.nix { inherit system pkgs; };
|
preseed = import ./preseed.nix { inherit system pkgs; };
|
||||||
socket-activated = import ./socket-activated.nix { inherit system pkgs; };
|
socket-activated = import ./socket-activated.nix { inherit system pkgs; };
|
||||||
virtual-machine = handleTestOn [ "x86_64-linux" ] ./virtual-machine.nix {
|
virtual-machine = handleTestOn [ "x86_64-linux" ] ./virtual-machine.nix { inherit system pkgs; };
|
||||||
inherit system pkgs;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
112
nixos/tests/incus/lxd-to-incus.nix
Normal file
112
nixos/tests/incus/lxd-to-incus.nix
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
import ../make-test-python.nix (
|
||||||
|
|
||||||
|
{ pkgs, lib, ... }:
|
||||||
|
|
||||||
|
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, ... }:
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ pkgs.lxd-to-incus ];
|
||||||
|
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
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/true")
|
||||||
|
return status == 0
|
||||||
|
|
||||||
|
def incus_instance_is_up(_) -> bool:
|
||||||
|
status, _ = machine.execute("incus exec container --disable-stdin --force-interactive /run/current-system/sw/bin/true")
|
||||||
|
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("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")
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
)
|
|
@ -1,6 +1,7 @@
|
||||||
{ lib
|
{ lib
|
||||||
, buildGoModule
|
, buildGoModule
|
||||||
, fetchFromGitHub
|
, fetchFromGitHub
|
||||||
|
, fetchpatch
|
||||||
, nix-update-script
|
, nix-update-script
|
||||||
}:
|
}:
|
||||||
|
|
||||||
|
@ -15,6 +16,14 @@ buildGoModule rec {
|
||||||
hash = "sha256-crWepf5j3Gd1lhya2DGIh/to7l+AnjKJPR+qUd9WOzw=";
|
hash = "sha256-crWepf5j3Gd1lhya2DGIh/to7l+AnjKJPR+qUd9WOzw=";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
patches = [
|
||||||
|
# create migration touch file, remove > 0.4.0
|
||||||
|
(fetchpatch {
|
||||||
|
url = "https://github.com/lxc/incus/commit/edc5fd2a9baccfb7b6814a440e2947cbb580afcf.diff";
|
||||||
|
hash = "sha256-ffQfMFrKDPuLU4jVbG/VGHSO3DmeHw30ATJ8yxJAoHQ=";
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
modRoot = "cmd/lxd-to-incus";
|
modRoot = "cmd/lxd-to-incus";
|
||||||
|
|
||||||
vendorHash = "sha256-cBAqJz3Y4CqyxTt7u/4mXoQPKmKgQ3gYJV1NiC/H+TA=";
|
vendorHash = "sha256-cBAqJz3Y4CqyxTt7u/4mXoQPKmKgQ3gYJV1NiC/H+TA=";
|
||||||
|
|
|
@ -76,6 +76,7 @@ buildGoModule rec {
|
||||||
'';
|
'';
|
||||||
|
|
||||||
passthru.tests.lxd = nixosTests.lxd;
|
passthru.tests.lxd = nixosTests.lxd;
|
||||||
|
passthru.tests.lxd-to-incus = nixosTests.incus.lxd-to-incus;
|
||||||
passthru.ui = callPackage ./ui.nix { };
|
passthru.ui = callPackage ./ui.nix { };
|
||||||
passthru.updateScript = gitUpdater {
|
passthru.updateScript = gitUpdater {
|
||||||
url = "https://github.com/canonical/lxd.git";
|
url = "https://github.com/canonical/lxd.git";
|
||||||
|
|
Loading…
Reference in a new issue