Files
preland/admin/deploy/refresh-catalog.sh
T
2026-10-25 11:33:56 +03:00

25 lines
1.1 KiB
Bash

#!/bin/sh
set -eu
umask 077
base=/srv/preland-admin
# Подготовка root-процесса находится вне app-writable mount: UID приложения
# не может подменить файл ссылкой между проверкой, chown и chmod.
temporary=$(mktemp "$base/secrets/catalog.XXXXXX")
trap 'rm -f "$temporary"' EXIT HUP INT TERM
if ! /usr/bin/docker exec -i config-api-1 php < "$base/deploy/export-catalog.php" > "$temporary" 2>/dev/null; then
echo 'Каталог групп не обновлён; прежний снимок сохранён.' >&2
exit 1
fi
/usr/bin/python3 - "$temporary" <<'PY'
import json, sys
with open(sys.argv[1], encoding='utf-8') as stream:
value = json.load(stream)
assert value['host'] == 'zoomzilla.ru'
assert set(value['groups']) == {'degr', 'tp', 'cons'}
assert all(isinstance(items, list) for items in value['groups'].values())
PY
chown 997:987 "$temporary"
chmod 600 "$temporary"
# -T заменяет саму ссылку назначения, не следует в указанный ею каталог.
mv -fT "$temporary" "$base/state/catalog.json"