--- # LA CONDITION EST ECRITE D'UN SEUL TENANT, ET C'EST DELIBERE. # # `scripts/verifier_intrants.py` lit les `assert` de la forme `var | length > 0` comme un # CONTRAT : l'instance doit fournir cette valeur. Et il ignore volontairement les `when:` # — un intrant exige sous condition reste un intrant exige. # # Ecrite en deux morceaux (`that: var | length > 0` + `when: actif`), cette garde # promettait donc un secret pour une console FERMEE, et P32 le refusait a juste titre. # Ecrite en une implication, elle dit ce qu'elle veut vraiment dire : SI la console est # ouverte, ALORS un mot de passe. Ne pas la « simplifier » en la recoupant en deux. - name: Exiger un secret si — et seulement si — la console d'administration est ouverte ansible.builtin.assert: that: - not (serveur_collabora_admin_actif | bool) or (serveur_collabora_admin_mot_de_passe | length > 0) fail_msg: >- La console d'administration est ouverte mais son mot de passe est vide. Le renseigner depuis la voûte de l'instance, ou refermer la console (`serveur_collabora_admin_actif: false`). - name: Assurer le repertoire des trousseaux apt ansible.builtin.file: path: /etc/apt/keyrings state: directory owner: root group: root mode: "0755" # Récupérée UNE FOIS, comme la clé Smallstep : une plateforme souveraine ne recontacte pas # un serveur étranger à chaque déploiement pour une clé déjà installée. Une rotation amont # ne passe pas inaperçue pour autant — `apt` refuse alors le dépôt, bruyamment. - name: Cette ressource est-elle deja recuperee ? (cle Collabora) ansible.builtin.stat: path: "{{ serveur_collabora_depot_cle_fichier }}" register: serveur_collabora_cle_presente - name: Telecharger la cle de signature Collabora when: not serveur_collabora_cle_presente.stat.exists ansible.builtin.get_url: url: "{{ serveur_collabora_depot_cle_url }}" dest: "{{ serveur_collabora_depot_cle_fichier }}" owner: root group: root mode: "0644" timeout: 30 register: serveur_collabora_cle retries: 5 delay: 6 until: serveur_collabora_cle is succeeded # DEPOT PLAT : `Suites: ./`, aucun composant. Une source classique ne le trouverait pas. - name: Ajouter le depot apt Collabora ansible.builtin.template: src: collabora.sources.j2 dest: /etc/apt/sources.list.d/collabora.sources owner: root group: root mode: "0644" - name: Installer Collabora Online when: not ansible_check_mode # dry-run : le depot n'est pas reellement ajoute ansible.builtin.apt: name: "{{ serveur_collabora_paquets }}" state: present update_cache: true - name: Assurer le repertoire du fragment systemd ansible.builtin.file: path: "{{ serveur_collabora_fragment | dirname }}" state: directory owner: root group: root mode: "0755" # LA CONFIGURATION DE SET-OPS TIENT EN UN FICHIER, et le coolwsd.xml du paquet reste # intact. Voir defaults/main.yml pour le raisonnement. - name: Deployer la surcharge Set-OPS ansible.builtin.template: src: setops.conf.j2 dest: "{{ serveur_collabora_fragment }}" owner: root group: root mode: "0640" notify: Redemarrer Collabora - name: Appliquer les redemarrages avant de verifier ansible.builtin.meta: flush_handlers - name: Activer et demarrer Collabora when: not ansible_check_mode ansible.builtin.systemd: name: "{{ serveur_collabora_service }}" enabled: true state: started daemon_reload: true # ECRIRE, PUIS RELIRE (D-68). Un service « active » qui ne repond pas a `capabilities` # est un vert sur un perimetre vide : Nextcloud le decouvrirait a la premiere ouverture # de document, c'est-a-dire devant un usager. - name: Collabora repond-il vraiment ? when: not ansible_check_mode ansible.builtin.uri: url: "http://127.0.0.1:{{ serveur_collabora_port }}/hosting/capabilities" status_code: [200] timeout: 20 register: serveur_collabora_capacites retries: 12 delay: 5 until: serveur_collabora_capacites is succeeded