vagrant-hostmanagerを使ったVagrantfile

Vagrant.configure("2") do |config|
  config.hostmanager.ip_resolver = proc do |machine|
    result = ""
    machine.communicate.execute("ifconfig enp0s8") do |type, data|
      result << data if type == :stdout
    end
    (ip = /inet (\d+\.\d+\.\d+\.\d+)/.match(result)) && ip[1]
  end

  config.hostmanager.enabled = true
  config.hostmanager.manage_host = true
  config.hostmanager.ignore_private_ip = false
  config.hostmanager.include_offline = false

  config.vm.box = "centos7"

  config.vm.define "moge" do |node|
    node.vm.hostname = "moge.localhost"
    node.vm.network "private_network", type: "dhcp"
  end

  config.vm.define "hoge" do |node|
    node.vm.hostname = "hoge.localhost"
    node.vm.network "private_network", type: "dhcp"
  end

  config.vm.provider "virtualbox"
end
  • vagrantのバージョンは1.9.4、virtualboxはのバージョンは5.1.2r108956、OSはUbuntu 16.04で動作確認を行った。
  • このVagrantfileを使用してvagrant upを行うと、mogehogeという名前が付けられた仮想マシンが起動する。
  • どちらの仮想マシンもプライベートIPアドレスDHCPにより割り当てられる。
  • vagrant-hostmanagerにより、割り当てられたIPアドレスとそれに対応するホスト名の組み合わせがホストOSの/etc/hostsに自動的に書き込まれる。
  • 利用者はホスト名を知っていれば、どのIPアドレスが割り当てられたかを意識する必要がなくなる。
  • 自分のマシン内に開発環境を作る場合にIPアドレスの管理の手間が省ける。(DHCPで起動した場合は、仮想マシンが起動するまでどのIPアドレスが割り当てられるか分からないため、起動した仮想マシンにログインしてIPアドレスを確認する必要がある。固定IPアドレスで起動した場合でも、予め他の仮想マシンが使用していないIPアドレスをVagrantfileに書かなければならない。)