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