Ejemplo n.º 1
0
    def resource_schema(self, cnxt, type_name):
        """
        Return the schema of the specified type.
        arg1 -> RPC context.
        arg2 -> Name of the resource type to obtain the schema of.
        """
        try:
            resource_class = resource.get_class(type_name)
        except exception.StackValidationFailed:
            raise exception.ResourceTypeNotFound(type_name=type_name)

        def properties_schema():
            for name, schema_dict in resource_class.properties_schema.items():
                schema = properties.Schema.from_legacy(schema_dict)
                if schema.implemented:
                    yield name, dict(schema)

        def attributes_schema():
            for schema_item in resource_class.attributes_schema.items():
                schema = attributes.Attribute(*schema_item)
                yield schema.name, {schema.DESCRIPTION: schema.description}

        return {
            rpc_api.RES_SCHEMA_RES_TYPE: type_name,
            rpc_api.RES_SCHEMA_PROPERTIES: dict(properties_schema()),
            rpc_api.RES_SCHEMA_ATTRIBUTES: dict(attributes_schema()),
        }
Ejemplo n.º 2
0
 def generate_template(self, cnxt, type_name):
     """
     Generate a template based on the specified type.
     arg1 -> RPC context.
     arg2 -> Name of the resource type to generate a template for.
     """
     try:
         return \
             resource.get_class(type_name).resource_to_template(type_name)
     except exception.StackValidationFailed:
         raise exception.ResourceTypeNotFound(type_name=type_name)
Ejemplo n.º 3
0
    def get_class(self, resource_type, resource_name=None):
        if resource_type == "":
            msg = _('Resource "%s" has no type') % resource_name
            raise exception.InvalidResourceType(message=msg)
        elif resource_type is None:
            msg = _('Non-empty resource type is required '
                    'for resource "%s"') % resource_name
            raise exception.InvalidResourceType(message=msg)
        elif not isinstance(resource_type, six.string_types):
            msg = _('Resource "%s" type is not a string') % resource_name
            raise exception.InvalidResourceType(message=msg)

        info = self.get_resource_info(resource_type,
                                      resource_name=resource_name)
        if info is None:
            raise exception.ResourceTypeNotFound(type_name=resource_type)
        return info.get_class()