Beispiel #1
0
    def instantiate(self, update_existing):
        main_tmpl = _load_template('main.heat',
                                   {'resources': self._serialize_resources()})
        heat = client()

        kwargs = {
            'stack_name': self.cluster.name,
            'timeout_mins': 180,
            'disable_rollback': True,
            'parameters': {},
            'template': json.loads(main_tmpl)
        }

        if not update_existing:
            heat.stacks.create(**kwargs)
        else:
            for stack in heat.stacks.list():
                if stack.stack_name == self.cluster.name:
                    stack.update(**kwargs)
                    break

        for stack in heat.stacks.list():
            if stack.stack_name == self.cluster.name:
                return ClusterStack(self, stack)

        raise ex.HeatStackException('Failed to find just created stack %s' %
                                    self.cluster.name)
Beispiel #2
0
def wait_stack_completion(stack):
    # NOTE: expected empty status because status of stack
    # maybe is not set in heat database
    while stack.status in ['IN_PROGRESS', '']:
        context.sleep(1)
        stack.get()

    if stack.status != 'COMPLETE':
        raise ex.HeatStackException(stack.stack_status)
Beispiel #3
0
    def wait_till_active(self):
        while self.heat_stack.stack_status in ('CREATE_IN_PROGRESS',
                                               'UPDATE_IN_PROGRESS'):
            context.sleep(1)
            self.heat_stack.get()

        if self.heat_stack.stack_status not in ('CREATE_COMPLETE',
                                                'UPDATE_COMPLETE'):
            raise ex.HeatStackException(self.heat_stack.stack_status)
Beispiel #4
0
def wait_stack_completion(cluster, is_update=False, last_updated_time=None):
    stack_name = cluster.stack_name
    stack = get_stack(stack_name)
    while not _verify_completion(stack, is_update, last_updated_time):
        context.sleep(1)
        stack = get_stack(stack_name)

    if stack.status != 'COMPLETE':
        raise ex.HeatStackException(stack.stack_status_reason)
Beispiel #5
0
def delete_stack(cluster):
    stack_name = cluster.stack_name
    base.execute_with_retries(client().stacks.delete, stack_name)
    stack = get_stack(stack_name, raise_on_missing=False)
    while stack is not None:
        # Valid states: IN_PROGRESS, empty and COMPLETE
        if stack.status in ['IN_PROGRESS', '', 'COMPLETE']:
            context.sleep(5)
        else:
            raise ex.HeatStackException(
                message=_("Cannot delete heat stack {name}, reason: "
                          "stack status: {status}, status reason: {reason}"
                          ).format(name=stack_name,
                                   status=stack.status,
                                   reason=stack.stack_status_reason))
        stack = get_stack(stack_name, raise_on_missing=False)