Describe a stack.

    .. versionadded:: 2015.8.0

    CLI Example:

    .. code-block:: bash

        salt myminion boto_cfn.describe mystack region=us-east-1

def describe(name, region=None, key=None, keyid=None, profile=None):
    '''
    Describe a stack.

    .. versionadded:: 2015.8.0

    CLI Example:

    .. code-block:: bash

        salt myminion boto_cfn.describe mystack region=us-east-1
    '''
    conn = _get_conn(region=region, key=key, keyid=keyid, profile=profile)

    try:
        # Returns an object if stack exists else an exception
        r = conn.describe_stacks(name)
        if r:
            stack = r[0]
            log.debug('Found VPC: %s', stack.stack_id)
            keys = ('stack_id', 'description', 'stack_status', 'stack_status_reason', 'tags')

            ret = dict([(k, getattr(stack, k)) for k in keys if hasattr(stack, k)])
            o = getattr(stack, 'outputs')
            p = getattr(stack, 'parameters')
            outputs = {}
            parameters = {}
            for i in o:
                outputs[i.key] = i.value
            ret['outputs'] = outputs
            for j in p:
                parameters[j.key] = j.value
            ret['parameters'] = parameters

            return {'stack': ret}

        log.debug('Stack %s exists.', name)
        return True
    except BotoServerError as e:
        log.warning('Could not describe stack %s.\n%s', name, e)
        return False