"""Émet un jeton d'auto-inscription à usage unique pour un nouveau noeud (flux "kubeadm join", voir ROADMAP.md et banevents/views.py::join_node). À lancer sur le MASTER uniquement — le jeton n'a de sens que contre l'endpoint /api/join/ de cette même instance. Usage : manage.py create_join_token [--ttl-minutes 60] Le jeton n'est affiché QU'UNE SEULE FOIS ici, en clair — seul son hash est persisté (JoinToken.token_hash). Impossible de le retrouver après coup : en cas de perte, en émettre un nouveau (le précédent reste valide jusqu'à son expiration ou son utilisation, aucun conflit). """ from typing import Any from django.core.management.base import BaseCommand from banevents.enrollment import DEFAULT_TTL_MINUTES, issue_join_token, join_command class Command(BaseCommand): help = "Émet un jeton d'auto-inscription à usage unique pour un nouveau noeud." def add_arguments(self, parser: Any) -> None: parser.add_argument('node_name') parser.add_argument('--ttl-minutes', type=int, default=DEFAULT_TTL_MINUTES) def handle(self, *args: Any, **options: Any) -> None: node_name = options['node_name'] ttl_minutes = options['ttl_minutes'] token, _ = issue_join_token(node_name, ttl_minutes) self.stdout.write(self.style.SUCCESS( f"Jeton émis pour '{node_name}' (expire dans {ttl_minutes} min, usage unique) :" )) self.stdout.write('') self.stdout.write(f' {join_command(node_name, token)}') self.stdout.write('') self.stdout.write('À lancer sur le nouveau noeud, puis "sudo make install" comme d\'habitude.')