定製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


完!
相關文章
相關標籤/搜索