- валидация аргументов через assert вместо пары fail с одинаковым именем - with_items/with_dict заменены на loop, имена задач без точки на конце - добавлены meta/main.yml и README с таблицей переменных - задача ansible-owner-role-cleanup удалена из беклога
3.2 KiB
3.2 KiB
owner
Заводит системного пользователя и группу под одно приложение: фиксированные
uid/gid, ssh-ключи и переменные окружения в ~/.env.
Один сервис — один пользователь: контейнеры приложения работают от его uid/gid,
и файлы в base_dir принадлежат ему же. Роль вызывается первой задачей почти
каждого playbook-<app>.yml.
Что делает
- Группа и пользователь. Создаёт группу
owner_groupсowner_gidи пользователяowner_nameсowner_uidи шеллом/bin/bash. Номера задаёт плейбук приложения (соглашение по нумерации — вAGENTS.md). - SSH-ключи. Прописывает
owner_ssh_keysвauthorized_keys. - Переменные окружения. Рендерит
~/.envизowner_envплюсUSER_UIDиUSER_GID— их подставляют docker-compose шаблоны приложений. В.bashrcдобавляет строку, подгружающую~/.envцеликом, и вычищает старые построчныеexport-ы, оставшиеся от прежней схемы.
Результат для плейбука
Роль регистрирует owner_create_result — результат модуля user. Плейбуки и
compose-шаблоны берут оттуда owner_create_result.uid и
owner_create_result.group (это gid) для user: в docker-compose.
Переменные
Полный список и значения по умолчанию — в defaults/main.yml.
| Переменная | Обязательная | Описание |
|---|---|---|
owner_name |
да | Имя пользователя; по умолчанию оно же имя группы |
owner_uid |
да | Uid пользователя |
owner_group |
нет | Имя группы, по умолчанию owner_name |
owner_gid |
нет | Gid группы, по умолчанию owner_uid |
owner_extra_groups |
нет | Дополнительные группы (обычно ["docker"]) |
owner_ssh_keys |
нет | Список публичных ключей для authorized_keys |
owner_env |
нет | Словарь переменных окружения, попадающих в ~/.env |
Пример использования
- name: "Create user and environment"
ansible.builtin.import_role:
name: owner
vars:
owner_name: "{{ app_user }}"
owner_uid: "{{ app_owner_uid }}"
owner_gid: "{{ app_owner_gid }}"
owner_extra_groups: ["docker"]