at 18.03-beta 2.7 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 = { config, pkgs, ... }: { 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 = { config, pkgs, ... }: { 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 contents = [ pkgs.stdenv.shellPackage pkgs.coreutils ]; 37 config = { 38 Env = [ 39 # When shell=true, mesos invokes "sh -c '<cmd>'", so make sure "sh" is 40 # on the PATH. 41 "PATH=${pkgs.stdenv.shellPackage}/bin:${pkgs.coreutils}/bin" 42 ]; 43 Entrypoint = [ "echo" ]; 44 }; 45 }; 46 47 registry = pkgs.runCommand "registry" { } '' 48 mkdir -p $out 49 cp ${simpleDocker} $out/echo:latest.tar 50 ''; 51 52 testFramework = pkgs.pythonPackages.buildPythonPackage { 53 name = "mesos-tests"; 54 propagatedBuildInputs = [ pkgs.mesos ]; 55 catchConflicts = false; 56 src = ./mesos_test.py; 57 phases = [ "installPhase" "fixupPhase" ]; 58 installPhase = '' 59 install -Dvm 0755 $src $out/bin/mesos_test.py 60 61 echo "done" > test.result 62 tar czf $out/test.tar.gz test.result 63 ''; 64 }; 65 66 testScript = 67 '' 68 startAll; 69 $master->waitForUnit("mesos-master.service"); 70 $slave->waitForUnit("mesos-slave.service"); 71 72 $master->waitForOpenPort(5050); 73 $slave->waitForOpenPort(5051); 74 75 # is slave registered? 76 $master->waitUntilSucceeds("curl -s --fail http://master:5050/master/slaves". 77 " | grep -q \"\\\"hostname\\\":\\\"slave\\\"\""); 78 79 # try to run docker image 80 $master->succeed("${pkgs.mesos}/bin/mesos-execute --master=master:5050". 81 " --resources=\"cpus:0.1;mem:32\" --name=simple-docker". 82 " --containerizer=mesos --docker_image=echo:latest". 83 " --shell=true --command=\"echo done\" | grep -q TASK_FINISHED"); 84 85 # simple command with .tar.gz uri 86 $master->succeed("${testFramework}/bin/mesos_test.py master ". 87 "${testFramework}/test.tar.gz"); 88 ''; 89})