--- - name: Installer PostgreSQL ansible.builtin.apt: name: "{{ serveurs_postgresql_packages }}" state: present update_cache: true cache_valid_time: 3600 - name: Lister les clusters PostgreSQL installes ansible.builtin.find: paths: /etc/postgresql file_type: directory recurse: false register: serveurs_postgresql_clusters - name: Determiner la version du cluster ansible.builtin.set_fact: serveurs_postgresql_version_effective: >- {{ serveurs_postgresql_version or (serveurs_postgresql_clusters.files | map(attribute='path') | map('basename') | sort | last | default('')) }} - name: Refuser si aucun cluster PostgreSQL n'est present ansible.builtin.assert: that: - serveurs_postgresql_version_effective | length > 0 fail_msg: "Aucun cluster PostgreSQL trouve sous /etc/postgresql." - name: Definir le repertoire de configuration du cluster ansible.builtin.set_fact: serveurs_postgresql_conf_dir: "/etc/postgresql/{{ serveurs_postgresql_version_effective }}/main" - name: Assurer le repertoire conf.d ansible.builtin.file: path: "{{ serveurs_postgresql_conf_dir }}/conf.d" state: directory owner: postgres group: postgres mode: "0755" - name: Deployer la configuration Chezlepro ansible.builtin.template: src: 99-chezlepro.conf.j2 dest: "{{ serveurs_postgresql_conf_dir }}/conf.d/99-chezlepro.conf" owner: postgres group: postgres mode: "0640" notify: Redemarrer PostgreSQL - name: Deployer pg_hba.conf ansible.builtin.template: src: pg_hba.conf.j2 dest: "{{ serveurs_postgresql_conf_dir }}/pg_hba.conf" owner: postgres group: postgres mode: "0640" notify: Recharger PostgreSQL - name: Activer et demarrer PostgreSQL ansible.builtin.systemd: name: "{{ serveurs_postgresql_service_name }}" enabled: true state: started - name: Appliquer la configuration en attente avant le provisioning ansible.builtin.meta: flush_handlers - name: Creer les comptes applicatifs PostgreSQL community.postgresql.postgresql_user: name: "{{ item.nom }}" password: "{{ item.mot_de_passe }}" role_attr_flags: "{{ item.attributs | default('LOGIN') }}" state: present become: true become_user: postgres loop: "{{ serveurs_postgresql_comptes }}" loop_control: label: "{{ item.nom }}" no_log: true when: serveurs_postgresql_comptes | length > 0 - name: Creer les bases applicatives PostgreSQL community.postgresql.postgresql_db: name: "{{ item.nom }}" owner: "{{ item.proprietaire | default(item.nom) }}" encoding: "{{ item.encodage | default('UTF8') }}" state: present become: true become_user: postgres loop: "{{ serveurs_postgresql_bases }}" loop_control: label: "{{ item.nom }}" when: serveurs_postgresql_bases | length > 0 # --- Provisioning depuis le registre partage docs/bases-donnees.yml --- - name: Charger le registre des bases applicatives ansible.builtin.include_vars: file: "{{ role_path }}/../../docs/bases-donnees.yml" failed_when: false - name: Selectionner les bases hebergees par ce serveur ansible.builtin.set_fact: serveurs_postgresql_registre: >- {{ (bases_donnees | default({})) | dict2items | selectattr('value.serveur', 'defined') | selectattr('value.serveur', 'equalto', serveurs_postgresql_groupe) | list }} - name: Creer les comptes proprietaires (registre) community.postgresql.postgresql_user: name: "{{ item.value.proprietaire }}" password: "{{ lookup('vars', item.value.secret) }}" role_attr_flags: "LOGIN" state: present become: true become_user: postgres loop: "{{ serveurs_postgresql_registre }}" loop_control: label: "{{ item.value.proprietaire }}" no_log: true when: serveurs_postgresql_registre | length > 0 - name: Creer les bases applicatives (registre) community.postgresql.postgresql_db: name: "{{ item.value.base }}" owner: "{{ item.value.proprietaire }}" encoding: UTF8 state: present become: true become_user: postgres loop: "{{ serveurs_postgresql_registre }}" loop_control: label: "{{ item.value.base }}" when: serveurs_postgresql_registre | length > 0