Как устранить предупреждение «Не удалось сопоставить предоставленный шаблон хоста, игнорируя: ?

#ansible #ansible-pull

#ansible #ansible-вытащить

Вопрос:

Я пытаюсь использовать 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
  

и мой 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

  

Есть ли способ избавиться от этого предупреждения?

Спасибо

Примечание: У меня нет никаких предупреждений при запуске моего playbook с помощью ansible-playbook : sudo ansible-playbook local.yml

Ответ №1:

Есть ли способ избавиться от этого предупреждения?

Вы получаете предупреждение, потому что 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]]))
  

Где 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
  

Если предупреждение действительно беспокоит вас, вы можете избежать его, явно включив ваше локальное имя хоста в реестр ansible, добавив -i параметр в вашу ansible-pull командную строку. Вы можете либо включить встроенные хосты:

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

Или вы можете явно указать на существующий файл инвентаризации:

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

Комментарии:

1. На случай, если кто-то еще застрянет на этом: это не работает: ansible-pull -i myhostname -U … потому что ansible не интерпретирует это как список хостов, поэтому вам нужно сделать: ansible-pull -i myhostname, -U … (обратите внимание на конечную запятую)

Ответ №2:

Чтобы добавить к ответу @larsks, похоже, что использование динамических инвентаризаций с ansible-pull выдаст предупреждение, даже если указанное имя хоста включено в результаты скрипта динамической инвентаризации. Обходным путем является добавление имени хоста к -i, как указано ранее.

Ответ №3:

Осторожно: когда оба «myhost» и «myhost.example.com » находятся в инвентаре, тогда ansible-pull, похоже, запутывается в том, сколько существует хостов, и может запускать игры или роли дважды (один раз на myhost, снова на myhost.example.com ), или может выполнять некоторые воспроизведения с одним именем, а другие — с другим именем, параллельно, создавая неожиданный порядок выполнения.

Ответ №4:

Чтобы запустить Ansible на локальном хосте, просто установите свой /etc/ansible/hosts файл следующим образом (IP не требуется):

 [all]
localhost ansible_connection=local