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建立不了用户。

相关文章
相关标签/搜索