6.5 KiB
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