mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-12 04:35:41 +03:00
108 lines
3.2 KiB
Nix
108 lines
3.2 KiB
Nix
import ../make-test-python.nix (
|
|
{
|
|
pkgs,
|
|
lib,
|
|
rke2,
|
|
...
|
|
}:
|
|
let
|
|
throwSystem = throw "RKE2: Unsupported system: ${pkgs.stdenv.hostPlatform.system}";
|
|
coreImages =
|
|
{
|
|
aarch64-linux = rke2.images-core-linux-arm64-tar-zst;
|
|
x86_64-linux = rke2.images-core-linux-amd64-tar-zst;
|
|
}
|
|
.${pkgs.stdenv.hostPlatform.system} or throwSystem;
|
|
canalImages =
|
|
{
|
|
aarch64-linux = rke2.images-canal-linux-arm64-tar-zst;
|
|
x86_64-linux = rke2.images-canal-linux-amd64-tar-zst;
|
|
}
|
|
.${pkgs.stdenv.hostPlatform.system} or throwSystem;
|
|
helloImage = pkgs.dockerTools.buildImage {
|
|
name = "test.local/hello";
|
|
tag = "local";
|
|
compressor = "zstd";
|
|
copyToRoot = pkgs.hello;
|
|
config.Entrypoint = [ "${pkgs.hello}/bin/hello" ];
|
|
};
|
|
testJobYaml = pkgs.writeText "test.yaml" ''
|
|
apiVersion: batch/v1
|
|
kind: Job
|
|
metadata:
|
|
name: test
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: test
|
|
image: "test.local/hello:local"
|
|
restartPolicy: Never
|
|
'';
|
|
in
|
|
{
|
|
name = "${rke2.name}-single-node";
|
|
meta.maintainers = rke2.meta.maintainers;
|
|
nodes.machine =
|
|
{
|
|
config,
|
|
nodes,
|
|
pkgs,
|
|
...
|
|
}:
|
|
{
|
|
# Setup image archives to be imported by rke2
|
|
systemd.tmpfiles.settings."10-rke2" = {
|
|
"/var/lib/rancher/rke2/agent/images/rke2-images-core.tar.zst" = {
|
|
"L+".argument = "${coreImages}";
|
|
};
|
|
"/var/lib/rancher/rke2/agent/images/rke2-images-canal.tar.zst" = {
|
|
"L+".argument = "${canalImages}";
|
|
};
|
|
"/var/lib/rancher/rke2/agent/images/hello.tar.zst" = {
|
|
"L+".argument = "${helloImage}";
|
|
};
|
|
};
|
|
|
|
# RKE2 needs more resources than the default
|
|
virtualisation.cores = 4;
|
|
virtualisation.memorySize = 4096;
|
|
virtualisation.diskSize = 8092;
|
|
|
|
services.rke2 = {
|
|
enable = true;
|
|
role = "server";
|
|
package = rke2;
|
|
# Without nodeIP the apiserver starts with the wrong service IP family
|
|
nodeIP = config.networking.primaryIPAddress;
|
|
# Slightly reduce resource consumption
|
|
disable = [
|
|
"rke2-coredns"
|
|
"rke2-metrics-server"
|
|
"rke2-ingress-nginx"
|
|
"rke2-snapshot-controller"
|
|
"rke2-snapshot-controller-crd"
|
|
"rke2-snapshot-validation-webhook"
|
|
];
|
|
};
|
|
};
|
|
|
|
testScript =
|
|
let
|
|
kubectl = "${pkgs.kubectl}/bin/kubectl --kubeconfig=/etc/rancher/rke2/rke2.yaml";
|
|
in
|
|
# python
|
|
''
|
|
start_all()
|
|
|
|
machine.wait_for_unit("rke2-server")
|
|
machine.succeed("${kubectl} cluster-info")
|
|
|
|
machine.wait_until_succeeds("${kubectl} get serviceaccount default")
|
|
machine.succeed("${kubectl} apply -f ${testJobYaml}")
|
|
machine.wait_until_succeeds("${kubectl} wait --for 'condition=complete' job/test")
|
|
output = machine.succeed("${kubectl} logs -l batch.kubernetes.io/job-name=test")
|
|
assert output.rstrip() == "Hello, world!", f"unexpected output of test job: {output}"
|
|
'';
|
|
}
|
|
)
|