DigitalOcean使うときのVagrantfileが面倒なことについて

概要

DigitalOceanを使うときに、Vagrantfileを下記のように編集するかと思います。

[ruby]
Vagrant.configure(‘2’) do |config|
config.vm.provider :digital_ocean do |provider, override|
override.ssh.private_key_path = ENV["DIGITAL_SSH_KEY"]
override.vm.box = ‘digital_ocean’
override.vm.box_url = ‘digital_ocean_box’
provider.client_id = ENV["DIGITAL_CLIENT"]
provider.api_key = ENV["DIGITAL_API"]
provider.image = ‘CentOS 6.4 x64’
provider.region = ‘New York 2’
provider.size = ‘512MB’
provider.ca_path = ENV["SSL_CERT_FILE"]
provider.ssh_key_name = ENV["DIGITAL_SSH_KEYNAME"]
end
end
[/ruby]

DigitalOceanを使うたびに毎回毎回同じ事を書くのは、非常に面倒だってことで、
今回は、Vagrantfileを読み込む順番を使って対応したいと思います。
(DigitalOceanに対応したVagrantfileをローカル、gitなどに作っておき、必要なときに持ってくればいいんじゃないかとか)げふん、げふん‥

Vagrantfileを読み込む順番とは?

上記ドキュメントに詳しく書かれていますが、以下のように読み込まれます。

*どこにVagrantfileが存在するのか、私の環境ですが記述しておきます

  1. デフォルトのVagrantfile

    (/Applications/Vagrant/embedded/gems/gems/vagrant-1.4.3/templates/commands/init/Vagrantfile.rb)

  2. 使用するboxに含まれるVagrantfile

    (/Users/username/.vagrant.d/boxes/boxname/virtualbox/Vagrantfile)

  3. VagrantのホームディレクトリにあるVagrantfile

    (デフォルトは ~/.vagrant.d 以下のVagrantfile)

  4. プロジェクトディレクトリにあるVagrantfile

    (vagrant init で作成されたVagrantfile)

同じ設定があるときは、あとから読み込まれたファイルの内容が優先されます。
今回は3番目のvagrant.dディレクトリに、DigitalOceanの設定が書かれたVagrantfileを配置します。

配置&実行

[bash]
[localhost@localhost projectdir] ls ~/.vagrant.d
Vagrantfile ← 概要で表示したVagrantfileを配置済み
[localhost@localhost projectdir] vagrant init
[/bash]

このとき init コマンドで作成されるVagrantfileにはDigitalOceanの設定は書かれていません。
init コマンドで作成した Vagrantfile を少し編集します。

[bash]
# Vagrantfile API/syntax version. Don’t touch unless you know what you’re doing!
VAGRANTFILE_API_VERSION = "2" ← この行を
# VAGRANTFILE_API_VERSION = "2" ← このようにコメントアウト
[/bash]

コメントアウト忘れると warning が出力されますが、正常に実行は出来ます。
では起動してみましょう。

[bash]
[localhost@localhost projectdir] vagrant up –provider=digital_ocean
Bringing machine ‘default’ up with ‘digital_ocean’ provider…
[default] Using existing SSH key: digital
[default] Creating a new droplet…
[default] Assigned IP address: hoge.hoge.hoge.hoge
[default] Modifying sudoers file to remove tty requirement…
[default] Rsyncing folder: /Users/username/projectdir/ => /vagrant…
[/bash]

起動出来ました。
ログインしてみます。

[bash]
[localhost@localhost projectdir] vagrant ssh
[root@default ~]#
[/bash]

まとめ

このように面倒な設定などはある程度テンプレートとして用意することで、Vagrantをより使いやすくしようとの事でした。
DigitalOceanの設定を別に書く事で、Vagrantfileを共有するときなど便利なのかなと思ったり思わなかったり。

私の場合、使用するOSやメモリーまでテンプレートとして含めてしまっていますが、init コマンドで作成したVagrantfileで設定の上書きが可能です。

init コマンドで作成されるVagrantfileのテンプレートを編集すればいいんじゃないかとも思ったのですが、最新版をインストールするたび編集する手間が生じるのがあります。
そもそも Vagrant や vagrant-digitalocean が大きく変更されたら元も子もないのでは‥と思っていますがそれはそれで‥