【问题标题】:no hosts matched : vagrant with ansible没有匹配的主机:带有ansible的流浪汉
【发布时间】:2017-06-28 12:02:18
【问题描述】:

出于测试目的,我配置了 vagrant/virtualbox/ansible 的组合。

版本 >> Ansible : 2.3.1.0 |流浪者:1.9.5。

运行时:

vagrant provision

输出状态:

  web1: Running provisioner: ansible...
  web1: Running ansible-playbook...
  PLAY [Install Apache] 
  **********************************************************
   skipping: no hosts matched
   PLAY RECAP 
  ****************************************************************

配置文件下方:

流浪文件:

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.define "web1"
  config.vm.network "private_network", type: "dhcp"
  config.vm.network "forwarded_port", guest: 8040, host: 8090
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "256"
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "provisioning/playbook.yml"
  end
  end
  end

剧本:

  ---
  - name: Install Apache
    hosts: testclients
    become_user: root
    roles:
      - apache

Andible 库存(/etc/ansible/hosts):

 [testclients]
 testclient3

检查成功

  ansible -m ping testclients
  testclient3 | SUCCESS => {
  "changed": false,
  "ping": "pong"
    }

奇怪的是,如果我将运行剧本本身(ansible-playbook playbook.yml),它会起作用,相反在 vagrant 内部它不会并返回“没有匹配的主机”。 任何帮助将不胜感激。

【问题讨论】:

  • 你有自己的清单文件,但你没有指示 vagrant 使用它,在 ansible 块中添加 inventory_path 属性以及要使用的文件的路径
  • 好的,感谢您的评论。我在 Vagrantfile 中添加了这两行: ansible.inventory_path = "provisioning/hosts" ansible.limit = "all" 。尝试重新运行 playbook 时,出现错误:TASK [Gathering Facts] ************************************ ************************ 致命:[testclient3]:无法访问! => {"changed": false, "msg": "无法通过 ssh 连接到主机:警告:将 'testclient3,192.168.111.111' (ECDSA) 永久添加到已知主机列表中。\r\n权限被拒绝 ( publickey,gssapi-keyex,gssapi-with-mic,password)。\r\n", "unreachable": true}

标签: vagrant


【解决方案1】:

您没有声明要由 Vagrant 使用的清单文件,因此它不返回与 testclients 匹配的主机。

您有以下选项来解决您的问题

  1. 天真的选项:只需使用所有主机,一切都会好起来的

在您的 Playbook 定义中,更改主机定义

  ---
  - name: Install Apache
    hosts: all
    become_user: root

即使最终不是您想要的,也请尝试一下,以确保一切正常。

  1. 指示 vagrant 使用您的库存文件

在你的 Vagrantfile 中

  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "provisioning/playbook.yml"
    ansible.inventory_path = "path_to_your_file"
  end

您需要确保告知如何到达实例,以便您的库存拥有

testclient3 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2200 ansible_ssh_user='vagrant' ansible_ssh_private_key_file='path to ssh key'
  1. 不要包含您自己的库存文件,让 vagrant 为您生成一个。

你需要 vagrant 来设置groups

  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "provisioning/playbook.yml"
    ansible.groups = {
      "testclients" => ["testclient3"]
    }
  end

vagrant 将生成库存文件

【讨论】:

  • 感谢 Frederic,它确实有效。最后一个问题:在第 3 个选项中,如果我忽略了/etc/ansible/hosts ?提前致谢
  • vagrant 根据它知道的信息自动生成库存文件(见vagrantup.com/docs/provisioning/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 2014-01-15
相关资源
最近更新 更多