Удалён модуль сетевых шаблонов

Этот коммит содержится в:
Виктор
2026-05-07 00:38:45 +09:00
родитель d160e12b41
Коммит 60ca112f93
-99
Просмотреть файл
@@ -1,99 +0,0 @@
from __future__ import annotations
from typing import Any
import network_core
from network_core import NetworkError
PUBLIC_ACCESS_TEMPLATES: dict[str, dict[str, Any]] = {
'web': {
'title': 'Web 80/443',
'description': 'HTTP и HTTPS к web-сервису внутри VM',
'rules': [
{'external_port': 80, 'guest_port': 80, 'protocol': 'tcp', 'note': 'web-http'},
{'external_port': 443, 'guest_port': 443, 'protocol': 'tcp', 'note': 'web-https'},
],
},
'ssh': {
'title': 'SSH 2222 → 22',
'description': 'SSH-доступ к VM через нестандартный внешний порт',
'rules': [
{'external_port': 2222, 'guest_port': 22, 'protocol': 'tcp', 'note': 'ssh'},
],
},
'mikopbx-web': {
'title': 'MikoPBX Web',
'description': 'Web-интерфейс MikoPBX: 80 и 443',
'rules': [
{'external_port': 80, 'guest_port': 80, 'protocol': 'tcp', 'note': 'mikopbx-http'},
{'external_port': 443, 'guest_port': 443, 'protocol': 'tcp', 'note': 'mikopbx-https'},
],
},
'mikopbx-voip-basic': {
'title': 'MikoPBX SIP basic',
'description': 'Базовые SIP-порты. RTP-диапазон добавляй по необходимости.',
'rules': [
{'external_port': 5060, 'guest_port': 5060, 'protocol': 'udp', 'note': 'sip-udp'},
{'external_port': 5060, 'guest_port': 5060, 'protocol': 'tcp', 'note': 'sip-tcp'},
{'external_port': 5061, 'guest_port': 5061, 'protocol': 'tcp', 'note': 'sip-tls'},
],
},
}
def list_templates() -> dict[str, dict[str, Any]]:
return PUBLIC_ACCESS_TEMPLATES
def apply_template(vm_name: str, template_key: str, external_base_port: int | None = None) -> dict[str, Any]:
if template_key not in PUBLIC_ACCESS_TEMPLATES:
raise NetworkError('Неизвестный шаблон публичного доступа')
if not vm_name:
raise NetworkError('Не выбрана VM')
vm_ip = network_core.resolve_vm_ip(vm_name)
if not vm_ip:
raise NetworkError('Не удалось определить IP VM. Запусти VM и дождись DHCP.')
template = PUBLIC_ACCESS_TEMPLATES[template_key]
existing = network_core.load_port_forwards()
created: list[dict[str, Any]] = []
skipped: list[dict[str, Any]] = []
for rule in template['rules']:
external_port = int(rule['external_port'])
if external_base_port and template_key == 'ssh':
external_port = int(external_base_port)
protocol = rule['protocol']
guest_port = int(rule['guest_port'])
conflict = next((item for item in existing if int(item['external_port']) == external_port and item['protocol'] == protocol), None)
if conflict:
skipped.append({'reason': 'external port already used', 'rule': rule, 'conflict': conflict})
continue
forward = {
'id': network_core.uuid.uuid4().__str__(),
'vm_name': vm_name,
'guest_ip': vm_ip,
'external_port': external_port,
'guest_port': guest_port,
'protocol': protocol,
'note': rule.get('note', template_key),
}
existing.append(forward)
created.append(forward)
network_core.save_port_forwards(existing)
apply_result = network_core.apply_port_forwards()
return {
'template_key': template_key,
'template': template,
'vm_name': vm_name,
'vm_ip': vm_ip,
'created': created,
'skipped': skipped,
'apply_result': apply_result,
}