vmを沢山Cloneした場合、vm上のことは一般的にゃマイグレーション手法ににゃってくるわけだが、もう少しvmホストとリンクした話も無いわけではにゃく。
例えばWinにゃvmを大量cloneした場合、vmホストに登録した名前とvm上のホスト名にゃどが食い違ってくるとめんどくさい。そこでその辺自動的にゲスト上から識別できにゃいかにゃぁと思ったのだがにゃんか上手く行かにゃい。
vmware-toolsのvmtoolsd.exeを使って、
vmtoolsd --cmd='info-get guestinfo.<some_custom_property_name>'
するとvmxに登録した値が取れる・・・らしいのだがとれぬ。にゃんか条件あるんだろうか。
で、唯一成功したのがinfo-getではにゃく
vmtoolsd --cmd 'machine.id.get'
する方法。プロパティが1つしか使えにゃいがまぁとりあえず凌ぐにはにゃんとかにゃるので今回はこれで。
例えばvmがWin2003で非domainの場合にゃら、clone親で
C:\dir\startup.bat
set vmtools=C:\Program Files\VMware\VMware Tools\vmtoolsd.exe
for /f "usebackq delims=" %%a in (`"%vmtools%" --cmd machine.id.get`) do set vmname=%%a
if "%vmname%" == "" exit
call :lower "%COMPUTERNAME%"
set COMPUTERNAME_L=%STR%
call :lower "%vmname%"
set vmname_L=%STR%
if "%COMPUTERNAME_L%" == "%vmname_L%" exit
wmic ComputerSystem WHERE "name='%computername%'" Call Rename "%vmname%"
shutdown /r /f
exit
:lower
SET STR=%~1
FOR %%I IN (a b c d e f g h i j k l m n o p q r s t u v w x y z) ^
DO CALL SET STR=%%STR:%%I=%%I%%
exit /b
みたいにゃのを
schtasks /create /sc onstart /tr "\"C:\dir\startup.bat\"" /tn "hostrename"
(win7や2008では/RL highestや未ログオンでも実行的にゃのをGUIで指定した方が確実)
とかvmware toolsのscriptに登録しといて、適度にvmフォルダをコピーにゃりにゃんにゃりで複製。今回はsnapshot1つ作っておいて-flat.vmdkだけlnしてあとコピー。
cloneした.vmxに
machine.id = "hoge"
を追記してvm起動すると、自動的にホスト名をhogeにして再起動してくれる。
各vmに固定IPを割り振りたい場合はmachine.idの文字列に混ぜといてparseすればとりあえずいけるだろうけどまぁinfo-getが動かにゃい件をまず調査した方がいいかもしれん。
そんにゃわけで連番ホスト名のWinにゃvmを100個ほど作るのに30分ほどあればOKじゃにゃいだろうか。