こんにちは、UX開発部の橋口です。
今回は、CloudStackのクライアントの1つである、CloudMonkeyを紹介します。
CloudMonkeyはCloudStackを操作するためのCLIツールです。 IDCFクラウドはCloudStackをベースに構成されているため、とても親和性の高いツールになっています。
idcfcloud-cliもリリースされましたが、それぞれのCLIツールの良い点を活かして使い分けて便利にご利用いただければと思います。
便利なポイント
- CLIだけではなく、対話モードがある
- 設定値をプロファイルとして持つことができ、簡単に切り替えが可能
- 非同期ジョブの結果を待って出力が可能
- tab補完ができる
- Ctrl+Rでbashと同じように履歴からコマンドを実行できる
- 表形式、JSON形式をサポート
- 結果を色付けして表示できる
- Unicodeのサポート
インストール方法
インストールはとても簡単(ただし、Windowsにインストールするのは手順が多いので今回は紹介しません)。 Python2系が入っていない場合は別途インストールする必要があります。
Mac
$ sudo easy_install cloudmonkey
RHEL/CentOS
$ sudo yum install python-setuptools $ sudo easy_install cloudmonkey
Ubuntu/Debian
$ sudo apt-get install python-pip $ sudo pip install cloudmonkey
初期設定
set profile
でプロファイルの切り替えができます(存在しない場合は新規作成)。
設定は ~/.cloudmonkey/config
に保存されます。
$ cloudmonkey (local) 🐵 > set profile idcf-east-1 (idcf-east-1) 🐵 > set url https://compute.jp-east.idcfcloud.com/client/api (idcf-east-1) 🐵 > set apikey ---apikey--- (idcf-east-1) 🐵 > set secretkey ---secretkey---
使い方(対話モード)
ゾーン一覧のAPIを使って、いろいろな出力を試してみました。
デフォルトの出力
(idcf-east-1) 🐵 > list zones count = 6 zone: name = tesla id = a117e75f-d02e-4074-806d-889c61261394 allocationstate = Enabled dhcpprovider = VirtualRouter localstorageenabled = True networktype = Advanced resourcedetails: pool.storage.capacity.disablethreshold = 0.85 securitygroupsenabled = False tags: zonetoken = bbbd8944-a3c5-3538-8a2a-71d93a788ab5 ================================================================================ ※※※中略※※※ ================================================================================ name = newton id = 01738d49-2722-4788-891e-848536663c6e allocationstate = Enabled dhcpprovider = VirtualRouter localstorageenabled = True networktype = Advanced resourcedetails: pool.storage.capacity.disablethreshold = 0.85 securitygroupsenabled = False tags: zonetoken = 29683cbb-b762-3bae-b5fb-1d50333dd0ef
jsonでの出力
jqなどと組み合わせて使うと簡単に処理がかけます。
(idcf-east-1) 🐵 > set display json (idcf-east-1) 🐵 > list zones { "count": 6, "zone": [ { "allocationstate": "Enabled", "dhcpprovider": "VirtualRouter", "id": "a117e75f-d02e-4074-806d-889c61261394", "localstorageenabled": true, "name": "tesla", "networktype": "Advanced", "resourcedetails": { "pool.storage.capacity.disablethreshold": "0.85" }, "securitygroupsenabled": false, "tags": [], "zonetoken": "bbbd8944-a3c5-3538-8a2a-71d93a788ab5" }, ※※※中略※※※ { "allocationstate": "Enabled", "dhcpprovider": "VirtualRouter", "id": "01738d49-2722-4788-891e-848536663c6e", "localstorageenabled": true, "name": "newton", "networktype": "Advanced", "resourcedetails": { "pool.storage.capacity.disablethreshold": "0.85" }, "securitygroupsenabled": false, "tags": [], "zonetoken": "29683cbb-b762-3bae-b5fb-1d50333dd0ef" } ] }
例えば、追加IPアドレスを全ゾーンから削除したい時はこのような形で書くことができます。
(idcf-east-1) 🐵 > list publicipaddresses filter=id issourcenat=false | jq -r '.publicipaddress[].id' | xargs -L1 -IUUID cloudmonkey disassociate ipaddress id=UUID
テーブル出力
filterで表示するフィールドを選択したり、パイプでつなぐとgrepなどもできます。
(idcf-east-1) 🐵 > set display table (idcf-east-1) 🐵 > list zones filter=id,name count = 6 zone: +--------+--------------------------------------+ | name | id | +--------+--------------------------------------+ | tesla | a117e75f-d02e-4074-806d-889c61261394 | | henry | 9703cdbb-aee7-41ba-ba80-4807eaa68b80 | | pascal | f0954b9b-2626-4549-82ad-ca421073b3bc | | joule | baf86a6e-4e3b-428e-8fd0-7fda43e468d4 | | radian | a53ff3d3-042b-4cbd-ad16-494bb8d33e06 | | newton | 01738d49-2722-4788-891e-848536663c6e | +--------+--------------------------------------+ (idcf-east-1) 🐵 > list zones filter=id,name | grep tesla | tesla | a117e75f-d02e-4074-806d-889c61261394 |
嬉しい機能
tab補完
引数の候補
VM作成コマンドです。一部非対応のオプションもありますが、かなり便利です。
(idcf-east-1) 🐵 > deploy virtualmachine account= deploymentplanner= displayvm= hostid= iptonetworklist= networkids= securitygroupnames= templateid= affinitygroupids= details= domainid= hypervisor= keyboard= projectid= serviceofferingid= userdata= affinitygroupnames= diskofferingid= filter= ip6address= keypair= rootdisksize= size= zoneid= customid= displayname= group= ipaddress= name= securitygroupids= startvm=
値の候補
テンプレートなどの補完は都度問い合わせるので、少し遅いです。
(idcf-east-1) 🐵 > deploy virtualmachine zoneid= 9703cdbb-aee7-41ba-ba80-4807eaa68b80 henry baf86a6e-4e3b-428e-8fd0-7fda43e468d4 joule 01738d49-2722-4788-891e-848536663c6e newton f0954b9b-2626-4549-82ad-ca421073b3bc pascal a53ff3d3-042b-4cbd-ad16-494bb8d33e06 radian a117e75f-d02e-4074-806d-889c61261394 tesla 01738d49-2722-4788-891e-848536663c6e a117e75f-d02e-4074-806d-889c61261394 baf86a6e-4e3b-428e-8fd0-7fda43e468d4 9703cdbb-aee7-41ba-ba80-4807eaa68b80 a53ff3d3-042b-4cbd-ad16-494bb8d33e06 f0954b9b-2626-4549-82ad-ca421073b3bc
エラー出力
引数不足時のエラーがわかりやすいです。
(idcf-east-1) 🐵 > deploy virtualmachine Missing arguments: zoneid serviceofferingid templateid
IDCFクラウドでは、今後も便利なライブラリや、IDCFクラウドCLIなどの統合CLIツールを開発してまいりますので、お楽しみに。 APIからのみ操作できる機能もありますので、みなさまも便利で楽なツールをつかって、良いAPIライフをお送りください。
<IDCFクラウド便利ツールの関連記事>
■idcfcloud-cliをリリース! - IDCF テックブログ