vagrant设置重复的IP地址; Ansible接他们?

时间:2015-01-21 13:32:21

标签: vagrant ansible vagrantfile

我已获得以下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上分配私人地址。但是,它会在enp0s3上分配重复的IP地址:10.0.2.15。不幸的是,Ansible似乎在ansible_default_ipv4而不是唯一的地址中选择了重复的地址,因此在这些盒子上运行的服务不能按预期工作。那么,有没有办法:

  • 阻止Vagrant分配重复的IP? (我使用虚拟机提供商,如果有帮助的话)
  • 更改哪个界面ansible_default_ipv4使用?
  • 我还没有想过要搜索的其他解决方案?

1 个答案:

答案 0 :(得分:2)

这是您可以在此期间使用的解决方法:

{{ ansible_all_ipv4_addresses | last }}

假设它保证您的目标框的ipv4地址将始终以可预测的顺序排序,将会有效。