- Чем отличаются 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 - содержит шаблоны файлов с переменными.