Well I wroted some bash scripts (1000lines for cron, 500 for creating jobs) for adding
dynamically records via mysql jobs through knotc cli.
When you use journal like :
database:
storage: "/var/lib/knot"
with templates like syncing files for backup (zonefile-sync to zero)
- id: "unsigned-zones"
storage: "/var/lib/knot/uzones"
file: "%s"
notify: [ "XXX", "XXX", "XXX", "XXX" ]
acl: [ "sec1-transfer", "sec2-transfer",
"sec3-transfer", "sec4-transfer" ]
zonefile-sync: "0"
zonefile-load: "whole"
journal-content: "changes"
serial-policy: "unixtime"
you can easyli call to knotc
knotc zone-freeze $domainname
knotc zone-begin $domainname
knotc zone-set $domainname //parameters
knotc zone-commit $domainname
knotc zone-check $domainname
knotc zone-reload $domainnam
knotc zone-thaw $domainname
and your records are updated dynamically.
excercise of bash adding (data are from mysql)
if [ "$add2" == "MX" ] ; then
add3=$(sed 's|*|\\\*|g' <<<
$add3)
commandstate=$(knotc zone-set $domainname $add3
$add5 $add2 $add4 $add7 )
if [ "$commandstate" != "OK" ]
; then
echo "prikaz zone-set problem :
vyjimka : $commandstate"
setfailrecord "FAIL-ADD"
"$col1"
setfaildatarecord "$col3"
exit 1
fi
else
add3=$(sed 's|*|\\\*|g' <<<
$add3)
commandstate=$(knotc zone-set $domainname $add3
$add5 $add2 $add7 )
if [ "$commandstate" != "OK" ]
; then
echo "prikaz zone-set problem :
vyjimka : $commandstate"
setfailrecord "FAIL-ADD"
"$col1"
setfaildatarecord "$col3"
exit 1
fi
fi
same as for signing, creating deleting domains, it works perfect. Worst part is handle the
DNS specific issues like same name for A and CNAME and general rules of correct DNS zone.
But if experts handle it, you dont need to implement complex logic in it.
It has good docu and easy work with knotc:
https://www.knot-dns.cz/docs/3.0/html/man_knotc.html