OpenStack API的使用套路分享
目录
- 写在前面
- 获取token
- 小栗子:获取所有实例详情
写在前面
近期有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
import requests
import json
USER = "admin"
PASSWORD = "xxxxxx"
DOMAIN = "Default"
PROJECT = "admin"
TOKEN_URL = "http://10.0.0.10:5000/v3/auth/tokens?nocatalog"
def getToken():
reqJson = {
"auth":{
"identity":{
"methods":["password"],
"password":{
"user":{
"domain":{"name":DOMAIN},
"name":USER,
"password":PASSWORD
}
}
},
"scope":{
"project":{
"domain":{
"name":DOMAIN
},
"name":PROJECT
}
}
}
}
payload = json.dumps(reqJson)
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", TOKEN_URL, headers=headers, data=payload)
return response.headers.get("X-Subject-Token")
if __name__ == "__main__":
token = getToken()
print(token)
获取到的token如下:
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写代码
import requests
import json
USER = "admin"
PASSWORD = "xxxxxxxxx"
DOMAIN = "Default"
PROJECT = "admin"
TOKEN_URL = "http://10.0.0.10:5000/v3/auth/tokens?nocatalog"
SERVER_DETAIL_URL = "http://10.0.0.10:8774/v2.1/servers/detail"
def getToken():
reqJson = {
"auth":{
"identity":{
"methods":["password"],
"password":{
"user":{
"domain":{"name":DOMAIN},
"name":USER,
"password":PASSWORD
}
}
},
"scope":{
"project":{
"domain":{
"name":DOMAIN
},
"name":PROJECT
}
}
}
}
payload = json.dumps(reqJson)
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", TOKEN_URL, headers=headers, data=payload)
return response.headers.get("X-Subject-Token")
def serversDetail(token):
headers = {
'X-Auth-Token': token
}
response = requests.request("GET", SERVER_DETAIL_URL, headers=headers)
serversList = response.json().get("servers")
for s in serversList:
status = s.get("status")
name = s.get("name")
ip = s.get("addresses").get("my-net")[0].get("addr")
print(status, name, ip)
if __name__ == "__main__":
token = getToken()
serversDetail(token)
结果
(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')
上一篇:k8s中pod使用详解(云原生kubernetes)
栏 目:其它服务器
本文标题:OpenStack API的使用套路分享
本文地址:https://zz.feitang.co/server/30653.html
您可能感兴趣的文章
- 01-07Tomcat部署Bolo动态博客
- 01-07图文详解nginx日志切割的实现
- 01-07如何解决swarm docker 端口不通问题
- 01-07详解nginx location指令
- 01-07如何解决docker http 500错误问题
- 01-07windows server 2008安装配置DNS服务器
- 01-07Linux上搭载Nginx负载均衡配置使用案例详解
- 01-07NGINX 权限控制文件预览和下载的实现原理
- 01-07Nginx防盗链与服务优化配置的全过程
- 01-07使用 Apache 反向代理的设置技巧


阅读排行
推荐教程
- 12-23linux中ftp无法访问怎么办
- 12-11docker存储目录迁移示例教程
- 12-10docker start启动容器后仍然exit状态的解决
- 12-10Linux下如何安装Logstash
- 01-05Shell脚本去重的几种方法实例
- 12-22kvm虚拟机配置NAT端口转发的实现方法
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-14Docker Desktop无法正常启动解决(failed to start...)
- 12-14k8s 与docker空间使用分析与清理方法




