Десять вопросов: agentless-модель, идемпотентность, ad-hoc, playbook, роли, rolling update и динамический inventory. Можно перепроходить.
Это квиз по всему треку ansible-basics.
Ответь на все десять вопросов. Если ошибся, появится кнопка
«Пройти заново», можно перепроходить сколько угодно раз.
Прогресс сохраняется только при полном прохождении.
Темы: agentless-модель, push/pull, ad-hoc команды, идемпотентность,
host_key_checking, запуск без Python, роли и приоритеты переменных,
rolling update через serial и динамический inventory.
Квиз · закрепить тему
Проверь, что запомнил
01 Что НЕ нужно устанавливать на управляемый узел (managed node) для работы Ansible?
Ansible — agentless: никакого демона на managed node не нужно. Нужны только SSH-сервер и Python (для большинства модулей). Именно в этом главное отличие от Puppet и Chef.
02 Ansible использует push- или pull-модель по умолчанию?
Ansible работает по push-модели: ты запускаешь playbook на control node, и он сам подключается по SSH к managed nodes. Pull-модель реализуется отдельным инструментом ansible-pull, но это не дефолт.
03 Ты запустил ansible all -i inventory.ini -m ping. Что проверяет этот модуль?
Модуль ping в Ansible — не ICMP. Он подключается по SSH, запускает маленький Python-скрипт и ждёт ответа. Если SSH работает и Python есть, вернёт pong. ICMP здесь вообще ни при чём.
04 Почему модули shell и command помечают задачу как changed при каждом запуске playbook?
shell и command просто выполняют произвольную команду. Ansible не может знать, изменила ли она состояние системы. Поэтому они всегда возвращают changed. Это нарушает идемпотентность. Именно поэтому их избегают в пользу специализированных модулей (copy, service, apt и т.п.).
05 Как сделать задачу с модулем command идемпотентной — чтобы она пропускалась, если результат уже достигнут?
Параметр `creates:` принимает путь к файлу. Если файл существует, задача считается уже выполненной и пропускается (статус ok). Аналогично работает `removes:`. Задача выполняется только если файл существует.
06 В ansible.cfg выставлено host_key_checking = False. Что это отключает и в чём риск?
host_key_checking отвечает за проверку SSH fingerprint хоста. Если отпечаток не совпадает, Ansible остановится. Отключение удобно в тестовых окружениях с эфемерными VM, но в проде оставляет тебя уязвимым к MITM: подменённый хост примут без вопросов.
07 На хосте нет Python. Как выполнить задачу и при этом не упасть при сборе фактов?
Модуль raw выполняет команды напрямую через SSH без Python. Он единственный так умеет. gather_facts нужно отключить явно (gather_facts: no), потому что сбор фактов тоже требует Python. Типичный паттерн: сначала `raw` ставит Python (модуль apt сам по себе требует Python и без него не запустится), а уже потом идут обычные модули.
08 Чем defaults/main.yml роли отличается от vars/main.yml?
defaults — самый низкий приоритет в иерархии переменных Ansible. Их переопределяют через inventory, group_vars, -e и т.п. vars — высокий приоритет, для внутренних констант роли, которые не должны меняться снаружи. Правило: всё что пользователь роли должен мочь настроить — в defaults.
09 Что делает параметр serial: 2 на уровне play?
serial разбивает выполнение play на батчи: при serial: 2 Ansible полностью прогоняет play на первых двух хостах, потом на следующих двух и так далее. Это и есть rolling update: катишь изменения постепенно, а не на все хосты разом. Можно задавать число, процент (25%) или список с ростом ([1, 5, "30%"]). Общую параллельность задаёт forks, а serial — именно размер пачки раскатки.
10 В динамическом inventory за что отвечает keyed_groups?
keyed_groups в конфиге inventory-плагина автоматически строит группы из атрибутов инстансов: например, по тегу role создаёт группы tag_role_web, tag_role_db. Это избавляет от ручного перечисления хостов: новый инстанс с тегом сразу попадает в нужную группу. Рядом часто используют compose, чтобы вычислить переменные вроде ansible_host из приватного IP.
Прогресс сохранён в этом браузере
Почистишь историю или откроешь с телефона, и отметки пропадут.
Оставь почту, они переедут в аккаунт. Пароль придумывать не нужно.
Готово. теперь в аккаунте: прогресс виден с любого устройства.
Мой прогресс
Отметка сохранена только в этом браузере.
Войди,
и прогресс переедет в аккаунт: он будет виден с телефона и не потеряется.