sync-from-pdns.py 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. from django.core.management import BaseCommand, CommandError
  2. from desecapi.models import Domain, RRset
  3. class Command(BaseCommand):
  4. help = 'Import authoritative data from pdns, making the local database consistent with pdns.'
  5. def add_arguments(self, parser):
  6. parser.add_argument('domain-name', nargs='*', help='Domain name to import. If omitted, will import all domains that are known locally.')
  7. def handle(self, *args, **options):
  8. domains = Domain.objects.all()
  9. if options['domain-name']:
  10. domains = domains.filter(name__in=options['domain-name'])
  11. domain_names = domains.values_list('name', flat=True)
  12. for domain_name in options['domain-name']:
  13. if domain_name not in domain_names:
  14. raise CommandError('{} is not a known domain'.format(domain_name))
  15. for domain in domains:
  16. try:
  17. domain.sync_from_pdns()
  18. except Exception as e:
  19. msg = 'Error while processing {}: {}'.format(domain.name, e)
  20. raise CommandError(msg)
  21. else:
  22. print(domain.name)