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

PL *_*ent 4 ansible ansible-pull

我正在尝试使用 Ansible 来自动化我的工作站。我一直在关注本教程作为介绍。但我使用该命令不断收到警告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
Run Code Online (Sandbox Code Playgroud)

和我的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

Run Code Online (Sandbox Code Playgroud)

有没有办法摆脱这个警告?

谢谢

注意:当我使用以下命令运行我的剧本时,没有任何警告ansible-playbooksudo ansible-playbook local.yml

lar*_*sks 5

有没有办法摆脱这个警告?

您收到警告是因为ansible-pull构建的命令行包含如下--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]]))
Run Code Online (Sandbox Code Playgroud)

其中platform.node()返回您的系统节点名称(即 的输出uname -n)并socket.getfqdn()尝试返回系统的完全限定域名。这意味着 ansible 命令行将如下所示:

ansible-playbook -l localhost,yourhostname.example.com,yourhostname,127.0.0.1 ...
Run Code Online (Sandbox Code Playgroud)

当您在--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
Run Code Online (Sandbox Code Playgroud)

如果警告确实让您烦恼,您可以通过-i在命令行中添加一个选项来显式地将本地主机名包含在 ansible 清单中来避免它ansible-pull。您可以内联包含主机:

ansible-pull -i localhost,myhostname -U ...
Run Code Online (Sandbox Code Playgroud)

或者您可以将其明确指向现有清单文件:

ansible-pull -i /etc/ansible/hosts -U ...
Run Code Online (Sandbox Code Playgroud)