# 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` | нет | Дополнительные группы; по умолчанию пусто | | `owner_ssh_keys` | нет | Список публичных ключей для `authorized_keys` | | `owner_env` | нет | Словарь переменных окружения, попадающих в `~/.env` | ## Про группу `docker` Членство в группе `docker` равносильно root на хосте (`docker run -v /:/host`), поэтому сервисным пользователям её не выдаём: контейнерами рулит Ansible от root. Исключение — приложения, чей `backup.sh` дампит базу через `docker compose exec`: оркестратор бэкапов запускает такие скрипты от имени самого приложения. См. `docs/backlog/backup-dump-without-docker-group.md`. ## Пример использования ```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 }}" ```