about summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorEuan Kemp <euank@euank.com>2021-10-23 18:29:05 -0700
committerEuan Kemp <euank@euank.com>2021-10-23 18:29:05 -0700
commit8bf9500e6576c7f6b150834ab6e55409d056979c (patch)
treebd94973b4dbb3234dd5bd62a79a85951752a13e3 /nixos
parentf20af9dbfbe54dfb1ba557fcc7edb316559a9130 (diff)
downloadnixlib-8bf9500e6576c7f6b150834ab6e55409d056979c.tar
nixlib-8bf9500e6576c7f6b150834ab6e55409d056979c.tar.gz
nixlib-8bf9500e6576c7f6b150834ab6e55409d056979c.tar.bz2
nixlib-8bf9500e6576c7f6b150834ab6e55409d056979c.tar.lz
nixlib-8bf9500e6576c7f6b150834ab6e55409d056979c.tar.xz
nixlib-8bf9500e6576c7f6b150834ab6e55409d056979c.tar.zst
nixlib-8bf9500e6576c7f6b150834ab6e55409d056979c.zip
nixos/tests/k3s-docker: add 'k3s.docker=true' test
This verifies the docker driver works too, which matters because it
interacts with systemd, cgroups, etc differently.
Diffstat (limited to 'nixos')
-rw-r--r--nixos/tests/k3s-docker.nix80
1 files changed, 80 insertions, 0 deletions
diff --git a/nixos/tests/k3s-docker.nix b/nixos/tests/k3s-docker.nix
new file mode 100644
index 000000000000..d6575bd6fff4
--- /dev/null
+++ b/nixos/tests/k3s-docker.nix
@@ -0,0 +1,80 @@
+import ./make-test-python.nix ({ pkgs, ... }:
+
+let
+  # A suitable k3s pause image, also used for the test pod
+  pauseImage = pkgs.dockerTools.buildImage {
+    name = "test.local/pause";
+    tag = "local";
+    contents = with pkgs; [ tini coreutils busybox ];
+    config.Entrypoint = [ "/bin/tini" "--" "/bin/sleep" "inf" ];
+  };
+  # Don't use the default service account because there's a race where it may
+  # not be created yet; make our own instead.
+  testPodYaml = pkgs.writeText "test.yml" ''
+    apiVersion: v1
+    kind: ServiceAccount
+    metadata:
+      name: test
+    ---
+    apiVersion: v1
+    kind: Pod
+    metadata:
+      name: test
+    spec:
+      serviceAccountName: test
+      containers:
+      - name: test
+        image: test.local/pause:local
+        imagePullPolicy: Never
+        command: ["sh", "-c", "sleep inf"]
+  '';
+in
+{
+  name = "k3s";
+  meta = with pkgs.lib.maintainers; {
+    maintainers = [ euank ];
+  };
+
+  machine = { pkgs, ... }: {
+    environment.systemPackages = with pkgs; [ k3s gzip ];
+
+    # k3s uses enough resources the default vm fails.
+    virtualisation.memorySize = pkgs.lib.mkDefault 1536;
+    virtualisation.diskSize = pkgs.lib.mkDefault 4096;
+
+    services.k3s = {
+      enable = true;
+      role = "server";
+      docker = true;
+      # Slightly reduce resource usage
+      extraFlags = "--no-deploy coredns,servicelb,traefik,local-storage,metrics-server --pause-image test.local/pause:local";
+    };
+
+    users.users = {
+      noprivs = {
+        isNormalUser = true;
+        description = "Can't access k3s by default";
+        password = "*";
+      };
+    };
+  };
+
+  testScript = ''
+    start_all()
+
+    machine.wait_for_unit("k3s")
+    machine.succeed("k3s kubectl cluster-info")
+    machine.fail("sudo -u noprivs k3s kubectl cluster-info")
+    # machine.succeed("k3s check-config") # fails with the current nixos kernel config, uncomment once this passes
+
+    machine.succeed(
+        "zcat ${pauseImage} | docker load"
+    )
+
+    machine.succeed("k3s kubectl apply -f ${testPodYaml}")
+    machine.succeed("k3s kubectl wait --for 'condition=Ready' pod/test")
+    machine.succeed("k3s kubectl delete -f ${testPodYaml}")
+
+    machine.shutdown()
+  '';
+})