5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

vagrant スナップショットの管理

Last updated at Posted at 2016-04-03

概要

Vagrant 1.8 で snapshot が標準で使えるようになった。
ただ、表示順などのオプションが見当たらず不便なので、保存時に自動で番号・日時をスナップショット名に付与し、復元時は番号の指定で復元できるように snapshot コマンドをシェルスクリプトでラップする。

環境

・Windows10 + Vagrant 1.8.1 + Git Bash(by Git for Windows 2.7.4)
・仮想マシンは1台前提(=defualtのみ)

実装

ユーザーのホーム(~=C:/Users/<ユーザー名>)に.bashrcを作成して、シェルスクリプトでエイリアス・関数を記述する。
~/.bashrcを作成した後、GitBashを起動すると~/.bash_profileが自動で作成されて.bashrcが読み込まれる。

~/.bashrc
# スナップショット保存:連番+日時を自動で付与
# Usage: vagsave [<snap-name>]
#  --> nnnn_yymmdd_HHMM_<snap-name>として保存
function vagsave() {
	local isFirst=$(vagrant snapshot list | grep  ' No snapshots' | wc -l)
	if [ ${isFirst} -eq 1 ] ; then
		echo $1 | xargs -I{} printf "0001_%s_%s" `date "+%y%m%d_%H%M"` {} | xargs -I{} vagrant snapshot save {}
	else
		echo $1 | xargs -I{} printf "%04d_%s_%s" $(( 1 + `vagrant snapshot list | wc -l`)) `date "+%y%m%d_%H%M"` {} | xargs -I{} vagrant snapshot save {}
	fi
}

# スナップショット一覧:時系列降順に表示、番号を確認
alias vagsnaps='vagrant snapshot list | tac -'

# スナップショット復元:番号を指定して復元
# Usage: vagrestore <seq>
#  --> <seq> -> nnnn
#  --> nnnn_yymmdd_HHMM_<snap-name>を復元
function vagrestore() {
	local snap=$(printf "%04d_*" $1)
	vagrant snapshot list | grep ${snap} | xargs -I{} vagrant snapshot restore {}
}

# スナップショット削除:番号を指定して削除
# Usage: vagdel <seq>
#  --> <seq> -> nnnn
#  --> nnnn_yymmdd_HHMM_<snap-name>を削除
function vagdel() {
	local snap=$(printf "%04d_*" $1)
	vagrant snapshot list | grep ${snap} | xargs -I{} vagrant snapshot delete {}
}

実行

・スナップ一覧 → スナップショットなし

~/.bashrc
$ vagsnaps                                                                    
    default: `vagrant snapshot restore` to go back to a certain snapshot.     
    default: can list them using this command, and use commands such as       
    default: not all providers support this yet. Once a snapshot is taken, you
    default: You can take a snapshot using `vagrant snapshot save`. Note that 
==> default: No snapshots have been taken yet!                                

・スナップ追加

~/.bashrc
$ vagsave first-save                                                     
==> default: Snapshotting the machine as '0001_160403_2338_first-save'...
==> 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`.                                  

・スナップ一覧 → スナップショット1件

~/.bashrc
$ vagsnaps
0001_160403_2338_first-save

・スナップもう1件追加

~/.bashrc
$ vagsave second-save
==> default: Snapshotting the machine as '0002_160403_2344_second-save'...
==> 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`.

・スナップ一覧 → スナップショット2件

~/.bashrc
$ vagsnaps
0002_160403_2344_second-save
0001_160403_2338_first-save

・スナップ復元 → 1を指定 → 0001_160403_2338_first-save を復元

~/.bashrc
$ vagrestore 1                                                                 
==> default: Forcing shutdown of VM...                                         
==> default: Restoring the snapshot '0001_160403_2338_first-save'...           
==> default: Clearing any previously set forwarded ports...                    
==> default: Setting hostname...
……(snip)………
==> default: Configuring and enabling network interfaces...                    
==> default: Mounting shared folders...                                        
    default: /vagrant => C:/Work/test_x

備考

・linux不慣れで妥協したが、多分全部aliasで出来そう
・restore候補をタブ補完できないかと調べたが(complete云々)、
 よくわかってない&snapshot list の応答に時間がかかるので明示的に番号指定にした

・4/5 追記:コピペし易いように実装を1か所へまとめた

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?