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

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设备失败。

你可能感兴趣的:(Nova 扩展支持ipsan API源代码解析)