Exemplo n.º 1
0
def redeploy_stack(reuse_volumes, stack):
    result = dockercloud.Stack.list(name=stack)

    if not result or len(result) == 0:
        raise dockercloud.ObjectNotFound(
            'No such stack {stack}'.format(stack=stack))
    elif len(result) > 1:
        raise dockercloud.ObjectNotFound(
            'Multiple stacks found for name {stack}'.format(stack=stack))

    # Tale first (and only) stack
    stack = result[0]

    # Redeploy stack
    stack.redeploy(reuse_volumes=reuse_volumes)
Exemplo n.º 2
0
def execute_in_stack_service(stack, service, command, output_handler=None):
    # Set default output handler
    output_handler = output_handler or sys.stdout.write

    result = dockercloud.Container.list(service__name=service,
                                        service__stack__name=stack,
                                        state='Running')

    if not result or len(result) == 0:
        raise dockercloud.ObjectNotFound(
            'No containers running for service {service} in stack {stack}'.
            format(service=service, stack=stack))
    elif len(result) > 1:
        # Shuffle results
        shuffle(result)

    # Take first container in the list
    container = result[0]

    # Build command
    command = ' '.join(command)
    output_handler('container({container_uuid}): {command}'.format(
        container_uuid=container.uuid, command=command))

    # Run command against container
    container.execute(
        command, handler=lambda message: msg_handler(output_handler, message))
Exemplo n.º 3
0
def get_uuids_of_trigger(trigger, identifiers):
    uuid_list = []
    for identifier in identifiers:
        if is_uuid4(identifier):
            uuid_list.append(identifier)
        else:
            handlers = trigger.list(uuid__startswith=identifier) or \
                       trigger.list(name=identifier)
            for handler in handlers:
                uuid = handler.get('uuid', "")
                if uuid:
                    uuid_list.append(uuid)
    if not uuid_list:
        raise dockercloud.ObjectNotFound("Cannot find a trigger with the identifier '%s'" % identifiers)
    return uuid_list
Exemplo n.º 4
0
def redeploy_stack_service(reuse_volumes,
                           block,
                           timeout,
                           interval,
                           stack,
                           service,
                           output_handler=None):
    # Set default output handler
    output_handler = output_handler or sys.stdout.write

    result = dockercloud.Service.list(name=service, stack__name=stack)

    if not result or len(result) == 0:
        raise dockercloud.ObjectNotFound(
            'No such service {service} in stack {stack}'.format(
                service=service, stack=stack))

    # Tale first (and only) service
    service = result[0]

    # Redeploy stack
    service.redeploy(reuse_volumes=reuse_volumes)

    # If we're not blocking, just return here
    if not block:
        return

    start = time.time()
    timeout_ms = timeout * 1000
    while True:
        containers = get_service_containers(state='Running',
                                            stack=stack,
                                            limit=-1,
                                            randomize=True,
                                            service=service.name)
        if len(containers) >= 1 and containers[0].state == 'Running':
            break
        if time.time() - start >= timeout_ms:
            raise TimeoutError(
                'After {timeout}, still no container back in state "Running"!'.
                format(timeout=timeout))
        output_handler(
            'Waiting for at least 1 container in service {service} to come back to state "Running"'
            .format(service=service.name))
        time.sleep(interval)
Exemplo n.º 5
0
 def test_fetch_remote_object_with_exception(self, mock_fetch_by_resource_uri, mock_sleep):
     mock_fetch_by_resource_uri.side_effect = [dockercloud.ObjectNotFound("This is an error"), self.container]
     self.assertEqual(self.container, fetch_remote_obj("uri"))
     mock_sleep.assert_called_once_with(API_RETRY)