У меня возникли странные проблемы с моей коробкой (бродяга).
Все работало вчера, и моя пьеса работала нормально.
Сегодня ансибл висит на "сборе фактов"?
Вот подробный вывод:
<5.xxx.xxx.xxx> ESTABLISH CONNECTION FOR USER: deploy
<5.xxx.xxx.xxx> REMOTE_MODULE setup
<5.xxx.xxx.xxx> EXEC ['ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-
o', 'ControlPersist=60s', '-o', 'ControlPath=/home/vagrant/.ansible/cp/ansible-s
sh-%h-%p-%r', '-o', 'Port=2221', '-o', 'KbdInteractiveAuthentication=no', '-o',
'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o
', 'PasswordAuthentication=no', '-o', 'User=deploy', '-o', 'ConnectTimeout=10',
'5.xxx.xxx.xxx', "/bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1411372677
.18-251130781588968 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1411372677.18-2
51130781588968 && echo $HOME/.ansible/tmp/ansible-tmp-1411372677.18-251130781588
968'"]
vagrant ssh
исследовать во время зависания, чтобы увидеть, есть ли что-нибудь полезное вps
иnetstat
? Кроме того, одним из первых подозреваемых в зависаниях является DNS - проверьте, разрешается ли DNS изнутри виртуальной машины.Ответы:
У меня была похожая проблема с пингом Ansible на Vagrant, он просто внезапно завис без причины и ранее работал абсолютно нормально. В отличие от любой другой проблемы, такой как ssh или проблема с соединением, она просто умирает без перерыва.
Одна вещь, которую я сделал, чтобы решить эту проблему, это очистить
~/.ansible
каталог, и он снова работает. Я не могу выяснить почему, но это действительно решено.Если вам нужно внести изменения, попробуйте очистить
~/.ansible
папку перед обновлением Vagrant.источник
rm -rf ~/.ansible
не работал для меня на Эль CaptitanДля меня модуль установочного модуля застрял на мертвой монтировке NFS.
Если вы делаете «df» на своей машине и ничего не происходит, вы можете быть в том же случае.
PS: если вы не можете размонтировать общий ресурс / точку монтирования NFS, попробуйте использовать неверный «umount -l»
источник
gather_facts
значение,False
но этот совет действительно спас день, потому что это тоже была моя проблема.Ansible может зависать таким образом по ряду причин, обычно из-за проблемы с подключением или из-за зависания модуля установки. Вот как можно сузить проблему, чтобы вы могли ее решить.
Ansible не может подключиться к хосту назначения
Проблемы с ключом хоста (known_hosts)
1) В более старых версиях Ansible (2.1 или более ранних) Ansible не всегда будет сообщать вам, не существует ли ключ хоста для адресата в источнике или имеется несоответствие.
Решение: попробуйте открыть соединение SSH с теми же параметрами для этого места назначения. Вы можете найти ошибки SSH, которые вам нужно устранить, и тогда команда сработает.
2) Иногда Ansible отображает сообщение о соединении SSH в разгар других состояний, в результате чего Ansible «зависает» при выполнении этой задачи:
В этом случае, просто набрав «да» для столько вопросов SSH, сколько вам было задано, можно продолжить игру. После этого вы можете исправить проблемы root
Проблемы с аутентификацией закрытого ключа
При использовании аутентификации на основе ключей и пароля, другие проблемы включают в себя:
Решение: попробуйте запустить
ansible -m ping <destination> -k
проблемный хост - если это не сработает, попробуйте решения проблем с ключами хоста выше.Ansible не может быстро собрать факты
setup
Модуль (при запуске автоматически в начале вansible-playbook
перспективе, или при запуске вручнуюansible -m setup <host>
) может часто зависать при сборе аппаратных фактов (например , если получать информацию о диске из хостов с высоким I / O, плохая запись монтируемым и т.д.).Решение: попробуйте запустить
ansible -m setup -a gather_subset=!all <destination>
. Если это работает, вам следует рассмотреть возможность установки этой строки в вашем ansible.cfg:источник
ssh-keygen -R
команду, чтобы удалить ошибочный ключ. Я запустил ssh один раз, чтобы добавить ключ, но второй прогон завис. Когда я снова запустил ssh, я получил запрос на подтверждение ключа, который был неожиданным. Я понял, что существует некий действующий ключ, который необходимо удалить, поэтому после удаления и повторного запуска ssh я получилWarning: Permanently added the ECDSA host key ...
сообщение, а затем продолжил только сбор фактов.У меня была похожая проблема с Ansible, висящим в Gathering Facts. Я свел свой сценарий к приглашению без заданий и ролей, и он все еще зависал.
Я нашел 12 зависших процессов в моем списке процессов, которые накопились за день.
Как только я убил их, он снова начал работать.
источник
Есть много причин, по которым ansible может зависнуть при сборе фактов, но прежде чем идти дальше, вот первый тест, который вы должны выполнить в любой такой ситуации:
Этот тест просто подключается к хосту и выполняет достаточно кода для возврата:
Если это работает, вы можете в значительной степени исключить любую проблему с настройкой или подключением, поскольку это доказывает, что вы можете разрешить целевое имя хоста, открыть соединение, аутентифицироваться и выполнить ответный модуль с помощью удаленного интерпретатора python.
Теперь, вот (не исчерпывающий) список вещей, которые могут пойти не так в начале книги игр:
Команда, выполняемая ansible, ожидает интерактивного ввода
Я могу вспомнить, что это происходило в более старых версиях ANSI, где команда ожидала интерактивного ввода, который никогда не поступит, такого как пароль sudo (если вы забыли
-K
переключатель), или принятие нового отпечатка хоста ssh (для новой цели). хост).Современные версии ansible корректно обрабатывают оба этих случая и немедленно вызывают ошибку для обычных случаев использования, поэтому, если вы сами не делаете такие вещи, как вызов ssh или sudo, у вас не должно быть проблем такого рода. И даже если бы вы это сделали, это было бы после сбора фактов.
Dead ssh master соединение
В журнале отладки, приведенном здесь, есть несколько очень интересных опций, переданных клиенту ssh:
ControlMaster=auto
ControlPersist=60s
ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r
Эти параметры описаны в man ssh_config .
По умолчанию ansible постарается проявить смекалку в отношении использования ssh-соединения. Для данного хоста вместо создания нового соединения для каждой задачи в пьесе он откроет его один раз и оставит открытым для всей пьесы (и даже для всех книг).
Это хорошо, поскольку установление нового соединения намного медленнее и требует больших вычислительных ресурсов, чем использование уже существующего.
На практике каждое ssh-соединение будет проверять наличие сокета в
~/.ansible/cp/some-host-specific-path
. Первое соединение не может найти его, поэтому оно подключается нормально, а затем создает его. Каждое последующее соединение будет просто использовать этот сокет, чтобы пройти через уже установленное соединение.Даже если установленное соединение, наконец, перестает работать и закрывается после того, как не использовалось достаточно долго, сокет тоже закрывается, и мы возвращаемся к исходной точке.
Все идет нормально.
Иногда, однако, соединение на самом деле умирает, но клиент ssh по-прежнему считает его установленным. Обычно это происходит, когда вы запускаете playbook со своего ноутбука и теряете соединение WiFi (или переключаетесь с WiFi на Ethernet и т. Д.)
Последний пример - ужасная ситуация: вы можете использовать ssh на целевой машине с конфигурацией ssh по умолчанию, но пока ваше предыдущее соединение все еще считается активным, ansible даже не будет пытаться установить новое.
На данный момент мы просто хотим избавиться от этого старого сокета, и самый простой способ сделать это - удалить его:
Это идеально подходит для однократного исправления, но если это происходит слишком часто, вам, возможно, придется искать более долгосрочное исправление. Вот несколько советов, которые могут помочь в достижении этой цели:
Обратите внимание, что на момент написания этой статьи несколько вариантов изменилось (например, мой последний прогон дал мне
ControlPath=/home/toadjaune/.ansible/cp/871b533295
), но общая идея остается в силе.На самом деле сбор фактов занимает слишком много времени
В начале каждой игры ansible собирает много информации о целевой системе и помещает ее в факты . Это переменные, которые вы можете затем использовать в своей книге игр, и они обычно очень удобны, но иногда получение этой информации может быть очень долгим (плохие точки монтирования, диски с высокой скоростью ввода-вывода, высокой нагрузкой…)
Это , как говорится, не строго нужны факты , чтобы запустить сборник пьес, и почти наверняка не все из них, так что давайте попробуем отключить то , что нам не нужно. Несколько вариантов для этого:
В целях отладки действительно удобно вызывать модуль установки непосредственно из командной строки:
Эта последняя команда должна зависнуть так же, как ваша книга воспроизведения, и, в конечном итоге, время ожидания (или успех). Теперь давайте снова запустим модуль, отключив все, что можем:
Если это все еще зависает, вы всегда можете попробовать полностью отключить модуль в вашей игре, но вполне вероятно, что ваша проблема в другом месте.
Если, однако, он работает хорошо (и быстро), то посмотрите документацию к модулю . У вас есть два варианта:
gather_subset
)gather_timeout
может также помочь вам решить вашу проблему, предоставив больше времени (хотя это будет исправление ошибки тайм-аута, а не зависание)Другие вопросы
Очевидно, что другие вещи могут пойти не так, как надо. Несколько указателей, помогающих отладке:
-vvvv
), так как он покажет вам каждую выполненную командуping
иsetup
модули непосредственно из командной строки, как описано вышеansible -m ping
не работаетисточник
Дмитрий на что-то идет!
Ansible использует полное доменное имя хоста. Если ваш хост не разрешен в DNS, и у вас нет сопоставления в
/etc/hosts
ansible, будет ждать истечения времени ожидания DNS.При добавлении
::1 <fqdn>
в файл хоста подключаемых компьютеров Ansible сразу же получит полное доменное имя, не обращаясь к DNS.Обратите внимание, что хост должен искать хосты с него
/etc/hosts
, это значение по умолчанию для большинства, если не для всех, систем linux, но если ваше редактирование/etc/nsswitch.conf
также может быть проблемой.источник
Я была такая же проблема. Не получил полезной информации от запуска ansible в подробном режиме.
Сервер был повторно подготовлен перед запуском playbook.
Удаление сервера из списка известных хостов исправило это с помощью приведенной ниже команды.
Примечание. Необходимо удалить имя хоста и IP-адрес.
источник
Я не знаю, используете ли вы sudo playbook - но я был, и он завис на пароле sudo.
Из документации - вы можете убить это, а затем использовать
-K
.Удачи.
источник
Возможно, отпечаток вашей целевой системы изменился, например, при переустановке ОС сервера. Вы должны удалить записи в known_hosts , ansible не будет уведомлять о том, что проблема не является доверенной, она просто застревает именно так, как вы ее описали.
источник
Кажется, что ansible не может аутентифицироваться ... поэтому используйте -k, чтобы ansible запросил пароль сервера ...., как показано ниже:
источник
Несоответствие FQDN и имени хоста также может привести к зависанию. Я использовал полное доменное имя с доменом, отличным от имени домена. После того, как оба равны , ansible работает отлично. Возможно, ANSIBL сравнивает FQDN и имя хоста перед выполнением задач на удаленном хосте. Надеюсь, это поможет!
источник
Я решил эту проблему, сбросив бродячий ящик
источник
В моем случае ansible перестал работать в середине задачи. Причина в том, что мой ssh-agent перестал работать (
ssh-add -l
ничего не возвращал). Я перезапустил все, и это снова заработало. Поэтому проверьте, правильно ли работает ваш ssh-агент (ssh-add -l
не должен застрять).источник
Удаление в
~/.ansible
одиночку не сделало это для меня. Поэтому, чтобы проверить, что находится в этом каталоге, я просто выполнил команду ctrl-z (переведите процесс в спящий режим) и проверил, а затем продолжил процесс ansible черезfg
. Я ничего не удалил в этом случае. но после этого просто продолжил. Так что я только что попробовал ctrl-z->fg
один, и это тоже сработало. Похоже на танец дождя, но если кто-то застрял, пожалуйста, попробуйте это.источник
Я устранил причину этой проблемы, следуя совету Почему моя книга-игра висит в «Сбор фактов»? Сообщение блога.
Это может быть упрощено до:
Установите,
DEFAULT_KEEP_REMOTE_FILES=yes
чтобы сохранить команды и включить-vvvv
Запустите playbook снова.
Когда воспроизведение застревает, скопируйте последнюю напечатанную команду оболочки (часть после
/bin/sh -c
)Войдите на сервер через
ssh
.Используйте
strace
для воспроизведения последнего шага игры. Команда шага копируется из-vvv
вывода. Например:strace -f /bin/sh -c "echo BECOME-SUCCESS-ltxvshvezrnmumzdprccoiekhjheuwxt; /usr/bin/python /home/user/.ansible/tmp/ansible-tmp-1527099315.31-224479822965785/setup.py"
Проверьте, на каком вызове «натянутый» шаг застрял и исправьте его :)
В моем случае это был недоступный сетевой диск ...
источник
Пароль Судо является проблемой. Удостоверьтесь, что (1) вы можете выдать 'sudo что - нибудь ' на недавно открытом терминале (где пароль не кэшируется), не предоставив (2), чтобы куколка не отменила ваши предыдущие ручные изменения "sudoers".
источник