openstack中使用curl命令獲取token並訪問底層的API


openstack中使用curl命令獲取token並訪問底層的API

  在oepnstack中,訪問所提供的服務(如創建虛擬機等)首先需要獲取認證的token,也就是一個憑證,獲取的方式是通過向OpenStack Identity模塊發送一個帶負載的認證請求,通常負載中攜帶的信息是用戶名和密碼。當訪問底層提供的服務的時候,需要將token封裝在X-Auth-Token頭部中,如果需要訪問openstack提供的多個服務,需要為每個服務提供一個token,值得注意的是,每個token都有一個期滿時間,過了這個時間,token就會自動失效。下面將結合實例詳細闡述使用linux的curl命令發送http請求來獲取token並訪問nova keypairs服務。

 

使用之前需要使用devstack/openrc 設置OS_PASSWARD,OS_USERNAME和OS_PROJECTNAME(需要將其封裝在http請求的頭部字段中)

1、獲取token

在終端中執行:curl -s -X POST $OS_AUTH_URL/tokens -H "Content-Type: application/json" -d '{"auth": {"tenantName": "'"$OS_PROJECT_NAME"'", "passwordCredentials": {"username": "'"$OS_USERNAME"'", "password": "'"$OS_PASSWORD"'"}}}' | python -m json.tool

返回結果如下:

 

 

由於篇幅的原因,不能一次將返回結果返回,下面就可以看到返回結果中的token部分:

此時,我們可以看到expires后面的就是期滿時間,為2016-10-22T02:23:27Z,id后面的就是token,為b0cad0d8ab3b478683180985d06c437a。我們可以直接將token封裝在http頭部字段通過curl命令發送,也可以將其export為環境變量,然后直接封裝環境變量,兩者本質上是一樣的,在這里我們使用export會方便一些,如下所示:

 

 

2、發送API請求訪問nova keypairs服務

通過使用nova --help,我們可以看到python-novaclient提供了對keypairs訪問的四種命令,分別是keypair-add,keypair-delete,keypair-list和keypair-show,這個和官網上的API一一對應,如下所示:

 

可以看到,如果要新建一個keypair,需要使用post命令。我們繼續使用nova help keypair-add命令可以看到該命令的詳細使用方法,如下所示:

 

 

例如我們可以通過nova keypair-add keypair-d20a3d59-9433-4b79-8726-20b431d89c78創建一個名為keypair-d20a3d59-9433-4b79-8726-20b431d89c78的keypair,為了看到更多的信息,我們可以在nova后面添加--debug參數,此時整個創建keypair的過程會在終端中顯示出來,(注意python-novaclient封裝了我們的http請求並使用curl發送http請求),截取其中的片段來分析一下:

這是獲取的token

 

我們可以看到發送了一個post命令,里面封裝了Accept,User-Agent,OpenStack-API-Version,X-OpenStack-Nova-API-Version,X-Auth-Token和Content-Type頭部字段(-H就是封裝頭部字段的意思),X-Auth-Toekn封裝的就是我們之前獲取的token。后面的keypair字段表示http的Body,對應用戶的數據,keypair里面有type和name字段,其中name字段就是我們之前nova --debug keypair-add keypair-d20a3d59-9433-4b79-8726-20b431d89c78命令對應的keypair的名稱。這與官方給出的文檔一致,如下所示:

 

 

 

綜上所述,我們在使用curl命令獲取token之后,export一下,可以自己使用curl命令訪問對應的服務,例如再創建一個keypair:

 curl -g -i -X POST http://192.168.140.133:8774/v2.1/os-keypairs -H "Accept: application/json" -H "User-Agent: python-novaclient" -H "OpenStack-API-Version: compute 2.37" -H "X-OpenStack-Nova-API-Version: 2.37" -H "X-Auth-Token: $OS_TOKEN" -H "Content-Type: application/json" -d '{"keypair": {"type": "ssh", "name": "keypair-d20a3d59-9433-4b79-8726-20b431d89c12"}}'

其中name后面的字段需要改成一個和之前創建的keypair名稱不同的名稱,這里直接將后兩位改成了12,然后將X-Auth-Token后面的字段改成我們export的OS_TOKEN,前面加一個$,表示系統環境變量。

結果如下所示:

可以看到我們已經創建了一個名為keypair-d20a3d59-9433-4b79-8726-20b431d89c12的keypair,之后為了方便觀看,可以使用nova keypair-list查看所有我們創建的kyepair,如下所示:

至此,整個使用curl命令訪問openstack服務的過程已經完成。

 

總結一下:

首先需要使用curl命令獲取token,然后訪問對應的服務時需要將token封裝在http的X-Auth-Token頭部字段中,並按照官方API的使用講解封裝其他的頭部或者Body(對應post),便可以訪問openstack服務了。還有一點,通常http協議的GET對應list服務,POST對應create服務,PUT對應update服務,DELETE對應delete服務。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM