- 20 приложений её не получают: контейнерами рулит ansible от root, а членство в группе docker равносильно root на хосте - у gitea, miniflux и outline группа осталась — их backup.sh дампит базу через docker compose exec из-под самого приложения - задача service-users-docker-group закрыта, остаток вынесен в новую backup-dump-without-docker-group
3.7 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 |
нет | Дополнительные группы; по умолчанию пусто |
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.
Пример использования
- 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 }}"