Exemplo n.º 1
0
def test_deserialize_thermos_task_unbound_refs():
    # test unbound {{standard}} refs
    task_config = TaskConfig(executorConfig=ExecutorConfig(
        name='thermos', data=MESOS_JOB(task=HELLO_WORLD_UNBOUND).json_dumps()))
    assigned_task = AssignedTask(task=task_config, instanceId=0)
    with pytest.raises(TaskInfoError) as execinfo:
        mesos_task_instance_from_assigned_task(assigned_task)

    assert "Unexpected unbound refs: {{unbound_cmd}} {{unbound}}" in execinfo.value.message

    # test bound unscoped refs, valid case.
    task = BASE_TASK(name='task_name',
                     processes=[
                         Process(name='process_name',
                                 cmdline='echo {{thermos.ports[health]}}')
                     ])
    task_config = TaskConfig(executorConfig=ExecutorConfig(
        name='thermos', data=MESOS_JOB(task=task).json_dumps()))
    assigned_task = AssignedTask(task=task_config, instanceId=0)
    assert mesos_task_instance_from_assigned_task(assigned_task) is not None

    # test unbound unscoped refs
    for cmdline in ('echo {{hello_{{thermos.ports[health]}}}}',
                    'echo {{hello_{{thermos.user_id}}}}'):
        task = BASE_TASK(
            name='task_name',
            processes=[Process(name='process_name', cmdline=cmdline)])
        task_config = TaskConfig(executorConfig=ExecutorConfig(
            name='thermos', data=MESOS_JOB(task=task).json_dumps()))
        assigned_task = AssignedTask(task=task_config, instanceId=0)

        with pytest.raises(UnexpectedUnboundRefsError):
            mesos_task_instance_from_assigned_task(assigned_task)
Exemplo n.º 2
0
def make_config(announce, *ports):
    process = Process(name='hello',
                      cmdline=' '.join('{{thermos.ports[%s]}}' % port
                                       for port in ports))
    return AuroraConfig(
        Job(name='hello_world',
            environment='staging42',
            role='john_doe',
            cluster='smf1-test',
            announce=announce,
            task=Task(name='main',
                      processes=[process],
                      resources=Resources(cpu=0.1,
                                          ram=64 * 1048576,
                                          disk=64 * 1048576))))
Exemplo n.º 3
0
def make_job(role, environment, name, primary_port, portmap):
    from apache.aurora.config.schema.base import (
        Announcer,
        Job,
        Process,
        Resources,
        Task,
    )
    task = Task(name='ignore2',
                processes=[Process(name='ignore3', cmdline='ignore4')],
                resources=Resources(cpu=1, ram=1, disk=1))
    job = Job(role=role,
              environment=environment,
              name=name,
              cluster='ignore1',
              task=task,
              announce=Announcer(primary_port=primary_port, portmap=portmap))
    return job
Exemplo n.º 4
0
                      assignedPorts=assigned_ports,
                      **kw)
    td = mesos_pb2.TaskInfo()
    td.task_id.value = task_id
    td.name = thermos_config.task().name().get()
    td.data = serialize(at)
    return td


BASE_MTI = MesosTaskInstance(instance=0, role=getpass.getuser())
BASE_TASK = Task(resources=Resources(cpu=1.0, ram=16 * MB, disk=32 * MB))

HELLO_WORLD_TASK_ID = 'hello_world-001'
HELLO_WORLD = BASE_TASK(name='hello_world',
                        processes=[
                            Process(name='hello_world_{{thermos.task_id}}',
                                    cmdline='echo hello world')
                        ])
HELLO_WORLD_MTI = BASE_MTI(task=HELLO_WORLD)

SLEEP60 = BASE_TASK(processes=[Process(name='sleep60', cmdline='sleep 60')])
SLEEP2 = BASE_TASK(processes=[Process(name='sleep2', cmdline='sleep 2')])
SLEEP60_MTI = BASE_MTI(task=SLEEP60)

MESOS_JOB = MesosJob(
    name='does_not_matter',
    instances=1,
    role=getpass.getuser(),
)


def thermos_runner_path(build=True):
from apache.aurora.executor.common.sandbox import DirectorySandbox
from apache.aurora.executor.http_lifecycle import HttpLifecycleManager
from apache.aurora.executor.thermos_task_runner import ThermosTaskRunner
from apache.thermos.common.statuses import (INTERNAL_ERROR, INVALID_TASK,
                                            TERMINAL_TASK, UNKNOWN_ERROR,
                                            UNKNOWN_USER)

from gen.apache.thermos.ttypes import TaskState

TASK = MesosTaskInstance(
    instance=0,
    role=getpass.getuser(),
    task=Task(
        resources=Resources(cpu=1.0, ram=16 * MB, disk=32 * MB),
        name='hello_world',
        processes=[Process(name='hello_world', cmdline='{{command}}')],
    ))


class TestThermosTaskRunnerIntegration(object):
    PEX_PATH = None
    LOG_DIR = None

    @classmethod
    def setup_class(cls):
        cls.LOG_DIR = tempfile.mkdtemp()
        LogOptions.set_log_dir(cls.LOG_DIR)
        LogOptions.set_disk_log_level('DEBUG')
        log.init('executor_logger')
        if not cls.PEX_PATH:
            pex_dir = tempfile.mkdtemp()
Exemplo n.º 6
0
                 Process(name = 'hello_world_fails_200', cmdline = 'echo hello world',
                         max_failures = 200)],
    resources = Resources(cpu = 0.1, ram = 64 * 1048576, disk = 64 * 1048576),
  )
)
jobs = [HELLO_WORLD]
"""

REIFIED_CONFIG = Job(name='hello_world',
                     role='john_doe',
                     environment='staging42',
                     cluster='smf1-test',
                     task=Task(
                         name='main',
                         processes=[
                             Process(name='hello_world',
                                     cmdline='echo {{mesos.instance}}')
                         ],
                         resources=Resources(cpu=0.1,
                                             ram=64 * 1048576,
                                             disk=64 * 1048576),
                     ))

REIFIED_LIMITED_CONFIG = Job(name='hello_world',
                             role='john_doe',
                             environment='staging42',
                             cluster='smf1-test',
                             task=Task(
                                 name='main',
                                 processes=[
                                     Process(name='hello_world_fails_0',
                                             cmdline='echo hello world',