天天看點

OpenStack 實作技術分解 (5) 應用開發 — 使用 OpenStackClients 進行二次開發目錄前文清單參考閱讀前言OpenStackClients最後

<a href="#%E7%9B%AE%E5%BD%95">目錄</a>

<a href="#%E5%89%8D%E6%96%87%E5%88%97%E8%A1%A8">前文清單</a>

<a href="#%E5%8F%82%E8%80%83%E9%98%85%E8%AF%BB">參考閱讀</a>

<a href="#%E5%89%8D%E8%A8%80">前言</a>

<a href="#openstackclients">OpenStackClients</a>

<a href="#%E4%BD%BF%E7%94%A8-openstackclients-%E8%8E%B7%E5%8F%96-projectclient-object-%E7%9A%84-demo">使用 OpenStackClients 擷取 project_client object 的 demo</a>

<a href="#%E8%B0%83%E7%94%A8-projectclient-object-%E5%AE%9E%E4%BE%8B%E6%96%B9%E6%B3%95%E5%AE%9E%E7%8E%B0%E5%AF%B9-project-%E6%93%8D%E4%BD%9C%E7%9A%84-demo">調用 project_client object 執行個體方法實作對 project 操作的 demo</a>

<a href="#%E6%9C%80%E5%90%8E">最後</a>

<a href="http://blog.csdn.net/jmilk/article/details/54410013">OpenStack 實作技術分解 (1) 開發環境 — Devstack 部署案例詳解</a>

<a href="http://blog.csdn.net/jmilk/article/details/54667770">OpenStack 實作技術分解 (2) 虛拟機初始化工具 — Cloud-Init &amp; metadata &amp; userdata</a>

<a href="http://blog.csdn.net/jmilk/article/details/54894483">OpenStack 實作技術分解 (3) 開發工具 — VIM &amp; dotfiles</a>

<a href="http://blog.csdn.net/jmilk/article/details/60496748">OpenStack 實作技術分解 (4) 通用技術 — TaskFlow</a>

<a href="http://blog.csdn.net/jmilk/article/details/52029553">Openstack API 類型 &amp; REST 風格</a>

<a href="https://wiki.openstack.org/wiki/OpenStackClients">OpenStackClients</a>

<a href="https://docs.openstack.org/developer/python-keystoneclient/using-api-v3.html">Python bindings to the OpenStack Identity API</a>

<a href="https://docs.openstack.org/developer/python-glanceclient/">Python Bindings for the OpenStack Images API</a>

<a href="https://docs.openstack.org/developer/python-novaclient/">Python bindings to the OpenStack Nova API</a>

<a href="https://docs.openstack.org/developer/python-cinderclient/">Cinder Python API</a>

<a href="https://docs.openstack.org/developer/python-neutronclient/">Python bindings to the OpenStack Networking API</a>

OpenStack 為使用者提供了三種操作方式, Web界面/CLI/RESTAPI, 實際上前兩者是對 RESTAPI 做了兩種不同形式的包裝, 使使用者可以通過網頁或者指令行的方式來調用 RESTAPI 接口.

在介紹 OpenStackClients 之前, 我們可以嘗試直接使用 curl 指令來檢視一個 tenant 所含有的虛拟機清單.

Step 1: 擷取賬戶 admin 的身份驗證 Temporary token

Response:

擷取到 Temporary token: 16ae22b6c36f4ebc97938f51b7d0631b, 表示我們的賬戶資訊通過了驗證流程.

Step 2: 使用 Temporary token 來擷取 tenants list

可以看出 admin 賬戶含有 admin tenant 和 demo tenant.

Step 3: 擷取 admin tenant 的 token 資訊

需要注意的是, 這一步驟所擷取的 Tenant token 是差別于 Temporary token 的, Temporary token 作為臨時 token 是為了實作多租戶的場景所提供的鑒權條件(外部鑒權). 而 Tenant token 才是聯系不同 OpenStack Project 間的認證通行證(内部鑒權). 從這一步驟可以看出想要擷取 Tenant token 就需要同時向 Keystone 提供賬戶資訊和 tenant_id, 此時使用者不僅得到了 Tenant token 還擷取了相應的 endpoints list. 并且使用者能夠通過 endpints list 進一步的去通路注冊在 Keystone 中的其他 OpenStack 元件.

Step 4: 使用 Tenant token 和 tenant_id 擷取 admin tenant 的虛拟機清單

最終, 我們從 Response 中得到了 admin tenant 所具有的兩台虛拟機的資訊.

完整的 RESTAPI 請求流程圖檔如下:

OpenStack 實作技術分解 (5) 應用開發 — 使用 OpenStackClients 進行二次開發目錄前文清單參考閱讀前言OpenStackClients最後

顯然, 使用 curl 請求 RESTAPI 的方式過于繁複, 不能滿足使用者對 OpenStack 多方位的應用需求(e.g. 實作 OpenStack 的自動化操作腳本). 對此, OpenStack 為使用者提供了更進階别的 RESTAPI 調用封裝 — OpenStackClients

(摘自 OpenStackClients 官方文檔)Each OpenStack project has a related client project that includes Python API bindings and a CLI.

每一個 OpenStack 項目都具有一個包含了 Python API bindings 和 CLI 相關的 client 項目. 如圖:

OpenStack 實作技術分解 (5) 應用開發 — 使用 OpenStackClients 進行二次開發目錄前文清單參考閱讀前言OpenStackClients最後

有圖可見, OpenStackClients 項目主要實作了将 OpenStack 計算(Compute)、身份識别(Keystone)、鏡像(Glance)、網絡(Neutron)、對象存儲(Swift)和卷存儲(Cinder) 等核心元件所提供出來的 REST API 整合封裝為具有統一指令結構的 CLI. 簡而言之, 就是 OpenStackClients 項目使得使用者能夠通過 CLI 的形式調用以上元件提供的 REST API, 進而實作操作. 并且我們也可以從代碼的層面直接導入 OpenStackClients, 更加便于開發者對 OpenStack 功能子產品的調用.

vim openstack_clients.py

vim auto_dep.py

上面給出了一個自動化運作 OpenStack Project 功能子產品的腳本, 但實際上, 我們能夠使用 OpenStackClients 進行更加複雜的工作, 例如: 自定義一個新的 OpenStack Project, 并使之與 OpenStack 的原生 Project 進行互動, 這才是真正意義上的二次開發.