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