定制openstack SPS服务(类似nova)详解
2016-02-29 00:00
525 查看
感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!
如有转载,请保留源作者博客信息。
Better Me的博客:blog.csdn.net/tantexian
如需交流,欢迎大家博客留言。
一:简介1、本文,主要讲解如果定制化一个类似nova服务的基础框架。基础架构参考glance,少数地方参考nova框架。暂且命名为sps-2014-4
2、本示例没有走keystone,假若需要配置走keystone,请自行参考博文,自行配置。
openstack_ice之wsgi详解(paste从ini配置文件->routesr具体发布流程)
3、基础框架最终代码地址:
https://github.com/tantexian/sps-2014-12-4
二:安装sps服务及demo数据库建立与route API 发布
1、安装sps服务,执行上述sps包中的脚本
./install.sh:
#此脚本用来安装sps服务,并启动、内容如下
rm -rf build/ rm -rf /usr/lib/python2.6/site-packages/sps/ rm -rf /usr/bin/sps-* python setup.py install rm -rf /etc/sps/* cp -r /sps-2014-12-4/etc/* /etc/sps/ |
图2-1
3 .完成步骤2后执行命令:sps-manage db_sync #生成数据库(同步数据库表到数据库,)
图2-2
查看数据库表:(注数据库database sps油自己提前手动创建,否则将会保存,找不到sps数据库)
图2-3
此处发现demo数据库执行完db_sync则自动创建好了。
4、
#发布自定义的 route API: (假若需要增加发布新的api,请自行参考demo发布自定义的api)
此处的作用就是当前面有http请求时候,根据对应规则自动映射到对应controller的增伤查改函数。
关于route 如何 对应
controller 下面函数,更多详细请参考以下博文系列:
openstack核心路由和扩展路由及路由对应的api函数调用流程分析 openstack-wsgi的route中增加api流程详解(os-networks)增加 wsgi-restful-routes详解: |
5、此处附上本demo的route 映射url地址:
增: curl -i -H 'Content-Type: application/json' -H 'User-Agent: python-spsclient' -X 'POST' http://192.168.10.31:9898/v1/demos -d '{"demo": {"name": "ttx", "type": "1"}}' 查all: curl -i -H 'Content-Type: application/json' -H 'User-Agent: python-spsclient' -X 'GET' http://192.168.10.31:9898/v1/demos 查某个: curl -i -H 'Content-Type: application/json' -H 'User-Agent: python-spsclient' -X 'GET' http://192.168.10.31:9898/v1/demos/1 更新: curl -i -H 'Content-Type: application/json' -H 'User-Agent: python-spsclient' -X 'PUT' http://192.168.10.31:9898/v1/demos/25 -d '{"demo": {"name": "ttx---25--", "type": "1"}}' 删 curl -i -H 'Content-Type: application/json' -H 'User-Agent: python-spsclient' -X 'DELETE' http://192.168.10.31:9898/v1/demos/1 注:此处记得一定要有:-H 'Content-Type: application/json' |
1、请求url:
curl -i -H 'Content-Type: application/json' -H 'User-Agent: python-spsclient' -X 'POST' http://192.168.10.31:9898/v1/demos -d '{"demo": {"name": "ttx", "type": "1"}}' |
注:匹配原则为:1、url匹配到/demos
2、看-X 参数 为POST (1、2分别匹配到对应下图中红色标记处)
图3-1
3、根据匹配的mapper找到对应的controller方法:
从第三部分
图3-1的黄色标注可知,
controller=demos_resource, action='create', |
controller,找到对应controller类:
图3-2
在根据上述的
action='create',说明是调用该controller的create方法:
图3-3
4、根据图3-3可知,接下来调用db模块的add_demo:
(注:业务逻辑代码应该写在/sps/api/v1/demos.py中,不应该写在db层,db层只能写和数据库交互及事务等操作代码)
此处的models.Demo即为sqlalchemy映射到底层数据库表demo。(
sqlalchemy为一个ORM框架)
接下来看看
models.Demo:
到此整个
增加为例对demo操作流程结束,感觉还是多简单。框架的好处就是,可以很好的节省效率。
四、api启动,及增删查改(CUID)测试:
1 . #启动服务
sps-api --debug #调试模式启动 |
假若提示sps-api端口9898被占用,则脚本kill掉,重启即可:
==========================================================================
ps aux | grep sps | grep -v grep | awk '{print $2}' | xargs kill -9
==========================================================================
2. #数据库的增删查改API 测试
curl -i -H 'Content-Type: application/json' -H 'User-Agent: python-spsclient' -X 'POST' http://192.168.10.31:9898/v1/demos -d '{"demo": {"name": "ttx", "type": "1"}}' curl -i -H 'Content-Type: application/json' -H 'User-Agent: python-spsclient' -X 'POST' http://192.168.10.31:9898/v1/demos -d '{"demo": {"name": "ttx2", "type": "2"}}' curl -i -H 'Content-Type: application/json' -H 'User-Agent: python-spsclient' -X 'POST' http://192.168.10.31:9898/v1/demos -d '{"demo": {"name": "ttx3", "type": "3"}}' |
curl -i -H 'Content-Type: application/json' -H 'User-Agent: python-spsclient' -X 'PUT' http://192.168.10.31:9898/v1/demos/124 -d '{"demo": {"name": "ttx-update", "type": "1"}}' |
curl -i -H 'Content-Type: application/json' -H 'User-Agent: python-spsclient' -X 'GET' http://192.168.10.31:9898/v1/demos |
curl -X 'GET' http://192.168.10.31:9898/v1/demos/124 |
curl -i -H 'Content-Type: application/json' -H 'User-Agent: python-spsclient' -X 'DELETE' http://192.168.10.31:9898/v1/demos/124 |
完!
相关文章推荐
- openstack-wsgi的route中增加api流程详解(os-networks)增加
- openstack核心路由和扩展路由及路由对应的api函数调用流程分析
- openstack ice版文档horizon整理(页面resize)
- openstack页面自定义插件使用详解(django、ajax、post)(zTree为例)
- openstack ice版创建实例流程整理(包括wsgi模块间调用解析)
- openstack 工作流workflows使用原理讲解
- OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机启动源码实现(3)
- 解决openstack novnc一段时间后自动挂断登录不上问题,novncproxy dead but pid file exists
- OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机启动源码实现(2)
- openstack nova后端使用ceph rbd(增加在线迁移live_migrate和快照snapshot功能)
- openstack创建虚拟机思维导图整理
- openstack ice resize 详解(二)
- openstack ice 生成虚拟机磁盘文件详解
- 创建虚拟机生成虚拟机全程日志打印输出流程详解(openstack开发必备)
- OpenStack基于Libvirt的虚拟化平台调度实现----Nova虚拟机动态迁移源码分析
- centos7上win2003 virtio (openstack)镜像制作成功(图文详解)
- OpenStack文件注入相关分析(转载)
- 制作OpenStack CentOS 6.5 & win7镜像
- 制作openstack Centos镜像 -- Example: CentOS image
- CREATING A WINDOWS IMAGE FOR OPENSTACK(转)