VirtualBoxのスナップショットを簡単に管理できるツールを書きました。GO言語で。

VagrantではSahara pluginを使うことで、VMの状態を以前の状態に巻き戻すことができます(sandobx mode)。

VMの中でいろいろいじっている際に変更前の状態に戻せるのはとても便利なのですが、Saharaでは戻せるチェックポイントをひとつしか作れません。

自分の場合、深遠なChefのレシピを書いている過程で、戻せるポイントを何個か置きたくなることがよくあります。


さて、VagrantのバックエンドとしてVirtualBoxを使っている人は多いかと思います。

バックエンドがVritualBoxの場合、SaharaのsandboxはVirtualBoxのsnapshotを使って実現されています。

VirtualBoxのsnapshotはひとつだけでなくいくつでも作ることができます。

CUIVirtualBoxの操作(snapshotを作ったり)をするには、vboxmanage コマンドを使えばできるのですが、VMの名前が長かったりしてちょっと使いづらいです。

そこでsnapshotに関連する操作を簡単に実行できるラッパーツールを作りました。

使い方

動作中のVMの一覧を得る
$ vboxss list
vm1                 vm1_default_1404895653615_55181
vm2                 vm2_default_1404967162355_44921

VMの正規名は右側のながーいやつですが、vboxssは左の短縮名でも受け付けます。多くの場合、短縮名はvagrant initしたディレクトリ名になると思います。

あるVMのsnapshotの一覧を得る
$ vboxss list vm1
List of the snapshots of vm1_default_1404895653615_55181
initial                           e718f597-22b4-4bef-adf6-239fff78215f
install-apps                      5337e220-0075-46a5-8aaa-901361f352df
before-apply-chef                 703071da-26c1-4504-8c81-4535de33c2f2

listの後にVM名を指定すると、そのVMのsnapshotの一覧が表示されます。VM名は短縮名でも長い正規名でもOKです。

snapshotをとる
$ vboxss take vm1 provisioned

takeの後に、VM名と、snapshotにつける名前を指定します。

snapshotを使ってVMをレストアする
$ vboxss restore vm1 before-apply-chef

vm1という名のVMの状態を、before-apply-chefという名のsnapshotの状態に戻します。

vboxss restoreを実行すると、一旦VMが停止される点に留意してください。(レストア後、自動でまた立ち上がります)

snapshotを消す
$ vboxss delete vm1 provisioned

落穂ひろい

Goをまともに書いたのはこれが初めてなので「こう書いたほうがイイヨ!!」とかあったら教えてください><


バイナリのビルドと配布は Wercker を使ってます。[twitter:@lestrrat] さんと [twitter:@motemen] さんのを参考にさせてもらいましたー&Werckerのboxは lestrrat/peco-build をそのまま使わせてもらってます!!