diff --git a/site/app.py b/site/app.py index 84a23d7..c63b656 100644 --- a/site/app.py +++ b/site/app.py @@ -18,7 +18,7 @@ from routes.api import bp as api_bp from routes.api_test import bp as api_test_bp # Версия — меняется при КАЖДОМ изменении кода. Показывается в топбаре UI. -VERSION = "1.0.99" +VERSION = "1.1.0" app = Flask(__name__, template_folder="templates", static_folder="static") app.config["NUBES_API_ENDPOINT"] = os.getenv("NUBES_API_ENDPOINT", "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc") diff --git a/site/config/services_dev.txt b/site/config/services_dev.txt new file mode 100644 index 0000000..a42a459 --- /dev/null +++ b/site/config/services_dev.txt @@ -0,0 +1,55 @@ +# Общий список сервисов — объединение DEV/TEST/PROD +# service_id service_name # RU description +# do not delete lines; to exclude a service, comment it with # +1 dummy # Болванка +2 template # Темплейт k8s +12 s3 # S3 Object Storage +13 s3bucket # S3 бакет +19 vcOrg # Организация в Cloud Director +# 20 vcOrgSaas # Организация [DEPRECATED] — нет в UI +21 vc_vdc # Виртуальный датацентр (vDC) +22 vc_nsxt # Сетевой шлюз периметра (Edge) +# 23 vc_vm # VM в Cloud Director (старый формат) (vc_vm) — нет в UI +# 24 vcNat # DEPRECATED Правила маршрутизации для VM (vc_nat) +25 vcexternalip # Публичные IP адреса +26 vapp # Виртуальный каталог ВМ (vApp) +27 vc_vm_v2 # VM в Cloud Director (vc_vmV2) +28 vc_vm_v3 # Виртуальная машина +29 vcVdcGroup # Группа датацентров +# 32 vmpostgre # vc_vm_postgresql_std +50 nextcloud # Nextcloud +81 superset # Apache Superset +82 harbor # Container Registry +86 k8sVelero # Velero +# 87 k8svalkey # Valkey — нет в UI +# 88 k8sZitiController # k8sZitiController — нет в UI +89 flask # Web-сервер с фреймворком Flask +90 postgres # PostgreSQL +91 redis # Redis +92 mongodb # MongoDB +93 rabbitmq # RabbitMQ +94 lucee # Lucee +95 nodejs # NodeJS +96 pgadmin # pgAdmin +# 97 nodered # NodeRed +98 http # Простой HTTP контейнер +99 gitea # Gitea +# 100 openwhisk # Serverless Openwhisk — нет в UI +109 zonesV2 # Управление DNS +# 110 dnszone # DNS зона — нет в UI +111 dnsrecord # DNS запись +# 112 tenant # Тенант в Grafana — нет в UI +# 113 vcComplex # Быстрый старт — нет в UI +# 114 GiteaComplex # Комплексная услуга по созданию gitea — нет в UI +115 mariadb # Mariadb +116 kafka # ApacheKafka +# 117 nifi # Nifi +119 Akhq # Akhq +120 clickhouse # ClickHouse +148 vcMgmtSthutrvalCluster # Менеджмент Kubernetes кластер Штурвал +149 valoTenant # VALO Cloud +150 k8sSthutrvalCluster # Kubernetes кластер Штурвал +151 k8sOpenbao # Vault +# 153 nifi # Nifi (DEV) +163 llmAi # LLM +# 175 k8sGo # Go — нет в UI diff --git a/site/config/services_test.txt b/site/config/services_test.txt new file mode 100644 index 0000000..a42a459 --- /dev/null +++ b/site/config/services_test.txt @@ -0,0 +1,55 @@ +# Общий список сервисов — объединение DEV/TEST/PROD +# service_id service_name # RU description +# do not delete lines; to exclude a service, comment it with # +1 dummy # Болванка +2 template # Темплейт k8s +12 s3 # S3 Object Storage +13 s3bucket # S3 бакет +19 vcOrg # Организация в Cloud Director +# 20 vcOrgSaas # Организация [DEPRECATED] — нет в UI +21 vc_vdc # Виртуальный датацентр (vDC) +22 vc_nsxt # Сетевой шлюз периметра (Edge) +# 23 vc_vm # VM в Cloud Director (старый формат) (vc_vm) — нет в UI +# 24 vcNat # DEPRECATED Правила маршрутизации для VM (vc_nat) +25 vcexternalip # Публичные IP адреса +26 vapp # Виртуальный каталог ВМ (vApp) +27 vc_vm_v2 # VM в Cloud Director (vc_vmV2) +28 vc_vm_v3 # Виртуальная машина +29 vcVdcGroup # Группа датацентров +# 32 vmpostgre # vc_vm_postgresql_std +50 nextcloud # Nextcloud +81 superset # Apache Superset +82 harbor # Container Registry +86 k8sVelero # Velero +# 87 k8svalkey # Valkey — нет в UI +# 88 k8sZitiController # k8sZitiController — нет в UI +89 flask # Web-сервер с фреймворком Flask +90 postgres # PostgreSQL +91 redis # Redis +92 mongodb # MongoDB +93 rabbitmq # RabbitMQ +94 lucee # Lucee +95 nodejs # NodeJS +96 pgadmin # pgAdmin +# 97 nodered # NodeRed +98 http # Простой HTTP контейнер +99 gitea # Gitea +# 100 openwhisk # Serverless Openwhisk — нет в UI +109 zonesV2 # Управление DNS +# 110 dnszone # DNS зона — нет в UI +111 dnsrecord # DNS запись +# 112 tenant # Тенант в Grafana — нет в UI +# 113 vcComplex # Быстрый старт — нет в UI +# 114 GiteaComplex # Комплексная услуга по созданию gitea — нет в UI +115 mariadb # Mariadb +116 kafka # ApacheKafka +# 117 nifi # Nifi +119 Akhq # Akhq +120 clickhouse # ClickHouse +148 vcMgmtSthutrvalCluster # Менеджмент Kubernetes кластер Штурвал +149 valoTenant # VALO Cloud +150 k8sSthutrvalCluster # Kubernetes кластер Штурвал +151 k8sOpenbao # Vault +# 153 nifi # Nifi (DEV) +163 llmAi # LLM +# 175 k8sGo # Go — нет в UI diff --git a/site/operations/service_list.py b/site/operations/service_list.py new file mode 100644 index 0000000..93228ab --- /dev/null +++ b/site/operations/service_list.py @@ -0,0 +1,34 @@ +""" +Чтение списка разрешённых сервисов из services_{stand}.txt. + +Формат файла: service_id service_name # описание +Закомментированные (#) строки — исключены. +Пустые строки — игнорируются. + +Файл лежит в site/config/, пушится с кодом, деплоится вместе с приложением. +При изменении списка: edit → commit → push → redeploy. +""" + +import os +import re + +_CONFIG_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "config") + + +def load_service_ids(stand="test"): + """Вернуть set разрешённых service_id для указанного стенда.""" + path = os.path.join(_CONFIG_DIR, f"services_{stand}.txt") + ids = set() + try: + with open(path) as f: + for line in f: + line = line.strip() + if not line or line.startswith("#"): + continue + # Формат: "1 dummy # Болванка" + parts = line.split() + if parts and parts[0].isdigit(): + ids.add(int(parts[0])) + except FileNotFoundError: + pass # файла нет — показываем все сервисы + return ids diff --git a/site/routes/main.py b/site/routes/main.py index 6dc8773..42c96a0 100644 --- a/site/routes/main.py +++ b/site/routes/main.py @@ -14,6 +14,7 @@ from api.http_client import HttpClient, detect_endpoint, create_client, stand_na from api.auth import get_token, get_client_id, get_token_info, get_token_masked from operations.get_instances import get_organization, get_instances from operations.get_services import get_services, get_service_detail +from operations.service_list import load_service_ids from operations.tracker import list_all as tracker_list from runner import load_config @@ -135,6 +136,8 @@ def index(): # Конфиг из config.yaml + версия приложения config = dict(load_config() or {}) config["VERSION"] = current_app.config["VERSION"] + # Список разрешённых сервисов из services_{stand}.txt + config["service_ids"] = sorted(load_service_ids(stand)) except Exception as e: error = str(e) else: diff --git a/site/templates/index.html b/site/templates/index.html index 8055008..5ff9cf4 100644 --- a/site/templates/index.html +++ b/site/templates/index.html @@ -98,7 +98,7 @@
Сервисы
-
1. Болванка
+ {% for svc in services %}{% if svc.svcId in config.service_ids %}
{{ svc.svcId }}. {{ svc.svc }}
{% endif %}{% endfor %}