vagrant snapshot を使ってみる
はじめに
久しぶりに1からchefのレシピを書いている
本番のサーバーに流す前にrecipeをVagrantを使って確認している
vagrantで立てたサーバーの状態を戻すのに今まではshara
というpluginを使っていた
しかし 1.8のアップデートで標準機能に入ったようなので使ってみる。
vagrant snapshot
$ vagrant snapshot
Usage: vagrant snapshot <subcommand> [<args>]
Available subcommands:
delete
list
pop
push
restore
save
とあるように delete
, list
, pop
, push
, restore
, save
が用意されている
単一snapshotの作成
snapshotの作成にはsnapshot push
を使う
$ vatrant snapshot push
==> default: Snapshotting the machine as 'push_1464272777_7159'...
==> default: Snapshot saved! You can restore the snapshot at any time by
==> default: using `vagrant snapshot restore`. You can delete it using
==> default: `vagrant snapshot delete`.
こんな感じ
単一snapshotの復元
snapshotの復元にはsnapshot pop
を使う
$ vagrant snapshot pop
==> default: Restoring the snapshot 'push_1464272777_7159'...
==> default: Deleting the snapshot 'push_1464272777_7159'...
==> default: Snapshot deleted!
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
==> default: Forwarding ports...
default: 22 (guest) => 2200 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
default: The guest additions on this VM do not match the installed version of
default: VirtualBox! In most cases this is fine, but in rare cases it can
default: prevent things such as shared folders from working properly. If you see
default: shared folder errors, please make sure the guest additions within the
default: virtual machine match the version of VirtualBox you have installed on
default: your host and reload your VM.
default:
default: Guest Additions Version: 4.3.4
default: VirtualBox Version: 5.0
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
単一とあるように push
で作ったsnapshotはpop
で復元した時に消えてしまう
(最初やったとき焦ったw
1.8以前のsahara plugin
の様な使い方をする場合は save
を使うのがいいらしい
save
今回はknife solo prepare
した後の状態をsaveしてみる
$ vagrant snapshot save knife-solo-prepare
==> default: Snapshotting the machine as 'knife-solo-prepare'...
==> default: Snapshot saved! You can restore the snapshot at any time by
==> default: using `vagrant snapshot restore`. You can delete it using
==> default: `vagrant snapshot delete`.
$ vagrant snapshot list
knife-solo-prepare
こんな感じで名前を付けられるのでsahara
よりも分かりやすい。
再度 git
やtmux
などをインストールした後の状態でsnapshotを取ってみる
$ vagrant snapshot save recipe01
...
$ vagrant snapshot list
knife-solo-prepare
recipe01
そこから少し修正したrecipeを流して実行し、snapshotを取ってみる。
$ vagrant snapshot save recipe02
$ vagrant snapshot save recipe02
...
$ vagrant snapshot list
knife-solo-prepare
recipe01
recipe02
restore
snapshotからリストアしてみる
$ vagrant snapshot restore knife-solo-prepare
recipe01,02 で入れたパッケージが無いことを確認できた
その後recipe02を流し終った状態に戻してみる
$ vagrant snapshot restore recipe02
2回めのchefでインストールしたパッケージがインストールされている事を確認できた
delete
$ vagrant snapshot delete recipe02
==> default: Deleting the snapshot 'recipe02'...
==> default: Snapshot deleted!
$ vagrant snapshot list
knife-solo-prepare
recipe01
さいごに
sharaと違ってそれぞれのスナップショットを名前を付けて保存できるので分かりやすく
しかも複数バージョンをまたいだ復元ができるので非常に良い
vagrantをv1.8 以上に上げられない理由がないならv1.8以上を使うべきだと思った。