python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / tests / kubernetes / dns.nix
blob6299b7ff988af83c0061c24c850fea23a0c14dcd
1 { system ? builtins.currentSystem, pkgs ? import ../../.. { inherit system; } }:
2 with import ./base.nix { inherit system; };
3 let
4   domain = "my.zyx";
6   redisPod = pkgs.writeText "redis-pod.json" (builtins.toJSON {
7     kind = "Pod";
8     apiVersion = "v1";
9     metadata.name = "redis";
10     metadata.labels.name = "redis";
11     spec.containers = [{
12       name = "redis";
13       image = "redis";
14       args = ["--bind" "0.0.0.0"];
15       imagePullPolicy = "Never";
16       ports = [{
17         name = "redis-server";
18         containerPort = 6379;
19       }];
20     }];
21   });
23   redisService = pkgs.writeText "redis-service.json" (builtins.toJSON {
24     kind = "Service";
25     apiVersion = "v1";
26     metadata.name = "redis";
27     spec = {
28       ports = [{port = 6379; targetPort = 6379;}];
29       selector = {name = "redis";};
30     };
31   });
33   redisImage = pkgs.dockerTools.buildImage {
34     name = "redis";
35     tag = "latest";
36     copyToRoot = pkgs.buildEnv {
37       name = "image-root";
38       pathsToLink = [ "/bin" ];
39       paths = [ pkgs.redis pkgs.bind.host ];
40     };
41     config.Entrypoint = ["/bin/redis-server"];
42   };
44   probePod = pkgs.writeText "probe-pod.json" (builtins.toJSON {
45     kind = "Pod";
46     apiVersion = "v1";
47     metadata.name = "probe";
48     metadata.labels.name = "probe";
49     spec.containers = [{
50       name = "probe";
51       image = "probe";
52       args = [ "-f" ];
53       tty = true;
54       imagePullPolicy = "Never";
55     }];
56   });
58   probeImage = pkgs.dockerTools.buildImage {
59     name = "probe";
60     tag = "latest";
61     copyToRoot = pkgs.buildEnv {
62       name = "image-root";
63       pathsToLink = [ "/bin" ];
64       paths = [ pkgs.bind.host pkgs.busybox ];
65     };
66     config.Entrypoint = ["/bin/tail"];
67   };
69   extraConfiguration = { config, pkgs, lib, ... }: {
70     environment.systemPackages = [ pkgs.bind.host ];
71     services.dnsmasq.enable = true;
72     services.dnsmasq.servers = [
73       "/cluster.local/${config.services.kubernetes.addons.dns.clusterIp}#53"
74     ];
75   };
77   base = {
78     name = "dns";
79     inherit domain extraConfiguration;
80   };
82   singleNodeTest = {
83     test = ''
84       # prepare machine1 for test
85       machine1.wait_until_succeeds("kubectl get node machine1.${domain} | grep -w Ready")
86       machine1.wait_until_succeeds(
87           "${pkgs.gzip}/bin/zcat ${redisImage} | ${pkgs.containerd}/bin/ctr -n k8s.io image import -"
88       )
89       machine1.wait_until_succeeds(
90           "kubectl create -f ${redisPod}"
91       )
92       machine1.wait_until_succeeds(
93           "kubectl create -f ${redisService}"
94       )
95       machine1.wait_until_succeeds(
96           "${pkgs.gzip}/bin/zcat ${probeImage} | ${pkgs.containerd}/bin/ctr -n k8s.io image import -"
97       )
98       machine1.wait_until_succeeds(
99           "kubectl create -f ${probePod}"
100       )
102       # check if pods are running
103       machine1.wait_until_succeeds("kubectl get pod redis | grep Running")
104       machine1.wait_until_succeeds("kubectl get pod probe | grep Running")
105       machine1.wait_until_succeeds("kubectl get pods -n kube-system | grep 'coredns.*1/1'")
107       # check dns on host (dnsmasq)
108       machine1.succeed("host redis.default.svc.cluster.local")
110       # check dns inside the container
111       machine1.succeed("kubectl exec probe -- /bin/host redis.default.svc.cluster.local")
112     '';
113   };
115   multiNodeTest = {
116     test = ''
117       # Node token exchange
118       machine1.wait_until_succeeds(
119           "cp -f /var/lib/cfssl/apitoken.secret /tmp/shared/apitoken.secret"
120       )
121       machine2.wait_until_succeeds(
122           "cat /tmp/shared/apitoken.secret | nixos-kubernetes-node-join"
123       )
125       # prepare machines for test
126       machine1.wait_until_succeeds("kubectl get node machine2.${domain} | grep -w Ready")
127       machine2.wait_until_succeeds(
128           "${pkgs.gzip}/bin/zcat ${redisImage} | ${pkgs.containerd}/bin/ctr -n k8s.io image import -"
129       )
130       machine1.wait_until_succeeds(
131           "kubectl create -f ${redisPod}"
132       )
133       machine1.wait_until_succeeds(
134           "kubectl create -f ${redisService}"
135       )
136       machine2.wait_until_succeeds(
137           "${pkgs.gzip}/bin/zcat ${probeImage} | ${pkgs.containerd}/bin/ctr -n k8s.io image import -"
138       )
139       machine1.wait_until_succeeds(
140           "kubectl create -f ${probePod}"
141       )
143       # check if pods are running
144       machine1.wait_until_succeeds("kubectl get pod redis | grep Running")
145       machine1.wait_until_succeeds("kubectl get pod probe | grep Running")
146       machine1.wait_until_succeeds("kubectl get pods -n kube-system | grep 'coredns.*1/1'")
148       # check dns on hosts (dnsmasq)
149       machine1.succeed("host redis.default.svc.cluster.local")
150       machine2.succeed("host redis.default.svc.cluster.local")
152       # check dns inside the container
153       machine1.succeed("kubectl exec probe -- /bin/host redis.default.svc.cluster.local")
154     '';
155   };
156 in {
157   singlenode = mkKubernetesSingleNodeTest (base // singleNodeTest);
158   multinode = mkKubernetesMultiNodeTest (base // multiNodeTest);