Mesure avant de decider : ~21 Mo de RSS par VM pour 28 a 189 requetes servies. Le gain de cache est negligeable ; ce qu'on recupere, c'est un demon au lieu de cinq et un endroit a regarder au lieu de cinq. Pas sur la frontiere : un resolveur de SITE devrait connaitre la zone interne de chaque tenant, et un tenant dont le resolveur vit chez l'hebergeur ne peut plus s'emanciper avec. La recursion est generique, la zone interne ne l'est pas. L'autoritatif se replie sur 127.0.0.1:5300 -- derive de la colocalisation, pas declare a la main. Son port devient `derive` dans meta/flux.yml : les deux lient 53 mais sur des adresses differentes. Deux pieges. Unbound refuse d'interroger une loopback par defaut : sans lever do-not-query-localhost, toute la zone rendait SERVFAIL. Et le plancher /etc/hosts MASQUAIT la panne -- getent repondait, dig disait SERVFAIL. La tache de validation du role avait raison contre moi. client_unbound n'installant plus Unbound, son nom mentait : client_resolveur. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
63 lines
2.4 KiB
YAML
63 lines
2.4 KiB
YAML
---
|
|
- name: Appliquer le groupe serveur_debian
|
|
hosts: serveur_debian
|
|
become: true
|
|
# Le verrou dpkg est tenu par les maj automatiques de Debian, par vagues, plusieurs
|
|
# minutes apres le premier demarrage. Pose ICI plutot que dans chaque role : toute
|
|
# tache apt du play en herite, y compris celles des roles inclus.
|
|
module_defaults:
|
|
ansible.builtin.apt:
|
|
lock_timeout: 300
|
|
|
|
gather_facts: true
|
|
|
|
pre_tasks:
|
|
- name: Vérifier que la cible est Debian
|
|
ansible.builtin.assert:
|
|
that:
|
|
- ansible_facts.distribution == "Debian"
|
|
fail_msg: "Ce playbook est prévu pour Debian."
|
|
|
|
# Résolveur d'AMORÇAGE, posé avant `common_packages` — donc avant le premier `apt`.
|
|
# Sans lui, le déploiement échoue avant d'avoir commencé : le gabarit doré transporte
|
|
# un `/etc/resolv.conf` figé, et le `dns-nameservers` écrit par cloud-init reste sans
|
|
# effet faute de `resolvconf` (qu'on ne peut pas installer sans résolution — la boucle
|
|
# se referme). Mesuré le 2026-08-06 sur deux VM neuves.
|
|
#
|
|
# PASSAGE DE RELAIS : `client_resolveur` reprend ce fichier plus tard pour le basculer
|
|
# vers `127.0.0.1`. La garde ci-dessous le respecte — sans elle, chaque déploiement
|
|
# défairait la bascule, et deux rôles se disputeraient le même fichier sans fin.
|
|
- name: Lire le résolveur en place
|
|
ansible.builtin.slurp:
|
|
src: /etc/resolv.conf
|
|
register: serveur_debian_resolv_actuel
|
|
failed_when: false
|
|
changed_when: false
|
|
|
|
- name: Poser le résolveur d'amorçage (avant tout apt)
|
|
ansible.builtin.copy:
|
|
dest: /etc/resolv.conf
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
content: |
|
|
# Géré par Set-OPS — résolveur d'amorçage (intrant `dns_amorcage`).
|
|
# Remplacé par `client_resolveur` lorsqu'il bascule vers le résolveur local.
|
|
{% for serveur in dns_amorcage.split(',') if serveur | trim %}
|
|
nameserver {{ serveur | trim }}
|
|
{% endfor %}
|
|
when:
|
|
- dns_amorcage is defined
|
|
- dns_amorcage | string | length > 0
|
|
- "'127.0.0.1' not in (serveur_debian_resolv_actuel.content | default('') | b64decode | string)"
|
|
|
|
roles:
|
|
- common_packages
|
|
- hosts_statiques
|
|
- qemu_guest_agent
|
|
- cloud_init
|
|
- sudo_ansible
|
|
- chrony
|
|
- ssh_baseline
|
|
- systemd_ssh_auto
|
|
- motd
|