定制openstack SPS服务(相似nova)详解

感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所不免,欢迎指正! python

若有转载,请保留源做者博客信息。
git

Better Me的博客blog.csdn.net/tantexian

如需交流,欢迎你们博客留言。 github


一:简介
一、本文,主要讲解若是定制化一个相似nova服务的基础框架。基础架构参考glance,少数地方参考nova框架。暂且命名为sps-2014-4

二、本示例没有走keystone,倘若须要配置走keystone,请自行参考博文,自行配置。 openstack_ice之wsgi详解(paste从ini配置文件->routesr具体发布流程)

三、基础框架最终代码地址: https://github.com/tantexian/sps-2014-12-4


二:安装sps服务及demo数据库创建与route API 发布
一、安装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/ 


二、#数据库表增长(参照以下Demo数据库表的格式定义) 
图2-1


3 .完成步骤2后执行命令:sps-manage db_sync #生成数据库(同步数据库表到数据库,) 
图2-2

查看数据库表:(注数据库database sps油本身提早手动建立,不然将会保存,找不到sps数据库)
图2-3

此处发现demo数据库执行完db_sync则自动建立好了。


四、  #发布自定义的 route API: (倘若须要增长发布新的api,请自行参考demo发布自定义的api)
此处的做用就是当前面有http请求时候,根据对应规则自动映射到对应controller的增伤查改函数。
关于route 如何 对应  controller 下面函数,更多详细请参考如下博文系列:



五、此处附上本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'


3、以增长为例对demo调用流程进行讲解:

一、请求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"}}' 

二、根据第二部分的4 api 发布可知:对应匹配的mapper为:
注:匹配原则为:一、url匹配到/demos    二、看-X 参数 为POST (一、2分别匹配到对应下图中红色标记处)
图3-1

三、根据匹配的mapper找到对应的controller方法:
从第三部分 图3-1的黄色标注可知,
controller=demos_resource,
action='create',
跟进代码 controller,找到对应controller类:
图3-2
在根据上述的 action='create',说明是调用该controller的create方法:
图3-3


四、根据图3-3可知,接下来调用db模块的add_demo:
(注:业务逻辑代码应该写在/sps/api/v1/demos.py中,不该该写在db层,db层只能写和数据库交互及事务等操做代码)

此处的models.Demo即为sqlalchemy映射到底层数据库表demo。( sqlalchemy为一个ORM框架
接下来看看 models.Demo:

到此整个 增长为例对demo操做流程结束,感受仍是多简单。框架的好处就是,能够很好的节省效率。


4、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 -i -H 'Content-Type: application/json' -H 'User-Agent: python-spsclient'  -X 'DELETE'  http://192.168.10.31:9898/v1/demos/124


完!
相关文章
相关标签/搜索