数据模型

openstacksdk 拥有非常严格的策略,绝不破坏向后兼容性。然而,对于从 OpenStack 返回的数据结构,在某些情况下,OpenStack 的资源结构会以某种直接的方式返回给用户,这使得 openstacksdk 用户容易受到结果内容变化/差异的影响。

为了解决这个问题,openstacksdk 在许多地方会“标准化”从 OpenStack 返回的结构,并且标准化后的结果如下所示。在 openstacksdk 执行标准化时,用户可以确信文档中声明的任何字段都是完全安全的 - 它们与任何其他 Python 方法一样,都是 openstacksdk API 合同的一部分。

一些 OpenStack 对象允许在对象根目录下使用任意属性。openstacksdk 会将这些属性传递过去,以避免破坏可能依赖于这些属性的任何人,但由于这些属性是任意的,openstacksdk 无法保证它们的存在。作为标准化的一部分,openstacksdk 会将 OpenStack 资源中不在其数据模型合同中的任何属性放入一个名为“properties”的属性中。properties 的内容被定义为一组任意的键值对,不保证任何特定键的存在。

如果用户在 openstacksdk 构造函数中传递 strict=True,openstacksdk 将不会将任意对象传递到资源的根目录,而是会将它们全部放入 properties 字典中。如果用户担心意外编写依赖于 API 合同之外的属性的代码,这可能是一个有用的工具。请记住,所有数据仍然可以通过 properties 字典访问,但任何访问 properties 字典中的内容的的代码都应该意识到,那里找到的键高度依赖于用户/云环境。作为 openstacksdk 数据模型合同的一部分而转换的任何键都不会在 properties 中出现条目 - 只有未知的键才会出现。

location” 字段

Location 定义了资源所在的位置。它包括云名称和区域名称、可用区以及有关拥有该资源的项目的信息。

项目信息可能包含项目 ID,或者项目名称与域名称或 ID 的组合。如果存在项目 ID,则应将其视为正确。

有些资源不携带所有权信息。对于这些资源,项目信息将从用户当前拥有令牌的项目中填充。

有些资源没有关于可用区的信息,或者可能存在于整个区域。这些资源的可用区将为 None。

Location = dict(
    cloud=str(),
    region_name=str(),
    zone=str() or None,
    project=dict(
        id=str() or None,
        name=str() or None,
        domain_id=str() or None,
        domain_name=str() or None,
    )
)