如何解决警告“无法匹配提供的主机模式,忽略:<计算机主机名=“”>?

时间:2019-04-23 23:57:04

标签: ansible ansible-pull

我正在尝试使用Ansible自动化我的工作站。我一直在关注this tutorial作为介绍。但是我一直使用ansible-pull命令得到警告。

完成sudo ansible-pull -U https://github.com/plsergent/setup-user-friendly.git后,我得到[WARNING]: Could not match supplied host pattern, ignoring: <local machine hostname>

这是我的/etc/ansible/hosts文件:

[localhost]
127.0.0.1

[localhost:vars]
ansible_connection=local

和我的local.yml文件:

- hosts: localhost
  become: true
  pre_tasks:
    - name: update repositories
      apt: update_cache=yes
      changed_when: False

  tasks:
    - include: tasks/packages.yml
    - include: tasks/users.yml
    - include: tasks/cron.yml

是否有摆脱此警告的方法?

谢谢

注意: 使用ansible-playbook运行剧本时,我没有任何警告: sudo ansible-playbook local.yml

3 个答案:

答案 0 :(得分:2)

  

是否有摆脱此警告的方法?

由于ansible-pull构建了一个包含like this--limit选项的命令行,因此得到警告:

node = platform.node()
host = socket.getfqdn()
limit_opts = 'localhost,%s,127.0.0.1' % ','.join(set([host, node, host.split('.')[0], node.split('.')[0]]))

platform.node()返回系统节点名称(即uname -n的输出),而socket.getfqdn()尝试返回系统的标准域名。这意味着ansible命令行将如下所示:

ansible-playbook -l localhost,yourhostname.example.com,yourhostname,127.0.0.1 ...

碰巧的是,当您在--limit参数中提供的主机名与清单中的主机不匹配时,会出现Could not match supplied host pattern错误。您可以这样复制:

$ ansible all -m ping  -l host-that-does-not-exist
 [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit
localhost does not match 'all'

 [WARNING]: Could not match supplied host pattern, ignoring: host-that-does-not-exist

如果警告确实困扰您,可以通过在-i命令行中添加ansible-pull选项,将您的本地主机名显式包含在ansible目录中来避免此警告。您可以内联包含主机:

ansible-pull -i localhost,myhostname -U ...

或者您可以将其明确指向现有的库存文件:

ansible-pull -i /etc/ansible/hosts -U ...

答案 1 :(得分:1)

要添加到@larsks答案,似乎将动态清单与ansible-pull一起使用将产生警告,即使指定的主机名包含在动态清单脚本的结果中也是如此。解决方法是将主机名添加到-i,如前所述。

答案 2 :(得分:0)

当心:当清单中同时包含“ myhost”和“ myhost.example.com”时,ansible-pull似乎对有多少个主机感到困惑,并且可能两次扮演角色或角色(一次在myhost上,再次出现在myhost.example.com上),也可能会同时运行 和一个名字上的某些剧本,从而产生意外的执行顺序。