ここに載ってる/etc/hosts系のプラグインについて調べてみた。
どんなプラグインか?
Vagrantfileに書かれたVMのIPアドレスとホスト名から、ホストOSまたはゲストOSの/etc/hostsを設定してくれる。
これらを使うとゲストOSにアクセスするときにIPアドレスではなくホスト名を使うことができる。
大別するとホストOSのhostsを設定するものとゲストOSのhostsを設定するものがある。
ホストOSのhosts設定は、例えばVMでDBサーバーを構築してホストOSからゲストOSへアクセスするような用途で使用する。
ゲストOSのhosts設定は、複数VM構成でDBサーバーとWebサーバーを構築してWebサーバーからDBサーバーを使用する、というようなゲストOSから別のゲストOSをアクセスするような用途で使用する。
プラグイン名 | ホストOSの hosts設定 |
ゲストOSの hosts設定 |
備考 |
---|---|---|---|
vagrant-hostmaster | ○ | ○ | 最新のVagrant1.7.1で動かなかったので未検証 |
vagrant-hostmanager | ○ | ○ | |
vagrant-hostsupdater | ○ | ||
vagrant-hosts | ○ | ||
vagrant-flow | ○ | ちょっと用途が違うようなので未検証 |
vagrant-hostmanager
ゲストOSとホストOSの/etc/hostsを設定するプラグイン。
インストール
vagrant plugin install vagrant-hostmanager
使い方
Vagrantfileにホスト名とプライベートネットワークでIPアドレスを指定しておく。
config.vm.define "node1" do |node|
node.vm.hostname = "node1"
node.vm.network "private_network", ip: "192.168.33.11"
end
config.vm.define "node2" do |node|
node.vm.hostname = "node2"
node.vm.network "private_network", ip: "192.168.33.12"
end
VMを起動してからvagrant hostmanager
を実行すると、ゲストOSの/etc/hostsにゲストOSの情報を書き込まれる。
$ vagrant up
Bringing machine 'node1' up with 'virtualbox' provider...
Bringing machine 'node2' up with 'virtualbox' provider...
:
$ vagrant hostmanager
[node1] Updating /etc/hosts file...
[node2] Updating /etc/hosts file...
## vagrant-hostmanager-start
192.168.33.11 node1
192.168.33.12 node2
## vagrant-hostmanager-end
デフォルトではvagrant hostmanager
を実行しないと動作しないが、Vagrantfileに以下の行を追加しておけばvagrant up
時に自動的にhosts設定を行ってくれる。
config.hostmanager.enabled = true
以下の行を追加すると、ホストOSのhostsへも追加してくれる。
config.hostmanager.manage_host = true
vagrant destroy
するとhostsから削除される。
$ vagrant destroy -f
==> node2: Forcing shutdown of VM...
==> node2: Destroying VM and associated drives...
==> node2: Updating /etc/hosts file on active guest machines...
==> node2: Updating /etc/hosts file on host machine (password may be required)...
==> node1: Forcing shutdown of VM...
==> node1: Destroying VM and associated drives...
==> node1: Updating /etc/hosts file on active guest machines...
==> node1: Updating /etc/hosts file on host machine (password may be required)...
エイリアスにも対応している。
node.hostmanager.aliases = %w(alias1 alias2)
192.168.33.11 node1 alias1 alias2
vagrant-hostsupdater
VMの起動/停止を行った時に、ホストOSの/etc/hostsへゲストOSの情報を追加/削除してくれる。
Vagrantfileに特別なオプションを設定する必要がないので便利。
ただしゲストOSのhosts書き換えには未対応。
インストール
vagrant plugin install vagrant-hostsupdater
使い方
Vagrantfileにホスト名とプライベートネットワークでIPアドレスを指定しておく。
config.vm.network :private_network, ip: "192.168.3.10"
config.vm.hostname = "www.testing.de"
config.hostsupdater.aliases = ["alias.testing.de", "alias2.somedomain.com"]
vagrant up
すると/etc/hostsに以下のような形が追加される。
192.168.3.10 www.testing.de # VAGRANT: 46578ee9ed1fb5802248fcde434beb13 (default) / c33ad775-b720-403a-942b-b6ae3aa4bdf6
192.168.3.10 alias.testing.de # VAGRANT: 46578ee9ed1fb5802248fcde434beb13 (default) / c33ad775-b720-403a-942b-b6ae3aa4bdf6
192.168.3.10 alias2.somedomain.com # VAGRANT: 46578ee9ed1fb5802248fcde434beb13 (default) / c33ad775-b720-403a-942b-b6ae3aa4bdf6
vagrant halt
またはvagrant destory
を実行するとhostsから削除される。
vagrant-hosts
ゲストOSのhostsを設定するプラグイン。
インストール
vagrant plugin install vagrant-hosts
使い方
Vagrantfileにnode.vm.provision :hosts
を書いておくと、プロビジョニング実行時に/etc/hostsを設定してくれる。
config.vm.define "node1" do |node|
node.vm.hostname = "node1"
node.vm.network "private_network", ip: "192.168.33.11"
node.vm.provision :hosts
end
config.vm.define "node2" do |node|
node.vm.hostname = "node2"
node.vm.network "private_network", ip: "192.168.33.12"
node.vm.provision :hosts
end
VM未作成の状態からvagrant up
して各ゲストOSのhostsを確認してみる。
192.168.33.11 node1
192.168.33.11 node1
192.168.33.12 node2
あれ?node1のhostsにnode2の情報がない。。。
node1のプロビジョニングが実行されたタイミングではnode2がまだ未作成だからだろうか?
vagrant provision
してから再度確認するとちゃんと書き込まれていた。
192.168.33.11 node1
192.168.33.12 node2
192.168.33.11 node1
192.168.33.12 node2
VM以外のホストを追加することもできる。
node.vm.provision :hosts do |provisioner|
provisioner.autoconfigure = true
provisioner.add_host '172.16.3.10', ['yum.mirror.local']
end
感想
vagrant-hostmanagerがゲストOS/ホストOS両方のhosts設定に対応していてオプションも色々あるので一番オススメ。
だけどVagrantfileにオプションを追加しないと自動では設定してくれない。
vagrant-hostsupdaterは特別な設定をしなくてもいいので、ホストOSのhosts設定だけ必要なら使い易い。
というわけで、ホストOSのhosts設定はvagrant-hostsupdater、ゲストOSのhosts設定はvagrant-hostmanagerと2つ併用するのがベストだと思う。