'Default implementation for function get_attr and Fn::GetAtt.
This may be overridden by resource plugins to add extra
logic specific to the resource implementation.'

def get_attribute(self, key, *path):

    try:
        attribute = self.attributes[key]
    except KeyError:
        raise exception.InvalidTemplateAttribute(resource=self.name, key=key)
    return attributes.select_from_attribute(attribute, path)
