更新 userdata¶
https://blueprints.launchpad.net/nova/+spec/update-userdata
应该能够更新实例的 userdata,而无需重建相应的实例。
问题描述¶
目前,无法在不重建实例的情况下更新实例的 userdata。
重建比仅仅传播更新后的 userdata(例如,通过 cloud-init)花费更多的时间,并且在生产环境中可能不可取。编辑云配置文件中的几行不应导致实例的完全重建。
此外,其他公有云提供商(如 Azure [1])具有更新现有实例的 userdata 的功能,因此最终用户可能期望 Nova 也能正常工作。
AWS 要求在更新 userdata 之前关闭实例 [2],而 Google 也允许随时更新 [3][4]。
用例¶
作为用户,我希望能够通过 userdata 动态地重新配置实例使用的时间和名称服务器,以便使用我最初用于引导实例的相同接口(userdata)来更新这些设置。
作为具有使用 cloud-init 等工具配置临时工作负载经验的用户,我希望能够通过 userdata 和每次启动时的元数据来管理我的有状态工作负载。元数据用于存储我的外部配置,而 userdata 用于执行诸如在应用更新后重新加入集群之类的操作。
提议的变更¶
现有的 PUT /servers/{server_id} API 应该接受一个名为 user_data 的附加参数,以允许更新实例的 userdata。
如果请求体中设置了该参数,Nova 应该将实例的 userdata 更新为请求参数中设置的值(如果输入有效,例如,不超过 65535 字节)。
如果实例使用 config drive,则不应允许上述方法,并应以清晰的响应消息和 409(冲突)状态码拒绝。相反,可以通过硬重启(即通过 POST /servers/{server_id}/action API)来更新 userdata,并使用类似于上述方法的附加参数。硬重启将自动重建 config drive,其中包含更新后的 userdata。
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
通过新的微版本扩展 PUT /servers/{server_id} API,添加 user_data 参数。相应地更新 POST /servers/{server_id}/action API。
PUT /servers/{server_id}
{ "server": { "user_data": "data" } }
POST /servers/{server_id}/action
{ "reboot": { "type": "HARD", "user_data": "data" } }
以上是一个将 userdata 更改为 data 的最小请求示例。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
需要使用 openstackclient 更新 userdata 的选项:openstack server set --user-data {data} {server_id}
也应添加一个更新硬重启 userdata 的选项。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
升级影响¶
无
实现¶
负责人¶
- 主要负责人
jhartkopf
功能联络人¶
需要联络人
工作项¶
实施 API 更改
添加测试
添加文档
依赖项¶
需要更新 openstackclient 以实现此更改
测试¶
添加单元测试(正向和反向)
添加功能测试(API 示例)
文档影响¶
需要更新 API 参考以反映新微版本的特性。
此外,明确 userdata 是可变的,但它也不能替代正确的配置管理。
参考资料¶
无
历史¶
瑜伽 |
引入 |
|---|---|
Zed |
重新提出 |