@@ -0,0 +1,1174 @@
+# -*- coding: utf-8 -*-%0Afrom __future__ import absolute_import%0Afrom __future__ import unicode_literals%0A%0Aimport abc%0Aimport uuid%0Afrom collections import namedtuple%0A%0Aimport six%0A%0ATaskConfig = namedtuple(%0A    'TaskConfig',%0A    %5B'task_id', 'name', 'image', 'cmd', 'cpus', 'mem', 'disk', 'volumes', 'ports', 'cap_add',%0A     'ulimit', 'docker_parameters'%5D,%0A)%0A%0A%0Adef make_task_config(image=%22ubuntu:xenial%22, cmd=%22/bin/true%22, cpus=0.1,%0A                     mem=32, disk=10, volumes=None, ports=%5B%5D, cap_add=%5B%5D,%0A                     ulimit=%5B%5D, docker_parameters=%5B%5D, task_id=str(uuid.uuid4()), name=str(uuid.uuid4())):%0A    if volumes is None:%0A        volumes = %7B%7D%0A    if ports is None:%0A        ports = %5B%5D%0A    if cap_add is None:%0A        cap_add = %5B%5D%0A    if ulimit is None:%0A        ulimit = %5B%5D%0A    if docker_parameters:%0A        docker_parameters = %5B%5D%0A%0A    return TaskConfig(task_id, name, image, cmd, cpus, mem, disk, volumes, ports, cap_add,%0A                      ulimit, docker_parameters)%0A%0A%0A@six.add_metaclass(abc.ABCMeta)%0Aclass TaskExecutor(object):%0A    @abc.abstractmethod%0A    def run(self, task_config):%0A        pass%0A%0A    @abc.abstractmethod%0A    def kill(self, task_id):%0A        pass%0A

add missing task_executor file