$ORIGIN {{ serveur_powerdns_zone }}. $TTL {{ serveur_powerdns_ttl }} @ IN SOA {{ serveur_powerdns_nameserver }}.{{ serveur_powerdns_zone }}. {{ serveur_powerdns_contact }}. ( {{ serveur_powerdns_serial }} {{ serveur_powerdns_soa_refresh }} {{ serveur_powerdns_soa_retry }} {{ serveur_powerdns_soa_expire }} {{ serveur_powerdns_soa_minimum }} ) @ IN NS {{ serveur_powerdns_nameserver }}.{{ serveur_powerdns_zone }}. {{ serveur_powerdns_nameserver }} IN A {{ hostvars[groups['serveur_powerdns'][0]].ansible_host | default('127.0.0.1') }} {# LE PLAN L'EMPORTE SUR LE DEFAUT DU ROLE (2026-08-25). `serveur_powerdns_records` porte un defaut de commodite : `dns IN CNAME ns1`. Le plan du site, lui, expose `dns.genese.internal` pour `serveur_resolveur` — ce qui produit un `dns IN A`. Un nom ne peut pas porter a la fois un CNAME et un A : `named-checkzone` a refuse la zone (« CNAME and other data »), et PowerDNS ne l'a pas servie du tout. La garde a bien fonctionne — elle a arrete une zone cassee avant qu'elle soit servie. Mais elle laissait le DNS du site sans zone tant que la collision durait. On ecarte donc le record statique quand le plan expose le meme nom. C'est le sens de marche du depot : ce qui est DECLARE AU PLAN prime sur ce qu'un role suppose par defaut. Les deux pointaient de toute facon vers la meme machine. #} {% set _exposes = [] %} {% if serveur_powerdns_publier_expositions | default(false) %} {% for expo in serveur_powerdns_expositions | default([]) if expo.domaine == serveur_powerdns_zone %} {% set _ = _exposes.append(expo.fqdn[:-(serveur_powerdns_zone | length + 1)]) %} {% endfor %} {% endif %} {% for record in serveur_powerdns_records if record.name not in _exposes %} {{ record.name }} IN {{ record.type }} {{ record.value }} {% endfor %} {% set emitted = [] %} {% for group_name in serveur_powerdns_inventory_groups %} {% for host_name in groups.get(group_name, []) | sort %} {% if hostvars[host_name].ansible_host is defined and host_name not in emitted %} {{ host_name }} IN A {{ hostvars[host_name].ansible_host }} {% set _ = emitted.append(host_name) %} {% endif %} {% endfor %} {% endfor %} {% if serveur_powerdns_publier_expositions | default(false) %} {% for expo in serveur_powerdns_expositions | default([]) if expo.domaine == serveur_powerdns_zone %} {% set edge_hosts = groups.get(expo.edge, []) %} {% if edge_hosts and hostvars[edge_hosts[0]].ansible_host is defined %} {{ expo.fqdn[:-(serveur_powerdns_zone | length + 1)] }} IN A {{ hostvars[edge_hosts[0]].ansible_host }} {% endif %} {% endfor %} {% endif %}