/
simon202
/
LAB11_CHAOS_ENGINEERING
Обзор
Документация
Войти
/
simon202
/
LAB11_CHAOS_ENGINEERING
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
start_localstack.py
149 строк
5 KB
simon202
upload files
20 дек 2025, 09:40
20 дек 2025, 09:40
3f2520b
Код
Авторство
О чём код?
""" Скрипт для запуска и остановки LocalStack """ import subprocess import time import requests import os def check_docker(): """Проверяет доступность Docker""" try: result = subprocess.run( ['docker', 'info'], capture_output=True, text=True, timeout=10 ) return result.returncode == 0 except Exception as e: print(f"❌ Docker недоступен: {e}") return False def check_localstack_running(): """Проверяет запущен ли LocalStack""" try: response = requests.get("http://localhost:4566/_localstack/health", timeout=5) return response.status_code == 200 except: return False def start_localstack(): """Запускает LocalStack через docker-compose""" print("🚀 Запускаем LocalStack...") # Проверяем Docker if not check_docker(): print("❌ Docker не запущен. Пожалуйста, запустите Docker Desktop") return False # Проверяем, не запущен ли уже LocalStack if check_localstack_running(): print("✅ LocalStack уже запущен") return True # Запускаем через docker-compose script_dir = os.path.dirname(os.path.abspath(__file__)) compose_file = os.path.join(script_dir, "docker-compose.yml") try: result = subprocess.run( ['docker-compose', '-f', compose_file, 'up', '-d'], capture_output=True, text=True, timeout=60 ) if result.returncode != 0: print(f"❌ Ошибка запуска: {result.stderr}") return False # Ждем пока LocalStack полностью запустится print("⏳ Ожидаем запуска LocalStack...") for i in range(30): if check_localstack_running(): print("✅ LocalStack успешно запущен!") return True time.sleep(2) print(f" Попытка {i + 1}/30...") print("❌ Таймаут ожидания LocalStack") return False except subprocess.TimeoutExpired: print("❌ Таймаут при запуске LocalStack") return False except Exception as e: print(f"❌ Ошибка: {e}") return False def stop_localstack(): """Останавливает LocalStack""" print("🛑 Останавливаем LocalStack...") script_dir = os.path.dirname(os.path.abspath(__file__)) compose_file = os.path.join(script_dir, "docker-compose.yml") try: result = subprocess.run( ['docker-compose', '-f', compose_file, 'down'], capture_output=True, text=True, timeout=30 ) if result.returncode == 0: print("✅ LocalStack остановлен") return True else: print(f"⚠️ Предупреждение: {result.stderr}") return False except Exception as e: print(f"❌ Ошибка остановки: {e}") return False def get_localstack_status(): """Получает статус сервисов LocalStack""" try: response = requests.get("http://localhost:4566/_localstack/health", timeout=5) if response.status_code == 200: status = response.json() print("📊 Статус LocalStack:") print(f" Версия: {status.get('version', 'N/A')}") services = status.get('services', {}) for service, state in services.items(): emoji = "✅" if state == "running" else "❌" print(f" {emoji} {service}: {state}") return status else: print("❌ Не удалось получить статус") return None except Exception as e: print(f"❌ LocalStack недоступен: {e}") return None if __name__ == "__main__": import sys if len(sys.argv) > 1: command = sys.argv[1].lower() if command == "start": start_localstack() elif command == "stop": stop_localstack() elif command == "status": get_localstack_status() else: print("Использование: python start_localstack.py [start|stop|status]") else: # По умолчанию запускаем if start_localstack(): get_localstack_status()