Existe-t-il des librairies python pour analyser les fichiers de zone Bind ? En gros, quelque chose qui aiderait à ajouter/supprimer des zones et des enregistrements. Cela doit fonctionner même si quelqu'un modifie le fichier de zone à la main, donc écraser les fichiers de zone à chaque fois n'est pas une solution.
Réponses
Trop de publicités?Je n'ai pas pu utiliser bicop pour les fichiers de zone classique comme ceux-ci :
$TTL 86400
@ IN SOA ns1.first-ns.de. postmaster.robot.first-ns.de. (
2006040800 ; serial
14400 ; refresh
1800 ; retry
604800 ; expire
86400 ) ; minimum
@
IN NS ns1.first-ns.de.
Je vais jeter un coup d'œil à dnspython
Voir la réponse ci-dessus concernant le bicop.
Par ailleurs, l'index des paquets Python à l'adresse suivante http://pypi.python.org/pypi est un endroit idéal pour rechercher des paquets Python.
EDITAR : Ce qui suit peut encore être utile à quelqu'un qui essaie de comprendre le parsing simple, mais bicop est apparemment une solution existante.
Si quelqu'un a modifié la configuration à la main, et que vous ne voulez pas l'écraser, cela implique-t-il que vous souhaitez insérer/supprimer des lignes d'une configuration existante, en laissant tous les commentaires etc. intacts ? Cela évite d'analyser puis de ré-écrire la configuration, mais c'est aussi un point positif : vous n'avez pas besoin d'analyser complètement le fichier pour atteindre votre objectif.
Pour ajouter un enregistrement, vous pouvez essayer une approche simple telle que
# define zone_you_care_about and line_you_wish_to_insert first, then:
for line in bindfile.read():
out.write(line + '\n')
if ('zone "%s" in' % zone_you_care_about) in line:
out.write(line_you_wish_to_insert)
Un code similaire fonctionne pour supprimer une ligne :
# define zone_you_care_about and relevant_text_to_remove, then:
for line in bindfile.read():
if not relevant_text_to_remove in line:
out.write(line + '\n')
Vous pouvez aller aussi loin que vous le souhaitez avec de simples bouts de code comme celui-ci.