天天看點

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

python調用 Openstack REST API 開發入門

其中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這裡以安全組為例,擷取所有的安全組,如下所示

python調用 Openstack REST API 開發入門

下面再介紹另一種調用方式

即通過封裝好的方法去調用

不多說了,直接上代碼

首先下載下傳對應的包,這裡建議配置阿裡的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)