openstack neutron网络模块分析(四)--- 添加extension

本文详细介绍了在OpenStack Ocata版本的Neutron中添加extension的步骤,包括创建`/neutron/extensions/test.py`,定义`RESOURCE_ATTRIBUTE_MAP`,添加数据库模型,修改`/neutron/plugins/ml2/plugin.py`,更新`policy.json`,以及验证extension的添加。涉及到的文件和方法包括`ExtensionDescriptor`,`TestDbMixin`,和dashboard接口的调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

neutron 添加extension

环境:
ocata版本
neutron-10.0.5
python-neutronclient-6.1.1
horizon-11.0.4

主要讲述如何在ocata版本的openstack网络模块neutron中添加extension。

流程图
先看一张从dashboard到neutron相应组件api的流程图

整个流程大致就是这样:
dashboard(shell)–>neutronclient–>neutron-server–>plugin–>agent
详细的流程讲解这里不作展开,只做相应步骤的代码添加,详细的讲解会在后续的文章提及。

我们这里讲解的是如何添加extension,当然就是要在/neutron/extension目录添加我们的py文件,这里的例子是对

数据库表格的操作

#neutron-server

这一步是对neutron-server访问数据库的操作分析。
如何新增数据库表 请看这里https://blog.youkuaiyun.com/energysober/article/details/80289394
##步骤一 添加extensions/test.py

下面时分段讲解

头文件

安装需要添加,不同版本可能存在文件的变动

	from neutron_lib.api import extensions as api_extensions
	from neutron_lib.plugins import directory
	from neutron_lib.db import constants as db_const
	from neutron_lib import exceptions as nexception

	from neutron.quota import resource_registry	
	from neutron._i18n import _

	from neutron.api import extensions
	from neutron.api.v2 import base

添加RESOURCE_ATTRIBUTE_MAP

    `
	TESTS = 'tests'
	RESOURCE_ATTRIBUTE_MAP = {
    TESTS: {
        'id': {'allow_post': False, 'allow_put': False,
               'validate': {'type:uuid': None},
               'is_visible': True, 'primary_key': True},
        'pid': {'allow_post': True, 'allow_put': True,
               'validate': {'type:uuid': None},
               'is_visible': True},
        'project_id': {'allow_post': True, 'allow_put': True
                'validate': {'type:string': db_const.PROJECT_ID_FIELD_SIZE},
               'is_visible': True},
        'name': {'allow_post': True, 'allow_put': False,
                 'validate': {'type:string': db_const.NAME_FIELD_SIZE},
                 'default': '',
                 'is_visible': True},
    },`

这个RESOURCE_ATTRIBUTE_MAP 很重要,不可缺少,这里面的字段就是之后你的create、delete、update、get等操作的对象。在这里也就是数据库所有的字段
上面的id由于是调用uuidutils.generate_uuid()生成(步骤四),所以这里设置为False

allow_post : 是否允许post请求

vaildate : 指定类型等

is_visible : 返回信息中是否有此字段

ps:详细的解释请看/neutron/api/v2/attributes.py的注释

添加cl `class Test(api_extensions.ExtensionDescriptor): “”“Agent management extension.”""

@classmethod
def get_name(cls):
    return "test"

@classmethod
def get_alias(cls):
    return "test"

@classmethod
def get_description(cls):
    return "curd a test ."

@classmethod
def get_namespace(cls):
    return "http://docs.openstack.org/ext/agent/api/v2.0"

@classmethod
def get_updated(cls):
    return "2018-05-10T10:00:00-00:00"

@classmethod
def get_resources(cls):
    """Returns Ext Resources."""

    plugin = directory.get_plugin()
    resource_registry.register_resource_by_name(TESTS)
    params = RESOURCE_ATTRIBUTE_MAP.get(TESTS)
    controller = base.create_resource(TESTS,
                                      TEST,
                                      plugin, params,
                                      allow_bulk=True,
                                      allow_pagination=True,
                                      allow_sorting=True)

    ex = extensions.ResourceExtension(GROUPS, controller)

    return [ex]

def get_extended_resources(self, version):
    if version == "2.0":
        return RESOURCE_ATTRIBUTE_MAP
    else:
        return {}        
<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值