Les quatre defauts ont la MEME forme : un repli qui rend un succes au lieu d un refus. 1. Le gabarit dore porte l adresse du cache d avant le renumerotage, et site_inventaire derivait dns_amorcage sans deriver son jumeau artefacts_amorcage. Le site fournissait cette valeur a ses locataires sans se la donner a lui-meme. 2. opnsense_if_zones ignorait la zone neuve, et _if_de retombe sur l ancienne patte PLATE : 20 regles posees sur vlan030, correctes et jamais rencontrees. Le fichier documentait deja le meme incident un mois plus tot. 3. serveur_nginx chargeait domaines.yml sans condition — un SITE ne publie rien a l Internet et n a pas ce registre. Il releve maintenant ce qui existe. 4. Sans registre de domaines, l edge d une exposition retombe sur le GROUPE DE L APPLICATION, jamais serveur_nginx : le vhost genere faisait 43 octets et le deploiement rendait vert. Une derivation qui ne trouve rien ne se distingue pas d une derivation qui n a rien a trouver. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
142 lines
4.8 KiB
YAML
142 lines
4.8 KiB
YAML
---
|
|
- name: Installer nginx
|
|
ansible.builtin.apt:
|
|
name: "{{ serveur_nginx_packages }}"
|
|
state: present
|
|
update_cache: true
|
|
cache_valid_time: 3600
|
|
|
|
# Debian 13 fournit « server_tokens off; » actif dans nginx.conf. Notre drop-in
|
|
# 99-setops.conf le redeclare -> nginx -t echoue (« directive is duplicate »).
|
|
# On neutralise la ligne distro pour que 99-setops.conf soit l'unique source.
|
|
- name: Neutraliser le server_tokens par defaut de Debian
|
|
ansible.builtin.replace:
|
|
path: /etc/nginx/nginx.conf
|
|
regexp: '^(\s*)server_tokens\s+\S+;'
|
|
replace: '\1# server_tokens gere par Set-OPS (conf.d/99-setops.conf)'
|
|
notify: Valider et recharger nginx
|
|
|
|
- name: Deployer le durcissement de base nginx
|
|
ansible.builtin.template:
|
|
src: 99-setops.conf.j2
|
|
dest: /etc/nginx/conf.d/99-setops.conf
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
notify: Valider et recharger nginx
|
|
|
|
- name: Desactiver le site Debian par defaut
|
|
ansible.builtin.file:
|
|
path: /etc/nginx/sites-enabled/default
|
|
state: absent
|
|
when: serveur_nginx_desactiver_defaut | bool
|
|
notify: Valider et recharger nginx
|
|
|
|
- name: Deployer les sites reverse proxy declares a la main
|
|
ansible.builtin.template:
|
|
src: site.conf.j2
|
|
dest: "/etc/nginx/sites-available/{{ item.nom }}.conf"
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
loop: "{{ serveur_nginx_sites }}"
|
|
loop_control:
|
|
label: "{{ item.nom }}"
|
|
notify: Valider et recharger nginx
|
|
|
|
- name: Activer les sites reverse proxy declares a la main
|
|
ansible.builtin.file:
|
|
src: "/etc/nginx/sites-available/{{ item.nom }}.conf"
|
|
dest: "/etc/nginx/sites-enabled/{{ item.nom }}.conf"
|
|
state: link
|
|
loop: "{{ serveur_nginx_sites }}"
|
|
loop_control:
|
|
label: "{{ item.nom }}"
|
|
notify: Valider et recharger nginx
|
|
|
|
# --- Vhosts derives des applications (champ expose) + domaines (edge) ---
|
|
# LE REGISTRE DES DOMAINES PUBLICS EST FACULTATIF, ET IL A FALLU UN SITE POUR LE VOIR.
|
|
#
|
|
# `applications.yml` existe dans tout plan ; `domaines.yml` ne recense que les noms
|
|
# PUBLICS — ceux qu'un tenant publie a l'Internet. Un SITE n'en publie aucun : ses trois
|
|
# services web sont internes, et son plan n'a pas ce fichier.
|
|
#
|
|
# `include_vars` echouait alors sur le fichier absent, et l'edge du site ne se deployait
|
|
# pas :
|
|
#
|
|
# Could not find or access '.../SITE-Chezlepro/plan/domaines.yml'
|
|
#
|
|
# On releve donc d'abord ce qui EXISTE, puis on charge. Un registre absent laisse
|
|
# `domaines_publics` indefini, et `expositions_des_applications` le traite deja comme
|
|
# vide — la suite du role n'a pas besoin d'etre touchee.
|
|
- name: Quels registres du plan existent vraiment ?
|
|
ansible.builtin.stat:
|
|
path: "{{ item }}"
|
|
loop:
|
|
- "{{ setops_plan_dir }}/applications.yml"
|
|
- "{{ setops_plan_dir }}/domaines.yml"
|
|
delegate_to: localhost
|
|
become: false
|
|
register: serveur_nginx_registres
|
|
when: serveur_nginx_publier_expositions | bool
|
|
|
|
- name: Charger les registres applications et domaines
|
|
ansible.builtin.include_vars:
|
|
file: "{{ item.item }}"
|
|
loop: "{{ serveur_nginx_registres.results | default([]) }}"
|
|
loop_control:
|
|
label: "{{ item.item | basename }}"
|
|
when:
|
|
- serveur_nginx_publier_expositions | bool
|
|
- item.stat.exists | default(false)
|
|
|
|
- name: Lister les expositions destinees a cet edge
|
|
ansible.builtin.set_fact:
|
|
serveur_nginx_expositions: >-
|
|
{{ {'applications': applications | default({})}
|
|
| expositions_des_applications({'domaines_publics': domaines_publics | default({})}, serveur_nginx_groupe) }}
|
|
when: serveur_nginx_publier_expositions | bool
|
|
|
|
- name: Deployer les vhosts derives des expositions web
|
|
ansible.builtin.template:
|
|
src: expositions.conf.j2
|
|
dest: /etc/nginx/sites-available/expositions.conf
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
when: serveur_nginx_publier_expositions | bool
|
|
notify: Valider et recharger nginx
|
|
|
|
- name: Activer les vhosts derives des expositions web
|
|
ansible.builtin.file:
|
|
src: /etc/nginx/sites-available/expositions.conf
|
|
dest: /etc/nginx/sites-enabled/expositions.conf
|
|
state: link
|
|
when: serveur_nginx_publier_expositions | bool
|
|
notify: Valider et recharger nginx
|
|
|
|
- name: Activer et demarrer nginx
|
|
when: not ansible_check_mode
|
|
ansible.builtin.systemd:
|
|
name: "{{ serveur_nginx_service_name }}"
|
|
enabled: true
|
|
state: started
|
|
|
|
# --- Sonde de supervision (docs/supervision-conception.md) --------------------------
|
|
# Le role qui possede la verite depose sa propre sonde ; le porteur (`client_sante`) la
|
|
# fait tourner et pousse le verdict, sans savoir ce qu'elle mesure.
|
|
- 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 « edge »
|
|
ansible.builtin.template:
|
|
src: sonde-edge.sh.j2
|
|
dest: /usr/local/lib/setops/sondes/edge.sh
|
|
owner: root
|
|
group: root
|
|
mode: "0750"
|