IDCF テックブログ

IDCF テックブログ

クラウド・データセンターを提供するIDCフロンティアの公式テックブログ

CloudMonkeyをIDCFクラウドでつかってAPIを操作してみよう

こんにちは、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 テックブログ

idcfcloud-cliがアップデート!新機能を紹介 - IDCF テックブログ

IDCFクラウド APIを利用した仮想マシンの作成からSSH接続まで - IDCF テックブログ

Copyright © IDC Frontier Inc.