homelab_automation/app/core/constants.py

151 lines
3.6 KiB
Python

"""
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