vRealize Automation/vCenter Orchestratorを操作するCLIツール(Cloud Client)がVMwareオフィシャルで提供されていたので、少し触ってみました。
Cloud Clientを使うことで以下のような操作をCLIから実行できるようになります。
- Blue Print / Catalog Itemの作成
- Catalog Itemのリクエスト
- IaaS Endpointの作成
- vCO Workflowの実行
本当は生のREST APIを直接叩けば済む話なのですが、これを使ったほうが各種操作がコマンドとして整理されていて、楽に使えると思います。
ダウンロード
以下のURLからダウンロードできます。2015/3/24時点での最新バージョンは3.2.0です。
vRealize CloudClient 3.2
https://developercenter.vmware.com/web/dp/tool/cloudclient
ダウンロードして適当なディレクトリに解凍しておきます。
$ wget https://vdc-download.vmware.com/vmwb-repository/dcr-public/e8b140e7-cf16-4ff6-af88-a22ad7e9f5d1/01b1dcf0-9ed2-4452-8881-61e29faa2bc6/cloudclient-3.2.0-2594179-dist.zip
$ unzip cloudclient-3.2.0-2594179-dist.zip
- なお、「vCAC CLI」というコマンドラインツールも提供されているのですが、こちらはエンドポイントを指定してvRA(vCAC)のAPIを叩くような、より薄いツールのようです。
対話的に叩いてみる
まずは、試しに対話的に触ってみます。
vRAへのログイン
解凍したディレクトリに移動し、bin以下にあるシェルスクリプトから起動します。利用許諾が表示されるので、一番したまでスクロールして"Y"を入力します。
$ cd cloudclient-3.2.0-2594179
$ ./bin/cloudclient.sh
...
Do you accept the terms of license agreement? (Y)es/(N)o:Y
===================================================
_____ _ _ _____ _ _ _
/ __ \ | | / __ \ (_) | |
| / \/ | ___ _ _ __| | / \/ |_ ___ _ __ | |_
| | | |/ _ \| | | |/ _` | | | | |/ _ \ '_ \| __|
| \__/\ | (_) | |_| | (_| | \__/\ | | __/ | | | |_
\____/_|\___/ \__,_|\__,_|\____/_|_|\___|_| |_|\__|
===================================================
Version : 3.2.0
*Tip* : You can hit tab to move through commands and arguments
*Tip* : You can autologon with a CloudClient.properties file
Welcome to the VMware CloudClient
CloudClient>
vRAの特定のテナントに対してログインしてみます。
CloudClient>vra login userpass --user USER@DOMAIN --password PASSWORD --server xxx.xxx.xxx.xxx --tenant TENANT
vRA SSO login: [ACTIVE], session: [INACTIVE], user=[USER@DOMAIN], server=[https://xxx.xxx.xxx.xxx], tenant=[TENANT]
IaaS Model Manager login: [INACTIVE], session: [INACTIVE]
ログインに成功すると、"vRA SSO login: [ACTIVE]"が表示されるはずです。
コマンドを叩いてみる
ログイン状態となったところで、組み込みコマンドを叩いてみます。"help"で組み込みコマンドを一覧表示できます。
- Catalog一覧の表示
CloudClient>vra catalog list
+--------------------------------------+-----------------------------+--------------------------------------+---------------------------------------------+----------------------------+-----------+
| id | organization.subtenantLabel | organization.subtenantRef | name | catalogItemTypeRef.label | status |
+--------------------------------------+-----------------------------+--------------------------------------+---------------------------------------------+----------------------------+-----------+
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | IT | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | Config Something | Advanced Service Blueprint | PUBLISHED |
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | IT | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | Windows2008 | Multi-Machine Service | PUBLISHED |
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | IT | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | Windows2012 | Virtual Machine | PUBLISHED |
+--------------------------------------+-----------------------------+--------------------------------------+---------------------------------------------+----------------------------+-----------+
ワンライナーとして叩く
対話モードでの動作は確認できたので、次に組み込みコマンドも含んだワンライナーとして叩いてみます。
CloudClient.propertiesの作成
対話モードでは手動でログインしましたが、毎回入力しなくてすむように、ログイン情報を"CloudClient.properties"という外部ファイルに書き出しておきます。
まずはCloudClientのコマンドからCloudClient.propertiesのひな形と、パスワードファイルを生成しておきます。
CloudClient>login autologinfile
CloudClient>login keyfile --file vRA_password.txt --password PASSWORD
生成されたファイルを開くと、vRA/vRA(IaaS)/vCOの3種類のアカウント情報を設定できるようになっています。
ここではvRAのアカウントを設定します。vra_keyfileには、先ほど生成したvRA_password.txtを指定します。
vi CloudClient.properties
#vra_server : vRealize Automation Virtual Appliance
vra_server=IP_ADDR_OF_VCAC
#vra_tenant : Tenant Name, defaults to vsphere.local
vra_tenant=TENANT_NAME
#vra_username : SSO username in the form user@domain.com
vra_username=USERNAME
#vra_password : SSO password
vra_password=PASSWORD
#vra_keyfile : Encrypted file location of SSO password
vra_keyfile=vRA_password.txt
叩いてみる
あとは、実行したいコマンドを引数としてcloudclient.shを実行すれば、結果が出力されます。
./bin/cloudclient.sh vra catalog list
vRA SSO login: [ACTIVE], session: [INACTIVE], user=[USER@DOMAIN], server=[https://xxx.xxx.xxx.xxx], tenant=[TENANT]
+--------------------------------------+-----------------------------+--------------------------------------+---------------------------------------------+----------------------------+-----------+
| id | organization.subtenantLabel | organization.subtenantRef | name | catalogItemTypeRef.label | status |
+--------------------------------------+-----------------------------+--------------------------------------+---------------------------------------------+----------------------------+-----------+
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | IT | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | Config Something | Advanced Service Blueprint | PUBLISHED |
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | IT | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | Windows2008 | Multi-Machine Service | PUBLISHED |
| xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | IT | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | Windows2012 | Virtual Machine | PUBLISHED |
+--------------------------------------+-----------------------------+--------------------------------------+---------------------------------------------+----------------------------+-----------+
(おまけ: REST APIを直接叩く場合)
ところで、当然vRAは生のREST APIも提供しているので、それを直接叩いても同様のことができるはずなのですが、今回試した中ではうまく行きませんでした。一応内容をメモ代わりに記載しておきます。
Tokenの取得
特に変わったことはなく、jsonでusernameとpassword、tenant名を指定してリクエストします。自己証明を使っているので--insecureを指定します。
curl -v --insecure -H "Accept: application/json" -H "Content-type: application/json" -X POST \
-d '{"username":"NAME@DOMAIN","password":"PASSWORD","tenant":"TENANT"}' \
https://IP_OF_VCAC/identity/api/tokens
すると、こんな感じでtokenが返却されます。
{
"expires": "2015-03-25T20:25:05.178Z",
"id": "MTQ...N2Y=",
"tenant": "TENANT"
}
なお、有効期間はデフォルトで24時間となっています。変更したい場合には、vCAC Appliance内の
/etc/vcac/security.properties
にある、
identity.basic.token.lifetime.hours=N
を任意に指定することで変更可能です。
リクエストを投げてみる
取得したtokenを使って、GETリクエストを投げてみます。
curl -v --insecure -H "Accept: application/json" \
-H "Authorization: Bearer MTQ...N2Y=" \
-X GET https://IP_OF_VCAC/catalog-service/api/consumer/catalogItems
...が、どうも空のレスポンスが返ってきてしまいます。
{
"links": [],
"content": [],
"metadata": {
"size": 20,
"totalElements": 0,
"totalPages": 0,
"number": 1,
"offset": 0
}
}
Cloud ClientやvCAC CLIを使うと正しく一覧が返ってくるので、リクエストの投げ方に問題があると思われます。時間があるときにもう少し調べてみる。
参考
CloudClient Documentation(以下からダウンロード)
https://developercenter.vmware.com/web/dp/tool/cloudclient/3.2.0