改进密钥对通知

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

目前,密钥对状态改变时不会发送有用的通知。Nova 在创建/删除密钥对时仅通知 key_name。因此,用户无法使用外部系统(例如 searchlight)搜索密钥对信息(例如 ssh 公钥)。

问题描述

用例

外部系统希望索引密钥对,以便更快、更有效地查询大量密钥对。一些用户和系统希望搜索和检索 ssh 公钥和指纹,以便通过 ssh 穿透与外部系统协作。

提议的变更

此规范将遗留通知转换为关于以下密钥对事件的版本化通知,同时扩展通知内容,添加额外数据以支持上述用例。

  • keypair.create.start

  • keypair.create.end

  • keypair.delete.start

  • keypair.delete.end

  • keypair.import.start

  • keypair.import.end

备选方案

数据模型影响

不需要数据库模式更改。

以下新对象将被添加到密钥对中

@base.NovaObjectRegistry.register
class KeypairNotification(notification.NotificationBase):
    # Version 1.0: Initial version
    VERSION = '1.0'
    fields = {
        'payload': fields.ObjectField('KeypairPayload')
    }

@base.NovaObjectRegistry.register
class KeypairPayload(notification.NotificationPayloadBase):
    # Version 1.0: Initial version
    SCHEMA = {
        'name': ('keypair', 'name'),
        'type': ('keypair', 'type'),
        'fingerprint': ('keypair', 'fingerprint'),
        'public_key': ('keypair', 'public_key'),
        'user_id': ('keypair', 'user_id')
    }
    VERSION = '1.0'
    fields = {
        'name': fields.StringField(),
        'type': fields.KeypairTypeField(),
        'fingerprint': fields.StringField(),
        'public_key': fields.StringField(),
        'user_id': fields.StringField(),
    }
    def __init__(self, keypair):
        super(KeypairPayload, self).__init__()
        self.populate_schema(keypair=keypair)

class KeypairType(Enum):
    """Represents possible type values for a Keypair."""

    SSH = 'ssh'
    X509 = 'x509'

    ALL = (SSH, X509)

    def __init__(self):
        super(KeypairType, self).__init__(
            valid_values=KeypairType.ALL)

class KeypairTypeField(BaseEnumField):
    AUTO_TYPE = KeypairType()

NotificationBase 的定义可以在 [1] 找到。

REST API 影响

安全影响

通知影响

密钥对的通知将更改如下

  • ‘之前’:

    {
        "key_name": "key1"
    }
    
  • ‘之后’:

    {
        "priority": "INFO",
        "payload": {
            "nova_object.namespace": "nova",
            "nova_object.name": "KeypairPayload",
            "nova_object.version": "1.0",
            "nova_object.data": {
                "id": 1,
                "name": "key1",
                "type": "ssh",
                "fingerprint": "6d:a1:2c:a3:.....",
                "public_key": "Public key: ssh-rsa AAAAB3Nza......",
                "user_id": "5ed98568284443b09b82f2a519a3f1d5",
                "created_at": "2016-04-04T04:18:30.000000",
                "deleted_at": None
            }
        },
        "event_type": "keypair.create.end",
        "publisher_id": "nova-compute:host1"
    }
    

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

h-eguchi

工作项

  • 添加具有版本化负载的新密钥对通知。

我们将并行提供两种通知一段时间。一旦版本化通知达到功能对等,我们将删除遗留通知。

依赖项

测试

除了单元测试,还将添加新的功能测试用例来覆盖改进的通知。并且需要添加通知样本和相关的测试。

文档影响

参考资料

[1]: 版本化通知:https://docs.openstack.org/developer/nova/notifications.html#versioned-notifications

历史

修订版

发布名称

描述

Newton

引入