Vagrantにおいて表題の通り。先日のエントリではhostnameの設定までしかできていなかったので、次は名前でお互いにアクセスできるようにする。
■ 環境
- Vagrant 1.7.4
- CentOS 6.6
■ vagrant-hosts プラグイン
“vagrant-hosts“というプラグインがあるそうなので試してみる。
$ vagrant plugin install vagrant-hosts
また、Vagrantfileには下記のように追記した。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "chef/centos-6.6"
config.vm.define "zoo1" do |zoo|
zoo.vm.hostname = "zoo1"
zoo.vm.provision :hosts
end
config.vm.define "zoo2" do |zoo|
zoo.vm.hostname = "zoo2"
zoo.vm.provision :hosts
end
end
`vagrant up`時に下記のようにログに出力されている。
$ vagrant up
:
==> zoo1: Running provisioner: hosts...
:
==> zoo2: Running provisioner: hosts...
$
これでVMの/etc/hostsファイルにお互いが記載されるのかと思ったのだが…、予想とは違う動きをした。
$ vagrant ssh zoo1
[vagrant@zoo1 ~]$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 zoo1
[vagrant@zoo1 ~]$ logout
Connection to 127.0.0.1 closed.
$ vagrant ssh zoo2
[vagrant@zoo2 ~]$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 zoo2
[vagrant@zoo2 ~]$
どちらもお互いの記載がない…。ネットワークの設定を入れなければならない?と思い、下記のようにVagrantfileにネットワーク設定を追記した。固定IPにはしたくなかったのでDHCPで取得するようにしている。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "chef/centos-6.6"
config.vm.define "zoo1" do |zoo|
zoo.vm.hostname = "zoo1"
zoo.vm.network "private_network", type: "dhcp"
zoo.vm.provision :hosts
end
config.vm.define "zoo2" do |zoo|
zoo.vm.hostname = "zoo2"
zoo.vm.network "private_network", type: "dhcp"
zoo.vm.provision :hosts
end
end
これで起動したところ、少々動作が変わった。
$ vagrant ssh zoo1
[vagrant@zoo1 ~]$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 zoo1
zoo1
[vagrant@zoo1 ~]$ logout
Connection to 127.0.0.1 closed.
$ vagrant ssh zoo2
[vagrant@zoo2 ~]$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 zoo2
zoo1
zoo2
[vagrant@zoo2 ~]$
- zoo1の/etc/hostsファイルにzoo2の記載が無い
- zoo1, zoo2共にIPが設定されていない
zoo2の/etc/hostsファイルにはzoo1/zoo2共に記載されていた。起動順序としてzoo1から起動されるので、zoo1の起動時にはzoo2が起動されていない為、zoo2のIPが判明せずに記載することができない、ということのような気がする。zoo2の起動時にはzoo1はもちろん既に起動している為、IPが判明するので記載できる。
また、IPを固定にせずDHCPにしている為、書けないのかもしれない…。
provisionerを再度実行してみる。
$ vagrant provision
==> zoo1: Running provisioner: hosts...
==> zoo2: Running provisioner: hosts...
$
この状態で再度/etc/hostsファイルを確認した。
$ vagrant ssh zoo1
[vagrant@zoo1 ~]$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 zoo1
zoo1
zoo2
[vagrant@zoo1 ~]$ logout
Connection to 127.0.0.1 closed.
$ vagrant ssh zoo2
[vagrant@zoo2 ~]$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 zoo2
zoo1
zoo2
[vagrant@zoo2 ~]$
zoo1の/etc/hostsファイルにzoo2の記載も増えたが、やはりIPは記載してくれていない。
これではやりたいことができないのでvagrant-hostsプラグインは削除することにした。別のプラグインを探ってみることにする。
$ vagrant plugin uninstall vagrant-hosts
Uninstalling the 'vagrant-hosts' plugin...
$
以上。