v1.1.0: per-stand services list from Terraform — services_dev.txt + services_test.txt
This commit is contained in:
+1
-1
@@ -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")
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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:
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
<div class="card">
|
||||
<div class="card-header" style="font-size:12px;">Сервисы</div>
|
||||
<div class="card-body" style="padding:4px;">
|
||||
<div class="svc-item active" onclick="selectService(1)">1. Болванка</div>
|
||||
{% for svc in services %}{% if svc.svcId in config.service_ids %}<div class="svc-item {% if loop.first %}active{% endif %}" onclick="selectService({{ svc.svcId }})">{{ svc.svcId }}. {{ svc.svc }}</div>{% endif %}{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user