# owner Заводит системного пользователя и группу под одно приложение: фиксированные uid/gid, ssh-ключи и переменные окружения в `~/.env`. Один сервис — один пользователь: контейнеры приложения работают от его uid/gid, и файлы в `base_dir` принадлежат ему же. Роль вызывается первой задачей почти каждого `playbook-.yml`. ## Что делает 1. **Группа и пользователь.** Создаёт группу `owner_group` с `owner_gid` и пользователя `owner_name` с `owner_uid` и шеллом `/bin/bash`. Номера задаёт плейбук приложения (соглашение по нумерации — в `AGENTS.md`). 2. **SSH-ключи.** Прописывает `owner_ssh_keys` в `authorized_keys`. 3. **Переменные окружения.** Рендерит `~/.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` | ## Пример использования ```yaml - 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"] ```