您的位置:首页 > 编程语言

Nova 扩展支持ipsan API源代码解析

2015-06-24 09:57 141 查看

Nova 扩展支持ipsan API源代码解析

概要



扩展nova api使其具备对ipsan设备管理的能力。本文是剖析扩展该部分api所做的整个过程。主要包括:客户端、Server、数据库、异常类。

客户端(client)



Client是向nova-api发送http请求组件。Nova ipsan的client定义在=novaclient.v1_1.contrib.

Ipsans.py模块中。

Server(API)



该服务定义在nova.api.openstack.compute.contrib.ipsans.py模块中。

资源api:

Nova扩展资源的API都定义在一个指定的目录下,在启动服务是,会自动加载特定目录下的资源模块。这里的扩展模块定义放置nova/api/openstack/compute/contrib/目录下。且扩展资源类的命名有一定的要求,资源类名是大写模块名的首字母作为资源类名。如下图:

资源controller:

资源controller是指对资源请求的响应处理。

nova.api.openstack.compute.contrib.Ipsancontroller是ipsan资源的控制器,在服务中就是接受请求的一个应用。其中包含了五个函数:

1.index()

处理获取所有ipsan设备的请求。

2.create()

处理创建ipsan设备的请求。

3.show()

处理获取指定ipsan设备的请求。

4.update()

处理更新指定ipsan设备的请求。

5.delete()

处理删除指定的ipsan设备的请求。

数据库(DB)



这里使用mysql作为数据库,增加了一个ipsans表。

数据模型

属性 类型 键值 值 备注

id Integer 主键 必填 索引

target String \ 必填 设备标识

ip String \ 必填 设备的ip

port String \ 必填 服务端口

auth_method String \ 可选 认证方式

username String \ 可选 用户名

password String \ 可选 密码

size String \ 必填 设备大小

status String \ 必填 设备状态

instance_uuid String 外键 可选 实例的uuid

device_name String \ 可选 设备名称

deleted Integer \ 可选 是否删除标识

create_at DateTime \ 可选 创建时间

updated_at DateTime \ 可选 更新时间

deleted_at DateTime \ 可选 删除时间

该表的定义在nova.db.sqlalchemy.models.Ipsan

数据库操作

关于表的操作定义在nova.db.sqlalchemy.api.py模块中,在操作表之前获取session可以调用get_session()获取。其中针对ipsan表定义的操作有:

1.ipsan_get_by_ipsan_id()

通过ipsan的id来查询指定的ipsan设备。

2.ipsan_get_by_instance_uuid()

通过instance的id找的相关联的ipsan。

3.ipsan_get_all()

查询所有的ipsan设备。

4.attach_ipsan_to_instance()

将指定ipsan关联到指定的instance。

5.detach_ipsan_from_instance()

解除ipsan和instance的关联。

6.ipsan_update()

更新指定ipsan设备。

7.ipsan_create()

创建ipsan设备。

8.ipsan_delete()

删除指定ipsan设备。

以上所有函数定义在nova.db.sqlalchemy.api.py模块中。

数据库api

这里的api是指数据库对其他服务提供的数据库操作api。

1.attach_ipsan_to_instance()

关联ipsan和instance。

2.detach_ipsan_to_instance()

解除ipsan和instance之间的关联。

3.ipsan_get_by_ipsan_id()

获取指定id的ipsan设备。

4.ipsan_get_by_instance_uuid()

获取与指定instance关联的ipsan设备。

5.ipsan_get_all()

查询所有的ipsan设备。

6.ipsan_create()

创建ipsan设备。

7.ipsan_update()

更新指定ipsan设备。

8.ipsan_delete()

删除指定的ipsan设备。

以上api定义在nova.db.api.py模块中。

更新表

Nova的数据库管理是采用了版本机制,所以对数据库表结构的更新有专有的更新方式。对表结构的更新操作都定义在nova.db.sqlalchemy.migrate_repo.versions.xxx_xxxx.py模块中。如下图:

更新表结构的机制提供了两个方法:upgrade()和downgrade()把要更新的表结构重写定义在函数内。当版本升级时会执行upgrade(),降版本时会执行downgrade()。

重写新的表结构还不能实现表的更新,要把它同步到数据库中,下面介绍几个数据库版本控制命令。

查看当前数据库版本号:

nova-manage db version

同步数据库:

nova-manage db sync

异常类



这里的异常类主要是对ipsan操作,可能引起的异常的定义。所有异常类定义在nova.nova.exception.py模块中。异常类有:

1.IpsanNotFound(NotFound)

没有发现ipsan设备。

2.CannotAttachIpsanToTnstance(Invalid)

关联instance和ipsan失败。

3.InvalidIpsan(Invalid)

ipsan设备无效。

4.IpsanUnattached(Invalid)

ipsan不能关联到instance。

5.IpsanCreateException(NovaException)

创建ipsan设备失败。

6.IpsanDeleteException(NovaException)

删除ipsan设备失败。

7.IpsanUpdateException(NovaException)

更新ipsan设备失败。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: