Ansible
( * Відповідь на питання розгорніть за допомого трикутного значка |> )
- *Чим відрізняються Ansible модулі raw, command та shell?*
Модуль raw відрізняється від command та shell тим, що не виконує додаткову обробку виконання команди. Ці додаткові обробки присутні в майже будь-якому модулі Ansible. Модуль raw передає команду, як є, в “сирому” (raw) вигляді без перевірок.
Модулі command та shell відрізняються тим, що в модулі command команда виконується без проходження через командну оболонку /bin/sh
. Тому змінні визначені в оболонці та перенаправлення – конвеєри працювати не будуть. Модуль shell виконує команди через оболонку за замовчуванням /bin/sh
. Тому там будуть доступні змінні оболонки та перенаправлення.
- На всіх серверах повинен бути набір користувачів, з доступом по ssh-ключу, стандартний модуль user не дозволяє вносити ssh ключ в authorized_keys. Запропонуйте рішення.
- Використовувати модуль
authorized_key
для додавання ключів. - Використовувати модуль
shell
, щоб вручну з використанням командиcat {{ PUBLIC_SSH_KEY }} >> /home/{{ USER }}/.ssh/authorized_keys
додати ключ. В даному випадку шаблони Jinja2 PUBLIC_SSH_KEY та USER повинні бути задані.
- Є групи користувачів, які повинні заводитися не на всіх серверах. Як обмежити заведення користувачів?
Згрупувати сервера, на яких повинні заводитися групи користувачів, в інвентарі або написати в плейбуці умову, якій передається список серверів, на яких необхідно виконати задачу.
- На новому сервері не встановлений Python, який потрібен для роботи Ansible. Як виконати встановлення Python на сервері використовуючи Ansible?
Використовувати модуль raw
, якому необхідно передати команду для встановлення python на сервері. Модуль raw
приймає команду без додаткової обробки Python і виконує її на сервері.
- Що таке роль в Ansible? Що містить в собі Ansible роль?
Ansible роль являє собою структурований плейбук, що містить, як мінімум, набір задач (tasks) і додатково – обробники подій (handlers), змінних (default та vars), файлів (files), шаблонів (templates), опис та залежності (metadata) і тести (tests).
- *В Ansible ролі є директорії vars та default. Що вони містять і чим відрізняються?*
Ansible застосовує порядок пріоритету змінних. Нижче представлений список в порядку підвищення пріоритету.
- command line values (for example, -u my_user, these are not variables)
- role defaults (defined in role/defaults/main.yml)
- inventory file or script group vars
- inventory group_vars/all
- playbook group_vars/all
- inventory group_vars/*
- playbook group_vars/*
- inventory file or script host vars
- inventory host_vars/*
- playbook host_vars/*
- host facts / cached set_facts
- play vars
- play vars_prompt
- play vars_files
- role vars (визначаються в role/vars/main.yml)
- block vars (тільки для задач в
block
) - task vars (тільки для задач)
- include_vars
- set_facts / registered vars
- role (та include_role) params
- include params
- extra vars (наприклад, -e “user=my_user”)(завжди пріоритетніше)
Відповідно змінні в vars будуть пріоритетніше, ніж в defaults.
- *В Ansible ролі є директорії file та templates. Що вони містять і чим відрізняються?*
files – містить файли, які будуть скопійовані на налаштовувані хости; так само — може містити скрипти, які пізніше будуть запускатися на хостах.
templates – містить шаблони файлів зі змінними.
- За замовчуванням, в Ansible всі задачі зі списку виконуються паралельно на всіх хостах, які вказані в
hosts
. Як зробити так, щоб задачі виконувалися послідовно по хостах?
Необхідно встановити параметр serial: 1
, щоб визначити кількість хостів, на яких будуть виконуватися паралельно задачі. Значення 1 буде означати, що всі задачі будуть проходити паралельно по 1 хосту за раз.
Посилання на документацію: https://docs.ansible.com/ansible/latest/user_guide/playbooks_strategies.html#setting-the-batch-size-with-serial