Linux Labs

Автоматизация: Git и Ansible / Ступень 4 из 6

Инвентарь и разовые команды

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 3 из 5 · на машине · 8 мин

Разовая команда: CHANGED и SUCCESS

Одну работу на всех машинах группы Ansible делает одной командой — без файлов с описанием.

Разовая команда устроена так: ansible <машины> -m <модуль> -a '<аргументы>'. Машины — имя, группа или all; модуль — вид работы; аргументы — что именно сделать:

bash
# запустить программу на машинах группы web
ansible web -m command -a 'uptime'
# положить на них файл с таким содержимым
ansible web -m copy -a 'content="text\n" dest=/path/file'

Модуль command запускает программу и возвращает её вывод. Модуль copy приводит файл к описанию: путь — dest, содержимое — content. Запусти copy дважды и прочитай файл через command.

Упражнение · посмотреть

Запусти copy дважды

В ~/ansible-lab дважды положи на машины группы web файл /home/student/note.txt модулем copy, затем прочитай его модулем command.

Сначала предположи

Третья команда только читает файл. Какой статус Ansible напишет у app1?

Теперь начни упражнение, выполни команду и сверь прогноз с выводом.

Войти и начать Машина доступна после входа

После каждой команды Ansible пишет статус машины. CHANGED — модуль что-то изменил. SUCCESS с "changed": false — всё уже было как надо. copy сравнивает файл с описанием: во второй раз файл совпал, и модуль его не тронул. command не знает, что делает запущенная программа, поэтому отвечает CHANGED всегда — даже на cat.

Свойство «повторный запуск не меняет то, что уже в нужном состоянии» называют идемпотентностью. На нём держится работа с Ansible: описание применяют сколько угодно раз, а ответ показывает, где машина отличалась.

Проверь себя 1 вопрос

На машинах группы web нужен файл /home/student/app.env со строкой MODE=prod, и повторный запуск должен показывать, что менять нечего. Какую разовую команду выберешь?

  • Файл получится, но command не сравнивает результат и при каждом запуске отвечает CHANGED — по ответу не понять, отличалась ли машина.

  • Файл одинаковый, а ответы разные: command пишет CHANGED всегда, copy — SUCCESS, если файл уже такой. Повтор с -m copy это покажет.

copy сравнивает файл с описанием и меняет его, только если они расходятся, поэтому повтор отвечает SUCCESS с "changed": false. command запускает программу и о результате не судит — его ответ CHANGED при каждом запуске.

Ubuntu 24.04
Загрузка…