0

Я пытаюсь использовать Ansible в качестве инструмента развертывания для набора хостов, и я не могу найти правильный способ сделать это.Ansible custom tool, retry and redeploy

Я хочу запустить настраиваемый инструмент, который устанавливает rpm в хосте.

Теперь я могу сделать

ansible dev -i hosts.txt -m shell -a "rpmdeployer --install package_v2.rpm" 

Но это не дает повтора файла (не удалось хостов) Я сделал сборник пьес, чтобы получить файл повтора

Я попробовал простой сборник пьес

--- 
- hosts: dev 
    tasks: 
    - name: deployer 
    command: rpmdeployer --install package_v2.rpm 

Я знаю, что это не в духе незаменимого для выполнения пользовательских команд и скриптов. Есть ли лучший способ сделать это? Также есть ли способ продолжать попытки, пока все хосты не удастся?

+0

Просьба показать журнал пробега. И добавьте -vvv в финале. В команде ansible launch. Объясните больше, почему хозяева потерпели неудачу? А также. Вы хотите получить выход из своей команды или повторить попытку и запустить ту же команду, если не удалось в первый раз. –

+0

Он может изменяться от неустойчивости системы до оборванного dpm db.Меня не интересует, почему это не удалось (sys admins позаботится об этом). Я хочу повторить попытку, чтобы после устранения других проблем мне не пришлось вручную повторять неудачные хосты – kbang

ответ

1

Есть ли лучший способ сделать это?

write a custom module. Пользовательский модуль может даже быть инструментом, поэтому вы избавитесь от установки этой зависимости. Модули могут быть написаны на любом языке, но желательно использовать Python, потому что:

  1. Python является требованием анзибля все равно
  2. При использовании Python вы можете использовать API, предоставленного анзиблем

Если вы бы иметь собственный модуль для вашего инструмента ваша задача может выглядеть следующим образом:

- name: deployer 
    deployer: package_v2.rpm 

Также есть способ K eep пытается довести до всех хостов?

Ansible может автоматически retry задач.

- name: deployer 
    command: rpmdeployer --install package_v2.rpm 
    register: result 
    until: result | success 
    retries: 42 
    delay: 1 

Это работает, если ваш инструмент возвращает правильные коды выхода (0 при успехе и> 0 при сбое). Если нет, вы можете применить любое пользовательское условие, например. найдите stdout для контента и т. д.

Я не знаю, как использовать инструмент для автоматической повторной попытки, когда проигрыватель действительно не прошел. Но это не должно быть слишком сложно создать небольшой скрипт-оболочку, чтобы проверить файл повтора и запустить playbook с --limit @foo.retry, пока он не будет повторно создан.

Но я не уверен, что это имеет смысл. Если установка rpm с вашим инструментом не удалась, я предполагаю, что он будет также терпеть неудачу при любых попытках, если в игре нет неизвестных компонентов, таких как загрузка rpm в первую очередь. Таким образом, конечно, загрузка может завершиться неудачей, и повторная попытка может быть успешной.