#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