关于标签操作的通知

https://blueprints.launchpad.net/nova/+spec/send-tag-notification

Nova 目前不会在标签创建/更新/删除操作时发送通知。

标签设计用于搜索和过滤,如果没有最新的标签信息,像 OpenStack Searchlight 这样的服务将无法有效且正确地工作。

在任何实例标签信息发生变化时发送创建、更新和删除通知将会很有用。

问题描述

用例

像 Searchlight[1] 这样的外部系统想要索引实例标签,这使得使用实例标签查询大量实例更快、更高效和更准确。这将允许强大的查询以及跨 OpenStack 资源的统一搜索。

维护者希望在向实例添加、更新或删除标签时收到通知。

提议的变更

标签字段将被添加到 InstancePayload 中,用于实例更新版本化通知:https://blueprints.launchpad.net/nova/+spec/additional-notification-fields-for-searchlight

此蓝图将为以下操作发送 instance.update 通知

  • PUT /servers/{server_id}/tags/{tag}

  • PUT /servers/{server_id}/tags

  • DELETE servers/{server_id}/tags/{tag}

  • DELETE /servers/{server_id}/tags

备选方案

作为替代方案,可以为 tags.create/update/delete 操作发送带有 resource_id 的 payload 的标签通知。由于 tags.resource_id 字段是自由格式的:https://github.com/openstack/nova/blob/edf51119fa59ff8a3337abb9107a06fa33d3c68f/nova/db/sqlalchemy/models.py#L1466,那么通知接收者需要关联 resource_id 指向的内容。

数据模型影响

通知 payload 对象的变化将取决于 [2]。

REST API 影响

安全影响

通知影响

用于标签不同操作的 Instance.update 通知将被发送到名为 ‘versioned_notifications’ 的 amqp topic。

其他最终用户影响

性能影响

如果启用了版本化通知,将发送通知。每个服务器标签操作 API 调用都会从数据库加载相关的实例,以检查它是否处于有效状态 [3]。因此,在这种情况下,通知 payload 的生成可以设计为重用已经加载的实例对象。这样,发送通知只会增加由于延迟加载一些默认情况下未加载的实例字段而导致的数据库负载。但是,如果我们在 API 中使用适当的 expected_attrs 加载实例,也可以再次避免这种情况。

其他部署者影响

开发人员影响

实现

负责人

主要负责人

Kevin Zheng

工作项

  • 当实例标签发生变化时发送 instance.update 通知。

依赖项

[2] https://blueprints.launchpad.net/nova/+spec/additional-notification-fields-for-searchlight [3] https://github.com/openstack/nova/blob/edf51119fa59ff8a3337abb9107a06fa33d3c68f/nova/api/openstack/compute/server_tags.py#L54

测试

除了单元测试,还将添加新的功能测试用例来覆盖新的通知,并且测试将断言存储的通知样本的有效性。

文档影响

参考资料

[1]: Searchlight: https://docs.openstack.org/developer/searchlight/index.html

历史

修订版

发布名称

描述

Pike

引入