--- # CE RÔLE MARQUE UN RÉSOLVEUR ; IL N'EN INSTALLE PAS. # # Il présuppose `serveur_resolveur` sur le même hôte et lit ses variables. Le message # qu'on obtiendrait sans lui — « variable non définie » — envoie chercher une faute de # frappe alors que la cause est une déclaration incomplète, un cran au-dessus. - name: Le rôle qui installe le résolveur est-il bien là ? ansible.builtin.assert: that: - serveur_resolveur_reseaux_autorises is defined - serveur_resolveur_reseaux_autorises | length > 0 fail_msg: >- `serveur_resolveur_site` marque un résolveur existant, il n'en installe aucun. Cet hôte doit AUSSI porter `serveur_resolveur`. Ajouter les deux rôles à sa déclaration, dans cet ordre. # UN MARQUEUR QUI NE VÉRIFIE PAS CE QU'IL DÉSIGNE NE MARQUE RIEN (D-68). # # La liste d'autorisation vient de l'inventaire du site. Si elle n'a pas reçu les # supernets des tenants, ce rôle attribuerait une responsabilité que le service refuse # d'assumer — et la panne, chez le locataire, ressemblerait à un DNS mort alors que c'est # une ACL. C'est exactement ce qui est arrivé au site lui-même quand il a été découpé en # zones (voir `site_inventaire.py`). - name: Quels supernets de tenants ce résolveur doit-il servir ? ansible.builtin.set_fact: serveur_resolveur_site_attendus: >- {{ serveur_resolveur_site_supernets_tenants | default([]) }} - name: Exiger que les tenants du site figurent dans la liste d'autorisation ansible.builtin.assert: that: - serveur_resolveur_site_attendus | difference(serveur_resolveur_reseaux_autorises) | length == 0 fail_msg: >- Ce résolveur est déclaré résolveur DU SITE, mais sa liste d'autorisation n'admet pas {{ serveur_resolveur_site_attendus | difference(serveur_resolveur_reseaux_autorises) | join(', ') }}. Les locataires seraient refusés, et leur panne ressemblerait à un DNS mort. success_msg: >- {{ serveur_resolveur_site_attendus | length }} supernet(s) de tenant admis. when: serveur_resolveur_site_attendus | length > 0 # ÉCRIRE, PUIS RELIRE. La seule prise de ce rôle sur le réel est de vérifier que le # service qu'il désigne existe vraiment. Sans ça, il donnerait la résolution du site à un # port que personne n'écoute — et un écosystème neuf attendrait sans savoir pourquoi. - name: Le résolveur écoute-t-il vraiment ? ansible.builtin.wait_for: host: "127.0.0.1" port: "{{ serveur_resolveur_site_port }}" timeout: 30 when: not ansible_check_mode