Metadata Definition Concepts¶
元数据定义服务是在 OpenStack 的 Juno 版本中添加到 Glance 中的。
它为供应商、管理员、服务和用户提供了一个通用的 API,用于有意义地定义可用于不同类型资源(镜像、制品、卷、风味、聚合和其他资源)的可用键/值对元数据。一个定义包括属性的键、描述、约束以及可以将其关联的资源类型。
此目录不存储特定实例属性的值。
例如,虚拟 CPU 拓扑属性的定义,用于指定核心数量,将包括要使用的基本键(例如,cpu_cores)、描述以及值约束,例如要求它是一个整数。因此,用户可以通过 Horizon 搜索此目录来列出可以添加到风味或镜像的可用属性。他们将在列表中看到虚拟 CPU 拓扑属性,并知道它必须是一个整数。
当用户添加属性时,其键和值将存储在拥有该资源的的服务中(例如,Nova 用于风味,Glance 用于镜像)。该目录还包括在将属性应用于不同类型的资源时所需的任何其他前缀,例如镜像的“hw_”和风味的“hw:”。因此,在镜像上,用户将知道将属性设置为“hw_cpu_cores=1”。
注意
从 Wallaby 版本开始,默认情况下,通过此 API 进行的资源操作仅限于管理员。此 API 不提供适合暴露给所有用户的限制,并且还可能无意中泄露用户之间的信息。即使是管理员,也要小心创建的资源的名称,这些资源旨在是私有的,以避免无意中暴露。有关更多信息,请参阅 Bug 1916926。
术语¶
背景¶
术语元数据可能变得非常超载和令人困惑。此目录是关于作为任意键/值对或标签传递到各种制品和 OpenStack 服务中的附加元数据。
以下是 OpenStack 服务中今天使用的各种术语的一些示例
Nova |
Cinder |
Glance |
|---|---|---|
|
|
|
Catalog Concepts¶
下图说明了元数据定义目录中使用的概念术语
A namespace is associated with 0 to many resource types, making it visible to
the API / UI for applying to that type of resource. RBAC Permissions are
managed at a namespace level.
+----------------------------------------------+
| Namespace |
| |
| +-----------------------------------------+ |
| | Object Definition | |
| | | | +--------------------+
| | +-------------------------------------+ | | +--> | Resource Type: |
| | | Property Definition A (key=integer) | | | | | e.g. Nova Flavor |
| | +-------------------------------------+ | | | +--------------------+
| | | | |
| | +-------------------------------------+ | | |
| | | Property Definition B (key=string) | | | | +--------------------+
| | +-------------------------------------+ | +--+--> | Resource Type: |
| | | | | | e.g. Glance Image |
| +-----------------------------------------+ | | +--------------------+
| | |
| +-------------------------------------+ | |
| | Property Definition C (key=boolean) | | | +--------------------+
| +-------------------------------------+ | +--> | Resource Type: |
| | | e.g. Cinder Volume |
+----------------------------------------------+ +--------------------+
Properties may be defined standalone or within the context of an object.
Catalog Terminology¶
元数据定义目录中使用的术语如下。
命名空间
元数据定义包含在命名空间中。
指定定义中定义的所有内容的访问控制(CRUD)。允许仅管理员、不同的项目或整个云定义和使用命名空间中的定义
将包含的定义关联到不同类型的资源
属性
属性描述单个属性及其基本约束。每个属性只能是基本类型
string, integer, number, boolean, array
每个基本类型都使用简单的 JSON schema 符号进行描述。这意味着没有嵌套对象,也没有定义引用。
对象
对象描述一组一个或多个属性及其基本约束。组中的每个属性只能是基本类型
string, integer, number, boolean, array
每个基本类型都使用简单的 JSON schema 符号进行描述。这意味着没有嵌套对象。
该对象可以选择性地定义所需属性,语义理解是使用该对象的用户应提供所有所需属性。
Resource Type Association
资源类型关联指定资源类型与适用于它们的命名空间之间的关系。可以使用此信息来驱动 UI 和 CLI 视图。例如,相同的命名空间的对象、属性和标签可用于镜像、快照、卷和风味。或者,命名空间可能仅适用于镜像。
资源类型应尽可能与 Heat 资源类型对齐。 https://docs.openstack.org/heat/2025.2/template_guide/openstack.html
重要的是要注意,相同的基本属性键可能需要根据目标资源类型使用不同的前缀。API 提供了一种根据目标资源类型检索正确属性的方法。
以下是一些示例
所需的虚拟 CPU 拓扑结构可以通过元数据设置为镜像和风味。键在镜像上的前缀与风味上的前缀不同。在风味上,键以前缀 hw: 开头,但在镜像上,键以前缀 hw_ 开头。
另一个示例是 AggregateInstanceExtraSpecsFilter 和作用域属性(例如,具有 something:something=value 的属性)。对于作用域/命名空间属性,AggregateInstanceExtraSpecsFilter 需要在风味上使用“aggregate_instance_extra_specs:”前缀,但在聚合本身上不需要。否则,筛选器将无法在调度期间评估该属性。
因此,在主机聚合上,您可能会看到
companyx:fastio=true
但当在风味上使用时,AggregateInstanceExtraSpecsFilter 需要
aggregate_instance_extra_specs:companyx:fastio=true
在某些情况下,可能有多个不同的过滤器可能使用具有不同前缀的相同属性。在这种情况下,需要根据启用的过滤器设置正确的前缀。