
Eu tenho um arquivo de configuração vagrant com três VMs configuradas nele. Todos são idênticos, exceto que possuem um IP estático e os outros dois estão em DHCP. Os dois aos quais são atribuídos IPs pelo DHCP podem conversar entre si sem problemas, mas aquele com IP estático não pode ser contatado pelos outros.
Em outras palavras, ping client0
-> client1
funciona
ping client1
-> client0
funciona
ping client1
-> server
não
Este é o meu Vagrantfile:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = "provision/cookbooks"
chef.add_recipe "apt"
chef.add_recipe "python"
end
config.vm.provision :shell, :path => "provision/python-modules.py"
config.vm.define :server do |server|
server.vm.hostname = "server"
server.vm.network :private_network, ip: "172.28.128.2"
end
config.vm.define :client0 do |client0|
client0.vm.hostname = "client0"
client0.vm.network :private_network, type: :dhcp
end
config.vm.define :client1 do |client1|
client1.vm.hostname = "client1"
client1.vm.network :private_network, type: :dhcp
end
end
Alguma idéia de como posso fazer com que a server
máquina possa ser contatada por outras pessoas em um IP estático? Estou usando o provedor virtualbox.
Responder1
Após extensa pesquisa e experimentação, parece que o Vagrant estava atribuindo cada VM a uma submáscara diferente, portanto, eles não conseguiam se conectar entre si. Na verdade, eles estavam todos em redes diferentes.
Acontece que você pode, no entanto, substituir isso. Para fazer isso, basta configurar a máscara de rede conforme mostrado abaixo.
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.provision "chef_solo" do |chef|
chef.cookbooks_path = "provision/cookbooks"
chef.add_recipe "apt"
chef.add_recipe "python"
end
config.vm.provision :shell, :path => "provision/python-modules.py"
config.vm.define :server do |server|
server.vm.hostname = "server"
server.vm.network :private_network, ip: "172.28.128.2", :netmask => "255.255.0.0"
end
config.vm.define :client0 do |client0|
client0.vm.hostname = "client0"
client0.vm.network :private_network, type: :dhcp, :netmask => "255.255.0.0"
end
config.vm.define :client1 do |client1|
client1.vm.hostname = "client1"
client1.vm.network :private_network, type: :dhcp, :netmask => "255.255.0.0"
end
end
No momento, não tenho certeza se você pode substituir a máscara de rede para todos na configuração global, enquanto mantém algumas VMs com DHCP e outras com IP estático. Vou experimentar isso quando voltar a uma máquina mais poderosa, de modo que destruir e criar a VM cada vez é mais rápido.
Responder2
Você também pode fazer algo como abaixo, se provisionar várias VMs com DHCP. Na seção VM opcional, você pode mencionar/nomear várias VMs necessárias.
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = '2'
DOMAIN = '.example.com'
PUPPETMASTER_HOSTNAME = 'puppet' + DOMAIN
#Requires box with puppetlabs repo setup, but puppet not installed
DEFAULT_BOX = 'precise64'
DEFAULT_BOX_URL = 'http://files.vagrantup.com/precise64.box'
REQUIRED_HOSTS = [
'puppetdb',
'puppetdb-postgres'
]
OPTIONAL_HOSTS = [
'ldap01',
'ldap02'
]
HOSTS = REQUIRED_HOSTS + OPTIONAL_HOSTS
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
#VBox config to avoid mac address collisions
config.vm.provider :virtualbox do |vb|
vb.customize ['modifyvm', :id, '--natnet1', '10.200/16']
#vb.gui = true
end
config.vm.box = DEFAULT_BOX
config.vm.box_url = DEFAULT_BOX_URL
#Add network interface
config.vm.network :private_network, :type => :dhcp, :netmask => '255.255.0.0'
#Defines puppet master
config.vm.define :puppet_master do |puppetmaster|
puppetmaster.vm.hostname = PUPPETMASTER_HOSTNAME
puppetmaster.vm.synced_folder '../puppet/', '/vagrant_sync/puppet', :create => true
puppetmaster.vm.provision :shell, :path => 'scripts/bootstrap_puppetmaster.sh'
end
HOSTS.each do |host_name, opts|
config.vm.define host_name do |box|
fqdn = host_name + DOMAIN
box.vm.hostname = fqdn
box.vm.provision :shell, :inline => 'yum install -y puppet'
box.vm.provision :puppet_server do |puppet|
puppet.puppet_server = PUPPETMASTER_HOSTNAME
end
end
end
end