为什么80%的码农都做不了架构师?>>>   

openstack官方有提供api供开发者使用,可以使用api做一些外围的小工具,用来简化对openstack的管理。本篇主要讲解api中使用GET方法的接口,其余的POST、DELETE方法以后介绍。

api-quickstart:http://docs.openstack.org/api/quick-start/content/index.html

api-doc:http://api.openstack.org/api-ref.html

环境:ubuntu12.10(10.1.1.186)

如果你看了官方的quickstart,他会让你先生成一个X-Auth-Token值,然后使用这个认证的值调用相关的api接口。如下过程:

curl -k -X 'POST' -v http://10.1.1.186:5000/v2.0/tokens -d '{"auth":{"passwordCredentials":{"username": "guol", "password":"123456"}}}' -H 'Content-type: application/json' | python -mjson.tool

输出结果如下:

{"access": {"serviceCatalog": {}, "token": {"expires": "2013-01-27T04:55:35Z", "id": "a4b6a871ff2f41a797c0b7d45c69f81e"}, "user": {"id": "4c1a6122fc874a8bb541a34be3b316ad", "name": "guol", "roles": [], "roles_links": [], "username": "guol"}}
}

然后使用token id调用你使用的api

curl -X 'GET' -H  "X-Auth-Token:a4b6a871ff2f41a797c0b7d45c69f81e" -v http://10.1.1.186:5000/v2.0/tenants | python -mjson.tool

输出的结果如下:

{"tenants": [{"description": "\u4e91\u5e73\u53f0\u7ba1\u7406\u5458,\u5168\u5c40\u7ba1\u7406\u6240\u6709\u9879\u76ee", "enabled": true, "id": "3a3613f83183435d9c47aa362261f720", "name": "admin"}], "tenants_links": []
}

当你按照api-doc接着调用compute、image、volume等下面的api接口时,会发现统统没有返回值,经过一段时间的摸索,发现对下剩下的api接口是需要使用认证过的token才能使用的,下面的方法才是王道。

获取认证token值

curl -X POST -d  '{"auth": {"tenantName": "VM", "passwordCredentials":{"username": "admin", "password": "123456"}}}' -H "Content-type: application/json" http://10.1.1.186:35357/v2.0/tokens | python -mjson.tool

返回值如下:

{"access": {"metadata": {"is_admin": 0, "roles": ["141927156f7a47d98858e51febaea8cf"]}, "serviceCatalog": [{"endpoints": [{"adminURL": "http://10.1.1.186:8774/v2/170bf7acb88646bc9147085d426c4671", "id": "e02aaf58a24641049fddfe7385ce9399", "internalURL": "http://10.1.1.186:8774/v2/170bf7acb88646bc9147085d426c4671", "publicURL": "http://10.1.1.186:8774/v2/170bf7acb88646bc9147085d426c4671", "region": "RegionOne"}], "endpoints_links": [], "name": "nova", "type": "compute"}, {"endpoints": [{"adminURL": "http://10.1.1.186:9292/v1", "id": "7c48fa4d876d44e0a3cb324a45a14931", "internalURL": "http://10.1.1.186:9292/v1", "publicURL": "http://10.1.1.186:9292/v1", "region": "RegionOne"}], "endpoints_links": [], "name": "glance", "type": "image"}, {"endpoints": [{"adminURL": "http://10.1.1.186:8776/v1/170bf7acb88646bc9147085d426c4671", "id": "c08114987bc0443d879436db6290dd08", "internalURL": "http://10.1.1.186:8776/v1/170bf7acb88646bc9147085d426c4671", "publicURL": "http://10.1.1.186:8776/v1/170bf7acb88646bc9147085d426c4671", "region": "RegionOne"}], "endpoints_links": [], "name": "volume", "type": "volume"}, {"endpoints": [{"adminURL": "http://10.1.1.186:8773/services/Admin", "id": "cd6c3c2ac44340d6a78cb903ec9bcab3", "internalURL": "http://10.1.1.186:8773/services/Cloud", "publicURL": "http://10.1.1.186:8773/services/Cloud", "region": "RegionOne"}], "endpoints_links": [], "name": "ec2", "type": "ec2"}, {"endpoints": [{"adminURL": "http://10.1.1.186:8080/v1", "id": "a75755093500441ea954f4874ccecf15", "internalURL": "http://10.1.1.186:8080/v1/AUTH_170bf7acb88646bc9147085d426c4671", "publicURL": "http://10.1.1.186:8080/v1/AUTH_170bf7acb88646bc9147085d426c4671", "region": "RegionOne"}], "endpoints_links": [], "name": "swift", "type": "object-store"}, {"endpoints": [{"adminURL": "http://10.1.1.186:35357/v2.0", "id": "196e553f9bcc4c8fa425bc0fa28a144b", "internalURL": "http://10.1.1.186:5000/v2.0", "publicURL": "http://10.1.1.186:5000/v2.0", "region": "RegionOne"}], "endpoints_links": [], "name": "keystone", "type": "identity"}], "token": {"expires": "2013-01-27T05:06:50Z", "id": "71fb5b7816804febbd89ed315fe67c94", "tenant": {"description": "\u6240\u6709\u516c\u53f8\u81ea\u4e3b\u6e38\u620f\u7684\u524d\u7aef\u53d1\u5e03\u673a,\u5982\u8d5b\u5c14\u53f7,\u529f\u592b\u7b49", "enabled": true, "id": "170bf7acb88646bc9147085d426c4671", "name": "VM"}}, "user": {"id": "24a2251c32504957ad2647c2448ffac3", "name": "admin", "roles": [{"name": "\u524d\u7aef\u6e38\u620f"}], "roles_links": [], "username": "admin"}}
}

使用返回的token id和tenant id调用api返回该tenant下的servers

curl -X GET -H "X-Auth-Token:71fb5b7816804febbd89ed315fe67c94" -H "Content-type: application/json" http://10.1.1.186:8774/v2/170bf7acb88646bc9147085d426c4671/servers | python -mjson.tool

返回结果如下

{"servers": [{"id": "ac561829-dffa-443e-a321-260d48f4cba3", "links": [{"href": "http://10.1.1.186:8774/v2/170bf7acb88646bc9147085d426c4671/servers/ac561829-dffa-443e-a321-260d48f4cba3", "rel": "self"}, {"href": "http://10.1.1.186:8774/170bf7acb88646bc9147085d426c4671/servers/ac561829-dffa-443e-a321-260d48f4cba3", "rel": "bookmark"}], "name": "VM1"}, {"id": "e3b84378-7598-48c8-8a1d-bd555c4c1f90", "links": [{"href": "http://10.1.1.186:8774/v2/170bf7acb88646bc9147085d426c4671/servers/e3b84378-7598-48c8-8a1d-bd555c4c1f90", "rel": "self"}, {"href": "http://10.1.1.186:8774/170bf7acb88646bc9147085d426c4671/servers/e3b84378-7598-48c8-8a1d-bd555c4c1f90", "rel": "bookmark"}], "name": "VM2"}, {"id": "beafef2e-26c4-4320-9b45-70006e71785c", "links": [{"href": "http://10.1.1.186:8774/v2/170bf7acb88646bc9147085d426c4671/servers/beafef2e-26c4-4320-9b45-70006e71785c", "rel": "self"}, {"href": "http://10.1.1.186:8774/170bf7acb88646bc9147085d426c4671/servers/beafef2e-26c4-4320-9b45-70006e71785c", "rel": "bookmark"}], "name": "VM3"}, {"id": "f8450270-9d96-4dba-b1c2-8ebcef1ff012", "links": [{"href": "http://10.1.1.186:8774/v2/170bf7acb88646bc9147085d426c4671/servers/f8450270-9d96-4dba-b1c2-8ebcef1ff012", "rel": "self"}, {"href": "http://10.1.1.186:8774/170bf7acb88646bc9147085d426c4671/servers/f8450270-9d96-4dba-b1c2-8ebcef1ff012", "rel": "bookmark"}], "name": "VM4"}]
}

通过返回值可以看到vm tenant中共包含VM1 VM2 VM3 VM4四台实例。

下面附上一个python调用api获取特定tenant下运行实例的脚本

#!/usr/bin/python
import base64,urllib,httplib,json,os
from urlparse import urlparseurl1="10.1.1.186:35357"
params1 = '{"auth": {"tenantName": "tenant-name", "passwordCredentials":{"username": "admin", "password": "123456"}}}'
headers1 = {"Content-Type": 'application/json'}
conn1 = httplib.HTTPConnection(url1)
conn1.request("POST","/v2.0/tokens",params1,headers1)
response1 = conn1.getresponse()
data1 = response1.read()
dd1 = json.loads(data1)
conn1.close()apitoken = dd1['access']['token']['id']
apitenant= dd1['access']['token']['tenant']['id']
apiurl = dd1['access']['serviceCatalog'][0]['endpoints'][0]['publicURL']
apiurlt = urlparse(dd1['access']['serviceCatalog'][0]['endpoints'][0]['publicURL'])url2 = apiurlt[1]
params2 = urllib.urlencode({})
headers2 = { "X-Auth-Token":apitoken, "Content-type":"application/json" }
conn2 = httplib.HTTPConnection(url2)
conn2.request("GET", "%s/servers" % apiurlt[2], params2, headers2)
response2 = conn2.getresponse()
data2 = response2.read()
dd2 = json.loads(data2)
conn2.close()
for i in range(len(dd2['servers'])):print dd2['servers'][i]['name']

转载于:https://my.oschina.net/guol/blog/105430

Openstack api 使用方法相关推荐

  1. 开启OpenStack Api跨域请求(CORS)功能

    2019独角兽企业重金招聘Python工程师标准>>> 如果你打算在js中使用openstack接口(如jstack),就会碰到js的跨域请求问题,解决方法是要在openstack ...

  2. php新浪api,php调用新浪短链接API的方法,php调用新浪api_PHP教程

    php调用新浪短链接API的方法,php调用新浪api 本文实例讲述了php调用新浪短链接API的方法.分享给大家供大家参考.具体方法如下: 复制代码 代码如下: //Sina App_Key def ...

  3. 新浪短链api java_php调用新浪短链接API的方法

    本文实例讲述了php调用新浪短链接API的方法.分享给大家供大家参考.具体方法如下: //Sina App_Key define('SINA_APPKEY', '31641035'); functio ...

  4. openstack API debug OpenstackEveryProject_CLI,curl_based

    1,基于Openstack 每个服务组件client客户端,eg,nova 客户端软件包名称是python-novaclient, 别的都一样,把python-novaclient (nova替换成组 ...

  5. python gitlab_Python Gitlab Api 使用方法

    简述 公司使用gitlab 来托管代码,日常代码merge request 以及其他管理是交给测试,鉴于操作需经常打开网页,重复且繁琐,所以交给Python 管理. 安装 pip install py ...

  6. [置顶] 火车票余票接口API使用方法

    之前有很多人和我要火车票余票接口的api,铁道部频繁升级程序,导致余票的数据一直失败,参看文章: 快春运了,做个火车余票查询接口,余票来源12306,图是百度地图, 这个虽然叫做火车余票接口,但是我要 ...

  7. python爬虫接口_python爬虫之百度API调用方法

    调用百度API获取经纬度信息. import requests import json address = input('请输入地点:') par = {'address': address, 'ke ...

  8. Java操作mongoDB2.6的常见API使用方法

    对于mongoDB而言,学习方式和学习关系型数据库差不太多 開始都是学习怎样insert.find.update.remove,然后就是分页.排序.索引,再接着就是主从复制.副本集.分片等等 最后就是 ...

  9. 微博官方API使用方法【全流程教学】

    微博官方API使用方法[全流程教学] 微博开发者身份认证 创建自己的应用 新应用的相关配置 基本信息 高级信息 微博认证流程OAuth2.0认证(核心步骤) Access Token授权有效期 接口调 ...

最新文章

  1. 记录一个免费而且好用的SSH登录软件_SecureCRT
  2. python怎么安装pyecharts_基于Python安装pyecharts所遇的问题及解决方法
  3. React Fiber 原理介绍
  4. java 概率 算法_使用概率算法优化快速排序(JAVA)
  5. cad大理石填充图案_CAD制图初学入门者必须知道的CAD填充问题
  6. kafka java消费者消息拉取
  7. 磁盘测试----fio
  8. C++--第21课 - 类模板 - 上
  9. 计算机技术与园林,计算机技术在园林绿化设计中的应用
  10. 电阻值识别法(色环法、数码法)
  11. 金蝶k3单据编码规则_金蝶k3套打格式设置图文教程(凭证与供应链单据)
  12. The Learnning of ROS Navigation Source Code---09-17
  13. 博客园主题美化(仅兼容 Markdown)
  14. 1m照片的宽和高是多少_1M图片大小多少啊?
  15. 植物野外识别速查图鉴
  16. 浅谈移动端页面性能优化方案
  17. 多目标优化-Pareto遗传算法
  18. 高手怎么抓热点,每天几点操作?
  19. 数据的封装与解封装过程
  20. Joomla安装示范数据,永远安装不完的解决方法

热门文章

  1. 作为一名大厂的测试人员,软件测试真的是一份低调的工作吗?
  2. php 取字符串的首字母,php取得字符串首字母的方法,php取得字符串_PHP教程
  3. matlab虚拟现实之V-Realm Builder2中viewpoint节点的使用
  4. 爱思助手短信备份到安卓_爱思助手 Bug 修复,完美降级10.3.3
  5. python死锁案例_Python 多线程死锁
  6. DenseNet细节
  7. matlab相关性分析频谱_利用Matlab绘制正弦信号的频谱图并做相关分析[共6页]
  8. 推荐系统组队学习——GBDT+LR
  9. 目标检测-20种常用深度学习算法论文、复现代码汇总
  10. 全志JAVA_android 全志a10(2.3.4)开发1(编译环境搭建)