vCenter 7.0のデベロッパーセンターでコードを生成して実行してみる(Python編)


vCenter 7.0からデベロッパー センター(Developer Center)でPowerCLI以外のコードが生成できる機能が追加されていることが確認できたので、ちょっと触ってみました。

デベロッパー センターで出来ること

  • API Explorer
    • vCenterのREST API仕様を確認および実行できる
  • コードのキャプチャ
    • Web Clientで操作した手順を記録しコード化(PowerCLI、vRO Javascript、Python、Go)してくれる

今回は コードのキャプチャ を使って生成したPythonコードを実行してみます。

環境

項目 バージョン 備考
vCenter 7.0.0.10100
CentOS 7.5.1804 (Core) コード実行環境
Python 3.6.8 コード実行環境

開発環境の準備

今回はPythonの開発環境を準備します。
まず、virtualenv環境を作成して有効化します。

次にPythonコードの実行に必要な pyvmomi をインストールします。

これで実行環境は整いました。

コードの生成

コードの生成を有効にするには デベロッパー センター をクリックし コードのキャプチャ タブを選択し コードキャプチャを有効にする を有効にします。

フォルダーを作成する例

簡単な例としてVMのフォルダーを作成してみます。
次のようにフォルダーを作成するコードを生成します。

次のコードが生成されたことが確認できます。

上から順番に見ると

  • 必要なライブラリを読み込んで
  • 管理オブジェクト(Managed Object)から対象のフォルダオブジェクトを取得して
  • フォルダーを作成するメソッドを実行している

というのが分かります。
ただ getVmFolder() というメソッドは APIリファレンス を見ても存在しません。
データセンターの管理オブジェクトからVMのrootフォルダーオブジェクトを取得しているので実際は vmFolder プロパティを使用するものだと思います。
(それか、自分が勘違いしてる可能性も…?でもドキュメントにないし実行してもエラーになるし…実際のオブジェクトの中身見ても無いし…getVmFolderってPowerCLIだったような記憶が…)

コード例

生成したコードは ログイン後 のコードしか生成しません。
そのため、生成されたコードを動かす場合はログイン・ログアウト処理をコードに追加する必要があります。
以下が、生成されたコードにログイン・ログアウトを追加した例になります。

パラメーター 説明
host vCenterのホスト名
username vCenterにログインするユーザー名
password vCenterにログインするパスワード
mob 管理オブジェクト

生成されたコードを見るとデータセンターの管理オブジェクトを元にVMフォルダーオブジェクトを取得しています。
そのため mob には vim.Datacenter を指定します。
その他の管理オブジェクトは Managed Object Types を確認してください。

今回は CreateContainerView を使ってデータセンター一覧を取得しています。
一つしかないので for の中は条件を入れていません。
複数ある場合の簡単な条件を入れるとすればデータセンター名が一致したら処理をするようなif文を追加する感じでしょうか。

コード実行例

それでは、コードを実行してみます。

出来ました 🙂

その他について

例えば、VMを作成した時に生成されるコードは以下のようになります。

めちゃくちゃ長いですが、やってる事は一緒でデータオブジェクトのプロパティに必要なパラメーターを入れてメソッドを実行しているだけです。
VMを作成する CreateVM_Taskメソッドについてはここを見てください

最後に

今回はイメージを知ってもらうために簡単なフォルダー作成例を紹介しました。

今までは文字のみのドキュメントを見ながらやらなくちゃいけなかったので最初のとっかかりは結構ハードルがあったかもしれませんが、UIで操作した内容をコード化してくれるためコードのイメージが分かるので学習コストは下がるんじゃないでしょうか 🙂
(生成されるコードに若干微妙な点がありますが、将来修正されるでしょう)

これで、AnsibleのVMwareモジュールにもコントリビュートしてもらえる人が増える事を期待 🙂

Leave a Reply

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください