OpenStack REST API使用

之前一直想寫博客,但因各類因素一直沒寫。最近在作OpenStack,而OpenStack對外提供REST API,今天就簡要介紹一下OpenStack REST API 使用,關於什麼是REST API能夠參考如下兩篇博文:html

http://www.choudan.net/2013/07/28/OpenStack-Restful-API.htmllinux

http://www.ruanyifeng.com/blog/2011/09/restful.html數據庫

簡單的來講,一切都是資源,每一個資源對應一個URI。json

咱們可使用linux curl命令使用REST API向OpenStack發送請求,例如根據用戶名、密碼和tenant獲得token:restful

curl -i 'http://127.0.0.1:5000/v2.0/tokens' -X POST -H "Content-Type: application/json" -H "Accept: application/json"  -d '{"auth": {"tenantName": "admin", "passwordCredentials": {"username": "admin", "password": "secretsecret"}}}'

可是我以爲用curl命令不太方便,並且有時候返回結果很長很長的時候不太好看,因此就使用了RESTClient,由於是在CentOS環境下工做,因而在火狐下裝了個RESTClient插件,像上面的請求能夠輕鬆搞定,加入兩個Header,若是要訪問其餘資源,則還另外須要一個Header:x-auth-token,選擇一個Method,而後在Body裏面寫下須要的東西,截圖以下:app

Body:curl

 

{ "auth":{ "passwordCredentials":{ "username":"admin", "password":"123456" }, "tenantName":"admin" } }

 

OpenStack的API大多都在官方文檔中寫了,爲何說大多,而不是所有,是由於有些真沒寫,我以爲其中沒寫的分兩類:編碼

  1. 沒有及時更新。
  2. 以爲不必寫,認爲你們能夠猜到,或者能夠從源碼中找到蛛絲馬跡。畢竟搞OpenStack仍是得要兩把刷子。

舉幾個目前API文檔中沒寫或者沒有詳細說明用法的API,好比:url

  1. OpenStack中的admin用戶如何得到全部tenant(project)下的虛機信息。具體的作法是加上query參數all_tenants,即:/v2/{tenant_id}/servers/detail?all_tenants=true
  2. 延伸第一條,admin如何獲取某個tenant下的虛機。/v2/{tenant_id}/servers/detail?all_tenants=true&project_id=XXX

還有好多能夠加query參數的API,就不一一列舉了。spa

 

還有一個問題,在API文檔中只有URL的後半部分,那麼前半部分去哪了,前半部分就在當初安裝OpenStack時建立的endpoint中,咱們可使用如下命令找到:

keystone endpoint-list keystone endpoint-get --service=XXX

在實際的編碼中咱們固然不能在代碼裏把URL寫死,應該經過查數據表獲得各個服務的endpoint,而後生成完整的URL。細心的同窗就會發現,在每次認證的時候不只會返回token並且會返回serviceCatalog,裏面就有咱們想要的endpoint,就沒必要再單獨再去查一次數據庫了。

 

有個問題沒太弄懂,不知是否有人解答一下:

keystone兩個端口,一個是5000,一個是35357(adminURL)。兩個權限不同,建立用戶什麼的必須用35357。我知道OpenStack採用Policy來管理某個用戶在某個tenant下的權限。但後臺具體是如何區分5000和35357的呢,怎樣讓35357能夠建立用戶而5000建立不了用戶。

相關文章
相關標籤/搜索