
Ich habe eine Vagrant-Konfigurationsdatei mit drei darin konfigurierten VMs. Alle sind identisch, außer dass eine eine statische IP hat und die anderen beiden DHCP verwenden. Die beiden, denen per DHCP IPs zugewiesen wurden, können problemlos miteinander kommunizieren, aber die mit der statischen IP kann von den anderen nicht kontaktiert werden.
Mit anderen Worten: Ping client0
-> client1
funktioniert
Ping client1
-> client0
funktioniert
ping client1
-> server
nicht
Dies ist meine Vagrant-Datei:
# -*- 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
Irgendwelche Ideen, wie ich es schaffe, server
dass die Maschine für die anderen über eine statische IP erreichbar ist? Ich verwende den Virtualbox-Provider.
Antwort1
Nach umfangreichen Untersuchungen und Experimenten scheint es, dass Vagrant jeder VM eine andere Submaske zugewiesen hat, sodass sie keine Verbindung miteinander herstellen konnten. Tatsächlich befanden sie sich alle in unterschiedlichen Netzwerken.
Es stellt sich jedoch heraus, dass Sie dies überschreiben können. Konfigurieren Sie dazu einfach die Netzmaske für einen wie unten gezeigt.
# -*- 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
Derzeit bin ich mir nicht sicher, ob Sie die Netzmaske für alle in der globalen Konfiguration überschreiben können, während Sie einige VMs mit DHCP und andere mit einer statischen IP verwalten. Ich werde damit experimentieren, sobald ich wieder an einem leistungsstärkeren Rechner arbeite, sodass das Löschen und Erstellen der VM jedes Mal schneller geht.
Antwort2
Sie können auch etwas wie unten tun, wenn Sie mehrere VMs mit DHCP bereitstellen. Im optionalen VM-Abschnitt können Sie mehrere VMs erwähnen/benennen, die Sie benötigen.
# -*- 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