Files
Fail2banMqttActionBanishment/emitter/banevents/management/commands/create_join_token.py
T
2026-07-20 11:05:07 +02:00

41 lines
1.6 KiB
Python

"""É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 <nom_du_noeud> [--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.')