Vagrant自作Boxのバージョニング

概要

VagrantのBoxを最新版にアップデートするコマンドでvagrant box updateというものがあります。
このコマンドの存在は知っていたのですが、何もバージョニングしていない自作のBoxに対して
どうやってアップデートするんだろうと謎だったのですが、その方法が分かりましたのでそのメモです。

大まかな流れ
  1. バージョン番号とboxファイルの保存場所を記述したjsonファイルを用意
  2. jsonファイルをvagrant box addで読み込み
  3. boxを最新版に更新
  4. jsonファイル内のバージョン番号を更新
  5. vagrant box updateで最新版へ更新


セットアップ

f:id:tsunokawa:20141024152732p:plain

jsonファイルを作成
{
    "description": "CentOS6.5 x86_64",
    "short_description": "CentOS6.5",
    "name": "centos6.5",
    "versions": [{
        "version": "0.0.1",
        "status": "active",
        "description_html": "<p>CentOS6.5 x86_64</p>",
        "description_markdown": "CentOS6.5 x86_64",
        "providers": [{
            "name": "virtualbox",
            "url": "http:\/\/example.com/vagrant/centos/centos-6.5.box"
        }]
    }]
}


name boxの名前を記述
version 0.0.1の形式で記述
url boxファイルの保存場所を指定


自作boxをadd

これまではboxファイルを直接addしていましたが、先程作成したjsonファイルをaddします。

vagrant box add http://example.com/vagrant/centos/centos-6.5.json


vagrant box listで確認すると

centos6.5              (virtualbox, 0.0.1)

となっています。

boxを更新

boxファイルを最新版へ更新します。
その後、jsonファイルもバージョン番号を0.0.1から0.0.2へ更新します。

vagrant box update

いよいよvagrant box updateでboxファイルを更新してみます。

vagrant box update --box centos6.5


表示例

$ vagrant box update --box centos6.5
Checking for updates to 'centos6.5'
Latest installed version: 0.0.1
Version constraints: > 0.0.1
Provider: virtualbox
Updating 'centos6.5' with provider 'virtualbox' from version
'0.0.1' to '0.0.2'...
Loading metadata for box 'http://example.com/vagrant/centos/centos-6.5.json'
Adding box 'centos6.5' (v0.0.2) for provider: virtualbox
Downloading: http://example.com/vagrant/centos/centos-6.5.box
Successfully added box 'centos6.5' (v0.0.2) for 'virtualbox'!
$

0.0.1から0.0.2へバージョンアップされた旨が表示されます。

vagrant box listで確認すると

centos6.5              (virtualbox, 0.0.2)

と更新されていることが確認出来ます。

vagrant remove

0.0.1のboxは残ったままになります。
boxを削除する場合はバージョン指定で削除を行う必要があります。

vagrant box remove centos6.5 --box-version 0.0.1