--- - 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"