@@ -74,6 +74,7 @@ def pch_do(self):
7474 def __init__ (self ):
7575 self ._domain_additions = set ()
7676 self ._domain_deletions = set ()
77+ self ._domain_create_payload = {}
7778 self ._rr_set_additions = {}
7879 self ._rr_set_modifications = {}
7980 self ._rr_set_deletions = {}
@@ -119,6 +120,7 @@ def __enter__(self):
119120 )
120121 self ._domain_additions = set ()
121122 self ._domain_deletions = set ()
123+ self ._domain_create_payload = {}
122124 self ._rr_set_additions = {}
123125 self ._rr_set_modifications = {}
124126 self ._rr_set_deletions = {}
@@ -227,7 +229,7 @@ def _nslord_for_domain(self, domain_name):
227229 return nslord or Domain .NSLord .PDNS
228230
229231 @abstractmethod
230- def _create_domain_change (self , domain_name , nslord ):
232+ def _create_domain_change (self , domain_name , nslord , create_payload ):
231233 raise NotImplementedError ()
232234
233235 @abstractmethod
@@ -258,7 +260,10 @@ def _compute_changes(self):
258260 for domain_name in self ._rr_set_additions .keys () | self ._domain_additions :
259261 nslord = self ._nslord_for_domain (domain_name )
260262 if domain_name in self ._domain_additions :
261- changes .append (self ._create_domain_change (domain_name , nslord ))
263+ create_payload = self ._domain_create_payload .get (domain_name )
264+ changes .append (
265+ self ._create_domain_change (domain_name , nslord , create_payload )
266+ )
262267
263268 additions = self ._rr_set_additions .get (domain_name , set ())
264269 modifications = self ._rr_set_modifications .get (domain_name , set ())
@@ -356,6 +361,9 @@ def _domain_updated(self, domain: Domain, created=False, deleted=False):
356361 deletions .remove (name )
357362 else :
358363 additions .add (name )
364+ create_payload = getattr (domain , "_csk_private_key_data" , None )
365+ if create_payload :
366+ self ._domain_create_payload [name ] = create_payload
359367 elif deleted :
360368 if name in additions :
361369 additions .remove (name )
@@ -430,12 +438,22 @@ def pdns_do(self):
430438 self .nslord_do ()
431439
432440 class CreateDomain (PDNSChange ):
441+ def __init__ (self , domain_name , create_payload = None ):
442+ super ().__init__ (domain_name )
443+ self ._create_payload = create_payload or {}
444+
433445 @property
434446 def axfr_required (self ):
435447 return True
436448
437449 def nslord_do (self ):
438450 pdns .create_zone_lord (self .domain_name )
451+ if self ._create_payload :
452+ pdns .import_csk_key (
453+ self .domain_name ,
454+ dnskey = self ._create_payload ["dnskey" ],
455+ private_key = self ._create_payload ["private_key" ],
456+ )
439457 pdns .create_zone_master (self .domain_name )
440458 pdns .update_catalog (self .domain_name )
441459
@@ -534,8 +552,8 @@ def __str__(self):
534552 )
535553 )
536554
537- def _create_domain_change (self , domain_name , nslord ):
538- return PDNSChangeTracker .CreateDomain (domain_name )
555+ def _create_domain_change (self , domain_name , nslord , create_payload ):
556+ return PDNSChangeTracker .CreateDomain (domain_name , create_payload )
539557
540558 def _delete_domain_change (self , domain_name , nslord ):
541559 return PDNSChangeTracker .DeleteDomain (domain_name )
@@ -553,13 +571,23 @@ class KnotChange(BaseChangeTracker.Change):
553571 pass
554572
555573 class CreateDomain (KnotChange ):
574+ def __init__ (self , domain_name , create_payload = None ):
575+ super ().__init__ (domain_name )
576+ self ._create_payload = create_payload or {}
577+
556578 @property
557579 def axfr_required (self ):
558580 return True
559581
560582 def nslord_do (self ):
561583 knot .create_zone (self .domain_name )
562584 knot .ensure_default_ns (self .domain_name )
585+ if self ._create_payload :
586+ knot .import_csk_key (
587+ self .domain_name ,
588+ dnskey = self ._create_payload ["dnskey" ],
589+ private_key = self ._create_payload ["private_key" ],
590+ )
563591 pdns .create_zone_master (
564592 self .domain_name , master_host = settings .NSLORD_KNOT_HOST
565593 )
@@ -626,8 +654,8 @@ def __str__(self):
626654 )
627655 )
628656
629- def _create_domain_change (self , domain_name , nslord ):
630- return KnotChangeTracker .CreateDomain (domain_name )
657+ def _create_domain_change (self , domain_name , nslord , create_payload ):
658+ return KnotChangeTracker .CreateDomain (domain_name , create_payload )
631659
632660 def _delete_domain_change (self , domain_name , nslord ):
633661 return KnotChangeTracker .DeleteDomain (domain_name )
@@ -646,8 +674,8 @@ def _backend(self, nslord):
646674 return KnotChangeTracker
647675 return PDNSChangeTracker
648676
649- def _create_domain_change (self , domain_name , nslord ):
650- return self ._backend (nslord ).CreateDomain (domain_name )
677+ def _create_domain_change (self , domain_name , nslord , create_payload ):
678+ return self ._backend (nslord ).CreateDomain (domain_name , create_payload )
651679
652680 def _delete_domain_change (self , domain_name , nslord ):
653681 return self ._backend (nslord ).DeleteDomain (domain_name )
0 commit comments