mirror of
https://github.com/NixOS/nixpkgs
synced 2024-10-19 03:47:13 -04:00
98 lines
2.9 KiB
Nix
98 lines
2.9 KiB
Nix
{ system ? builtins.currentSystem }:
|
|
|
|
with import ../../lib/testing.nix { inherit system; };
|
|
with import ../../lib/qemu-flags.nix;
|
|
with pkgs.lib;
|
|
|
|
let
|
|
certs = import ./certs.nix { servers = {}; };
|
|
|
|
kubectlPod = pkgs.writeText "kubectl-pod.json" (builtins.toJSON {
|
|
kind = "Pod";
|
|
apiVersion = "v1";
|
|
metadata.name = "kubectl";
|
|
metadata.labels.name = "kubectl";
|
|
spec.containers = [{
|
|
name = "kubectl";
|
|
image = "kubectl:latest";
|
|
command = ["${pkgs.busybox}/bin/tail" "-f"];
|
|
imagePullPolicy = "Never";
|
|
tty = true;
|
|
}];
|
|
});
|
|
|
|
kubectlImage = pkgs.dockerTools.buildImage {
|
|
name = "kubectl";
|
|
tag = "latest";
|
|
contents = [ pkgs.kubernetes pkgs.busybox certs kubeconfig ];
|
|
config.Entrypoint = "${pkgs.busybox}/bin/sh";
|
|
};
|
|
|
|
kubeconfig = pkgs.writeTextDir "kubeconfig.json" (builtins.toJSON {
|
|
apiVersion = "v1";
|
|
kind = "Config";
|
|
clusters = [{
|
|
name = "local";
|
|
cluster.certificate-authority = "/ca.pem";
|
|
cluster.server = "https://192.168.1.1:4443/";
|
|
}];
|
|
users = [{
|
|
name = "kubelet";
|
|
user = {
|
|
client-certificate = "/admin.crt";
|
|
client-key = "/admin-key.pem";
|
|
};
|
|
}];
|
|
contexts = [{
|
|
context = {
|
|
cluster = "local";
|
|
user = "kubelet";
|
|
};
|
|
current-context = "kubelet-context";
|
|
}];
|
|
});
|
|
|
|
test = ''
|
|
$kubernetes->execute("docker load < ${kubectlImage}");
|
|
$kubernetes->waitUntilSucceeds("kubectl create -f ${kubectlPod} || kubectl apply -f ${kubectlPod}");
|
|
$kubernetes->waitUntilSucceeds("kubectl get pod kubectl | grep Running");
|
|
|
|
# FIXME: this test fails, for some reason it can not reach host ip address
|
|
$kubernetes->succeed("kubectl exec -ti kubectl -- kubectl --kubeconfig=/kubeconfig.json version");
|
|
'';
|
|
in makeTest {
|
|
name = "kubernetes-singlenode-kubectl";
|
|
|
|
nodes = {
|
|
kubernetes =
|
|
{ config, pkgs, lib, nodes, ... }:
|
|
{
|
|
virtualisation.memorySize = 768;
|
|
virtualisation.diskSize = 4096;
|
|
|
|
programs.bash.enableCompletion = true;
|
|
environment.systemPackages = with pkgs; [ netcat bind ];
|
|
|
|
services.kubernetes.roles = ["master" "node"];
|
|
services.kubernetes.apiserver.securePort = 4443;
|
|
services.kubernetes.dns.port = 4453;
|
|
services.kubernetes.clusterCidr = "10.0.0.0/8";
|
|
virtualisation.docker.extraOptions = "--iptables=false --ip-masq=false -b cbr0";
|
|
|
|
networking.interfaces.eth1.ip4 = mkForce [{address = "192.168.1.1"; prefixLength = 24;}];
|
|
networking.primaryIPAddress = mkForce "192.168.1.1";
|
|
networking.bridges.cbr0.interfaces = [];
|
|
networking.interfaces.cbr0 = {};
|
|
|
|
services.dnsmasq.enable = true;
|
|
services.dnsmasq.servers = ["/${config.services.kubernetes.dns.domain}/127.0.0.1#4453"];
|
|
};
|
|
};
|
|
|
|
testScript = ''
|
|
startAll;
|
|
|
|
${test}
|
|
'';
|
|
}
|