ばうあーろぐ TOP へ戻る

Vagrant に仮想マシンのスナップショットがとれる sahara というプラグインを入れた

この記事は書かれてから1年以上が経過しており、最新の情報とは異なる可能性があります

個々の仮想マシンのアプリケーションを入れていく前に、仮想マシンの操作でよくある『スナップショット機能』的なものが使えるように、 Vagrant のプラグインの追加をしたいと思います。

sahara プラグインのインストール

Vagrant 1.0 までは vagrant に続けて gem サブコマンドで入れられたようですが、 Vagrant 1.1 以降は、plugin サブコマンドを使うようです。

と思って試したら、どうやら Vagrant1.1 以降では対応してないようで・・・。

で色々と調べていたら、対応させている方が!素敵ですねー。

Vagrantの必須プラグインSaharaをVagrant 1.1に対応させました | Ryuzee.com

こちらの方の記事にもあるように、『Vagrantを使っている人であれば必携のプラグイン』とあるので、 これはぜひとも入れておき、砂場のように作りは消し、作りは消しが簡単に出来るようにしておきたいですね! (必携といわれるくらいなので、ひょっとしたら後で記事見直したら、この辺きちんと整備されているかもしれませんね。)

$ git clone https://github.com/ryuzee/sahara.git
(略)
$ cd sahara
$ bundle install
Fetching gem metadata from http://rubygems.org/..........
Fetching gem metadata from http://rubygems.org/..
Resolving dependencies...
Using rake (0.9.2.2)
Installing Platform (0.4.0)
Using bundler (1.3.5)
Installing open4 (1.3.0)
Installing popen4 (0.1.2)
Installing thor (0.18.1)
Using sahara (0.0.14) from source at .
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
$ bundle exec rake build
sahara 0.0.14 built to pkg/sahara-0.0.14.gem.

bundle 使ってビルドすると、 sahara/pkg/ 以下に gem ファイルが出来ました。これを以下の代わりに

$ vagrant plugin install sahara

gem ファイルを指定してやってインストールする、と。

$ vagrant plugin install pkg/sahara-0.0.14.gem
Installing the 'pkg/sahara-0.0.14.gem' plugin. This can take a few minutes...
Installed the plugin 'sahara (0.0.14)'!

これで入りました。 (この辺整備されたら、git clone でリポジトリ持ってくるところから vagrant plugin install sahara の手前までは不要ですね。)

入ったことを確認するために、list サブコマンドを使ってみます。

$ vagrant plugin list
sahara (0.0.14)

これで入りました。

sahara プラグインを使ってみる

インストールの仕方がちょっと違っただけで、使い方は同じなので、配布先見てみます。

https://github.com/jedi4ever/sahara

こちらによると、以下のコマンドが用意されているようです。

vagrant sandbox on
vagrant sandbox commit
vagrant sandbox rollback
vagrant sandbox off

サンドボックスモードをオンにしたあと、commit か rollback でその作業をしたことにするか、あるいはしてなかったことにするかを決められるようです。データベースと同じですね。

では、一番シンプルで分かりやすいであろう、仮想マシンのホームディレクトリに ‘hello’ という空ファイルを作り、 rollback して元に戻っているかどうかを検証したいと思います。

$ vagrant sandbox on
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

お、なんですかねこの数字。きっとスナップショットを取るのにある程度時間がかかるのでしょう。(といっても数秒でしたが)

$ vagrant ssh
Last login: Sat May  4 23:10:49 2013 from [your-ip-address]
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$ touch hello
[vagrant@localhost ~]$ ls
hello

はい、さくっとホームディレクトリに空の ‘hello’ というファイルを作りました。

そして、世界を戻してみます。

$ logout
Connection to 127.0.0.1 closed.
$ vagrant sandbox rollback
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

おお、なんかスナップショット周りに変化があったようですね。

もう一度さっきのファイルを確認するために、ssh で接続してみます。

vagrant ssh
Last login: Sat May  4 23:10:49 2013 from [your-ip-address]
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$ ls
[vagrant@localhost ~]$

おおー!なくなってたー!

まとめ

sahara プラグインのような、スナップショットをコントロールできる機能は、やはり有ると無いのとでは全然違いますね。

ここから先の検証は、上手くいくかどうか怪しいところでスナップショットを取っておいて、 ごにょごにょやったあとで上手く行ったら commit で決定、失敗したら rollback で破棄すれば、 検証がしやすくなること間違いなしです!

この記事は書かれてから1年以上が経過しており、最新の情報とは異なる可能性があります

もし記事内に誤りなどございましたら、 @girigiribauer までご一報いただけると助かります。