我有以下Vagrantfile
:
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
NUM_HOSTS = 3
def hostname(id)
"node#{id}"
end
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "chef/centos-7.0"
config.ssh.forward_agent = true
config.ssh.insert_key = false
config.vm.provider :virtualbox do |vb|
vb.gui = false
vb.memory = 512
vb.cpus = 1
end
config.vm.provision "ansible" do |ansible|
ansible.playbook = "vagrant_playbook.yml"
ansible.groups = {
"vagrant" => (1..NUM_HOSTS).collect { |id| hostname(id) }
}
end
NUM_HOSTS.times do |n|
id = n + 1
config.vm.define hostname(id), primary: id == 1 do |host|
host.vm.network :private_network, ip: "10.0.33.1#{id}"
end
end
end
这会分配 enp0s8
上的私有(private)地址。但是,它在 enp0s3
上分配了重复的 IP 地址:10.0.2.15
。不幸的是,Ansible 似乎在 ansible_default_ipv4
中选择了重复的地址,而不是唯一的地址,因此在这些机器上运行的服务无法按预期工作。那么,有没有办法:
- 阻止 Vagrant 分配重复的 IP? (我正在使用 virtualbox 提供程序,如果有帮助的话)
- 更改
ansible_default_ipv4
使用哪个接口(interface)? - 还有其他我没想过要搜索的解决方案吗?
最佳答案
这是您可以同时使用的解决方法:
{{ ansible_all_ipv4_addresses | last }}
假设可以保证目标盒子的 ipv4 地址始终按可预测的顺序排序,则可以正常工作。
关于vagrant 设置重复的 IP 地址; Ansible 会接他们吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28068546/