“跳过:没有主机匹配”与Vagrant和Ansible的问题

时间:2013-12-27 13:42:46

标签: debian vagrant virtualbox ansible

我已经安装了Vagrant,VirtualBox和Ansible并尝试在一台主机上运行配置,但它总是返回“正在跳过:没有主机匹配”

我的playbook文件的头部如下所示:

---
- hosts: webservers
  user: vagrant
  sudo: yes

我的/etc/ansible/hosts文件如下所示:

[webservers]
webserver1

我尝试将IP地址放在那里,但结果相同。我已将ssh密钥添加到服务器,并将webserver1主机添加到.ssh/config/etc/hosts

由于使用了ssh密钥,我可以ssh vagrant@webserver1没有提示输入密码。

我在这里缺少什么?

  • 主持人:Debian 7.2
  • 客户机:Debian 7
  • Virtualbox:4.1.18
  • Vangrantup:1.4.1
  • Ansible:1.5

9 个答案:

答案 0 :(得分:30)

发布您的Vagrant文​​件和您的安全库存文件会有所帮助。

  • 您是否正在使用vagrant的默认ansible提供程序?

    您是否指定了inventory_path

 config.vm.provision :ansible do |ansible|
   ansible.playbook = "provisioning/playbook.yml"
   ansible.inventory_path = "provisioning/ansible_hosts"
 end
  • 您是通过--connection=local尝试使用/ etc / ansible / hosts
  • 的流浪汉ssh启动它吗?
[webserver1]
127.0.0.1              ansible_connection=local
  • 您使用的是ansibleLocal提供程序/ vagrant插件吗?

答案 1 :(得分:27)

确保您正在运行ansible-playbook命令而不是纯ansible命令。

答案 2 :(得分:19)

我认为您也可以在没有主机文件的情况下通过在Vagrant文​​件中分配Ansible组来执行此操作。

如果您的Vagrant文​​件中没有多台计算机,您的框可能会被调用"默认"并且您将能够使用以下代码添加多个Ansible组。

代码:

config.vm.provision "ansible" do |ansible|
    ansible.groups = {
        "webservers" => ["default"],
        "dev_enviroment" => ["default"]
    }

    ansible.playbook = "provisioning/playbook.yml"
end

答案 3 :(得分:9)

将主机更改为"所有"为我工作。

---
- hosts: all
  user: vagrant
  sudo: yes

答案 4 :(得分:3)

对我而言,第一件事是你的剧本文件头部的语法是不正确的(它有额外的破折号,它不应该)。它看起来应该是这样的:

---
- hosts: webservers
  user: vagrant
  sudo: yes

答案 5 :(得分:2)

根据vagrant文​​档(http://docs.vagrantup.com/v2/provisioning/ansible.html),当您使用Ansible进行配置时,vagrant将自动创建一个名为vagrant_ansible_inventory_default的主机文件,该文件将使用vagrant vm.config inforamtion(如您的VM IP,远程ssh端口)。

所以只需使用ansible.playbook = "playbook.yml"

添加您的Playbook路径即可

答案 6 :(得分:1)

您可以通过最后添加-vvvv以详细模式运行您的剧本。 Ansible使用/ etc / ansible / hosts中的主机文件 添加以下

您可以通过以下

查看您的ansible正在使用的库存文件
ansible --version
ansible 2.0.0.2
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides

然后检查您的主机文件是否包含主机的确切组

 vim /etc/ansible/hosts
 [webserver1]
 IP of machine

运行以下命令检查

ansible -m ping 10.0.3.145 (IP Of machine)
10.0.3.145 | SUCCESS => {
"changed": false, 
"ping": "pong"

}

这应解决问题。

答案 7 :(得分:1)

我尝试将这些组指向默认的流浪盒并且它有效。参考 https://gagor.pl/2015/12/ansible-on-vagrant-skipping-no-hosts-matched/

ansible.groups = {
  'webservers' => ['default']
}

答案 8 :(得分:-4)

确保使用此命令“ansible-playbook -i yourhosts your.yml”