""" Constantes et énumérations de l'application. Centralise toutes les valeurs constantes pour éviter les magic strings. """ from enum import Enum from typing import Dict class HostStatus(str, Enum): """Statuts possibles d'un hôte.""" ONLINE = "online" OFFLINE = "offline" WARNING = "warning" UNKNOWN = "unknown" class TaskStatus(str, Enum): """Statuts possibles d'une tâche.""" PENDING = "pending" RUNNING = "running" COMPLETED = "completed" FAILED = "failed" CANCELLED = "cancelled" class LogLevel(str, Enum): """Niveaux de log.""" DEBUG = "DEBUG" INFO = "INFO" WARN = "WARN" WARNING = "WARNING" ERROR = "ERROR" class ScheduleStatus(str, Enum): """Statuts possibles d'un schedule.""" NEVER = "never" RUNNING = "running" SUCCESS = "success" FAILED = "failed" CANCELED = "canceled" class ScheduleType(str, Enum): """Types de schedule.""" ONCE = "once" RECURRING = "recurring" class RecurrenceType(str, Enum): """Types de récurrence.""" DAILY = "daily" WEEKLY = "weekly" MONTHLY = "monthly" CUSTOM = "custom" class TargetType(str, Enum): """Types de cible pour les schedules.""" GROUP = "group" HOST = "host" class NotificationType(str, Enum): """Types de notification pour les schedules.""" NONE = "none" ALL = "all" ERRORS = "errors" class SourceType(str, Enum): """Types de source pour les tâches.""" SCHEDULED = "scheduled" MANUAL = "manual" ADHOC = "adhoc" class AnsibleModule(str, Enum): """Modules Ansible courants pour les commandes ad-hoc.""" SHELL = "shell" COMMAND = "command" RAW = "raw" PING = "ping" SETUP = "setup" class GroupType(str, Enum): """Types de groupes Ansible.""" ENV = "env" ROLE = "role" # === Mapping Actions → Playbooks === ACTION_PLAYBOOK_MAP: Dict[str, str] = { "upgrade": "vm-upgrade.yml", "reboot": "vm-reboot.yml", "health-check": "health-check.yml", "backup": "backup-config.yml", "bootstrap": "bootstrap-host.yml", } # === Noms lisibles des actions === ACTION_DISPLAY_NAMES: Dict[str, str] = { "upgrade": "Mise à jour système", "reboot": "Redémarrage système", "health-check": "Vérification de santé", "backup": "Sauvegarde", "deploy": "Déploiement", "rollback": "Rollback", "maintenance": "Maintenance", "bootstrap": "Bootstrap Ansible", } # === Actions valides === VALID_ACTIONS = list(ACTION_DISPLAY_NAMES.keys()) # === Emojis pour les statuts de tâches === TASK_STATUS_EMOJIS: Dict[str, str] = { TaskStatus.COMPLETED: "✅", TaskStatus.FAILED: "❌", TaskStatus.RUNNING: "🔄", TaskStatus.PENDING: "⏳", TaskStatus.CANCELLED: "🚫", } # === Labels pour les types de source === SOURCE_TYPE_LABELS: Dict[str, str] = { SourceType.SCHEDULED: "Planifié", SourceType.MANUAL: "Manuel", SourceType.ADHOC: "Ad-hoc", } # === Catégories ad-hoc par défaut === DEFAULT_ADHOC_CATEGORIES = [ {"name": "default", "description": "Commandes générales", "color": "#7c3aed", "icon": "fa-terminal"}, {"name": "diagnostic", "description": "Commandes de diagnostic", "color": "#10b981", "icon": "fa-stethoscope"}, {"name": "maintenance", "description": "Commandes de maintenance", "color": "#f59e0b", "icon": "fa-wrench"}, {"name": "deployment", "description": "Commandes de déploiement", "color": "#3b82f6", "icon": "fa-rocket"}, ] # === Timeouts par défaut === DEFAULT_ADHOC_TIMEOUT = 60 DEFAULT_SCHEDULE_TIMEOUT = 3600 SSH_CONNECT_TIMEOUT = 10 # === Limites de pagination === DEFAULT_PAGE_LIMIT = 50 MAX_PAGE_LIMIT = 1000