delegate_to и run_once для оркестрации
Запускайте задачу на одном узле для нескольких узлов
«delegate_to и run_once для оркестрации» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Задачи выполняются не всегда там, где Вы ожидаете
По умолчанию каждая задача выполняется на целевом узле. Для оркестрации иногда требуется, чтобы задача выполнялась совсем в другом месте. 🎯
Знакомство с delegate_to
Ключевое слово delegate_to запускает задачу на другом узле, а не на текущем, при этом используются переменные этого узла.
- name: Add web node to load balancer
community.general.haproxy:
host: "{{ inventory_hostname }}"
state: enabled
delegate_to: lb01Классический сценарий использования
При переборе веб-узлов делегируйте изменение балансировщика нагрузки узлу LB. Проигрывание остаётся поузловым, но действие выполняется на LB.
Делегирование на localhost
Запустите задачу на управляющем узле, делегировав её на localhost. Это удобно для вызова API или отправки уведомления из одного места.
- name: Notify chat
ansible.builtin.uri:
url: "{{ webhook }}"
method: POST
delegate_to: localhostПеременные остаются у исходного узла
Делегирование меняет место выполнения задачи, но не набор фактов, которые она видит. inventory_hostname по-прежнему обозначает исходный целевой узел, а не делегат.
Знакомство с run_once
Ключевое слово run_once запускает задачу один раз для всей группы узлов, а не по одному разу на каждый узел. Ansible выбирает первый узел для её выполнения.
- name: Run database migration
ansible.builtin.command: ./migrate.sh
run_once: trueЗачем нужен run_once
Некоторые действия должны выполняться только один раз, например миграция или выбор лидера. run_once не позволяет каждому узлу повторять один и тот же общий шаг.
Используйте их вместе
Объедините run_once с delegate_to, чтобы выполнить одно действие на одном выбранном узле, например запустить миграцию с одного узла приложения.
- name: Migrate db once
ansible.builtin.command: ./migrate.sh
run_once: true
delegate_to: app01Результаты общие для всех
При использовании run_once зарегистрированный результат становится общим для всех узлов в группе. Все они видят вывод этого единственного выполнения.
- ansible.builtin.command: cat /etc/version
run_once: true
register: verСбор фактов с делегата
Используйте delegate_facts, если хотите прикрепить собранные факты к узлу-делегату, а не к текущему узлу. По умолчанию эта возможность отключена.
Оркестрация, а не только настройка
Вместе эти ключевые слова превращают поузловую настройку в настоящую оркестрацию: координацию одного действия на всём парке узлов из единой точки.
Быстрая проверка
Проверим эти ключевые слова для оркестрации.
Итоги
Используйте delegate_to, чтобы запустить задачу на другом узле, а run_once — чтобы выполнить её только один раз на группу узлов: это основа оркестрации. ✅
Изучай DevOps Bootcamp с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 142
- Уроки
- 568
Часто задаваемые вопросы
Урок «delegate_to и run_once для оркестрации» бесплатный?
Да — полный текст урока «delegate_to и run_once для оркестрации» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «delegate_to и run_once для оркестрации»?
Запускайте задачу на одном узле для нескольких узлов Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «delegate_to и run_once для оркестрации»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Автоматизация сетевых устройств с cli_command
- delegate_to и run_once для оркестрации
- Координация уровней веб-сервера, приложения и DB
- Вывод узлов из балансировщика и повторное включение