解决 Ansible 错误:skipping: no hosts matched

314次阅读
没有评论

问题描述

在运行 Ansible 时遇到了一个警告,警告信息为:[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'。用户使用了一个包含 hosts: all 的 playbook,但是似乎 localhost 并没有被匹配到。

解决方案

请注意以下操作可能涉及版本差异,请根据实际情况进行调整。

方案1:更改 Playbook 中的主机匹配

在你的 playbook 中,当使用 hosts: all 时,默认的 localhost 并不会被匹配。要在本地主机上运行 playbook,你可以按以下两种方式之一进行调整:

  1. 将 playbook 中的 hosts 修改为 localhost

    修改前:
    yaml
    hosts: all

    修改后:
    yaml
    hosts: localhost

  2. 创建一个包含 localhost 的主机清单文件,然后在运行 playbook 时指定该清单文件。

    1. 创建一个名为 inventory.yml 的文件,内容如下:

      yaml
      all:
      hosts:
      localhost

    2. 在运行 playbook 时,通过 -i 参数指定清单文件:

      bash
      ansible-playbook --connection=local -i inventory.yml playbook.yml

方案2:使用特定的连接方式

你还可以在运行 playbook 时明确指定连接方式为 local,这样可以确保使用本地连接,例如:

ansible-playbook --connection=local playbook.yml

方案3:其他注意事项

  1. 确保在运行 playbook 时,当前目录或者 playbook 文件所在目录下存在 ansible.cfg 配置文件,以确保配置生效。

  2. 确认你的操作系统和 Ansible 版本是否兼容。在该示例中,用户的操作系统是 Ubuntu 20.04,而 Ansible 版本为 2.9.6。

参考资料

你可以在 Ansible 文档 中查找更多关于清单文件的信息和用法。

请注意,在解决问题时,始终要谨慎操作,并在执行任何更改之前做好备份,以避免不必要的问题。

请确保在实际操作中根据情况进行适当的调整和测试,以确保解决方案的有效性和稳定性。

正文完