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()), }
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)
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()