Vagrantfile で Linked Clone をデフォルトにする


はじめに

Vagrant 1.8.0 の便利で快適な新機能に Linked Clone 対応があります。しかしながら、vagrant init などの一連のコマンドラインオプションに Linked Clone の On/Off を切り替えるオプションはありません。この記事では力業ながら Linked Clone をデフォルトにするための方法を纏めます。

本環境

Mac OS X: 10.11.04
Vagrant: 1.8.1

Vagrant は以下からダウンロードし、インストールする。
https://www.vagrantup.com/downloads.html

小ネタ

vagrant init で生成される Vagrantfile は Mac OS X の場合、/opt/vagrant/embedded/gems/gems/vagrant-1.8.1/templates/commands/init/Vagrantfile.erb が元になります。オリジナルの Vagrantfile.erb は以下のようになります。<%= %> や <% -%> がプレースホルダとなりまっています。

Ruby に慣れていたり、汎用的に作りたい場合には Vagrant Plugin や <% -%> と環境変数などで、Linked Clone を有効にする

を Vagrantfile に挿入する仕込みを実装できればキレイなのですが力量不足と労力が見合わないので、シンプルに Vagrantfile.erb に vb.linked_clone = true を直接組み入れてしまいます。編集後の Vagrantfile.erb は以下になります。

注意点 1

まだ、Vagrant 1.8.1+ がリリースされていないので不明ですが、新しいバージョンをインストールすると上書きされると思われるので、バージョンアップの度に Vagrantfile.erb の編集が必要かも知れません。

注意点 2

これは Vagrantfile.erb にまつわる話ではありませんが、Linked Clone 利用していながら、Master VM を消してしまった場合の対処になります。Linked Clone の元ネタを消してしまった状態で vagrant up を実行すると以下のように、指定された UUID を持つ仮想マシンが見つからない、というエラーがでます。

この UUID は、各 Box に記録される master_id というファイルに記載されています。vmware/photon という Box であれば ~/.vagrant.d//boxes/vmware-VAGRANTSLASH-photon/1.1.0/virtualbox/master_id に保存されています。Master VM を誤って消した場合は、この master_id ファイルを削除すれば上記エラーを回避し、Master VM のクローンがきちんと行われます。

参考

ClassMethod さん: Vagrant 1.8の新機能 Linked CloneとSnapshotを試してみた

コメントを残す