Всегда ли подходящее время для выполнения рабочего процесса автоматизации? Ответ, наверное, нет, по разным причинам.
Если вы хотите избежать одновременных изменений, чтобы минимизировать влияние на критически важные бизнес-процессы и снизить риск непреднамеренных сбоев в обслуживании, тогда никто другой не должен пытаться вносить изменения одновременно.
В некоторых сценариях может существовать текущий период планового обслуживания. Или, может быть, приближается большое событие, критическое время для работы, праздник, или вы предпочитаете не вносить изменений в пятницу вечером.
Какой бы ни была причина, мы хотим сообщить об этом нашей платформе автоматизации и предотвратить выполнение периодических или специальных задач в определенные временные интервалы. На жаргоне Управления изменениями мы говорим о затемненных окнах, когда изменения не должны происходить.
Календарь в 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!