Files
pet-project-server/roles/owner
av 856bf72560 owner: роль причёсана под конвенции eget и secrets
- валидация аргументов через assert вместо пары fail с одинаковым именем
- with_items/with_dict заменены на loop, имена задач без точки на конце
- добавлены meta/main.yml и README с таблицей переменных
- задача ansible-owner-role-cleanup удалена из беклога
2026-08-22 19:27:33 +03:00
..

owner

Заводит системного пользователя и группу под одно приложение: фиксированные uid/gid, ssh-ключи и переменные окружения в ~/.env.

Один сервис — один пользователь: контейнеры приложения работают от его uid/gid, и файлы в base_dir принадлежат ему же. Роль вызывается первой задачей почти каждого playbook-<app>.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

Пример использования

- 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"]