def wait_for_stack_status(self, stack_identifier, status, failure_pattern='^.*_FAILED$'): """Waits for a Stack to reach a given status.""" start = int(time.time()) fail_regexp = re.compile(failure_pattern) while True: try: body = self.show_stack(stack_identifier)['stack'] except lib_exc.NotFound: if status == 'DELETE_COMPLETE': return stack_name = body['stack_name'] stack_status = body['stack_status'] if stack_status == status: return body if fail_regexp.search(stack_status): raise exceptions.StackBuildErrorException( stack_identifier=stack_identifier, stack_status=stack_status, stack_status_reason=body['stack_status_reason']) if int(time.time()) - start >= self.build_timeout: message = ( 'Stack %s failed to reach %s status (current: %s) ' 'within the required time (%s s).' % (stack_name, status, stack_status, self.build_timeout)) raise lib_exc.TimeoutException(message) time.sleep(self.build_interval)
def wait_for_stack_status(self, stack_identifier, status, failure_pattern='^.*_FAILED$'): """Waits for a Stack to reach a given status.""" start = int(time.time()) fail_regexp = re.compile(failure_pattern) while True: resp, body = self.get_stack(stack_identifier) stack_name = body['stack_name'] stack_status = body['stack_status'] if stack_status == status: return body if fail_regexp.search(stack_status): raise exceptions.StackBuildErrorException( stack_identifier=stack_identifier, stack_status=stack_status, stack_status_reason=body['stack_status_reason']) if int(time.time()) - start >= self.build_timeout: message = ('Stack %s failed to reach %s status within ' 'the required time (%s s).' % (stack_name, status, self.build_timeout)) raise exceptions.TimeoutException(message) time.sleep(self.build_interval)
def wait_for_stack_status(self, stack_identifier, status, failure_status=('CREATE_FAILED', 'DELETE_FAILED', 'UPDATE_FAILED', 'ROLLBACK_FAILED')): """Waits for a Volume to reach a given status.""" stack_status = None start = int(time.time()) while stack_status != status: resp, body = self.get_stack(stack_identifier) stack_name = body['stack_name'] stack_status = body['stack_status'] if stack_status in failure_status: raise exceptions.StackBuildErrorException( stack_identifier=stack_identifier, stack_status=stack_status, stack_status_reason=body['stack_status_reason']) if int(time.time()) - start >= self.build_timeout: message = ('Stack %s failed to reach %s status within ' 'the required time (%s s).' % (stack_name, status, self.build_timeout)) raise exceptions.TimeoutException(message) time.sleep(self.build_interval)
def wait_for_resource_status(self, stack_identifier, resource_name, status, failure_pattern='^.*_FAILED$'): """Waits for a Resource to reach a given status.""" start = int(time.time()) fail_regexp = re.compile(failure_pattern) while True: try: resp, body = self.get_resource(stack_identifier, resource_name) except exceptions.NotFound: # ignore this, as the resource may not have # been created yet pass else: resource_name = body['resource_name'] resource_status = body['resource_status'] if resource_status == status: return if fail_regexp.search(resource_status): raise exceptions.StackBuildErrorException( stack_identifier=stack_identifier, resource_status=resource_status, resource_status_reason=body['resource_status_reason']) if int(time.time()) - start >= self.build_timeout: message = ('Resource %s failed to reach %s status within ' 'the required time (%s s).' % (resource_name, status, self.build_timeout)) raise exceptions.TimeoutException(message) time.sleep(self.build_interval)
def _wait_for_stack_status(self, stack_identifier, status, failure_pattern='^.*_FAILED$'): """ Waits for a Stack to reach a given status. Note this compares the full $action_$status, e.g CREATE_COMPLETE, not just COMPLETE which is exposed via the status property of Stack in heatclient """ fail_regexp = re.compile(failure_pattern) build_timeout = CONF.orchestration.build_timeout build_interval = CONF.orchestration.build_interval start = timeutils.utcnow() while timeutils.delta_seconds(start, timeutils.utcnow()) < build_timeout: try: stack = self.client.stacks.get(stack_identifier) except heat_exceptions.HTTPNotFound: # ignore this, as the stackource may not have # been created yet pass else: if stack.stack_status == status: return if fail_regexp.search(stack.stack_status): raise exceptions.StackBuildErrorException( stack_identifier=stack_identifier, stack_status=stack.stack_status, stack_status_reason=stack.stack_status_reason) time.sleep(build_interval) message = ('Stack %s failed to reach %s status within ' 'the required time (%s s).' % (stack.stack_name, status, build_timeout)) raise exceptions.TimeoutException(message)