扩展 OpenStack 的 REST API 的方法

原文来自:扩展 OpenStack 的 REST API 的方法


以Nova REST API为例, 你应该按照以下步骤来扩展 Nova REST API

(使用 类nova.api.openstack.compute.contrib.floating_ips.Floating_ips 作为例子)


1. 创建一个新的extension 子类. Extension子类应该派生于“nova.api.openstack.extensions ExtensionDescriptor”

以 Floating_ips 类为例

这里写图片描述


2. 在 Nova API 中 添加一个新的资源类型

在Floating_ips 类中

  • 覆写父类中的方法 “get_resources()”
  • 在方法 “get_resources()” 中,,返回 ResourceExtensions 列表, 来注册你的新的 资源类型 / URL路径 / Controller 等等

这里写图片描述

例如, 以下代码会创建一个新的资源类型 “os-floating-ips”.

    def get_resources(self):
        resources = []

        res =extensions.ResourceExtension('os-floating-ips',
                        FloatingIPController(),
                        member_actions={})
       resources.append(res)

        return resources

新资源 “os-floating-ips” 会和以下URL匹配.

这里写图片描述


3. 为Nova API中已有的资源类型, 添加新的 controller 方法

在Floating_ips 类中

  • 覆写父类中的方法 “get_controller_extensions”
  • 在函数 “get_controller_extensions”,中 返回一系列controller列表

例如, 以下代码会为 已有资源“servers” 添加新的

controller(/opt/stack/nova/nova/api/openstack/compute/servers.py)
    defget_controller_extensions(self):
        controller =FloatingIPActionController(self.ext_mgr)
        extension =extensions.ControllerExtension(self, 'servers',controller)
        return [extension]

新的controller会和以下URL匹配

这里写图片描述


4. 注册我们的extension 子类到Nova API中

  • Extension Module 命名规则
    比如我们的extension子类名字叫: classFloating_ips(extensions.ExtensionDescriptor):
    那么Python module的文件名就要叫(注意全部小写): floating_ips.py

  • Extension Module 位置
    把新的module文件放到路径 “/opt/stack/nova/nova/api/openstack/compute/contrib/”
    e.g /opt/stack/nova/nova/api/openstack/compute/contrib/floating_ips.py
    Nova API会在启动时, 自动发现我们的extension, 并进行注册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值