libvirtで管理さてるゲストマシンを高速シンプロビジョニングしてくれるツールを作った - kazuhisya::備忘録的な何か(情報元のブックマーク数)
kazuhisyaさんによる、libvirtでゲストマシンを高速でごにょごにょしちゃう方法らしい。
virt-clone コマンドって便利ですよね。
libvirtで管理さてるゲストマシンを高速シンプロビジョニングしてくれるツールを作った - kazuhisya::備忘録的な何か
これ確かにスゲー便利なんですが、30回も40回も同じこと繰り返してると、スゲー疲れるわけです。
具体的に何に疲れるかって言うと、
1. 待ち時間
2. ネットワークの再設定
待ち時間に関しては、シェルスクリプトにしておくなりスパースでやるオプションを付けておけば"ある程度”我慢できるけど、ネットワークの再設定に関してはスゲータルい。
なんせ1回はゲストに入らなきゃいけない。
ぅぉー!これはすごい。
具体的には下記の流れになる
1. qemu-imgでオリジナルのゲストの仮想ディスクから新しいゲストの仮想ディスクを作成する
- ベースイメージから作成する場合、"皮”の部分だけ作られるので、一瞬で終わる(多分RHEVのpool機能はコレを使ってるんじゃないかな)
2. virt-cloneに--preserve-dataオプションを付けてクローンする
- preserve-dataオプションは--fileオプションと一緒に使うんだけど 1. で作った仮想ディスクをアタッチする。これも一瞬
3. 新しくできたクローンからMACアドをひっぱて来て、仮想ディスク内の各コンフィグに直接書きこんでしまう
- これはlibguestfsっていうかなりミラクルなツールがあって、それを利用
- 仮想ディスクをホスト側にマウントして、ifcfg-eth0とudevのルールを書き換えてます
- 余談: ruby-libguestfsってライブラリもあるので、フツーに使えるはずなんだけど、オリジナル現行バージョンとRHELのyumにあるバージョンがスゲー離れてる上、互換性なさそうな雰囲気がプンプンなので、後先考えてココは sysetm()で直接実行してます
4. 最後の仕上げに新しい方の仮想ディスクのスナップショットを取る
libvirtで管理さてるゲストマシンを高速シンプロビジョニングしてくれるツールを作った - kazuhisya::備忘録的な何か
出来上がった新しいゲストを実行してやれば、いきなりネットワークが設定された状態で立ち上がる。