如何書寫Openstack命令列
接著之前一篇文章,再來談談 Extension 的具體實現問題。我使用的是本地資料庫加遠端API呼叫的方法,所以先要定義一下資料庫中 myextension 如何儲存。首先,我們可以在自己的 plugin 根目錄下新建一個 db 資料夾,以及三個檔案:
- neutron/
- plugins/
- myplugin/
- __init__.py
- plugin.py
- extensions/
- db/
- __init__.py
- db.py
- models.py
db.py 用來存放資料庫的 wrapper,提供一些讀寫資料庫的方法;而 models.py 直接定義 myextension 的那些屬性如何在資料庫中儲存。下面是 models.py 的一個例子:
db.py 的實現可以參照 db_base_plugin_v2.py 中的實現方式。然後在自己的 plugin.py 中實現 myextension 的五個操作: CREATE, UPDATE, GET, SHOW, 和 DELETE。到這裡,myextension 的後臺操作就全了。
但是這樣還不夠,因為我們還需要一些方式來從前臺釋出關於 myextension 的命令,使後臺的 plugin controller 可以接收到,並進行相應的操作。這就需要修改 neutronclient 的相應程式碼,實現通過 CLI 的互動。
通過上面的介紹,我們現在的 myplugin 資料夾看上去應該是這樣的:
- neutron/
- plugins/
- myplugin/
- __init__.py
- plugin.py
- extensions/
- __init__.py
- myextension.py
- db/
- __init__.py
- db.py
- models.py
我們的plugin.py看上去應該是類似這樣的:
這些方法需要進一步的定義來做一些有實際意義的事情,這裡我只是做一個最簡單的舉例說明。在有了上述這些檔案之後,其實整個 plugin 以及 extension 的後臺就已經搞定了,只是這個時候還沒有任何途徑來使用這些定義好的方法。所以接下來我們需要在 neutronclient 中增加一些對應的方法。
neutronclient 是一個 CLI 客戶端,可以用來與 neutron 互動。每一個 OpenStack 的 project 如 nova,neutron 等都有一個類似的自己的 CLI client。首先,我們需要在 CLI 中顯示關於 myextension 的命令,這個可以在 neutronclient/shell.py 中設定。這個檔案有一個屬性叫做 COMMAND_V2,所有可以使用的命令都以 key-value pair 的形式儲存在這個變數中:
下一步就需要去 neutronclient/neutron/v2_0 中新建一個資料夾 myextension,並在其中新建兩個檔案: __init__.py 和 extension.py,其結構如下:
- neutronclient/
- neutron/
- v2_0/
- myextension/
- __init__.py
- extension.py
然後再 extension.py 中分別定義五個class:List/Show/Create/Delete/UpdateExtension。
上面說到需要在 /neutronclient/v2_0/myextension/extension.py 中分別定義五個 class:List/Show/Create/Delete/UpdateExtension。具體形式如下:
這些 class 處在接受 CLI 命令的第一線,負責將命令轉化成 API call。需要特別注意的是 CreateExtension 這個類,它有兩個方法 add_known_arguments 和 args2body。前者定義了 CLI 命令接受哪些引數,後者規定如何將收到的引數打包起來。
這些引數打包之後就會發給 neutron 後臺中我們自己定義的 plugin controller,但是如何傳送這些引數還需要我們去 /neutronclient/v2_0/client.py 的 Client 類中設定:
首先是 uri 路徑:
然後是每個操作所對應的傳遞方法:
如此一來,我們自己實現的 neutron plugin 就能夠收到 CLI 傳送過來的命令啦。
相關文章
- 1、Shell命令列書寫規則命令列
- LINUX命令列書寫規則Linux命令列
- 如何寫一個 GNU 風格的命令列程式命令列
- Makefile-4-書寫命令
- Openstack命令列刪除虛擬機器硬體模板flavor命令列虛擬機
- 如何在命令列中指定StreamingPro的寫入路徑命令列
- 用 Swift 來寫命令列程式Swift命令列
- 命令列寫複雜語句命令列
- 重啟openstack的openstack-service命令不存在
- CSS HACK 如何書寫CSS
- Makefile書寫命令相關內容
- Openstack的的nova list命令
- 如何修復終端中的 macOS 命令列拼寫錯誤Mac命令列
- MySQL入門--如何呼叫命令列命令MySql命令列
- linux命令列大小寫轉換Linux命令列
- 用 nodejs 寫一個命令列工具 :建立 react 元件的命令列工具NodeJS命令列React元件
- python命令列如何退出Python命令列
- 編寫友好的命令列應用程式命令列
- 使用 openssl 命令列構建 CA 及證書命令列
- 如何利用 Node 書寫 API 文件API
- openstack命令建立雲主機例項
- CAD如何使用陣列命令陣列
- 在 Linux 命令列中轉換大小寫Linux命令列
- 如何在Vue中書寫JSXVueJS
- 如何在 Linux 命令列操作 PDFLinux命令列
- 命令列客戶端MySQL如何使用命令列客戶端MySql
- 用nodejs寫一個命令列應用-前言NodeJS命令列
- 你見過用命令列寫的簡歷嗎?命令列
- Python-編寫1個Memcached的命令列Python命令列
- 使用瀏覽器命令列編寫JavaScript程式碼瀏覽器命令列JavaScript
- 快樂的Linux命令列--讀書筆記1Linux命令列筆記
- Ubuntu 秘笈之命令列下管理瀏覽器書籤Ubuntu命令列瀏覽器
- 如何寫一個任務佇列佇列
- 如何寫出暢銷計算機書計算機
- cmd 命令列 命令命令列
- windows命令列命令Windows命令列
- git命令列命令Git命令列
- 用 PHP 寫一個命令列音樂下載器PHP命令列