Всегда ли подходящее время для выполнения рабочего процесса автоматизации? Ответ, наверное, нет, по разным причинам.

Если вы хотите избежать одновременных изменений, чтобы минимизировать влияние на критически важные бизнес-процессы и снизить риск непреднамеренных сбоев в обслуживании, тогда никто другой не должен пытаться вносить изменения одновременно.

В некоторых сценариях может существовать текущий период планового обслуживания. Или, может быть, приближается большое событие, критическое время для работы, праздник, или вы предпочитаете не вносить изменений в пятницу вечером.

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

Календарь в Ansible

Как мы можем добиться этого в Ansible? Однако, хотя функции Calendar как таковой нет, расширяемость Ansible позволит нам интегрироваться с любым приложением Calendar, имеющим API.

Цель такова: прежде чем мы выполним какие-либо действия по автоматизации или изменению, мы выполняем pre-task, который проверяет, есть ли что-то, что уже запланировано в Календаре или достаточно скоро, или чтобы подтвердить, что мы не находимся в середине заблокированного временного интервала.

Предположим, существует фиктивный модуль с именем calendar, который может подключаться к удаленному календарю, например Календарю Google, чтобы определить, было ли указанное время помечено как занятое. Тогда мы могли бы написать сценарий, который выглядел бы так:

Достоверные факты дадут нам ansible_date_time, который мы передаем модулю calendar для проверки наличия времени. Мы регистрируем ответ (output) для использования в последующих задачах.

Если бы наш календарь выглядел так:

Тогда в выходных данных этой задачи будет выделен тот факт, что этот временной интервал занят (busy: true).

Предотвращение запуска задач

Далее Ansible Conditionals поможет нам предотвратить выполнение каких-либо дальнейших задач. В качестве простого примера вы можете использовать оператор when в следующей задаче, чтобы принудительно запустить ее только тогда, когда поле busy в предыдущем выводе не равно true.

Заключение

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

В этой возможности мы рассмотрели, как ваши Playbooks могут интегрироваться или взаимодействовать с приложением Calendar, чтобы проверить доступность. Однако мы лишь поверхностно царапаем! Например, ваши задачи могут также заблокировать временной интервал в календаре… нет предела.

В следующем посте мы подробно рассмотрим, как мы на самом деле создали этот calendar модуль и как другие языки программирования могут использоваться с Ansible. Следите за обновлениями, если вы, как и я, фанат Go!