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()
 |