python调用 Openstack REST API 开发入门

环境:
Python3.8.8 + VSCode

主要介绍一下怎么通过python去调用openstack的接口来实现开发
openstack文档点此进入,链接可能失效,请以官网实时文档为主
查询openstack rest api的最重要的网址,里面包含openstack各个服务对应的接口,比如:compute API(对应Navo服务),Identity API(对应KeyStone服务),Networking API(对应Neutron服务)等,开发时重点参考,因为公司主要以开发openstack为主。

比较重要的几个开发参考网址如下:

http://www.openstack4j.com/
openstack4j官网。
http://www.openstack4j.com/learn
openstack4j接口介绍及实例,学习openstack4j的入门级教程。
http://www.openstack4j.com/javadoc/
openstack4j javadoc,类列表。
https://github.com/ContainX/openstack4j/issues
openstack4j的issues,有问题可以在这里检索,重点参考网址。

openstack API调用过程:
下面通过调试例子介绍整个调试过程:

1.通过身份认证获取 X-Subject-Token
OpenStack身份验证调试,通过用户id和密码及Project id获取获取访问各个服务的token。对应的服务为KeyStone,对应Identity API,身份验证鉴权有很多方式,主要是参数的不同,我们这里选择的是“/v3/auth/tokens”中的Password authentication with scoped authorization方式。
URL:http://XX.XX.XX.XX:5000/v3/auth/tokens。手动填写,其中的地址和端口可以通过Openstack DashBoard(Openstack网页版管理入口,对应Horizon服务)中的项目->计算->访问&安全->访问API(列表)中的地址进行调试。

json格式的请求数据如下:

请求url: https://xxx.xxx.xxx.xxx:5000/v3/auth/tokens
对应的body参数:

{
    "auth": {
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "id": "ff1679d06f6446b0b780ee9552878cd3",
                    "password": "pass"
                }
            },
        "scope": 
          {
            "project": {
                "id": "398d04f5f64d4d668d077c7ed1db1244"
            }
          }
        }
    }
}

请求完成查看header中的 X-Subject-Token
在这里插入图片描述
其中id即登录DashBoard的用户名对应的id(DashBoard登录之后的身份管理->用户列表中可以查到),密码就是登录DashBoard的密码。project id也是通过DashBoard中的身份管理->项目列表中查找。Openstack V3
开始需要在鉴权的时候scope到一个Project上,否则没有权限访问服务。

这里我也准备了一个curl的方法

//请求获取token
curl -k -i -X 'POST' 'https://xxx.xxx.xxx.xxx:5000/v3/auth/tokens' -H 'Content-type: application/json' -d '{"auth": { "identity": {"methods": ["password"],"password": {"user": {"id": "ff1679d06f6446b0b780ee9552878cd3","password": "pass"}},"scope": {"project": {"id": "398d04f5f64d4d668d077c7ed1db1244"}}}}}' | grep X-Subject-Token | awk '{print $2}'

2.通过X-Subject-Token调用api接口
获取到token后就可以带着token去访问其他模块的接口了,因为所有接口都需要验证,必须带上token这里以安全组为例,获取所有的安全组,如下所示
在这里插入图片描述

下面再介绍另一种调用方式

即通过封装好的方法去调用

不多说了,直接上代码

首先下载对应的包,这里建议配置阿里的pip源,清华的可能没有
pip install keystoneauth1
pip install neutronclient


----------------------------下面是代码---------------------------
from keystoneauth1 import identity
from keystoneauth1 import session
from neutronclient.v2_0 import client

username = 'admin'
password = 'pass'
project_name = 'admin'
project_domain_id = 'default'
user_domain_id = 'default'
auth_url = 'https://xxx.xxx.xxx.xxx:5000/v3'
auth = identity.Password(auth_url=auth_url,
                         username=username,
                         password=password,
                         project_name=project_name,
                         project_domain_id=project_domain_id,
                         user_domain_id=user_domain_id)
sess = session.Session(auth=auth, verify=False)
neutron = client.Client(session=sess)
res = neutron.list_security_groups()
print(res)
  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iRayCheung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值