非管理员用户可以通过更多过滤器过滤他们的实例¶
https://blueprints.launchpad.net/nova/+spec/non-admin-filter-instance-by-az
许多实例过滤器仅限于管理员用户,而相关的属性在向非管理员用户显示实例详情时是可读的。
为了保持一致性,所有与非管理员用户在显示实例详情时默认可读字段相关的现有实例过滤器,都应默认允许,无需修改策略。
问题描述¶
以下实例过滤器仅限于管理员用户(如果非管理员提供,则会被忽略),但相关的服务器负载中的属性在显示服务器信息时默认可见
availability_zoneconfig_drivekey_namecreated_atlaunched_atterminated_atpower_statetask_statevm_stateprogressuser_id
此列表是通过列出所有现有的仅管理员实例过滤器 [1],提取其中相关属性在 nova server show API 中默认对非管理员用户可读的过滤器 [2] 得到的。
此规范仅针对 nova list API 的现有过滤器,不旨在添加新的过滤器。
用例¶
对于针对 nova API 进行某些自动化的普通用户来说,无法根据可以查看的字段过滤其实例,而无需操作员修改策略,这可能会令人困扰,特别是当过滤器存在但被限定为仅管理员可用时。
例如,在多可用区部署中,用户通常会在多个可用区创建资源,以便在某个可用区发生故障时具有弹性。
处理多个可用区可能会给用户带来复杂性,例如在使用 cinder 时,您可以禁用 cross_az_attach 选项以限制卷附加到与实例相同的可用区。在这种配置下,能够根据可用区过滤实例对客户来说非常有用,例如在用户界面用例中,仅显示可以附加到给定卷的实例。
提议的变更¶
为服务器列表 API 添加一个新的微版本,以启用非管理员用户的这些过滤器。
由于非管理员过滤器在 nova/api/openstack/compute/servers.py 中的 _get_server_search_options 函数中列出,因此只需为给定的微版本将先前描述的值添加到该列表中即可。
在此上下文中需要微版本更新,因为 API 消费者需要能够发现该过滤器是否应该工作。发现该机制的方法是查看是否支持特定的微版本,尤其是在此修复之前,我们将默默地忽略这些过滤器,并且消费者没有好的方法来知道它是否有效。因此,这是一个蓝图而不是一个错误修复。
备选方案¶
当前,允许非管理员用户使用这些过滤器的唯一方法是编辑 nova 策略 os_compute_api:servers:allow_all_filters,这在升级期间维护起来可能非常痛苦,并且可能导致安全问题,因为您不希望普通用户使用诸如 hypervisor 或 node 之类的过滤器。
数据模型影响¶
无
REST API 影响¶
即使我们不添加或删除任何参数,也会添加一个新的微版本,因为我们正在更改非管理员用户的 API 行为。
对于普通用户,List API 将不再忽略查询字符串参数,用于以下过滤器
availability_zoneconfig_drivekey_namecreated_atlaunched_atterminated_atpower_statetask_statevm_stateprogressuser_id
GET /servers?availability_zone=az2
GET /servers/detail?availability_zone=az1
GET /servers/detail?key_name=my_key&config_drive=True
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
Python 客户端可以添加帮助信息,告知用户此新过滤器。为 ‘nova list’ 命令在 python-novaclient 中添加对这些过滤器的支持。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
升级影响¶
无
实现¶
负责人¶
- 主要负责人
Victor Coutellier
功能联络人¶
- 功能联络人
Balazs Gibizer Ghanshyam Mann
工作项¶
将过滤器添加到非管理员白名单实例过滤器
添加相关测试
为 novaclient 中的 ‘nova list’ 操作添加对这些过滤器的支持
依赖项¶
无
测试¶
添加相关单元测试
添加相关功能测试
文档影响¶
nova API 文档需要更新以反映 REST API 的更改,并添加微版本说明。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Ussuri |
引入 |