at 18.09-beta 2.0 kB view raw
1#!/usr/bin/env python 2import uuid 3import time 4import subprocess 5import os 6 7import sys 8 9from mesos.interface import Scheduler 10from mesos.native import MesosSchedulerDriver 11from mesos.interface import mesos_pb2 12 13def log(msg): 14 process = subprocess.Popen("systemd-cat", stdin=subprocess.PIPE) 15 (out,err) = process.communicate(msg) 16 17class NixosTestScheduler(Scheduler): 18 def __init__(self): 19 self.master_ip = sys.argv[1] 20 self.download_uri = sys.argv[2] 21 22 def resourceOffers(self, driver, offers): 23 log("XXX got resource offer") 24 25 offer = offers[0] 26 task = self.new_task(offer) 27 uri = task.command.uris.add() 28 uri.value = self.download_uri 29 task.command.value = "cat test.result" 30 driver.launchTasks(offer.id, [task]) 31 32 def statusUpdate(self, driver, update): 33 log("XXX status update") 34 if update.state == mesos_pb2.TASK_FAILED: 35 log("XXX test task failed with message: " + update.message) 36 driver.stop() 37 sys.exit(1) 38 elif update.state == mesos_pb2.TASK_FINISHED: 39 driver.stop() 40 sys.exit(0) 41 42 def new_task(self, offer): 43 task = mesos_pb2.TaskInfo() 44 id = uuid.uuid4() 45 task.task_id.value = str(id) 46 task.slave_id.value = offer.slave_id.value 47 task.name = "task {}".format(str(id)) 48 49 cpus = task.resources.add() 50 cpus.name = "cpus" 51 cpus.type = mesos_pb2.Value.SCALAR 52 cpus.scalar.value = 0.1 53 54 mem = task.resources.add() 55 mem.name = "mem" 56 mem.type = mesos_pb2.Value.SCALAR 57 mem.scalar.value = 32 58 59 return task 60 61if __name__ == '__main__': 62 log("XXX framework started") 63 64 framework = mesos_pb2.FrameworkInfo() 65 framework.user = "root" 66 framework.name = "nixos-test-framework" 67 driver = MesosSchedulerDriver( 68 NixosTestScheduler(), 69 framework, 70 sys.argv[1] + ":5050" 71 ) 72 driver.run()