Files
projet_gestion_commande/ansible/playbook.yml
T

383 lines
16 KiB
YAML

---
# ============================================
# PostgreSQL Installation (vm-postgres uniquement)
# ============================================
- name: Installation et configuration de PostgreSQL
hosts: uber-stup
become: true
gather_facts: true
tasks:
# ============================================================
# Dépendances requises
# ============================================================
- name: Installer les dépendances pour le dépôt APT
ansible.builtin.apt:
name:
- gnupg2
- curl
- ca-certificates
- lsb-release
- python3-psycopg2
- acl
state: present
update_cache: yes
# ============================================================
# Ajout du dépôt officiel PostgreSQL
# ============================================================
- name: Ajouter la clé GPG du dépôt PostgreSQL
ansible.builtin.apt_key:
url: https://www.postgresql.org/media/keys/ACCC4CF8.asc
state: present
- name: Ajouter le dépôt PostgreSQL 16
ansible.builtin.apt_repository:
repo: "deb http://apt.postgresql.org/pub/repos/apt {{ ansible_distribution_release }}-pgdg main"
state: present
filename: pgdg
# ============================================================
# Installation PostgreSQL 16
# ============================================================
- name: Installer PostgreSQL 16
ansible.builtin.apt:
name:
- "postgresql-{{ pg_version }}"
- "postgresql-client-{{ pg_version }}"
- "postgresql-contrib-{{ pg_version }}"
state: present
update_cache: yes
- name: Démarrer et activer PostgreSQL
ansible.builtin.systemd:
name: postgresql
state: started
enabled: yes
# ============================================================
# Configuration PostgreSQL
# ============================================================
- name: Configurer l'écoute sur localhost
ansible.builtin.lineinfile:
path: "/etc/postgresql/{{ pg_version }}/main/postgresql.conf"
regexp: "^#?listen_addresses"
line: "listen_addresses = 'localhost'"
notify: Restart postgresql
- name: Configurer le port
ansible.builtin.lineinfile:
path: "/etc/postgresql/{{ pg_version }}/main/postgresql.conf"
regexp: "^#?port"
line: "port = {{ db_port }}"
notify: Restart postgresql
# ============================================================
# Locale requise
# ============================================================
- name: Générer la locale fr_FR.UTF-8
ansible.builtin.command: locale-gen fr_FR.UTF-8
register: locale_gen
changed_when: "'Generation complete' in locale_gen.stdout"
- name: Mettre à jour les locales
ansible.builtin.command: update-locale
when: locale_gen.changed
# ============================================================
# Création de la base de données et configuration utilisateur
# ============================================================
- name: Définir le mot de passe de l'utilisateur postgres
become_user: postgres
ansible.builtin.postgresql_user:
name: "{{ db_user }}"
password: "{{ db_password }}"
state: present
- name: Vérifier si la base de données existe
become_user: postgres
ansible.builtin.command: psql -tAc "SELECT 1 FROM pg_database WHERE datname='{{ db_name }}'"
register: db_exists
changed_when: false
- name: Créer la base de données avec ICU
become_user: postgres
ansible.builtin.command: >
psql -c "CREATE DATABASE {{ db_name }}
OWNER {{ db_user }}
ENCODING 'UTF8'
LOCALE_PROVIDER icu
ICU_LOCALE 'fr-FR'
TEMPLATE template0"
when: db_exists.stdout != "1"
- name: Accorder tous les privilèges sur la base
become_user: postgres
ansible.builtin.postgresql_privs:
db: "{{ db_name }}"
role: "{{ db_user }}"
type: database
privs: ALL
state: present
# ============================================================
# Données initiales - corrections d'adresses
# ============================================================
- name: Insérer les corrections d'adresses
become_user: postgres
ansible.builtin.postgresql_query:
db: "{{ db_name }}"
query: |
INSERT INTO adresse_correction (invalid_address, correct_address) VALUES
('6 Place Alfred Lallié 44000 Nantes', '13 Rue Saint-Rogatien 44000 Nantes'),
('26 boulevard Vincent gâche 44200', '62 Rue des Français Libres 44200'),
('41 quai Malakoff 44000', '41 rue du pré Gauchet 44000'),
('au 6 rue du Rhône 44100', '106 rue du bois Hardy 44100'),
('10 allée de l''île gloriette 44000', '8 rue Deurbroucq 44000'),
('1 Ter Boulevard de Launay 44100', '5 Rue Lavoisier 44100'),
('6 Boulevard de la prairie au duc 44200', '10 Rue Alain Barbe Torte 44200'),
('4 rue de mauves , 44470 thouaré sur Loire', '4 Rue de la Halbarderie 44470 Thouaré-sur-Loire'),
('26 rue Louis blanc, 44200 Nantes', '6 Rue de Hercé 44200 Nantes'),
('4 rue la tour d''Auvergne 44200 nantes', '6 Rue de Hercé 44200 Nantes'),
('12 rue d''Orléans 44000', '10 rue de l''industrie 44000'),
('3 rue Bertrand Geslin 44000 Nantes', '10 Rue de Sévigné 44000 Nantes'),
('33 boulevard de doulon 44300', '3 Avenue du Forgeron 44300 Nantes'),
('2 rue Stanislas Baudry 44000 Nantes', '9 Rue de Richebourg 44000 Nantes'),
('8 Place Saint-Pierre, 44000 Nantes', '2 Rue Saint-Denis 44000 Nantes'),
('20 boulevard du petit port 44300', '3 Rue du Transvaal 44300 Nantes'),
('5 cours Sully 44000 Nantes', '75 Rue Préfet Bonnefoy 44000'),
('50 rue Paul Bellamy 44000', '2 rue du docteur Heurteaux 44000'),
('33 rue de la petite sensive 44300', '8 Rue du Docteur Chenantais 44300'),
('45 rue Louis guiotton 44300 Nantes', '59 Rue de Nancy 44300 Nantes'),
('6 rue Meuris 44000 Nantes', '3 Rue Daubenton 44100 Nantes'),
('26 rue Félix Faure 44000', '12 rue bonaparte 44000'),
('1 rue Charles Dullin 44100 nantes', '12 Avenue de l''Églantine 44800 Saint-Herblain'),
('16 rue Anatole de monzie 44200', '1 Rue Georges Leygues 44200 Nantes'),
('52 boulevard de l''Estuaire 44200', '1 Rue Ruth First 44200 Nantes'),
('186 Route de Saint-Joseph 44300 Nantes', 'Rue de Pontecorvo 44300 Nantes'),
('16 Rue Jules Launey 44100 Nantes', '5 Chemin du Pressoir Chênaie 44100 Nantes'),
('1 rue maréchal Lyautey 44000', '9 rue Louis Mékarski 44000'),
('74 boulevard de la prairie au duc 44200', '7 Rue René Siegfried 44200'),
('1 impasse du baut 44300 Nantes', '8 Avenue d''Assise 44300 Nantes'),
('5 rue moquechien, 44000 Nantes', '4 Rue Adolphe Moitié 44000 Nantes'),
('21 chaussée de la madeleine 44000', '4 bis Rue Perrault 44000 Nantes'),
('31 boulevard Michelet 44000', '26 Rue de la Haute Forêt 44000 Nantes'),
('95 Boulevard longchamp 44300', '7 Petite Avenue de Longchamp 44300'),
('7 Quai Marcel Boissard, 44400 Rezé', '6 Rue Jean Jouneau 44400 Rezé'),
('43 avenue de la libération 44400', '10 rue de l''Erdronnière 44400'),
('165 route de rennes 44700 orvault', '5 Rue de l''Ascension 44700 Orvault'),
('17rue yves bodiguel 44000', '8 Rue Frédureau 44000 Nantes'),
('176 boulevard Jules verne 44300', '44 Rue des Platanes 44300 Nantes'),
('133 Boulevard Jules Verne 44300', '28 Rue Moriceau Thébault 44300'),
('53 Boulevard Jules Verne 44300', '66 Rue de la Moisdonnière 44300'),
('7 chaussé de la madeleine, 44000', '3 Rue Perrault 44000 Nantes'),
('LA CHEVROLIÈRE', '12 Rue des Ajoncs 44400 Rezé'),
('9 rue Delattre de tassigny 44000 nantes', '1 Rue des Cadeniers 44000 Nantes'),
('14 place de l''Oratoire 44000 Nantes', '2 Rue Élie Delaunay 44000 Nantes'),
('19 allée Baco, 44000 Nantes', '23 Rue Crucy 44000 Nantes'),
('21bd babin chevaye 44200', '7 Rue de Hercé 44200 Nantes'),
('49 boulevard dalby 44000', '51 Rue de la Ville en Pierre 44000'),
('96 route de Vannes 44100', '14 Avenue des Coucous 44300'),
('1 rue du Luxembourg 44000 Nantes', '5 Rue de l''Indre 44000 Nantes'),
('3 rue de bretagne 44880 Sautron', '9 Rue de Flore 44880 Sautron'),
('42 rue paul bellamy 44000 nantes', '5 Rue de Bouillé 44000 Nantes'),
('125 Rue Paul Bellamy 44000 Nantes', '14 Rue Anatole le Braz 44000 Nantes'),
('214 Rue Paul Bellamy 44000 Nantes', '17 Rue de la Saulzinière 44000 Nantes'),
('49 Boulevard Robert Schuman 44300 Nantes', '47 Rue Georges Bizot 44300 Nantes'),
('142 Boulevard Robert Schuman 44300', '10 Rue St-Mihiel 44300 Nantes'),
('23 route de la chapelle sur erdre 44300', '14 Rue de la Boulonnerie 44300 Nantes'),
('27 Rue Pierre Blard 44800 Saint-Herblain', '2 Rue Louis Boutin 44800 Saint-Herblain'),
('109 Boulevard Ernest Dalby 44000 Nantes', '53 bis rue de la ville en pierre 44000'),
('13 rue pitre chevalier 44000', '10 Rue Jean-Émile Laboureur 44000'),
('Rue lesage - 44000 - Nantes', '4 rue Maurice Sibille 44000'),
('86 Rue de la Bourgeonnière 44300', '6 Avenue de l''Alverne 44300'),
('8 boulevard Émile romanet 44100', '33 Route de St-Herblain 44100 Nantes')
ON CONFLICT (invalid_address) DO NOTHING;
# ============================================================
# Authentification pg_hba.conf
# ============================================================
- name: Configurer l'authentification md5 pour les connexions locales
ansible.builtin.postgresql_pg_hba:
dest: "/etc/postgresql/{{ pg_version }}/main/pg_hba.conf"
contype: host
databases: "{{ db_name }}"
users: "{{ db_user }}"
source: "127.0.0.1/32"
method: md5
notify: Restart postgresql
- name: Configurer l'authentification md5 pour IPv6 local
ansible.builtin.postgresql_pg_hba:
dest: "/etc/postgresql/{{ pg_version }}/main/pg_hba.conf"
contype: host
databases: "{{ db_name }}"
users: "{{ db_user }}"
source: "::1/128"
method: md5
notify: Restart postgresql
# ============================================================
# Vérification
# ============================================================
- name: Vérifier la version de PostgreSQL
become_user: postgres
ansible.builtin.command: psql --version
register: pg_version_check
changed_when: false
- name: Afficher la version
ansible.builtin.debug:
msg: "{{ pg_version_check.stdout }}"
- name: Vérifier que la base existe
become_user: postgres
ansible.builtin.command: psql -lqt
register: pg_databases
changed_when: false
- name: Afficher les bases de données
ansible.builtin.debug:
msg: "{{ pg_databases.stdout_lines }}"
handlers:
- name: Restart postgresql
ansible.builtin.systemd:
name: postgresql
state: restarted
# ============================================
# Redis Installation (vm-redis uniquement)
# ============================================
- name: Installation et configuration de Redis
hosts: uber-stup
become: true
gather_facts: true
tasks:
- name: Installer Redis
apt:
name:
- redis-server
- python3-redis
state: present
update_cache: yes
- name: Créer le répertoire de backup Redis
file:
path: /var/lib/redis/backup
state: directory
owner: redis
group: redis
mode: "0755"
- name: Configurer Redis - bind address (accepter connexions réseau)
lineinfile:
path: /etc/redis/redis.conf
regexp: "^bind"
line: "bind 127.0.0.1 192.168.1.62"
state: present
notify: Redémarrer Redis
- name: Configurer Redis - port
lineinfile:
path: /etc/redis/redis.conf
regexp: "^port"
line: "port {{ redis_port }}"
state: present
notify: Redémarrer Redis
- name: Configurer Redis - maxmemory
lineinfile:
path: /etc/redis/redis.conf
regexp: "^# ?maxmemory"
line: "maxmemory {{ redis_maxmemory }}"
state: present
notify: Redémarrer Redis
- name: Configurer Redis - maxmemory-policy
lineinfile:
path: /etc/redis/redis.conf
regexp: "^# ?maxmemory-policy"
line: "maxmemory-policy {{ redis_maxmemory_policy }}"
state: present
notify: Redémarrer Redis
- name: Configurer Redis - requirepass
lineinfile:
path: /etc/redis/redis.conf
regexp: "^# ?requirepass"
line: "requirepass {{ redis_password }}"
state: present
notify: Redémarrer Redis
- name: Activer AOF (Append Only File) pour Redis
lineinfile:
path: /etc/redis/redis.conf
regexp: "^appendonly"
line: "appendonly yes"
state: present
notify: Redémarrer Redis
- name: Configurer la fréquence de sync AOF
lineinfile:
path: /etc/redis/redis.conf
regexp: "^# ?appendfsync"
line: "appendfsync everysec"
state: present
notify: Redémarrer Redis
- name: Activer la persistance RDB (snapshots)
blockinfile:
path: /etc/redis/redis.conf
block: |
save 900 1
save 300 10
save 60 10000
marker: "# {mark} ANSIBLE MANAGED RDB PERSISTENCE"
notify: Redémarrer Redis
- name: Configurer le nom du fichier AOF
lineinfile:
path: /etc/redis/redis.conf
regexp: "^appendfilename"
line: 'appendfilename "appendonly.aof"'
state: present
notify: Redémarrer Redis
- name: Désactiver le mode protégé Redis
lineinfile:
path: /etc/redis/redis.conf
regexp: "^protected-mode"
line: "protected-mode no"
state: present
notify: Redémarrer Redis
- name: Configurer le répertoire de travail Redis
lineinfile:
path: /etc/redis/redis.conf
regexp: "^dir"
line: "dir /var/lib/redis"
state: present
notify: Redémarrer Redis
- name: Définir le niveau de log
lineinfile:
path: /etc/redis/redis.conf
regexp: "^loglevel"
line: "loglevel notice"
state: present
notify: Redémarrer Redis
- name: S'assurer que Redis est démarré
systemd:
name: redis-server
state: started
enabled: yes
handlers:
- name: Redémarrer Redis
systemd:
name: redis-server
state: restarted