2017-01-20 15 views
1

Так что я модернизировал свой сервер еженедельно на некоторое время теперь вручную войти в систему и с помощьюкоманда Расписание в определенное время с анзибль

sudo at 2:30 

Эта команда побуждает меня для команд, которые я хочу, чтобы выполнить в 2:30 ночь. Команды:

apt-get update 
apt-get dist-upgrade -y -qq 
reboot 

Как я могу переместить это в Ansible playbook? Я уже рассмотрел их «at» -модуль, но он только позволяет мне планировать команды относительно текущего времени (сейчас + время), а не в определенное время. (source)

Другой вариант - просто создать сырую задачу в playbook, но как бы я мог обработать тот факт, что команда at является интерактивной?

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

+0

Насколько я вижу, у вас есть противоречивые требования: «бежать через анзибль на какое-то время» (т.е. автоматически) и «Я хотел бы рассмотреть, какие пакеты обновления» (т.е. вручную). –

+0

Кстати, вы видели https://wiki.debian.org/UnattendedUpgrades? –

+0

Я не хочу, чтобы обновления запускались автоматически. The Ansible playbook будет только для удобства, поэтому мне не нужно входить в систему на свой сервер и вводить эти команды. Отчет apt отправляется на мое электронное письмо каждое утро пятницы, из которого я просматриваю изменения, а затем приступаю к планированию обновления. – Boyd

ответ

1

Существует много способов достичь этого.

Вот несколько из них:

  1. Сделать скрипт с командами для выполнения.
    Загрузите его с модулем copy.
    Используйте command модуль для выполнения at -f myscript 2:30.
    Это добавит ваши команды в очередь хостов.

  2. Сделать Ansible playbook с модулем apt вместо команд оболочки.
    Протестируйте его на одном сервере.
    Запланируйте его на вашем локальном компьютере (Хозяин управления) с at 2:30,
    Поставка ansible-playbook -i allservers upgrade-servers.yml как работа.
    Это будет исполнение вашей playbook на allservers в 2:30 от вашей локальной машины.

  3. Изменить at модуль для поддержки exact_time параметра наравне с countunit /.
    Сохраните его как ./library/at.py рядом с вашей игрой.
    Применять его для планирования заданий в точное время на удаленных серверах.

+0

Спасибо! Я надеялся, что есть более легкое решение. Но я думаю, мне просто нужно приложить усилия и изменить модуль в модуле, чтобы поддерживать точное время. – Boyd

+0

Итак, это [измененный модуль at.py] (https://gist.github.com/boyd91/881f1cb2e5d1e66854242e4f7b6bcf0e), который поддерживает все выражения времени, а не только «now +». – Boyd