更新された+コード:独自の「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でテストされています。完全に美しさがなく、厳しい実用性に満ちています。 需要があれば、補充されます。



All Articles