def _wait_for_resource_status(self, stack_identifier, resource_name, status, failure_pattern='^.*_FAILED$'): """Waits for a Resource to reach a given status.""" 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: res = self.client.resources.get( stack_identifier, resource_name) except heat_exceptions.HTTPNotFound: # ignore this, as the resource may not have # been created yet pass else: if res.resource_status == status: return if fail_regexp.search(res.resource_status): raise exceptions.StackResourceBuildErrorException( resource_name=res.resource_name, stack_identifier=stack_identifier, resource_status=res.resource_status, resource_status_reason=res.resource_status_reason) time.sleep(build_interval) message = ('Resource %s failed to reach %s status within ' 'the required time (%s s).' % (res.resource_name, status, build_timeout)) raise exceptions.TimeoutException(message)
def _validate_power_state(self, node_uuid, power_state): # Validate that power state is set within timeout if power_state == 'rebooting': power_state = 'power on' start = timeutils.utcnow() while timeutils.delta_seconds(start, timeutils.utcnow()) < self.power_timeout: _, node = self.client.show_node(node_uuid) if node['power_state'] == power_state: return message = ('Failed to set power state within ' 'the required time: %s sec.' % self.power_timeout) raise exceptions.TimeoutException(message)
def _validate_power_state(self, node_uuid, power_state): # Validate that power state is set within timeout if power_state == 'rebooting': power_state = 'power on' start = timeutils.utcnow() while timeutils.delta_seconds( start, timeutils.utcnow()) < self.power_timeout: _, node = self.client.show_node(node_uuid) if node['power_state'] == power_state: return message = ('Failed to set power state within ' 'the required time: %s sec.' % self.power_timeout) raise exceptions.TimeoutException(message)
def await_samples(self, metric, query): """ This method is to wait for sample to add it to database. There are long time delays when using Postgresql (or Mysql) database as ceilometer backend """ timeout = CONF.compute.build_timeout start = timeutils.utcnow() while timeutils.delta_seconds(start, timeutils.utcnow()) < timeout: body = self.telemetry_client.list_samples(metric, query) if body: return body time.sleep(CONF.compute.build_interval) raise exceptions.TimeoutException( 'Sample for metric:%s with query:%s has not been added to the ' 'database within %d seconds' % (metric, query, CONF.compute.build_timeout))
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)