Files
dilib_operations/monitoring/management/commands/register_agent.py
T
ms 2c1c48df0c
PostgreSQL integration / tests (push) Has been cancelled
init
2026-11-09 13:15:48 +01:00

21 lines
1.3 KiB
Python

import secrets
from django.core.management.base import BaseCommand,CommandError
from django.db import transaction
from monitoring.models import Segment,Server,AgentCredential,Audit
from monitoring.auth import digest
class Command(BaseCommand):
help='Register host or rotate its token; prints the secret once. Keep output private.'
def add_arguments(self,p):
p.add_argument('name');p.add_argument('--segment',required=True);p.add_argument('--address',default='');p.add_argument('--rotate',action='store_true')
@transaction.atomic
def handle(self,*args,**o):
seg,_=Segment.objects.get_or_create(name=o['segment'])
s,created=Server.objects.get_or_create(name=o['name'],defaults={'segment':seg,'address':o['address']})
if not created and not o['rotate']: raise CommandError('Already registered; use --rotate to revoke old credentials')
AgentCredential.objects.filter(server=s).update(active=False)
token=secrets.token_urlsafe(48)
AgentCredential.objects.create(server=s,digest=digest(token))
Audit.objects.create(actor='management-command',action='register_agent',details={'server':str(s.pk),'rotated':not created})
self.stdout.write('SERVER_ID='+str(s.pk))
self.stdout.write('AGENT_TOKEN='+token)