VMwarePlayer+Ubuntu/KVM/OVSでOpenFlowテスト環境をつくる(4)

ちょっとした Tips だけ。

こう、環境つくってVMたてていろいろやるって言うのができるのは良いのだけど、ある程度用意ができると、何が面倒だって VM 起動するのが面倒なのよ。vmware player で動かしている KVM Host + OF Controller Host は自動化の余地がないし、せいぜい2台だし、ここはまあいいとしよう。問題は、KVM Guest だよね。なんだかんだで4〜8台くらい KVM Guest 動かすとなると、いちいち virsh start して VNC でつなぐか virsh console して…っていうのを繰り返すのかと。面倒すぎる。

結局、GNU screenKVM Guest ごとに terminal 開いて sudo virsh start ofvm01 && sudo virsh console ofvm01 やるっていう作業をしていたのだけど、面倒だから全部一発でいけるようにスクリプトを書いてみた。

#!/bin/sh

USERID=`id -u`
if [ $USERID -gt 0 ]
then
        echo "You're not root"
        exit
fi

# boot all domains
for DOMAIN in `virsh list --all | grep ofvm | grep off | cut -d' ' -f4`
do
        echo "# boot $DOMAIN"
        virsh start $DOMAIN
done

# generate screenrc
RC=".boot-kvm-domains-screenrc"
cat << EOF > $RC
sessionname bootkvmdomains
escape ^t^t
hardstatus on
hardstatus alwayslastline
hardstatus string "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %m/%d %C%a "
screen -t shell bash
EOF

for DOMAIN in `virsh list --all | grep ofvm | cut -d' ' -f4`
do
        echo "screen -t $DOMAIN bash" >> $RC
        echo "stuff \"virsh console $DOMAIN\015\"" >> $RC
done

# open kvm domain console in screen window
if [ -e $RC ]
then
        if screen -ls | grep bootkvmdomains
        then
                echo "already attached"
                exec screen -r bootkvmdomains
        fi
        exec screen -c $RC
fi
  • 登録されている KVM Guest は全部起動させてしまう。
  • 登録されている KVM Guest 分の窓を開いて virsh consoleを実行してしまう。

KVM/virsh 操作にせよ OVS 操作にせよ大半が root 権限が必要なのでもう root 実行を前提にしてしまった…。毎回 screen 設定ファイルを生成しているので、KVM Guest の追加削除があっても対応。

これで、KVM Host にログインしたらこのスクリプトを叩くと一気に全 KVM Guest が起動して、screen 窓ひらいて console 接続するところまで行きます。