Contents
VMwareのWeb APIでは、Web APIからVMware toolsを経由してゲストOSの操作が可能です。
ゲストOSを操作できるメソッドを提供しているオブジェクトは以下の通りです。
操作可能なオブジェクト
| オブジェクト名 | 説明 |
|---|---|
| aliasManager | シングルサイオンのメソッドを提供するオブジェクト |
| authManager | ゲスト認証操作のメソッドを提供するオブジェクト |
| fileManager | ゲストOSのファイル・ディレクトリを操作できるメソッドを提供するオブジェクト |
| guestWindowsRegistryManager | Windowsレジストリを操作できるメソッドを提供するオブジェクト |
| processManager | ゲストOSのプロセスやコマンドが実行できるメソッドを提供するオブジェクト |
ここでは processManager を使ってプロセス一覧取得や起動及びコマンドの実行をしてみます。
環境
| 項目 | バージョン |
|---|---|
| vCenter | 6.5.0 ビルド 4602587 |
| pyvmomi | 6.5.0.2017.5.post1 |
| python | 3.4.5 |
検証方針
- ゲストOS(CentOS7)のプロセス一覧を取得してみる
- ゲストOS(CentOS7)のサービスを起動してみる
- ゲストOS(CentOS7)でコマンドを実行してみる
検証
ゲストOSのプロセス一覧取得
ここでは、ゲストOSのプロセス一覧を取得してみます。
ソース
説明
ListProcessesInGuest メソッドでは、仮想マシンMOBと認証情報を引数として渡すと戻り値としてゲストOSのプロセス一覧オブジェクト(GuestProcessInfo)が取得できます。
実行
実行に問題がなければ pid: プロセス名 が一覧で表示されます。
|
1 2 3 4 5 6 7 8 9 |
$ ./get-guestos-processes.py -vc vcenter01.local -tvm centos -gu root vCenter Password: Guest OS Password: 1: /usr/lib/systemd/systemd --switched-root --system --deserialize 21 2: kthreadd 3: ksoftirqd/0 4: kworker/0:0 (snip) |
エージェントレスでのプロセス監視などで役に立ちます 🙂
ゲストOSのサービスを起動
ここでは、httpdを起動してみたいと思います。
ソース
説明
GuestProgramSpec データオブジェクトを生成し、以下のプロパティを設定しています。
| プロパティ名 | 説明 |
|---|---|
| arguments | 実行するプログラムに渡す引数 |
| programPath | 実行するプログラムのフルパス |
GuestProgramSpec データオブジェクトを StartProgramInGuest メソッドに渡すと問題がなければ戻り値として実行したコマンドの pid が取得できます。
ここでは、httpdをsystemctl経由から起動しています。
実行
実行に問題がなければ実行したコマンドの pid が表示されます。
|
1 2 3 4 5 |
$ ./start-guestos-service.py -vc vcenter01.local -tvm centos -gu root vCenter Password: Guest OS Password: 2394 |
実行したゲストOSで確認してみます。
|
1 2 3 4 5 6 7 8 |
[root@localhost ~]# pgrep httpd 2395 2396 2397 2398 2399 2400 |
API上で取得したpidはsystemctlで実行した時のpidなので、実際に動作しているpidではありません。
この場合、ListProcessesInGuestも一緒に使って問題なく起動したか?のチェック処理を入れるなどの対処が必要です。
ゲストOSでコマンドを実行
StartProgramInGuest を使えば任意のコマンドが実行できることがわかったのでプロセスを起動する以外にちょっと試して見ました。
ここでは echo を使ってファイルを作成してみたいと思います。
ソース
説明
TEST という文字列を output.txt に吐き出してみます。
実行
実行してみます。
|
1 2 3 4 5 |
$ ./exec-guestos-cmd.py -vc vcenter01.local -tvm centos -gu root vCenter Password: Guest OS Password: 2422 |
ゲストOSで出力されたファイルを確認します。
|
1 2 3 |
[root@localhost ~]# cat /root/output.txt TEST |
標準での出力先は、プログラムを実行したユーザーのホームディレクトリになります。
そのため、出力先のファイルを絶対パスで記述するか workingDirectory プロパティでコマンドを実行するディレクトリパスを指定します。
StartProgramInGuest を使うことで任意のコマンドを実行出来ることはわかりましたが、いかんせん戻り値がpidなので実行したプログラムの戻り値などを取得する場合には使えなさそうです。(lsで結果を取得とか)
そういうのは VIX とかだと出来るのかな。
ちなみに TerminateProcessInGuest メソッドを使うとプロセスを停止させることができます。