更新された+コード:独自の「VBoxManage list ip」-実行中の仮想マシンのアドレスのリスト

夕方、やることがたくさんありました。 そして、ほとんどすべてがVirtualBoxにあります。 ヘッドレス仮想マシンを使用します。

私は、開発用の仮想マシンの利点を長く認識しており、どこでもそれらを使用しています。 その結果、ブランチとプロジェクトが異なる5〜10台の仮想マシンを所有しています。 そのうちのいくつかは常に実行されています。

それらの90%はヘッドレスモードで実行されます。 IPを動的に取得します。 静的は常に制御することはできず、他の制限もあります。 したがって、結果-特定のアドレスではどの仮想マシンが起動するかはわかりません。

この場合、仮想マシンを起動する順序は次のとおりです。
1.通常モードで起動します
2.アドレスのifconfig / ipconfigを調べます
3.消す
4.ヘッドレスで実行し、アドレスが同じであることを望みます

これに出会ったと思います。 そうでない場合は、次の投稿に進むことができます。 魔法の理論や特別なコードはありません。 カットの下-シンプルで既製のソリューション。 この小さな日常のタスクに精通している人のために。

VBトラッカーには、対応する機能要求があります。 しかし、それは「私のために働く」として閉じられています。 このソリューションのコードは次のとおりです。

VBoxManage guestproperty enumerate {`VBoxManage list runningvms | awk -F"{" '{print $2}'` | grep \ IP | awk -F"," '{print $2}' | awk '{print $2}' 

解決策は「Linuxのみ」ですが、これは私には適していません。 他に特に美しいソリューションは見つかりませんでした;独自のソリューションを作成することにしました。

実行中のすべての仮想マシンとそれらのすべてのネットワークアドレスをリストするnode.js用の小さなスクリプト 。 最初に、実行中のマシンのリストを取得し、その後、各マシンのコピーを取得します。

部分リスト

 exec("vboxmanage list runningvms", function (err, stdout, stderr) { if (stdout) { var vmNames = stdout.match(/"([^"]*)"/g); if (vmNames) { for (var x = 0; x < vmNames.length; x++) { var vmName = vmNames[x]; (function (vmName) { exec("VBoxManage guestproperty enumerate " + vmName, function (err, stdout, stderr) { getVmIps(err, stdout, stderr, vmName) }); })(vmName); } } else { console.log("No running VMs"); } } else { console.log(stderr); } }); 


「node vmip」で始まり、次のように表示されます。
Somemachine
192.168.13.188

U3
10.0.2.15
192.168.13.29
192.168.56.101

XP
192.168.56.102
10.0.2.15

このスクリプトは、使用済みのWindows / OS Xでテストされています。完全に美しさがなく、厳しい実用性に満ちています。 需要があれば、補充されます。

Source: https://habr.com/ru/post/J211124/


All Articles