at 18.09-beta 2.8 kB view raw
1import ./make-test.nix ({ pkgs, ...} : rec { 2 name = "mesos"; 3 meta = with pkgs.stdenv.lib.maintainers; { 4 maintainers = [ offline kamilchm cstrahan ]; 5 }; 6 7 nodes = { 8 master = { ... }: { 9 networking.firewall.enable = false; 10 services.zookeeper.enable = true; 11 services.mesos.master = { 12 enable = true; 13 zk = "zk://master:2181/mesos"; 14 }; 15 }; 16 17 slave = { ... }: { 18 networking.firewall.enable = false; 19 networking.nat.enable = true; 20 virtualisation.docker.enable = true; 21 services.mesos = { 22 slave = { 23 enable = true; 24 master = "master:5050"; 25 dockerRegistry = registry; 26 executorEnvironmentVariables = { 27 PATH = "/run/current-system/sw/bin"; 28 }; 29 }; 30 }; 31 }; 32 }; 33 34 simpleDocker = pkgs.dockerTools.buildImage { 35 name = "echo"; 36 tag = "latest"; 37 contents = [ pkgs.stdenv.shellPackage pkgs.coreutils ]; 38 config = { 39 Env = [ 40 # When shell=true, mesos invokes "sh -c '<cmd>'", so make sure "sh" is 41 # on the PATH. 42 "PATH=${pkgs.stdenv.shellPackage}/bin:${pkgs.coreutils}/bin" 43 ]; 44 Entrypoint = [ "echo" ]; 45 }; 46 }; 47 48 registry = pkgs.runCommand "registry" { } '' 49 mkdir -p $out 50 cp ${simpleDocker} $out/echo:latest.tar 51 ''; 52 53 testFramework = pkgs.pythonPackages.buildPythonPackage { 54 name = "mesos-tests"; 55 propagatedBuildInputs = [ pkgs.mesos ]; 56 catchConflicts = false; 57 src = ./mesos_test.py; 58 phases = [ "installPhase" "fixupPhase" ]; 59 installPhase = '' 60 install -Dvm 0755 $src $out/bin/mesos_test.py 61 62 echo "done" > test.result 63 tar czf $out/test.tar.gz test.result 64 ''; 65 }; 66 67 testScript = 68 '' 69 startAll; 70 $master->waitForUnit("zookeeper.service"); 71 $master->waitForUnit("mesos-master.service"); 72 $slave->waitForUnit("docker.service"); 73 $slave->waitForUnit("mesos-slave.service"); 74 $master->waitForOpenPort(2181); 75 $master->waitForOpenPort(5050); 76 $slave->waitForOpenPort(5051); 77 78 # is slave registered? 79 $master->waitUntilSucceeds("curl -s --fail http://master:5050/master/slaves". 80 " | grep -q \"\\\"hostname\\\":\\\"slave\\\"\""); 81 82 # try to run docker image 83 $master->succeed("${pkgs.mesos}/bin/mesos-execute --master=master:5050". 84 " --resources=\"cpus:0.1;mem:32\" --name=simple-docker". 85 " --containerizer=mesos --docker_image=echo:latest". 86 " --shell=true --command=\"echo done\" | grep -q TASK_FINISHED"); 87 88 # simple command with .tar.gz uri 89 $master->succeed("${testFramework}/bin/mesos_test.py master ". 90 "${testFramework}/test.tar.gz"); 91 ''; 92})