feat: единая админка runtime-конфигов и indpic (#22)
deploy-preland / deploy zoomstage.online (push) Successful in 1m1s
deploy-preland / deploy zoomstage.online (push) Successful in 1m1s
This commit is contained in:
1 parent
5b6b2d2053
commit
9515c1c62b
52 files changed
+2459
-34
No files matched your search
@@ -0,0 +1,24 @@
|
||||
#!/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"
|
||||
Reference in new issue
Block a user