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

标签 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 上的私有(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/

相关文章:

python-3.x - 在 Vagrant 盒子中全新安装 Ubuntu 18.04 时安装 python3-dev 时出现问题

vagrant - 单个 Vagrant 文件中的多个提供者?

ubuntu - 在 Vagrant 中提交更改

json - Ansible:从 json 输出中获取特定的属性值

vagrant - 如何强制在 Vagrant 机器上运行 playbook?

mongodb - 无法在 Vagrant 盒上创建工作 meteor .js 项目

php - Windows w/Precise64 上的 Vagrant 运行 php 非常慢

linux - Vagrant 添加到 PATH

list - Ansible - 如何将一个列表分成两个列表?

loops - 在 Ansible 中跳过整个循环