LINUX.ORG.RU
ФорумAdmin

ansible: «килл не киляет, ребут не ребутит, аптайм уже полгода, чё делать, памагите !!1»

 


0

2

Доброго времени суток

Через ansible устанавливаю обновления на хосты с debian. Потом через ssh проверяю, что ядро новое ( да, meltdown ... )

При этом обнаружил, что ansible по факту не может перезагрузить одну ВМ, но говорит что якобы всё ок

Вот минимальный playbook:

router@rhea:~$ cat reboot.yml
- hosts: klalafuda
  become: True
  become_method: sudo

  tasks:
    - name: Reboot the server
      shell: sleep 2 && /sbin/reboot
      async: 1
      poll: 0
      ignore_errors: false

router@rhea:~$ ansible-playbook -i hosts reboot.yml

PLAY [klalafuda] ***************************************************************

TASK [setup] *******************************************************************
ok: [klalafuda]

TASK [Reboot the server] *******************************************************
ok: [klalafuda]

PLAY RECAP *********************************************************************
klalafuda                  : ok=2    changed=0    unreachable=0    failed=0

router@rhea:~$

На стороне проблемной ВМ:

root@klalafuda:~# tail -f /var/log/syslog
[...]
Jan 15 10:09:23 klalafuda ansible-async_wrapper.py[1261]: Invoked with 961660383003 1 /home/router/.ansible/tmp/ansible-tmp-1516000163.19-190152990003185/command.py _
Jan 15 10:09:23 klalafuda ansible-async_wrapper.py[1261]: Return async_wrapper task started.
Jan 15 10:09:23 klalafuda ansible-async_wrapper.py[1264]: Starting module and watcher
Jan 15 10:09:23 klalafuda ansible-async_wrapper.py[1264]: Start watching 1265 (1)
Jan 15 10:09:23 klalafuda ansible-async_wrapper.py[1265]: Start module (1265)
Jan 15 10:09:23 klalafuda ansible-async_wrapper.py[1265]: Module complete (1265)
Jan 15 10:09:28 klalafuda ansible-async_wrapper.py[1264]: Done in kid B.

При этом вручную через модуль shell и --sudo ребут проходит успешно ( хотя сама команда ansible виснет )

router@rhea:~$ ansible klalafuda -i hosts --sudo -m shell -a 'sleep 2 && /sbin/reboot'

^CProcess WorkerProcess-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib/python2.7/dist-packages/ansible/executor/process/worker.py", line 112, in run
 [ERROR]: User interrupted execution

Через ssh ребут так же отрабатывает без проблем..

Есть идеи, где проблема - в моём playbook, в ansible или на удалённой ВМ?

З.Ы. http://lorquotes.ru/view-quote.php?id=2935

★★★★★

Последнее исправление: router (всего исправлений: 2)

https://github.com/ansible/ansible/issues/14413#issuecomment-257887580
https://github.com/ansible/ansible/issues/14413#issuecomment-299118165
Попробуй обрабатывать когда поднимется обратно.

Через ansible устанавливаю обновления на хосты с debian.

И таки да c unattended-upgrades это все делается автоматически. А вот canonical-livepatch с Ubuntu в данном конкретном случае бесполезен.

anonymous_sama ★★★★★
()
Ответ на: комментарий от anonymous_sama

Попробуй обрабатывать когда поднимется обратно.

Это уже есть в плейбуке update.yml, добавляется только ожидание, когда поднимется

У меня проблема в другом - он вообще в ребут не уходит. ignore_errors: false поставил от безысходности

На всякий случай проверю оба варианта

router ★★★★★
() автор топика

но говорит что якобы всё ок

OK это значит что при выполнении таска небыло изменений на хосте, команда просто отработала. Но так как ты ошибки игноришь это в целом ни о чем не говорит.

Попробуй завернуть свою конструкцию вот так nohup bash -c "sleep 2s && /sbin/reboot" &

micronekodesu ★★★
()
Ответ на: комментарий от router

Для очистки совести проверил оба варианта, ребута нет

router ★★★★★
() автор топика
Ответ на: комментарий от micronekodesu

OK это значит что при выполнении таска небыло изменений на хосте, команда просто отработала. Но так как ты ошибки игноришь это в целом ни о чем не говорит.

Насколько я понимаю, не игнорю - «ignore_errors: false»

Больше подозрений вызывает асинхронность

Попробуй завернуть свою конструкцию вот так nohup bash -c «sleep 2s && /sbin/reboot» &

Без изменений. Молча игнорирует

Возможно, это ещё один баг ansible ( их допольно много и вылезают неожиданно). Пока у меня ansible из дистрибутива ( debian stretch, ansible 2.2.1 ). Попробую поставить последнюю версию

Но что сильно удивляет. Остальные хосты - с той же версией debian, той же версией python, даже развёрнутые из того же шаблона - перезагрузились без проблем

router ★★★★★
() автор топика
Последнее исправление: router (всего исправлений: 2)
Ответ на: комментарий от router

Насколько я понимаю, не игнорю - «ignore_errors: false»

Оу, чет я воспринял это как «failed_when: false».

Возможно, это ещё один баг ansible ( их допольно много и вылезают неожиданно).

По этому я вообще обновляюсь раз в пятилетку, все равно ничего нового они в него не добавляют, а ломают действительно каждый релиз.

В общем, если бы хост ребутился а ансибл этого не ловил то было бы проще - просто процесс убили и нормального выхлопа не вернули (ну вот как с ручным запуском). Почему тут получается что процесс завершается раньше чем запускает команду я понять не могу. Не думаю что это из-за асинхронности - она про то чтоб запустить команду и вернуться за результатами позже, то есть не держать сессию поднятой. Это не должно влиять на выполнение, да и я не сталкивался с такими проблемами раньше.

micronekodesu ★★★
()

Запустил без sleep и с «poll: 1»

fatal: [klalafuda]: FAILED! => {"ansible_job_id": "749112619710.8391", "changed": false, "cmd": "/home/router/.ansible/tmp/ansible-tmp-1516022686.23-26402752241954/command.py", "failed": 1, "finished": 1, "msg": "[Errno 13] Permission denied", "outdata": "", "stderr": ""}

Возможно это не ansible, а что-то с настройкой systemd

router ★★★★★
() автор топика
Ответ на: комментарий от router
ansible BLABLA --sudo -m shell -a '/usr/bin/systemd-run --on-active=5 /usr/bin/systemctl reboot'
AlexVR ★★★★★
()

ansible-playbook -i hosts reboot.yml

ansible-playbook -i hosts reboot.yml -k -K
CHIPOK ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.