From cdddbc3f7d1486ce3ee8dfc0db63a29ac2fae20a Mon Sep 17 00:00:00 2001 From: Xavier Zwirtz Date: Thu, 30 Jan 2020 20:53:26 -0600 Subject: [PATCH] Added k3s test --- tests/default.nix | 1 + tests/k8s/deployment-k3s.nix | 70 ++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 tests/k8s/deployment-k3s.nix diff --git a/tests/default.nix b/tests/default.nix index 0edfb9d..24fa87b 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -24,6 +24,7 @@ let testing.tests = [ ./k8s/simple.nix ./k8s/deployment.nix + ./k8s/deployment-k3s.nix ./k8s/crd.nix ./k8s/defaults.nix ./k8s/order.nix diff --git a/tests/k8s/deployment-k3s.nix b/tests/k8s/deployment-k3s.nix new file mode 100644 index 0000000..2cd6c78 --- /dev/null +++ b/tests/k8s/deployment-k3s.nix @@ -0,0 +1,70 @@ +{ config, lib, pkgs, kubenix, images, k8sVersion, ... }: + +with lib; + +let + cfg = config.kubernetes.api.resources.deployments.nginx; + image = images.nginx; +in { + imports = [ kubenix.modules.test kubenix.modules.k8s kubenix.modules.docker ]; + + test = { + distro = "k3s"; + name = "k8s-deployment-k3s"; + description = "Simple k8s testing a simple deployment"; + assertions = [{ + message = "should have correct apiVersion and kind set"; + assertion = + if ((builtins.compareVersions config.kubernetes.version "1.7") <= 0) + then cfg.apiVersion == "apps/v1beta1" + else if ((builtins.compareVersions config.kubernetes.version "1.8") <= 0) + then cfg.apiVersion == "apps/v1beta2" + else cfg.apiVersion == "apps/v1"; + } { + message = "should have corrent kind set"; + assertion = cfg.kind == "Deployment"; + } { + message = "should have replicas set"; + assertion = cfg.spec.replicas == 10; + }]; + extraConfiguration = { + environment.systemPackages = [ pkgs.curl ]; + services.kubernetes.kubelet.seedDockerImages = config.docker.export; + }; + testScript = '' + $kube->waitUntilSucceeds("kubectl apply -f ${config.kubernetes.result}"); + + $kube->succeed("kubectl get deployment | grep -i nginx"); + $kube->waitUntilSucceeds("kubectl get deployment -o go-template nginx --template={{.status.readyReplicas}} | grep 10"); + $kube->waitUntilSucceeds("curl http://nginx.default.svc.cluster.local | grep -i hello"); + ''; + }; + + docker.images.nginx.image = image; + + kubernetes.version = k8sVersion; + + kubernetes.resources.deployments.nginx = { + spec = { + replicas = 10; + selector.matchLabels.app = "nginx"; + template.metadata.labels.app = "nginx"; + template.spec = { + containers.nginx = { + image = config.docker.images.nginx.path; + imagePullPolicy = "Never"; + }; + }; + }; + }; + + kubernetes.resources.services.nginx = { + spec = { + ports = [{ + name = "http"; + port = 80; + }]; + selector.app = "nginx"; + }; + }; +}