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