Files
ipam_control/scripts/gen_env.py
T
ayurishchevandClaude Sonnet 5 a846d30872 IPAM Manager: API, UI-админка, журнал аудита
Backend (FastAPI, SQLAlchemy 2, Alembic, PostgreSQL 16):
- организации, VRF, префиксы (дерево, использование, автоназначение),
  адреса, операторы связи, устройства и типы устройств; JWT, роли admin/viewer;
- VRF принадлежит организации (составной FK), смена VRF у префикса
  переносит поддерево, имя VRF уникально в организации;
- журнал аудита: поиск и фильтры, ротация (срок/количество), очистка
  по паролю с блокировкой, IP клиента и метаданные запроса
  (X-Forwarded-For только от TRUSTED_PROXIES).

UI (web/, без сборки): экраны и диалоги по макетам «IPAM Manager»,
кликабельные строки реестров, локальные шрифты IBM Plex,
собственные выпадающие списки.

Окружение: docker-compose (postgres + app), миграции Alembic 0001-0004,
scripts/gen_env.py, scripts/seed_demo.py, 11 автотестов (pytest).
Документация: README.md и docs/changes/001-005 (планы и итоги).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 12:27:47 +03:00

21 lines
736 B
Python

"""Генерирует .env со случайными учётными данными (не перезаписывает существующий)."""
import pathlib
import secrets
env = pathlib.Path(__file__).resolve().parent.parent / ".env"
if env.exists():
print(f"{env} уже существует — пропускаю")
else:
env.write_text(
"POSTGRES_DB=ipam\n"
"POSTGRES_USER=ipam\n"
f"POSTGRES_PASSWORD={secrets.token_urlsafe(24)}\n"
f"JWT_SECRET={secrets.token_urlsafe(48)}\n"
"ADMIN_USERNAME=admin\n"
f"ADMIN_PASSWORD={secrets.token_urlsafe(18)}\n"
"APP_PORT=8088\n"
"DB_HOST_PORT=55432\n"
)
env.chmod(0o600)
print(f"создан {env}")