diff --git a/scripts/portforward_container.py b/scripts/portforward_container.py deleted file mode 100755 index 2be80f7..0000000 --- a/scripts/portforward_container.py +++ /dev/null @@ -1,179 +0,0 @@ -#!/usr/bin/env python3 -""" -Скрипт для управления контейнером k8s-portforward -Автор: Сергей Антропов -Сайт: https://devops.org.ru -""" -import sys -import yaml -import subprocess -import re -import os - -CONTAINER_NAME = "k8s-portforward" -IMAGE_NAME = "inecs/ansible-lab:k8s-portforward-latest" - -def get_ports_from_preset(): - """Получает список портов из preset""" - preset_file = "molecule/presets/k8s/kubernetes.yml" - with open(preset_file, 'r') as f: - preset = yaml.safe_load(f) - - addon_ports = preset['kind_clusters'][0].get('addon_ports', {}) - return addon_ports - -def get_port_mappings(ports): - """Генерирует список портов для -p""" - port_list = [] - - # Контейнер должен быть в той же Docker сети, что и Kind - # Пробрасываем порты как HOST_PORT:CONTAINER_PORT - if ports.get('ingress_http'): - port_list.append(f"{ports['ingress_http']}:{ports['ingress_http']}") - if ports.get('ingress_https'): - port_list.append(f"{ports['ingress_https']}:{ports['ingress_https']}") - if ports.get('prometheus'): - port_list.append(f"{ports['prometheus']}:{ports['prometheus']}") - if ports.get('grafana'): - port_list.append(f"{ports['grafana']}:{ports['grafana']}") - if ports.get('kiali'): - port_list.append(f"{ports['kiali']}:{ports['kiali']}") - if ports.get('metrics_server'): - port_list.append(f"{ports['metrics_server']}:{ports['metrics_server']}") - - return port_list - -def start_container(): - """Запускает контейнер port-forward через k8s-controller""" - print("🚀 Запуск контейнера k8s-portforward...") - - # Проверяем, что k8s-controller запущен - result = subprocess.run(["docker", "ps", "--filter", "name=k8s-controller", "--format", "{{.Names}}"], - capture_output=True, text=True) - if "k8s-controller" not in result.stdout: - print("❌ Контейнер k8s-controller не запущен") - print("💡 Запустите: make k8s create kubernetes") - return - - # Получаем порты из preset - ports = get_ports_from_preset() - port_mappings = get_port_mappings(ports) - - if not port_mappings: - print("❌ Нет портов для проброса") - return - - # Формируем команду docker run - cmd = [ - "docker", "run", - "-d", - "--name", CONTAINER_NAME, - "--rm", - "--network", "kind", # Подключаемся к сети Kind - "-v", f"{os.getcwd()}:/workspace", - ] - - # Добавляем порты через -p - for port_map in port_mappings: - cmd.extend(["-p", port_map]) - - cmd.append(IMAGE_NAME) - - print(f"📋 Команда: {' '.join(cmd)}") - - # Выполняем команду через k8s-controller - cmd_str = ' '.join(['"' + arg.replace('"', '\\"') + '"' for arg in cmd]) - result = subprocess.run(["docker", "exec", "k8s-controller", "sh", "-c", cmd_str], - capture_output=True, text=True) - - if result.returncode == 0: - print(f"✅ Контейнер {CONTAINER_NAME} запущен") - print(f"📋 Проброшены порты: {', '.join(port_mappings)}") - else: - print(f"❌ Ошибка: {result.stderr}") - return - - # Показываем логи - print("\n📋 Логи контейнера (первые 20 строк):") - subprocess.run(["docker", "logs", "--tail", "20", CONTAINER_NAME]) - -def stop_container(): - """Останавливает контейнер port-forward""" - print("🛑 Остановка контейнера k8s-portforward...") - - # Проверяем, что k8s-controller запущен - result = subprocess.run(["docker", "ps", "--filter", "name=k8s-controller", "--format", "{{.Names}}"], - capture_output=True, text=True) - if "k8s-controller" not in result.stdout: - print("⚠️ Контейнер k8s-controller не запущен, пытаемся остановить локально...") - result = subprocess.run(["docker", "stop", CONTAINER_NAME], - capture_output=True, text=True) - else: - # Останавливаем через k8s-controller - result = subprocess.run(["docker", "exec", "k8s-controller", "docker", "stop", CONTAINER_NAME], - capture_output=True, text=True) - - if result.returncode == 0: - print(f"✅ Контейнер {CONTAINER_NAME} остановлен") - else: - print(f"⚠️ {result.stderr}") - -def restart_container(): - """Перезапускает контейнер port-forward""" - print("🔄 Перезапуск контейнера k8s-portforward...") - stop_container() - start_container() - -def status_container(): - """Показывает статус контейнера""" - print("📊 Статус контейнера k8s-portforward:") - - # Проверяем, что k8s-controller запущен - result = subprocess.run(["docker", "ps", "--filter", "name=k8s-controller", "--format", "{{.Names}}"], - capture_output=True, text=True) - if "k8s-controller" not in result.stdout: - print("⚠️ Контейнер k8s-controller не запущен, проверяем локально...") - result = subprocess.run(["docker", "ps", "-a", "--filter", f"name={CONTAINER_NAME}", - "--format", "table {{.Names}}\t{{.Status}}\t{{.Ports}}"], - capture_output=True, text=True) - else: - # Проверяем через k8s-controller - result = subprocess.run(["docker", "exec", "k8s-controller", "docker", "ps", "-a", - "--filter", f"name={CONTAINER_NAME}", - "--format", "table {{.Names}}\t{{.Status}}\t{{.Ports}}"], - capture_output=True, text=True) - - if result.returncode == 0: - print(result.stdout) - else: - print("❌ Ошибка при получении статуса") - -def logs_container(): - """Показывает логи контейнера""" - print("📋 Логи контейнера k8s-portforward:") - subprocess.run(["docker", "logs", "-f", CONTAINER_NAME]) - -def main(): - if len(sys.argv) < 2: - print("Usage: portforward_container.py ") - sys.exit(1) - - command = sys.argv[1] - - if command == "start": - start_container() - elif command == "stop": - stop_container() - elif command == "restart": - restart_container() - elif command == "status": - status_container() - elif command == "logs": - logs_container() - else: - print(f"❌ Неизвестная команда: {command}") - print("💡 Доступные команды: start, stop, restart, status, logs") - sys.exit(1) - -if __name__ == "__main__": - main()