気ままにインフラエンジニア

渋谷で働くインフラエンジニアの備忘録。 TwitterID: @nakashii_

KVMのゲストを複製した後、MACアドレスを書き換える方法いろいろ+スクリプトで自動化

基本的には、virt-cloneした後にいろいろする。
virt-manager上でクローンした後に行うのも同じ)

  • 直接マウントして書き換える
    • raw形式ならそのままマウントして書き換える
    • qcow2形式ならqemu-nbdを使ってマウントして書き換える
  • libguestfs経由で書き換える

結論としては、今から利用するならlibguestfsを使うほうが便利。CentOS6.2以降であればyumでインストールできる。


以下、いくつか使ってみたツール類。

RHEL5.x/RHEL6.0 の KVM では、virt-clone コマンドにより仮想マシンの複製が可能ですが、この場合、ゲスト OS のホストネームやネットワーク設定などは、別途、手動で変更する必要があります。
添付のスクリプト kvmclone.pl は、virt-clone による仮想マシンの複製とゲスト OS のネットワーク設定の変更を自動化して行います。

・virt-cloneも一括で行えるので便利
・raw形式のHDDでないと利用できない
・引数をすべて指定するのはちょっと面倒
・eth0だけ対応

・かなりいけてるけどシンプロビジョニングは今回考えてない
・eth0だけ対応

・eth0とeth1の2つのデバイス
・all python


今回はインターフェースを2つ利用したいものがあったので、最後のものを参考に改修して使ってみた。

edit-vm-network-setting.py
・(変更)rootデバイスを自動検出
edit-vm-hostname.py
・(追加)hostnameを変更するスクリプト
kvmclone
・(追加)virt-clone から起動まで行うスクリプト


kvmclone original_domain new_domain new_ip_eth0 new_ip_eth1

こんな感じでさくっとコピーして起動まで行きます。KVMホストがCentOS6.2、ゲストがCentOS5.4の環境で確認。
使うには以下のライブラリをYumでインストール。

yum install python-libguestfs libvirt-python python-lxml

同じネットワークアドレス内で使うだけなら、十分かな。eth0しか必要ない場合は、適当にコメントアウトして使って下さい。
時間があればIBMのものとかを参考に、ゲストがCent6系とかの場合にも対応してみたい。

libguestfs/guestfsのmanとか
guestfs-recipes - libguestfs, guestfish and virt tools recipes
guestfs-python - How to use libguestfs from Python