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设备失败。
相关文章推荐
- Effective C++ 条款13
- java项目的划分方式:模块优先还是层优先?
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
- C#中datagridview的EditingControlShowing事件用法实例
- python学习笔记一
- java web 开发Session超时设置
- eclipse中git分支创建与合并(-)
- C#处理datagridview虚拟模式的方法
- eclipse/myeclipse整合svn插件
- 使用windbg調試iis應用程序池崩溃的asp.net 2.0 bug.
- mybatis 模糊查询报错: java.sql.SQLException: ORA-01006: 绑定变量不存在
- 在网页上看到想要的颜色,如何知道这种颜色的颜色代码和 RGB 颜色值?
- JavaSE_基础库类_System类
- [技巧篇]05.关于eclipse模版
- 如何在 Laravel 中使用 SMTP 发送邮件(适用于 163、QQ、Gmail 等)
- JAVA多线程编程(一)——线程的创建方式
- C语言位域精解
- 表友汇PC端技术解析之RadioButtonList控件的使用
- 【转】python3.3.3右键菜单Edit with IDLE不能启动,打开IDLE后新建和打开闪退问题
- python字典