新的 Nova 配额资源类型

https://blueprints.launchpad.net/heat/+spec/nova-quota-resource

管理员希望能够在 HOT 模板中指定项目(project)的 nova 配额以及项目用户的 nova 配额。此蓝图建议为 nova 配额创建一个新的 heat 资源类型。

问题描述

目前,管理员可以使用类似于以下模板的模板,通过 heat 创建一个新的 keystone 项目

resources:
  test_role:
    type: OS::Keystone::Role
    properties:
      name: test_role

  test_project:
    type: OS::Keystone::Project
    properties:
      name: test_project
      enabled: True

  test_user:
    type: OS::Keystone::User
    properties:
      name: test_user
      domain: default
      default_project: {get_resource: test_project}
      roles:
        - role: {get_resource: test_role}
          domain: default
        - role: {get_resource: test_role}
          project: {get_resource: test_project}

但是,要指定与项目关联的 nova 配额,管理员需要在编排完成后执行类似以下操作

$ os quota set --cores 5 --ram 51200 <project>
$ nova quota-update --user <user> --floating-ips 20 <project>

用例

对于 Openstack 管理员来说,能够使用定义项目、项目成员以及项目和用户的分配配额的模板,整体管理项目将是理想的选择。

提议的变更

此蓝图建议向 heat 添加一个新的资源类型 OS::Nova::Quota,以解决上述问题。一个示例 OS::Nova::Quota 模板

resources:
  nova_user_quota:
    type: OS::Nova::Quota
    properties:
      project: {get_param: project}
      user: {get_param: user}
      cores: 5
      fixed_ips: 5
      floating_ips: 5
      instances: 5
      injected_files: 5
      injected_file_content_bytes: 5
      injected_file_path_bytes: 5
      key_pairs: 5
      metadata_items: 5
      ram: 5
      security_groups: 5
      security_group_rules: 5
      server_groups: 5
      server_group_members: 5

outputs:
  nova_user_quota_id:
    value: {get_resource: nova_user_quota}

属性:

  • project
    • 必需: True

    • 类型: 字符串

    • 描述: OpenStack keystone 项目

    • 约束: 必须是有效的 keystone 项目

  • 用户
    • 类型: 字符串

    • 描述: OpenStack keystone 用户

    • 约束: 必须是有效的 keystone 用户

  • cores
    • 类型: 整数

    • 描述: 核心数量的配额

    • 约束: 最小值是 -1

  • fixed_ips
    • 类型: 整数

    • 描述: 固定 IP 数量的配额

    • 约束: 最小值是 -1

  • floating_ips
    • 类型: 整数

    • 描述: 浮动 IP 数量的配额

    • 约束: 最小值是 -1

  • instances
    • 类型: 整数

    • 描述: 实例数量的配额

    • 约束: 最小值是 -1

  • injected_files
    • 类型: 整数

    • 描述: 注入文件数量的配额

    • 约束: 最小值是 -1

  • injected_file_content_bytes
    • 类型: 整数

    • 描述: 注入文件内容字节数的配额

    • 约束: 最小值是 -1

  • injected_file_path_bytes
    • 类型: 整数

    • 描述: 注入文件路径字节数的配额

    • 约束: 最小值是 -1

  • key_pairs
    • 类型: 整数

    • 描述: 密钥对数量的配额

    • 约束: 最小值是 -1

  • metadata_items
    • 类型: 整数

    • 描述: 元数据项数量的配额

    • 约束: 最小值是 -1

  • ram
    • 类型: 整数

    • 描述: 内存量配额(以兆字节为单位)

    • 约束: 最小值是 -1

  • security_groups
    • 类型: 整数

    • 描述: 安全组数量的配额

    • 约束: 最小值是 -1

  • security_group_rules
    • 类型: 整数

    • 描述: 安全组规则数量的配额

    • 约束: 最小值是 -1

  • server_groups
    • 类型: 整数

    • 描述: 服务器组数量的配额

    • 约束: 最小值是 -1

  • server_group_members
    • 类型: 整数

    • 描述: 服务器组成员数量的配额

    • 约束: 最小值是 -1

如果提供了用户,则将更新该项目下用户的配额。否则,将更新项目的配额。

将为该资源添加默认策略规则,以限制为管理员使用。

"resource_types:OS::Nova::Quota": "rule:project_admin"

此配额资源将处理创建、更新和删除。对于处理创建和更新,资源将调用 Nova 客户端的 quota-set 更新方法,因为没有 quota create 调用。对于处理删除,资源将调用 Nova 客户端的 quota delete 方法。这将把配额重置为默认值。请注意,创建多个资源并删除一个将重置配额,即使其他资源仍然存在。

备选方案

管理员或操作员可以在项目编排完成后手动更改项目的默认配额。

OS::Keystone::Project 可以包含一个可选的 Quota 属性。但是,添加似乎超出了 Keystone 的范围,因为 Keystone 没有配额的概念。

实现

负责人

主要负责人

  • Yosef Hoffman - yohoffman

其他指派人

  • Julian Sy - syjulian

  • Andy Hsiang - yh418t

里程碑

完成目标里程碑

ocata-1

工作项

  • 实现新的资源类型 OS::Nova::Quota

  • 实现适当的单元和功能测试

依赖项