forked from mirrors/nixpkgs
73 lines
1.9 KiB
Python
73 lines
1.9 KiB
Python
|
#!/usr/bin/env python
|
||
|
import uuid
|
||
|
import time
|
||
|
import subprocess
|
||
|
import os
|
||
|
|
||
|
import sys
|
||
|
|
||
|
from mesos.interface import Scheduler
|
||
|
from mesos.native import MesosSchedulerDriver
|
||
|
from mesos.interface import mesos_pb2
|
||
|
|
||
|
def log(msg):
|
||
|
process = subprocess.Popen("systemd-cat", stdin=subprocess.PIPE)
|
||
|
(out,err) = process.communicate(msg)
|
||
|
|
||
|
class NixosTestScheduler(Scheduler):
|
||
|
def __init__(self):
|
||
|
self.master_ip = sys.argv[1]
|
||
|
self.download_uri = sys.argv[2]
|
||
|
|
||
|
def resourceOffers(self, driver, offers):
|
||
|
log("XXX got resource offer")
|
||
|
|
||
|
offer = offers[0]
|
||
|
task = self.new_task(offer)
|
||
|
uri = task.command.uris.add()
|
||
|
uri.value = self.download_uri
|
||
|
task.command.value = "cat test.result"
|
||
|
driver.launchTasks(offer.id, [task])
|
||
|
|
||
|
def statusUpdate(self, driver, update):
|
||
|
log("XXX status update")
|
||
|
if update.state == mesos_pb2.TASK_FAILED:
|
||
|
log("XXX test task failed with message: " + update.message)
|
||
|
driver.stop()
|
||
|
sys.exit(1)
|
||
|
elif update.state == mesos_pb2.TASK_FINISHED:
|
||
|
driver.stop()
|
||
|
sys.exit(0)
|
||
|
|
||
|
def new_task(self, offer):
|
||
|
task = mesos_pb2.TaskInfo()
|
||
|
id = uuid.uuid4()
|
||
|
task.task_id.value = str(id)
|
||
|
task.slave_id.value = offer.slave_id.value
|
||
|
task.name = "task {}".format(str(id))
|
||
|
|
||
|
cpus = task.resources.add()
|
||
|
cpus.name = "cpus"
|
||
|
cpus.type = mesos_pb2.Value.SCALAR
|
||
|
cpus.scalar.value = 0.1
|
||
|
|
||
|
mem = task.resources.add()
|
||
|
mem.name = "mem"
|
||
|
mem.type = mesos_pb2.Value.SCALAR
|
||
|
mem.scalar.value = 32
|
||
|
|
||
|
return task
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
log("XXX framework started")
|
||
|
|
||
|
framework = mesos_pb2.FrameworkInfo()
|
||
|
framework.user = "root"
|
||
|
framework.name = "nixos-test-framework"
|
||
|
driver = MesosSchedulerDriver(
|
||
|
NixosTestScheduler(),
|
||
|
framework,
|
||
|
sys.argv[1] + ":5050"
|
||
|
)
|
||
|
driver.run()
|