1import ./make-test-python.nix ({ pkgs, lib, ... } :
2
3let
4 lxd-image = import ../release.nix {
5 configuration = {
6 # Building documentation makes the test unnecessarily take a longer time:
7 documentation.enable = lib.mkForce false;
8 };
9 };
10
11 lxd-image-metadata = lxd-image.lxdMeta.${pkgs.stdenv.hostPlatform.system};
12 lxd-image-rootfs = lxd-image.lxdImage.${pkgs.stdenv.hostPlatform.system};
13
14in {
15 name = "lxd-image-server";
16
17 meta = with pkgs.lib.maintainers; {
18 maintainers = [ mkg20001 patryk27 ];
19 };
20
21 nodes.machine = { lib, ... }: {
22 virtualisation = {
23 cores = 2;
24
25 memorySize = 2048;
26 diskSize = 4096;
27
28 lxc.lxcfs.enable = true;
29 lxd.enable = true;
30 };
31
32 security.pki.certificates = [
33 (builtins.readFile ./common/acme/server/ca.cert.pem)
34 ];
35
36 services.nginx = {
37 enable = true;
38 };
39
40 services.lxd-image-server = {
41 enable = true;
42 nginx = {
43 enable = true;
44 domain = "acme.test";
45 };
46 };
47
48 services.nginx.virtualHosts."acme.test" = {
49 enableACME = false;
50 sslCertificate = ./common/acme/server/acme.test.cert.pem;
51 sslCertificateKey = ./common/acme/server/acme.test.key.pem;
52 };
53
54 networking.hosts = {
55 "::1" = [ "acme.test" ];
56 };
57 };
58
59 testScript = ''
60 machine.wait_for_unit("sockets.target")
61 machine.wait_for_unit("lxd.service")
62 machine.wait_for_file("/var/lib/lxd/unix.socket")
63
64 # It takes additional second for lxd to settle
65 machine.sleep(1)
66
67 # lxd expects the pool's directory to already exist
68 machine.succeed("mkdir /var/lxd-pool")
69
70 machine.succeed(
71 "cat ${./common/lxd/config.yaml} | lxd init --preseed"
72 )
73
74 machine.succeed(
75 "lxc image import ${lxd-image-metadata}/*/*.tar.xz ${lxd-image-rootfs}/*/*.tar.xz --alias nixos"
76 )
77
78 loc = "/var/www/simplestreams/images/iats/nixos/amd64/default/v1"
79
80 with subtest("push image to server"):
81 machine.succeed("lxc launch nixos test")
82 machine.sleep(5)
83 machine.succeed("lxc stop -f test")
84 machine.succeed("lxc publish --public test --alias=testimg")
85 machine.succeed("lxc image export testimg")
86 machine.succeed("ls >&2")
87 machine.succeed("mkdir -p " + loc)
88 machine.succeed("mv *.tar.gz " + loc)
89
90 with subtest("pull image from server"):
91 machine.succeed("lxc remote add img https://acme.test --protocol=simplestreams")
92 machine.succeed("lxc image list img: >&2")
93 '';
94})