使用 Ansible 主机引发 `--limit` 不匹配任何主机

Using Ansible hosts raises `--limit` does not match any hosts

我的 Vagrantfile 看起来像:

Vagrant.configure("2") do |config|
  config.vm.box = "vag-box"
  config.vm.box_url = "boxes/base.box"

  config.vm.network :private_network, ip: "192.168.100.100"

  config.vm.provision :setup, type: :ansible_local do |ansible|
    ansible.playbook = "playbook.yml"
    ansible.provisioning_path = "/vagrant"
    ansible.inventory_path = "/vagrant/hosts"
  end
end

我的剧本文件如下所示:

---
- name: Setup system
  hosts: localhost
  become: true
  become_user: root
  roles:
    - { role: role1 }
    - { role: role2 }

我的主机文件如下所示:

[localhost]
localhost # 192.168.100.100

在 ansible 执行过程中出现以下错误:

ERROR! Specified --limit does not match any hosts

首先:"localhost" 是按照约定分配给 127.0.0.1 地址的名称。这是指本地机器的环回地址。根据您的主机文件中的评论,我认为这不是您尝试使用它的目的。

其次:Vagrant 中的 Ansible provisioner 通常会创建一个自定义清单文件,其中包含配置 Vagrant box 所需的内容。例如:

# Generated by Vagrant

myvagrantbox ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 ansible_ssh_user='vagrant' ansible_ssh_private_key_file='/home/sage/ansible/vagrant/myvagrantbox/.vagrant/machines/myvagrantbox/virtualbox/private_key'

当您覆盖清单文件时,您需要为 vagrant box 的主机名指定类似的行。

如果您从配置中省略 ansible.inventory_path = "/vagrant/hosts" 行,它应该是 JustWork(tm)。您可能还希望在配置中指定 config.vm.hostname = "myvagrantboxname",这样您就知道将使用什么主机名。

有关详细信息,请参阅 Using Vagrant and Ansible and the Vagrant -- Ansible Provisioner 文档。