--- # 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 # LE ROLE QUI POSSEDE LA VERITE DEPOSE SA PROPRE SONDE. `client_sante` la fait tourner et # pousse le resultat. # # L'ASSERTION CI-DESSUS NE VAUT QUE POUR LE DEPLOIEMENT DE CE ROLE. La liste des # locataires du site, elle, bouge ailleurs — au plan. La sonde rejoue la meme exigence # toutes les quinze minutes, ce qui est le seul moyen de s'en apercevoir AVANT que le # nouveau locataire ne tente son premier amorcage. - name: Assurer le repertoire des sondes de supervision ansible.builtin.file: path: /usr/local/lib/setops/sondes state: directory owner: root group: root mode: "0755" - name: Deposer la sonde « resolution-locataires » ansible.builtin.template: src: sonde-resolution-locataires.sh.j2 dest: /usr/local/lib/setops/sondes/resolution-locataires.sh owner: root group: root mode: "0750"