mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-29 09:04:17 +00:00
123 lines
3.2 KiB
Nix
123 lines
3.2 KiB
Nix
|
import ../make-test-python.nix (
|
||
|
{
|
||
|
pkgs,
|
||
|
lib,
|
||
|
k3s,
|
||
|
...
|
||
|
}:
|
||
|
let
|
||
|
pauseImageEnv = pkgs.buildEnv {
|
||
|
name = "k3s-pause-image-env";
|
||
|
paths = with pkgs; [
|
||
|
tini
|
||
|
(hiPrio coreutils)
|
||
|
busybox
|
||
|
];
|
||
|
};
|
||
|
pauseImage = pkgs.dockerTools.buildImage {
|
||
|
name = "test.local/pause";
|
||
|
tag = "local";
|
||
|
copyToRoot = pauseImageEnv;
|
||
|
config.Entrypoint = [
|
||
|
"/bin/tini"
|
||
|
"--"
|
||
|
"/bin/sleep"
|
||
|
"inf"
|
||
|
];
|
||
|
};
|
||
|
helloImage = pkgs.dockerTools.buildImage {
|
||
|
name = "test.local/hello";
|
||
|
tag = "local";
|
||
|
copyToRoot = pkgs.hello;
|
||
|
config.Entrypoint = [ "${pkgs.hello}/bin/hello" ];
|
||
|
};
|
||
|
in
|
||
|
{
|
||
|
name = "${k3s.name}-auto-deploy";
|
||
|
|
||
|
nodes.machine =
|
||
|
{ pkgs, ... }:
|
||
|
{
|
||
|
environment.systemPackages = [ k3s ];
|
||
|
|
||
|
# k3s uses enough resources the default vm fails.
|
||
|
virtualisation.memorySize = 1536;
|
||
|
virtualisation.diskSize = 4096;
|
||
|
|
||
|
services.k3s.enable = true;
|
||
|
services.k3s.role = "server";
|
||
|
services.k3s.package = k3s;
|
||
|
# Slightly reduce resource usage
|
||
|
services.k3s.extraFlags = builtins.toString [
|
||
|
"--disable coredns"
|
||
|
"--disable local-storage"
|
||
|
"--disable metrics-server"
|
||
|
"--disable servicelb"
|
||
|
"--disable traefik"
|
||
|
"--pause-image test.local/pause:local"
|
||
|
];
|
||
|
services.k3s.images = [
|
||
|
pauseImage
|
||
|
helloImage
|
||
|
];
|
||
|
services.k3s.manifests = {
|
||
|
absent = {
|
||
|
enable = false;
|
||
|
content = {
|
||
|
apiVersion = "v1";
|
||
|
kind = "Namespace";
|
||
|
metadata.name = "absent";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
present = {
|
||
|
target = "foo-namespace.yaml";
|
||
|
content = {
|
||
|
apiVersion = "v1";
|
||
|
kind = "Namespace";
|
||
|
metadata.name = "foo";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
hello.content = {
|
||
|
apiVersion = "batch/v1";
|
||
|
kind = "Job";
|
||
|
metadata.name = "hello";
|
||
|
spec = {
|
||
|
template.spec = {
|
||
|
containers = [
|
||
|
{
|
||
|
name = "hello";
|
||
|
image = "test.local/hello:local";
|
||
|
}
|
||
|
];
|
||
|
restartPolicy = "OnFailure";
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
testScript = ''
|
||
|
start_all()
|
||
|
|
||
|
machine.wait_for_unit("k3s")
|
||
|
# check existence of the manifest files
|
||
|
machine.fail("ls /var/lib/rancher/k3s/server/manifests/absent.yaml")
|
||
|
machine.succeed("ls /var/lib/rancher/k3s/server/manifests/foo-namespace.yaml")
|
||
|
machine.succeed("ls /var/lib/rancher/k3s/server/manifests/hello.yaml")
|
||
|
|
||
|
# check if container images got imported
|
||
|
machine.succeed("crictl img | grep 'test\.local/pause'")
|
||
|
machine.succeed("crictl img | grep 'test\.local/hello'")
|
||
|
|
||
|
# check if resources of manifests got created
|
||
|
machine.wait_until_succeeds("kubectl get ns foo")
|
||
|
machine.wait_until_succeeds("kubectl wait --for=condition=complete job/hello")
|
||
|
machine.fail("kubectl get ns absent")
|
||
|
|
||
|
machine.shutdown()
|
||
|
'';
|
||
|
}
|
||
|
)
|