at master 3.3 kB view raw
1import ../make-test-python.nix ( 2 { 3 pkgs, 4 lib, 5 rke2, 6 ... 7 }: 8 let 9 throwSystem = throw "RKE2: Unsupported system: ${pkgs.stdenv.hostPlatform.system}"; 10 coreImages = 11 { 12 aarch64-linux = rke2.images-core-linux-arm64-tar-zst; 13 x86_64-linux = rke2.images-core-linux-amd64-tar-zst; 14 } 15 .${pkgs.stdenv.hostPlatform.system} or throwSystem; 16 canalImages = 17 { 18 aarch64-linux = rke2.images-canal-linux-arm64-tar-zst; 19 x86_64-linux = rke2.images-canal-linux-amd64-tar-zst; 20 } 21 .${pkgs.stdenv.hostPlatform.system} or throwSystem; 22 helloImage = pkgs.dockerTools.buildImage { 23 name = "test.local/hello"; 24 tag = "local"; 25 compressor = "zstd"; 26 copyToRoot = pkgs.hello; 27 config.Entrypoint = [ "${pkgs.hello}/bin/hello" ]; 28 }; 29 testJobYaml = pkgs.writeText "test.yaml" '' 30 apiVersion: batch/v1 31 kind: Job 32 metadata: 33 name: test 34 spec: 35 template: 36 spec: 37 containers: 38 - name: test 39 image: "test.local/hello:local" 40 restartPolicy: Never 41 ''; 42 in 43 { 44 name = "${rke2.name}-single-node"; 45 meta.maintainers = rke2.meta.maintainers; 46 nodes.machine = 47 { 48 config, 49 nodes, 50 pkgs, 51 ... 52 }: 53 { 54 # Setup image archives to be imported by rke2 55 systemd.tmpfiles.settings."10-rke2" = { 56 "/var/lib/rancher/rke2/agent/images/rke2-images-core.tar.zst" = { 57 "L+".argument = "${coreImages}"; 58 }; 59 "/var/lib/rancher/rke2/agent/images/rke2-images-canal.tar.zst" = { 60 "L+".argument = "${canalImages}"; 61 }; 62 "/var/lib/rancher/rke2/agent/images/hello.tar.zst" = { 63 "L+".argument = "${helloImage}"; 64 }; 65 }; 66 67 # RKE2 needs more resources than the default 68 virtualisation.cores = 4; 69 virtualisation.memorySize = 4096; 70 virtualisation.diskSize = 8092; 71 72 services.rke2 = { 73 enable = true; 74 role = "server"; 75 package = rke2; 76 # Without nodeIP the apiserver starts with the wrong service IP family 77 nodeIP = config.networking.primaryIPAddress; 78 # Slightly reduce resource consumption 79 disable = [ 80 "rke2-coredns" 81 "rke2-metrics-server" 82 "rke2-ingress-nginx" 83 "rke2-snapshot-controller" 84 "rke2-snapshot-controller-crd" 85 "rke2-snapshot-validation-webhook" 86 ]; 87 }; 88 }; 89 90 testScript = 91 let 92 kubectl = "${pkgs.kubectl}/bin/kubectl --kubeconfig=/etc/rancher/rke2/rke2.yaml"; 93 in 94 # python 95 '' 96 start_all() 97 98 machine.wait_for_unit("rke2-server") 99 machine.succeed("${kubectl} cluster-info") 100 101 machine.wait_until_succeeds("${kubectl} get serviceaccount default") 102 machine.succeed("${kubectl} apply -f ${testJobYaml}") 103 machine.wait_until_succeeds("${kubectl} wait --for 'condition=complete' job/test") 104 output = machine.succeed("${kubectl} logs -l batch.kubernetes.io/job-name=test") 105 assert output.rstrip() == "Hello, world!", f"unexpected output of test job: {output}" 106 ''; 107 } 108)