- валидация аргументов через assert вместо пары fail с одинаковым именем - with_items/with_dict заменены на loop, имена задач без точки на конце - добавлены meta/main.yml и README с таблицей переменных - задача ansible-owner-role-cleanup удалена из беклога
53 lines
3.2 KiB
Markdown
53 lines
3.2 KiB
Markdown
# 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` |
|
||
|
||
## Пример использования
|
||
|
||
```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"]
|
||
```
|