为 hypervisor 添加通知¶
https://blueprints.launchpad.net/nova/+spec/hypervisor-notification
目前,计算节点状态改变时不会发送任何通知,因此外部系统无法在创建、更新或删除计算节点时收到通知。
提供此类通知有助于外部系统获取最新的计算节点状态和指标。
问题描述¶
用例¶
像 Searchlight[1] 这样的外部系统希望索引计算节点,从而使对大量计算节点的查询更快、更高效。
维护者希望在添加或删除计算节点时收到通知。
提议的变更¶
将为以下操作添加版本化的通知
ComputeNode.create
ComputeNode.save
ComputeNode.destroy
注意
只有在指定的字段(“vcpus”、“memory_mb”、“local_gb”、“vcpus_used”、“local_gb_used”、“hypervisor_hostname”、“disk_available_least”、“running_vms”、“current_workload”)发生变化时才会发送通知,以避免发送内容相同的无用通知。
备选方案¶
无
数据模型影响¶
不需要数据库模式更改。
以下新对象将添加到 compute_node 中,用于创建和更新
@base.NovaObjectRegistry.register
class ComputeNodeNotification(notification.NotificationBase):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'payload': fields.ObjectField('ComputeNodePayload')
}
@base.NovaObjectRegistry.register
class ComputeNodePayload(notification.NotificationPayloadBase):
# Version 1.0: Initial version
SCHEMA = {
'id': ('compute_node', 'id'),
'uuid': ('compute_node', 'uuid'),
'host': ('compute_node', 'host'),
'vcpus': ('compute_node', 'vcpus'),
'memory_mb': ('compute_node', 'memory_mb'),
'local_gb': ('compute_node', 'local_gb'),
'vcpus_used': ('compute_node', 'vcpus_used'),
'memory_mb_used': ('compute_node', 'memory_mb_used'),
'local_gb_used': ('compute_node', 'local_gb_used'),
'hypervisor_type': ('compute_node', 'hypervisor_type'),
'hypervisor_version': ('compute_node', 'hypervisor_version'),
'hypervisor_hostname': ('compute_node', 'hypervisor_hostname'),
'free_ram_mb': ('compute_node', 'free_ram_mb'),
'free_disk_gb': ('compute_node', 'free_disk_gb'),
'current_workload': ('compute_node', 'current_workload'),
'running_vms': ('compute_node', 'running_vms'),
'disk_available_least': ('compute_node', 'disk_available_least'),
'host_ip': ('compute_node', 'host_ip'),
}
VERSION = '1.0'
fields = {
'id': fields.IntegerField(),
'uuid': fields.UUIDField(),
'host': fields.StringField(nullable=True),
'vcpus': fields.IntegerField(),
'memory_mb': fields.IntegerField(),
'local_gb': fields.IntegerField(),
'vcpus_used': fields.IntegerField(),
'memory_mb_used': fields.IntegerField(),
'local_gb_used': fields.IntegerField(),
'hypervisor_type': fields.StringField(),
'hypervisor_version': fields.IntegerField(),
'hypervisor_hostname': fields.StringField(nullable=True),
'free_ram_mb': fields.IntegerField(nullable=True),
'free_disk_gb': fields.IntegerField(nullable=True),
'current_workload': fields.IntegerField(nullable=True),
'running_vms': fields.IntegerField(nullable=True),
'disk_available_least': fields.IntegerField(nullable=True),
'host_ip': fields.IPAddressField(nullable=True),
}
def __init__(self, compute_node):
super(ComputeNodePayload, self).__init__()
self.populate_schema(compute_node=compute_node)
以下新对象将添加到 compute_node 中,用于删除
@base.NovaObjectRegistry.register
class ComputeNodeDeleteNotification(notification.NotificationBase):
# Version 1.0: Initial version
VERSION = '1.0'
fields = {
'payload': fields.ObjectField('ComputeNodeDeletePayload')
}
@base.NovaObjectRegistry.register
class ComputeNodeDeletePayload(notification.NotificationPayloadBase):
# Version 1.0: Initial version
SCHEMA = {
'id': ('compute_node', 'id'),
'uuid': ('compute_node', 'uuid'),
}
VERSION = '1.0'
fields = {
'id': fields.IntegerField(),
'uuid': fields.UUIDField(),
}
def __init__(self, compute_node):
super(ComputeNodeDeletePayload, self).__init__()
self.populate_schema(compute_node=compute_node)
NotificationBase 的定义可以在 [2] 中找到。
REST API 影响¶
无
安全影响¶
无
通知影响¶
将引入新的通知 compute_node.create(在创建计算节点后发送)、compute_node.update(在计算节点的非静态字段更新后发送)和 compute_node.delete(在删除计算节点后发送),优先级为 INFO,通知的有效负载将是现有 ComputeNode 版本化对象的序列化形式。
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
liyingjun
工作项¶
在创建、更新或删除计算节点时发送新的通知。
依赖项¶
无
测试¶
除了单元测试,还将添加新的功能测试用例来覆盖新的通知。
文档影响¶
无
参考资料¶
[1]: Searchlight: https://docs.openstack.org/developer/searchlight/index.html [2]: 版本化通知: https://docs.openstack.org/developer/nova/notifications.html#versioned-notifications
历史¶
发布名称 |
描述 |
|---|---|
Newton |
引入 |