ネットワークが繋がっていなかったり、接続に限りがある状態で対象仮想マシンに対してファイルのアップロードやダウンロードが出来ないか確認したところ fileManager を使って出来たのでツールを作ってみました。
vmware-guest-file-operation
https://github.com/sky-joker/vmware-guest-file-operation
使い方
ファイルをダウンロード
centos
という仮想マシン内にある output.txt
というファイルをダウンロードして hoge.txt
というファイル名で保存した時の例です。
1 2 3 4 5 |
$ ./vmware-guest-file-operation.py -vc vcenter01.local -tvm centos -gu root download -dpth /root/output.txt -spth hoge.txt vCenter Password: Guest OS Password: file download success. |
ファイルが保存されたか確認します。
1 2 3 |
$ ls hoge.txt |
ファイルをアップロード
centos
という仮想マシン内へ requirements.txt
をアップロードして /root/requirements
として保存した時の例です。
1 2 3 4 5 |
$ ./vmware-guest-file-operation.py -vc vcenter01.local -tvm centos -gu root upload -upth ./requirements.txt -spth /root/requirements vCenter Password: Guest OS Password: file upload success. |
アップロードしたファイルが保存されたか確認します。
1 2 3 |
$ ls requirements |
仕組み
fileManager
オブジェクトの InitiateFileTransferFromGuest(ファイルをdownload)
または InitiateFileTransferToGuest(ファイルをupload)
メソッドに仮想マシンのオブジェクトやGuestOSの認証情報、ファイル情報を渡すとアクセス可能なURLを発行してくれます。
URLはvCenterのもので、やりとりするファイルはvCenter経由で行われます。
vCenter内ではGuestOSのVMware toolsと連携してファイルのやりとりが行われます。
ここでは、発行されたURLに対して requests
の get
や put
をしてファイルのやりとりをしています。
そのため、大量に処理をするとvCenterに負荷がかかることが懸念されます。
最後に
今まで、ネットワークが繋がっていない構築中・検証環境の仮想マシンにフィアルのアップロードしたりするのが面倒でしたがひとまずこれで対応できそう 🙂
PowerCLIだと、Windows用意しなくてはいけなかったけどpythonで実装できたからLinuxでも大丈夫になった 🙂