CloudMonkey 是 CloudStack 的專用 CLI 工具,提供一個互動式的 Shell 環境,方便開發者和系統管理員直接透過命令列操作 CloudStack API。相較於圖形介面,CloudMonkey 更靈活且更適合自動化指令碼的整合。透過設定檔或互動式指令,可以輕鬆組態 CloudMonkey 連線到指定的 CloudStack 環境,包含設定主機位址、連線埠、通訊協定以及必要的 API 金鑰和金鑰。CloudMonkey 支援表格化顯示查詢結果,並可透過篩選器精確顯示所需欄位,提升資訊的可讀性。除了基本的 API 呼叫,CloudMonkey 還提供自動補全和引數提示等功能,簡化操作流程並降低學習成本。

CloudMonkey 的互動式 Shell 環境讓探索 CloudStack API 變得更加直觀。透過 Tab 鍵的自動補全功能,可以快速瀏覽可用的指令和引數,並利用 -h--help 選項檢視詳細的說明檔案。這對於不熟悉 CloudStack API 的使用者來說,是一個非常實用的學習工具。此外,CloudMonkey 也支援直接執行 API 呼叫,例如佈署虛擬機器、管理網路、設定儲存等操作。透過指令,可以快速佈署虛擬機器,並指定所需的範本、服務方案和佈署區域。同時,CloudMonkey 也提供查詢任務狀態的功能,讓使用者可以即時追蹤任務的執行進度。

除了佈署虛擬機器,CloudMonkey 也支援其他 CloudStack 功能,例如建立 SSH 金鑰對、設定安全群組等。這些功能讓使用者可以更全面地管理 CloudStack 環境。對於需要跨多個雲端平台管理的開發者,Apache Libcloud 是一個值得考慮的 Python 函式庫。它提供統一的 API 介面,可以操作多家雲端服務供應商,包括 CloudStack、AWS、Google Cloud 等。雖然 Libcloud 對 CloudStack API 的支援程度不如 CloudMonkey 完整,但其跨平台的特性,讓開發者可以用同一套程式碼管理不同的雲端環境。根據實際需求,選擇 CloudMonkey 或 Apache Libcloud,可以更有效率地管理雲端資源。

玄貓駕馭 CloudMonkey:互動式 Shell 的無限可能

CloudMonkey 作為 CloudStack 的 CLI 客戶端,提供了一種與雲平台互動的強大方式。本文將探討如何組態和使用 CloudMonkey,讓你能像玄貓一樣輕鬆駕馭雲端資源。

初步組態:開發你的 CloudMonkey 環境

CloudMonkey 的組態可透過互動式設定或編輯設定檔完成。首先,你需要設定 CloudMonkey 連線到你的 CloudStack 環境。以下是一些基本設定範例:

myprompt> set host localhost
myprompt> set port 8080
myprompt> set protocol http
myprompt> set apikey <你的 API 金鑰>
myprompt> set secretkey <你的金鑰>

或者,你也可以直接編輯 ~/.cloudmonkey/config 檔案:

$ cat ~/.cloudmonkey/config
[core]
log_file = /Users/sebastiengoasguen/.cloudmonkey/log
asyncblock = true
paramcompletion = false
history_file = /Users/sebastiengoasguen/.cloudmonkey/history
[ui]
color = true
prompt = >
display = table
[user]
secretkey = VDaACYb0LV9eNjTetIOElcVQkvJck_J_QljX_FcHR
apikey = plgWJfZK4gyS3mOMTVmjUVg-X-jlWlnfaUJ9GAbBbf9
[server]
path = /client/api
host = localhost
protocol = http
port = 8080
timeout = 3600

內容解密

  • host:CloudStack 管理伺服器的位址。
  • port:CloudStack API 的連線埠。
  • protocol:使用的協定(HTTP 或 HTTPS)。
  • apikey:你的 API 金鑰。
  • secretkey:你的金鑰。

玄貓建議,設定檔是管理 CloudMonkey 設定的有效方式,特別是在有多個環境需要管理時。

表格顯示與過濾:資訊一目瞭然

API 呼叫的回應可能包含大量的鍵/值對,使得輸出難以閱讀。CloudMonkey 允許你使用表格顯示,並透過篩選器選擇要顯示的欄位。

> set display table
> list users filter=id,domain,account

這將以表格形式顯示使用者 ID、網域和帳戶資訊,讓資訊更易於閱讀。

互動式 Shell:探索 CloudStack API 的最佳途徑

CloudMonkey 的互動式 shell 是學習和探索 CloudStack API 的絕佳工具。只需在終端機輸入 cloudmonkey 即可啟動。

在 CloudMonkey 提示符下,按 Tab 鍵兩次,你將看到所有可用的動詞。選擇一個動詞,輸入一個空格,然後再次按 Tab 鍵兩次,你將看到該動詞的所有可用動作。

例如,要檢視 create network API 呼叫的引數,可以輸入:

cloudmonkey>create network

然後按 Tab 鍵,你將看到所有可用的引數。

要取得特定 API 呼叫的更多說明,可以使用 -h--help-help 選項:

cloudmonkey>create network -h

這將顯示該呼叫的引數列表,包括必填和選填引數。

玄貓認為,互動式 shell 是快速學習和實驗 CloudStack API 的最佳方式。

啟動虛擬機器:雲端的 “Hello, World”

使用 CloudMonkey 啟動虛擬機器,就像在雲端世界中說 “Hello, World” 一樣。這需要使用 deploy virtualmachine API 呼叫,並傳遞區域 ID、範本 ID 和服務方案 ID 作為引數。

cloudmonkey>deploy virtualmachine -h

要指定要使用的範本,可以使用以下呼叫列出所有可用的範本:

> list templates filter=id,displaytext templatefilter=executable

內容解密

  • deploy virtualmachine:用於建立和啟動虛擬機器的 API 呼叫。
  • serviceofferingid:服務方案 ID,定義虛擬機器的計算資源。
  • templateid:範本 ID,指定虛擬機器的作業系統和預設軟體。
  • zoneid:區域 ID,指定虛擬機器執行的區域。

雲端環境快速佈署:CloudMonkey 實戰

CloudMonkey 是個強大的命令列工具,讓玄貓可以輕鬆管理 CloudStack 環境。透過 CloudMonkey,你可以用簡單的指令完成虛擬機器佈署、資源管理等複雜任務。

範例:使用 CloudMonkey 佈署虛擬機器

首先,你需要取得必要的 ID,例如 templateidzoneidserviceofferingid。這些 ID 代表了虛擬機器的範本、佈署區域和服務方案。

cloudmonkey> list templates filter=id,name
count = 2
template:
+--------------------------------------+-----------------------------------------------------------------+
| id                                   | name                                                            |
+--------------------------------------+-----------------------------------------------------------------+
| 20d4ebc3-8898-431c-939e-adbcf203acec | CentOS 6.5 (64-bit) no VirtIO                                 |
| 4822b64b-418f-4d6b-b64e-1517bb862511 | Linux Ubuntu 13.10 64-bit                                     |
+--------------------------------------+-----------------------------------------------------------------+

內容解密:

這段程式碼展示瞭如何使用 list templates 指令來查詢可用的虛擬機器範本。filter=id,name 引數指定了只顯示範本的 ID 和名稱。

接下來,查詢 serviceofferingid

cloudmonkey> list serviceofferings filter=id,name
count = 7
serviceoffering:
+--------------------------------------+-------------+
| id                                   | name        |
+--------------------------------------+-------------+
| 71004023-bb72-4a97-b1e9-bc66dfce9470 | Micro       |
| b6cd1ff5-3a2f-4e9d-a4d1-8988c1191fe8 | Tiny        |
| 21624abb-764e-4def-81d7-9fc54b5957fb | Small       |
+--------------------------------------+-------------+

內容解密:

這段程式碼展示瞭如何使用 list serviceofferings 指令來查詢可用的服務方案。同樣,filter=id,name 引數指定了只顯示服務方案的 ID 和名稱。

有了這些 ID 後,就可以開始佈署虛擬機器了:

cloudmonkey> deploy virtualmachine templateid=20d4ebc3-8898-431c-939e-adbcf203acec zoneid=1128bd56-b4d9-4ac6-a7b9-c715b187ce11 serviceofferingid=71004023-bb72-4a97-b1e9-bc66dfce9470
id    = 5566c27c-e31c-438e-9d97-c5d5904453dc
jobid = 334fbc33-c720-46ba-a710-182af31e76df

內容解密:

這段程式碼展示瞭如何使用 deploy virtualmachine 指令來佈署虛擬機器。你需要提供 templateidzoneidserviceofferingid 等引數。這個指令會傳回一個 jobid,你可以用來查詢佈署的狀態。

你可以使用 queryAsyncJobresult API 查詢任務狀態:

cloudmonkey> query asyncjobresult jobid=334fbc33-c720-46ba-a710-182af31e76df
accountid       = b8c0baab-18a1-44c0-ab67-e24049212925
cmd             = com.cloud.api.commands.DeployVMCmd
created         = 2014-03-05T13:40:18+0100
jobid           = 334fbc33-c720-46ba-a710-182af31e76df
jobinstanceid   = 5566c27c-e31c-438e-9d97-c5d5904453dc
jobinstancetype = VirtualMachine
jobprocstatus   = 0
jobresultcode   = 0
jobstatus       = 0
userid          = 968f6b4e-b382-4802-afea-dd731d4cf9b9

內容解密:

這段程式碼展示瞭如何使用 query asyncjobresult 指令來查詢非同步任務的結果。你需要提供 jobid 引數。

佈署完成後,你可以列出所有虛擬機器:

cloudmonkey> list virtualmachines filter=id,displayname
count = 1
virtualmachine:
+--------------------------------------+-------------+
| id                                   | displayname |
+--------------------------------------+-------------+
| 5566c27c-e31c-438e-9d97-c5d5904453dc | foobar      |
+--------------------------------------+-------------+

內容解密:

這段程式碼展示瞭如何使用 list virtualmachines 指令來查詢虛擬機器。filter=id,displayname 引數指定了只顯示虛擬機器的 ID 和顯示名稱。

停止虛擬機器:

cloudmonkey> stop virtualmachine id=5566c27c-e31c-438e-9d97-c5d5904453dc
jobid = 391b4666-293c-442b-8a16-aeb64eef0246

內容解密:

這段程式碼展示瞭如何使用 stop virtualmachine 指令來停止虛擬機器。你需要提供虛擬機器的 ID。

確認虛擬機器狀態:

cloudmonkey> list virtualmachines filter=id,state
count = 1
virtualmachine:
+--------------------------------------+---------+
| id                                   | state   |
+--------------------------------------+---------+
| 5566c27c-e31c-438e-9d97-c5d5904453dc | Stopped |
+--------------------------------------+---------+

內容解密:

這段程式碼展示瞭如何使用 list virtualmachines 指令來查詢虛擬機器的狀態。filter=id,state 引數指定了只顯示虛擬機器的 ID 和狀態。

CloudMonkey 還支援建立 SSH 金鑰對、安全組等操作,讓你更方便地管理 CloudStack 環境。

Apache Libcloud:Python 開發者的雲端利器

Apache Libcloud 是一個 Python 函式庫,提供統一的 API 來操作多個雲端服務供應商。雖然 Libcloud 對 CloudStack API 的覆寫不如 CloudMonkey 完整,但它支援超過 20 家雲端供應商,讓你可以用一套程式碼管理不同的雲端環境。

情境

玄貓需要用 Python 指令碼自動化 CloudStack 雲端環境中的任務,同時希望這個指令碼也能夠支援其他雲端服務。

解決方案

使用 Apache Libcloud,一個 Python 模組,提供單一 API 來操作超過 25 家雲端供應商。Libcloud 支援 Rackspace、Google GCE 和 AWS EC2 等雲端供應商的基本運算功能,以及儲存和負載平衡 API。

安裝 Libcloud

如果玄貓熟悉 PyPI,安裝 Libcloud 非常簡單:

$ sudo pip install apache-libcloud

安裝成功後,就可以在 Python 互動式 Shell 中匯入 libcloud 模組:

$ python
Python 2.7.6 (default, Nov 12 2013, 13:26:39)
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import libcloud
>>>

內容解密:

這段程式碼展示瞭如何安裝和匯入 libcloud 模組。如果沒有出現錯誤訊息,表示安裝成功。

開發者如果想檢視 CloudStack 驅動程式背後的程式碼,可以從 GitHub 映象或 Apache 原始碼儲存函式庫克隆程式碼:

$ git clone https://github.com/apache/libcloud.git

或者

$ git clone https://git-wip-us.apache.org/repos/asf/libcloud.git

如果已經克隆了儲存函式庫,可以用以下指令安裝 Libcloud:

$ cd libcloud
$ sudo python ./setup.py install

CloudStack 驅動程式位於 /path/to/libcloud/source/libcloud/compute/drivers/cloudstack.py。歡迎在 Libcloud JIRA 上提交錯誤報告。

Apache Libcloud 提供了一個更抽象的雲端管理方式,適合需要在多個雲端環境中佈署應用程式的開發者。

CloudMonkey 和 Apache Libcloud 各有優勢。CloudMonkey 提供完整的 CloudStack API 覆寫,適合需要精細控制 CloudStack 環境的玄貓。Apache Libcloud 提供統一的 API,方便管理多個雲端環境,適合需要在不同雲端平台佈署應用程式的開發者。選擇哪個工具取決於你的具體需求。