29

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

我的剧本文件的头部如下所示:

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

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

[webservers]
webserver1

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

ssh vagrant@webserver1由于使用了 ssh 密钥,我可以在不提示输入密码的情况下正常工作。

我在这里想念什么?

  • 主机:Debian 7.2
  • 客户端机器:Debian 7
  • 虚拟机:4.1.18
  • 先锋:1.4.1
  • 稳定:1.5
4

9 回答 9

30

发布您的 Vagrantfile 和 ansible 库存文件可能会有所帮助。

  • 您是否使用了 vagrant 的默认 ansible 提供者?

    你指定了inventory_path吗?

config.vm.provision :ansible 做 |ansible|
   ansible.playbook = "供应/playbook.yml"
   ansible.inventory_path = "供应/ansible_hosts"
 结尾
  • 您是否通过 vagrant ssh 启动它并--connection=local尝试 /etc/ansible/hosts
[网络服务器1]
127.0.0.1 ansible_connection=本地
  • 你在使用 ansibleLocal provider / vagrant 插件吗?
于 2014-01-24T14:12:57.073 回答
27

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

于 2014-07-27T17:14:54.947 回答
21

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

如果您的 Vagrant 文件中没有多台机器,您的框可能会被称为“默认”,您将能够使用以下代码添加多个 Ansible 组。

代码:

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

    ansible.playbook = "provisioning/playbook.yml"
end
于 2014-11-08T20:57:37.553 回答
9

将主机更改为“全部”对我有用。

---
- hosts: all
  user: vagrant
  sudo: yes
于 2014-04-29T15:12:24.413 回答
3

我首先想到的是你的剧本文件头部的语法不正确,(它在不应该的地方有额外的破折号)。它应该看起来像这样:

---
- hosts: webservers
  user: vagrant
  sudo: yes
于 2013-12-27T23:44:52.600 回答
2

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

因此,只需使用ansible.playbook = "playbook.yml"

于 2014-02-04T08:53:40.037 回答
2

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

ansible.groups = {
  'webservers' => ['default']
}
于 2016-09-16T11:01:06.580 回答
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"

}

这应该可以解决问题。

于 2016-01-29T10:28:59.553 回答
-5

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

于 2015-02-14T08:57:37.520 回答