以前からUUIDを用いた固定IPアドレスの一括設定スクリプトを作成しているが、どうもUUIDだと各機種、OSごとに順序入れ替え方式がバラバラで統一出来ないようで、導入する機種ごとにテストが必要のようだ。
そこで、ESXi上の仮想マシン、物理サーバともに統一されているシリアルナンバーをキーにhost.listを作成する方式に切り替える事にした。
もともとこちらでもよかったんだけど、どうもESXiの仮想マシンのシリアルナンバーだと空白が入ってしまうので、それが嫌だったというだけなんだよね。
というわけで、以前書いた仮想マシンのUUID一括取得スクリプトのシリアルナンバー版です。
#!/bin/sh
#Get VM List
VimCmdList=`vim-cmd vmsvc/getallvms | grep "vmx-" | grep ".vmx" | awk '{print $2,$3,$4}'`
IFS=$'\n'
echo "VM Name,Serial"
for i in $VimCmdList; do
#Get VM Name
VMName=`echo "$i" | awk '{print $1}'`
#Get vmx file place
VMXFolder=`echo "$i" | awk '{print $2}' | cut -d"[" -f2 | cut -d"]" -f1`
VMXFile=`echo "$i" | awk '{print $3}'`
#Get VM Ethernet Info
VMEUUID=`cat /vmfs/volumes/$VMXFolder/$VMXFile | sort | grep "uuid.bios" | cut -d"\"" -f2 | cut -d"\"" -f1`
VMESERIAL="VMware-$VMEUUID"
for i in $VMESERIAL; do
echo "$VMName,$i"
done
done
出力結果は以下。
/tmp # sh test.sh
VM Name,Serial
Test_Windows7_2,VMware-56 4d 8d 45 07 0e 47 db-86 6d e7 50 c1 84 c7 a8
Test_Win7_Home,VMware-56 4d 52 5f 00 2d 37 b0-56 a0 9f e3 e1 2a 6e cb
Test-CentOS,VMware-56 4d 09 fd 36 70 a0 11-85 11 d4 24 90 6a 61 a7
Test-CentOS001,VMware-56 4d 33 c9 f6 32 ab 40-14 88 00 e9 ca 90 d0 59
Test-CentOS002,VMware-56 4d ab 56 0a e5 9c d2-85 ed cf e9 7f 5a 9e 64
Test-CentOS003,VMware-56 4d f1 63 d8 10 26 5b-56 70 7d 08 1c 45 71 6f
Test-UbuntuServer,VMware-56 4d c8 a6 d8 f4 77 d2-0b 15 33 56 63 b0 fb 98
Test-ESXi,VMware-56 4d 92 39 40 3d e9 d5-1b eb 3c 68 00 d5 a8 83
Test_Windows7_1,VMware-56 4d ac fa f0 83 62 e9-a4 b7 1f e5 31 35 34 9a
/tmp #
わかってはいたけど、スペースが入るのがやだなぁ…
ま、変数に入れる際にダブルクォーテーションで括るからいいか?