我正在尝试使用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
答案 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上),也可能会同时运行 和一个名字上的某些剧本,从而产生意外的执行顺序。