backlog: удалена задача shared-roles-sync, она реализована
- канон ролей лежит в ansible-roles, синхронизация идёт тасками roles-status / roles-pull / roles-push, подписка — eget и app_image - драфт переведён в статус «реализовано»: отмечены расхождения с дизайном (имя канона, состав подписки) и незакрытые пункты плана
This commit is contained in:
@@ -29,7 +29,6 @@ _(sec-ревью)_ — три независимых security-ревью на м
|
||||
- [Включить автообновления безопасности](security-autoupdates.md) — патчи openssh/libssl только вручную; окна в недели между CVE и фиксом _(sec-ревью)_
|
||||
- [Запретить SSH-вход под root](ssh-disable-root-login.md) — `PermitRootLogin yes` пускает root по ключу; наименьшие привилегии + defense-in-depth (пароль уже off) _(sec-ревью)_
|
||||
- [Gitea runner on-demand в Yandex Cloud](gitea-runner-on-demand.md) — раннер активен только во время сборки; webhook→Cloud Function стартует ВМ, probe/decide гасят по idle; экономия ~95%
|
||||
- [Синхронизация общих Ansible-ролей между репозиториями](shared-roles-sync.md) — `owner`/`eget`/`secrets` дублируются между репозиториями и дрейфуют; канон в ansible-shared + rsync-таски invoke
|
||||
- [Composable-роль `backup`](ansible-backup-role.md) — бэкап — самый чистый шов для extraction (одинаков у всех, различается только список targets) _(ансибл-ревью)_
|
||||
- [Вывести из оборота секреты с широкими правами](narrow-secret-scopes.md) — `yc_oauth_token` (весь аккаунт Yandex Cloud) уже выведен; осталось проставить радиус остальным переменным vault и сузить широкие
|
||||
- [outline: секреты из файлов](secrets-file-outline.md) — умеет generic `<NAME>_FILE` для всех пяти секретов; единственное приложение, где выносится вообще всё, включая пароль БД
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
# Синхронизация общих Ansible-ролей между репозиториями
|
||||
|
||||
**Приоритет:** средний
|
||||
|
||||
Серверы управляются изолированными репозиториями (pet-project-server, buckland,
|
||||
далее — торрент-бокс). Кастомные роли (`owner`, `eget`, `secrets`) концептуально
|
||||
общие, но физически продублированы и дрейфуют (`owner` в buckland стал мёртвым
|
||||
кодом). Решение под pets-подход: канон ролей в `~/projects/private/ansible-shared/`,
|
||||
каждый репозиторий держит закоммиченную копию (она же «пин версии») и
|
||||
синхронизируется через rsync-таски invoke — `roles-pull` / `roles-push` /
|
||||
`roles-status`. Подписка на роли явная и пер-серверная (`SYNCED_ROLES` в
|
||||
`tasks.py`). Обновление роли на сервере — осознанный коммит с читаемым диффом, не
|
||||
скрытый сайд-эффект. Предохранитель от дрейфа — предупреждение в lefthook.
|
||||
Отвергнуты: общий `roles_path`, симлинки, submodule/subtree, galaxy-из-git,
|
||||
монорепо (все ломают самодостаточность или вводят лишнюю петлю).
|
||||
|
||||
Подход обсуждён, реализация не начата. Полный дизайн + план внедрения:
|
||||
[docs/drafts/shared-roles-sync.md](../drafts/shared-roles-sync.md).
|
||||
|
||||
Связано: roles/owner, roles/eget, roles/secrets, tasks.py, lefthook.yml,
|
||||
project_isolated_repos_shared_roles, project_shared_invoke_command_surface.
|
||||
@@ -2,7 +2,19 @@
|
||||
|
||||
## Статус
|
||||
|
||||
Черновик. Подход обсуждён, реализация не начата.
|
||||
Реализовано. Канон живёт в `~/projects/private/ansible-roles/` (репозиторий
|
||||
с git-историей), таски `roles-status` / `roles-pull` / `roles-push` есть в
|
||||
`tasks.py`. Отличия от первоначального дизайна:
|
||||
|
||||
- канон называется `ansible-roles`, а не `ansible-shared`, и сразу заведён
|
||||
как git-репозиторий;
|
||||
- подписка pet-project-server — `SYNCED_ROLES = ["eget", "app_image"]`:
|
||||
`app_image` появился уже после дизайна и писался сразу общим, а `owner` и
|
||||
`secrets` пока остаются локальными копиями и подписываются по мере надобности;
|
||||
- предупреждения о дрейфе в lefthook нет — расхождение ловится ручным
|
||||
`inv roles-status`.
|
||||
|
||||
Ниже — исходный дизайн; текст оставлен как спека подхода.
|
||||
|
||||
## Контекст
|
||||
|
||||
@@ -197,12 +209,12 @@ galaxy-источника: повесить теги, перевести реп
|
||||
|
||||
## План внедрения
|
||||
|
||||
1. Создать `~/projects/private/ansible-shared/roles/` из актуальных
|
||||
ролей pet-project-server (`owner`, `eget`, `secrets`).
|
||||
2. Добавить задачи `roles-pull` / `roles-push` / `roles-status` в
|
||||
`tasks.py` pet-project-server; объявить подписку на все три роли.
|
||||
3. То же в buckland; подписка только на `eget` (его копия сначала
|
||||
выравнивается через `roles-pull` — дифф косметический, стиль
|
||||
кавычек). Мёртвую `roles/owner` удалить.
|
||||
4. Предупреждение о дрейфе в lefthook обоих репозиториев.
|
||||
5. Новый сервер с самого начала строится на подписке.
|
||||
1. ~~Создать канон из актуальных ролей pet-project-server.~~ Сделано:
|
||||
`~/projects/private/ansible-roles/roles/` с `eget` и `app_image`.
|
||||
2. ~~Добавить задачи `roles-pull` / `roles-push` / `roles-status` в
|
||||
`tasks.py` pet-project-server.~~ Сделано; подписка — `eget`, `app_image`.
|
||||
3. То же в buckland; мёртвую `roles/owner` удалить.
|
||||
4. Подписать `owner` и `secrets`, когда их копии реально разойдутся.
|
||||
5. Предупреждение о дрейфе в lefthook — не сделано, пока хватает
|
||||
ручного `inv roles-status`.
|
||||
6. Новый сервер с самого начала строится на подписке.
|
||||
|
||||
Reference in New Issue
Block a user