예제 #1
0
def paasta_docker_exec(args):
    try:
        task = get_task_from_instance(
            cluster=args.cluster,
            service=args.service,
            instance=args.instance,
            slave_hostname=args.host,
            task_id=args.mesos_id,
        )
    except PaastaTaskNotFound:
        sys.exit(1)
    container = get_container_name(task)
    slave = task.slave["hostname"]

    user_args = ("--user", args.user) if args.user else ()
    command = (
        "sudo",
        "docker",
        "exec",
        "-ti",
        *user_args,
        container,
        *shlex.split(args.exec_command),
    )
    command = " ".join(shlex.quote(arg) for arg in command)
    subprocess.call(["ssh", "-o", "LogLevel=QUIET", "-tA", slave, command])
예제 #2
0
def test_get_task_from_instance(mock_client):
    mock_client.get_paasta_api_client.return_value = None
    with raises(utils.PaastaTaskNotFound):
        utils.get_task_from_instance('cluster1', 'my-service', 'main')
    mock_client.get_paasta_api_client.assert_called_with(cluster='cluster1')
    mock_api = mock.Mock()
    mock_client.get_paasta_api_client.return_value = mock_api
    mock_task_1 = mock.Mock()
    mock_task_2 = mock.Mock()
    mock_tasks = [mock_task_1, mock_task_2]
    mock_result = mock.Mock(return_value=mock_tasks)
    mock_task_result = mock.Mock(return_value=mock_task_2)
    mock_api.service.tasks_instance.return_value = mock.Mock(result=mock_result)
    mock_api.service.task_instance.return_value = mock.Mock(result=mock_task_result)
    ret = utils.get_task_from_instance('cluster1', 'my-service', 'main', task_id='123')
    assert ret == mock_task_2
    mock_api.service.task_instance.assert_called_with(
        service='my-service',
        instance='main',
        verbose=True,
        task_id='123',
    )

    ret = utils.get_task_from_instance('cluster1', 'my-service', 'main')
    assert ret == mock_task_1
    mock_api.service.tasks_instance.assert_called_with(
        service='my-service',
        instance='main',
        verbose=True,
        slave_hostname=None,
    )

    mock_result = mock.Mock(return_value=[])
    mock_api.service.tasks_instance.return_value = mock.Mock(result=mock_result)
    with raises(utils.PaastaTaskNotFound):
        ret = utils.get_task_from_instance(
            'cluster1', 'my-service', 'main',
            slave_hostname='test',
        )

    mock_api.service.tasks_instance.side_effect = HTTPError(response=mock.Mock(status_code=500))
    with raises(utils.PaastaTaskNotFound):
        ret = utils.get_task_from_instance(
            'cluster1', 'my-service', 'main',
            slave_hostname='test',
        )
    mock_api.service.tasks_instance.assert_called_with(
        service='my-service',
        instance='main',
        verbose=True,
        slave_hostname='test',
    )

    mock_api.service.tasks_instance.side_effect = HTTPNotFound(response=mock.Mock(status_code=404))
    with raises(utils.PaastaTaskNotFound):
        ret = utils.get_task_from_instance(
            'cluster1', 'my-service', 'main',
            slave_hostname='test',
        )
예제 #3
0
def paasta_docker_stop(args):
    try:
        task = get_task_from_instance(cluster=args.cluster,
                                      service=args.service,
                                      instance=args.instance,
                                      slave_hostname=args.host,
                                      task_id=args.mesos_id)
    except PaastaTaskNotFound:
        sys.exit(1)
    container = get_container_name(task)
    slave = task.slave['hostname']
    command = "sudo docker stop {0}".format(container)
    subprocess.call(["ssh", "-o", "LogLevel=QUIET", "-tA", slave, command])
예제 #4
0
def paasta_docker_exec(args):
    try:
        task = get_task_from_instance(cluster=args.cluster,
                                      service=args.service,
                                      instance=args.instance,
                                      slave_hostname=args.host,
                                      task_id=args.mesos_id)
    except PaastaTaskNotFound:
        sys.exit(1)
    container = get_container_name(task)
    slave = task.slave['hostname']
    command = "sudo docker exec -ti {0} ''{1}''".format(container, args.exec_command)
    subprocess.call(["ssh", "-o", "LogLevel=QUIET", "-tA", slave, command])
예제 #5
0
def paasta_docker_exec(args):
    try:
        task = get_task_from_instance(
            cluster=args.cluster,
            service=args.service,
            instance=args.instance,
            slave_hostname=args.host,
            task_id=args.mesos_id,
        )
    except PaastaTaskNotFound:
        sys.exit(1)
    container = get_container_name(task)
    slave = task.slave['hostname']
    command = f"sudo docker exec -ti {container} ''{args.exec_command}''"
    subprocess.call(["ssh", "-o", "LogLevel=QUIET", "-tA", slave, command])
예제 #6
0
def test_get_task_from_instance(mock_client):
    mock_client.get_paasta_api_client.return_value = None
    with raises(utils.PaastaTaskNotFound):
        utils.get_task_from_instance('cluster1', 'my-service', 'main')
    mock_client.get_paasta_api_client.assert_called_with(cluster='cluster1')
    mock_api = mock.Mock()
    mock_client.get_paasta_api_client.return_value = mock_api
    mock_task_1 = mock.Mock()
    mock_task_2 = mock.Mock()
    mock_tasks = [mock_task_1, mock_task_2]
    mock_result = mock.Mock(return_value=mock_tasks)
    mock_task_result = mock.Mock(return_value=mock_task_2)
    mock_api.service.tasks_instance.return_value = mock.Mock(result=mock_result)
    mock_api.service.task_instance.return_value = mock.Mock(result=mock_task_result)
    ret = utils.get_task_from_instance('cluster1', 'my-service', 'main', task_id='123')
    assert ret == mock_task_2
    mock_api.service.task_instance.assert_called_with(service='my-service',
                                                      instance='main',
                                                      verbose=True,
                                                      task_id='123')

    ret = utils.get_task_from_instance('cluster1', 'my-service', 'main')
    assert ret == mock_task_1
    mock_api.service.tasks_instance.assert_called_with(service='my-service',
                                                       instance='main',
                                                       verbose=True,
                                                       slave_hostname=None)

    mock_result = mock.Mock(return_value=[])
    mock_api.service.tasks_instance.return_value = mock.Mock(result=mock_result)
    with raises(utils.PaastaTaskNotFound):
        ret = utils.get_task_from_instance('cluster1', 'my-service', 'main',
                                           slave_hostname='test')

    mock_api.service.tasks_instance.side_effect = HTTPError(response=mock.Mock(status_code=500))
    with raises(utils.PaastaTaskNotFound):
        ret = utils.get_task_from_instance('cluster1', 'my-service', 'main',
                                           slave_hostname='test')
    mock_api.service.tasks_instance.assert_called_with(service='my-service',
                                                       instance='main',
                                                       verbose=True,
                                                       slave_hostname='test')

    mock_api.service.tasks_instance.side_effect = HTTPNotFound(response=mock.Mock(status_code=404))
    with raises(utils.PaastaTaskNotFound):
        ret = utils.get_task_from_instance('cluster1', 'my-service', 'main',
                                           slave_hostname='test')