在服务器详情响应中添加‘locked’¶
https://blueprints.launchpad.net/nova/+spec/add-locking-information-in-server-get-response
目前管理员或所有者可以锁定/解锁实例,但没有办法知道实例是否被锁定。本规范旨在通过在服务器 GET API 响应中添加新的‘locked’属性来提供锁定信息。
问题描述¶
目前实例可以被管理员或所有者锁定和解锁。但是,没有办法知道是谁锁定了实例。甚至用户无法知道该实例是否被锁定。
用例¶
用户可以知道实例是否被锁定。当用户想要对实例执行任何操作并且实例被锁定时,会返回关于实例状态不正确的错误。如果事先知道实例是否被锁定,用户/管理员将更容易采取相应的操作。
由于锁定/解锁操作可以由管理员或所有者执行(多个角色),‘locked’信息将非常有用。
项目优先级¶
无。
提议的变更¶
在服务器详情响应中添加新的属性‘locked’,它将提供实例锁定信息。
‘locked’属性返回的值将是:
True - 如果实例被锁定。
False - 如果实例未被锁定。
当用户查询实例详情(列表详情或显示)时,‘locked’信息将包含在响应中。
当“locked”为“true”时,表示实例上存在锁定,但这并不意味着实例被请求用户锁定。例如 - 当实例被所有者锁定但由管理员列出时,“locked”将为“true”,即使管理员可以覆盖所有者的锁定。
因此,“locked”仅提供实例是否被锁定的具体信息。
我们可以通过直接暴露“locked_by”(当前实现中包含锁定所有者信息)来提供锁定信息,但由于大多数情况下实例不会被锁定,因此其值将为空。并且始终最好暴露简单和具体的信息,而不是可以将来更改的实现信息,因为锁定机制将来可能会扩展。
注意 - 锁定可以在以后成为自己的资源,这将有助于了解有关实例锁定的完整信息(由谁锁定、锁定原因、时间戳等)。新的锁定 API 可能如下所示 - servers/server_id/lock。
备选方案¶
用户可以从在锁定服务器上执行无效操作时返回的异常中得知锁定状态。但是,将没有办法知道是谁锁定了实例。
数据模型影响¶
无。
REST API 影响¶
方法的规范
描述
API 显示服务器详情 & 列出服务器详情
方法类型
GET
正常的 HTTP 响应代码
200,响应代码无变化
预期的错误 http 响应代码
错误代码无变化
资源的 URL
/v2.1
如果允许,则为 body 数据定义 JSON schema
不允许请求体。
如果存在,则为响应数据定义 JSON schema
{
'status_code': [200],
'response_body': {
'type': 'object',
'properties': {
'server': {
'type': 'object',
'properties': {
'id': {'type': 'string'},
'name': {'type': 'string'},
'status': {'type': 'string'},
.
.
'locked': {'type': 'boolean'},
.
.
.
'OS-EXT-STS:task_state': {'type': ['string', 'null']},
'OS-EXT-STS:vm_state': {'type': 'string'},
'OS-EXT-STS:power_state': {'type': 'integer'},
.
.
.
},
}
}
'required': ['server']
}
}
安全影响¶
无。
通知影响¶
无。
其他最终用户影响¶
需要更新 python-novaclient,以便在‘nova show’命令中显示‘locked’。
性能影响¶
无。锁定信息已存在于 Instance 对象中,这只是将该信息显示给用户。
其他部署者影响¶
无。
开发人员影响¶
无。
实现¶
负责人¶
- 主要负责人
gmann
- 其他贡献者
无
工作项¶
在服务器 GET API(显示和列表详情)响应中添加‘locked’。
相应地修改示例和单元测试。
依赖项¶
无。
测试¶
目前 Nova 功能测试将涵盖这些更改的测试。在讨论了 Tempest 中的微版本测试之后,可以相应地测试这些更改。
文档影响¶
服务器 GET API 文档将相应地更新。