翼度科技»论坛 云主机 服务器技术 查看内容

OpenStack API的使用套路分享

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
写在前面

近期有openstack和vmware相关的开发需求,N年前从事虚拟化运维的时候玩过了,所以对它俩的API使用套路早忘得一干二净。这次借这个机会把使用套路做个文档并分享出来,希望可以帮到有需要的盆友。本篇先分享openstack的API使用套路,后续再分享vmware api的使用套路。在本篇中,只给出了1个小例子,更多例子可自行去写代码,API的使用套路当然是万变不离其宗。
OpenStack官方API文档:https://docs.openstack.org/zed/api/
还有最重要的一点,请确保你已经搭建好openstack环境


获取token

https://docs.openstack.org/api-quick-start/api-quick-start.html
通过上面的API页面可得知,认证服务的API是:http://controller:5000/v3/
使用python代码请求token
  1. import requests
  2. import json

  3. USER = "admin"
  4. PASSWORD = "xxxxxx"
  5. DOMAIN = "Default"
  6. PROJECT = "admin"

  7. TOKEN_URL = "http://10.0.0.10:5000/v3/auth/tokens?nocatalog"

  8. def getToken():
  9.     reqJson = {
  10.         "auth":{
  11.             "identity":{
  12.                 "methods":["password"],
  13.                 "password":{
  14.                     "user":{
  15.                         "domain":{"name":DOMAIN},
  16.                         "name":USER,
  17.                         "password":PASSWORD
  18.                     }
  19.                 }
  20.             },
  21.             "scope":{
  22.                 "project":{
  23.                     "domain":{
  24.                         "name":DOMAIN
  25.                     },
  26.                     "name":PROJECT
  27.                 }
  28.             }
  29.         }
  30.     }
  31.     payload = json.dumps(reqJson)
  32.     headers = {
  33.     'Content-Type': 'application/json'
  34.     }

  35.     response = requests.request("POST", TOKEN_URL, headers=headers, data=payload)

  36.     return response.headers.get("X-Subject-Token")


  37. if __name__ == "__main__":
  38.     token = getToken()
  39.     print(token)
复制代码
获取到的token如下:
  1. gAAAAABj2cwy_AOflA6gDQiR8fGK0VzLGawXPScsKB-1hIp46JdKCY68Nuz8ZQ8-USTcyY_3cCoJRpIsq8OrcZl8ztMSkUU26VF_dnkBLm4lXAyM3dZF8lHWoqmEHOevfuC0IwqQdQ66FTUF7Nl9sFElFlB39QEuSR1mZSTBrJy6bwycd8a_C5c
复制代码
小栗子:获取所有实例详情

假设有个需求,获取所有实例的详情信息。提到虚拟机实例,那肯定就是nova服务,所以要知道nova服务的api。在之前访问API的页面中,就是Compute服务。服务端点是http://controller:8774/v2.1
Compute API 官方文档:https://docs.openstack.org/api-ref/compute/


openstack的api是完全遵循REST风格的api,通过上面的api文档可得知,请求方法是GET,点开detail,可以看到更详细的API说明。
下面使用python写代码
  1. import requests
  2. import json

  3. USER = "admin"
  4. PASSWORD = "xxxxxxxxx"
  5. DOMAIN = "Default"
  6. PROJECT = "admin"

  7. TOKEN_URL = "http://10.0.0.10:5000/v3/auth/tokens?nocatalog"
  8. SERVER_DETAIL_URL = "http://10.0.0.10:8774/v2.1/servers/detail"

  9. def getToken():
  10.     reqJson = {
  11.         "auth":{
  12.             "identity":{
  13.                 "methods":["password"],
  14.                 "password":{
  15.                     "user":{
  16.                         "domain":{"name":DOMAIN},
  17.                         "name":USER,
  18.                         "password":PASSWORD
  19.                     }
  20.                 }
  21.             },
  22.             "scope":{
  23.                 "project":{
  24.                     "domain":{
  25.                         "name":DOMAIN
  26.                     },
  27.                     "name":PROJECT
  28.                 }
  29.             }
  30.         }
  31.     }
  32.     payload = json.dumps(reqJson)
  33.     headers = {
  34.     'Content-Type': 'application/json'
  35.     }

  36.     response = requests.request("POST", TOKEN_URL, headers=headers, data=payload)

  37.     return response.headers.get("X-Subject-Token")

  38. def serversDetail(token):
  39.     headers = {
  40.     'X-Auth-Token': token
  41.     }
  42.     response = requests.request("GET", SERVER_DETAIL_URL, headers=headers)
  43.     serversList = response.json().get("servers")
  44.     for s in serversList:
  45.         status = s.get("status")
  46.         name = s.get("name")
  47.         ip = s.get("addresses").get("my-net")[0].get("addr")
  48.         print(status, name, ip)

  49. if __name__ == "__main__":
  50.     token = getToken()
  51.     serversDetail(token)
复制代码
结果
  1. (u'SHUTOFF', u'app-2', u'172.18.45.60')(u'SHUTOFF', u'app-4', u'172.18.45.34')(u'SHUTOFF', u'app-5', u'172.18.45.71')(u'SHUTOFF', u'app-3', u'172.18.45.67')(u'SHUTOFF', u'app-1', u'172.18.45.26')(u'SHUTOFF', u'web', u'172.18.45.38')
复制代码
到此这篇关于OpenStack API的使用套路分享的文章就介绍到这了,更多相关OpenStack API内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/article/275520.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具