196 lines
6.4 KiB
YAML
196 lines
6.4 KiB
YAML
---
|
|
- name: Installer les paquets requis par l'application
|
|
ansible.builtin.apt:
|
|
name:
|
|
- build-essential
|
|
- libcairo2
|
|
- libffi-dev
|
|
- libgdk-pixbuf-2.0-0
|
|
- libpango-1.0-0
|
|
- libpangocairo-1.0-0
|
|
- python3
|
|
- python3-pip
|
|
- python3-venv
|
|
state: present
|
|
|
|
- name: Creer les repertoires applicatifs
|
|
ansible.builtin.file:
|
|
path: "{{ item.path }}"
|
|
state: directory
|
|
owner: "{{ item.owner | default(groupe_meditation_service_user) }}"
|
|
group: "{{ item.group | default(groupe_meditation_service_group) }}"
|
|
mode: "{{ item.mode | default('0755') }}"
|
|
loop:
|
|
- path: "{{ groupe_meditation_app_dir }}"
|
|
owner: root
|
|
group: root
|
|
- path: "{{ groupe_meditation_upload_dir }}"
|
|
mode: "0755"
|
|
- path: "{{ groupe_meditation_web_root }}"
|
|
|
|
- name: Synchroniser le backend
|
|
ansible.posix.synchronize:
|
|
src: "{{ playbook_dir }}/../backend/"
|
|
dest: "{{ groupe_meditation_backend_dir }}/"
|
|
delete: true
|
|
rsync_opts:
|
|
- "--exclude=venv/"
|
|
- "--exclude=.env"
|
|
- "--exclude=__pycache__/"
|
|
- "--exclude=*.pyc"
|
|
notify: Redemarrer groupe-meditation
|
|
|
|
- name: Synchroniser les fichiers de deploiement
|
|
ansible.posix.synchronize:
|
|
src: "{{ playbook_dir }}/../deploy/"
|
|
dest: "{{ groupe_meditation_deploy_dir }}/"
|
|
delete: true
|
|
notify: Redemarrer groupe-meditation
|
|
|
|
- name: Synchroniser le frontend
|
|
ansible.posix.synchronize:
|
|
src: "{{ playbook_dir }}/../frontend/"
|
|
dest: "{{ groupe_meditation_frontend_dir }}/"
|
|
delete: true
|
|
rsync_opts:
|
|
- "--exclude=node_modules/"
|
|
- "--exclude=dist/"
|
|
|
|
- name: Creer l'environnement virtuel Python
|
|
ansible.builtin.command:
|
|
cmd: python3 -m venv "{{ groupe_meditation_backend_dir }}/venv"
|
|
creates: "{{ groupe_meditation_backend_dir }}/venv/bin/python"
|
|
|
|
- name: Installer les dependances Python
|
|
ansible.builtin.pip:
|
|
requirements: "{{ groupe_meditation_backend_dir }}/requirements.txt"
|
|
virtualenv: "{{ groupe_meditation_backend_dir }}/venv"
|
|
notify: Redemarrer groupe-meditation
|
|
|
|
- name: Deployer le fichier d'environnement backend
|
|
ansible.builtin.template:
|
|
src: env.j2
|
|
dest: "{{ groupe_meditation_backend_dir }}/.env"
|
|
owner: "{{ groupe_meditation_service_user }}"
|
|
group: "{{ groupe_meditation_service_group }}"
|
|
mode: "0640"
|
|
no_log: true
|
|
notify: Redemarrer groupe-meditation
|
|
|
|
- name: Installer les dependances frontend sur le poste de controle avec npm ci
|
|
ansible.builtin.command:
|
|
cmd: npm ci
|
|
chdir: "{{ playbook_dir }}/../frontend"
|
|
delegate_to: localhost
|
|
become: false
|
|
run_once: true
|
|
when: lookup('ansible.builtin.fileglob', playbook_dir + '/../frontend/package-lock.json') | length > 0
|
|
changed_when: true
|
|
|
|
- name: Installer les dependances frontend sur le poste de controle avec npm install
|
|
ansible.builtin.command:
|
|
cmd: npm install
|
|
chdir: "{{ playbook_dir }}/../frontend"
|
|
delegate_to: localhost
|
|
become: false
|
|
run_once: true
|
|
when: lookup('ansible.builtin.fileglob', playbook_dir + '/../frontend/package-lock.json') | length == 0
|
|
changed_when: true
|
|
|
|
- name: Construire le frontend sur le poste de controle
|
|
ansible.builtin.command:
|
|
cmd: npm run build
|
|
chdir: "{{ playbook_dir }}/../frontend"
|
|
delegate_to: localhost
|
|
become: false
|
|
run_once: true
|
|
changed_when: true
|
|
|
|
- name: Deployer les fichiers statiques frontend
|
|
ansible.posix.synchronize:
|
|
src: "{{ playbook_dir }}/../frontend/dist/"
|
|
dest: "{{ groupe_meditation_web_root }}/"
|
|
delete: true
|
|
|
|
- name: Ajuster les permissions applicatives
|
|
ansible.builtin.file:
|
|
path: "{{ item }}"
|
|
owner: "{{ groupe_meditation_service_user }}"
|
|
group: "{{ groupe_meditation_service_group }}"
|
|
recurse: true
|
|
loop:
|
|
- "{{ groupe_meditation_app_dir }}"
|
|
- "{{ groupe_meditation_web_root }}"
|
|
|
|
- name: Installer l'unite systemd
|
|
ansible.builtin.template:
|
|
src: groupe-meditation.service.j2
|
|
dest: "/etc/systemd/system/{{ groupe_meditation_service_name }}.service"
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
notify:
|
|
- Recharger systemd
|
|
- Redemarrer groupe-meditation
|
|
|
|
- name: Appliquer les handlers avant le seed
|
|
ansible.builtin.meta: flush_handlers
|
|
|
|
- name: Compter les groupes existants
|
|
community.postgresql.postgresql_query:
|
|
db: "{{ groupe_meditation_db_name }}"
|
|
login_user: "{{ groupe_meditation_db_user }}"
|
|
login_password: "{{ groupe_meditation_db_password }}"
|
|
login_host: "{{ groupe_meditation_db_host }}"
|
|
port: "{{ groupe_meditation_db_port }}"
|
|
query: "SELECT COUNT(*) AS count FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'groupes';"
|
|
register: groupes_table
|
|
no_log: true
|
|
|
|
- name: Compter les donnees applicatives existantes
|
|
community.postgresql.postgresql_query:
|
|
db: "{{ groupe_meditation_db_name }}"
|
|
login_user: "{{ groupe_meditation_db_user }}"
|
|
login_password: "{{ groupe_meditation_db_password }}"
|
|
login_host: "{{ groupe_meditation_db_host }}"
|
|
port: "{{ groupe_meditation_db_port }}"
|
|
query: "SELECT COUNT(*) AS count FROM groupes;"
|
|
register: groupes_count
|
|
when: groupes_table.query_result[0].count | int > 0
|
|
no_log: true
|
|
|
|
- name: Initialiser la base avec le seed existant
|
|
ansible.builtin.shell:
|
|
cmd: |
|
|
set -euo pipefail
|
|
printf '%s\n%s\n%s\n%s\n%s\n%s\n' \
|
|
{{ groupe_meditation_first_member.prenom | quote }} \
|
|
{{ groupe_meditation_first_member.nom | default("") | quote }} \
|
|
{{ groupe_meditation_first_member.courriel | quote }} \
|
|
{{ groupe_meditation_first_member.telephone | quote }} \
|
|
{{ groupe_meditation_first_member.pin | quote }} \
|
|
{{ groupe_meditation_first_member.poste_numero | default("1") | quote }} \
|
|
| {{ groupe_meditation_backend_dir }}/venv/bin/python ../deploy/seed.py
|
|
executable: /bin/bash
|
|
chdir: "{{ groupe_meditation_backend_dir }}"
|
|
when:
|
|
- groupe_meditation_run_seed | bool
|
|
- groupes_table.query_result[0].count | int == 0 or (groupes_count.query_result[0].count | default(0) | int == 0)
|
|
no_log: true
|
|
notify: Redemarrer groupe-meditation
|
|
|
|
- name: Activer et demarrer le service applicatif
|
|
ansible.builtin.service:
|
|
name: "{{ groupe_meditation_service_name }}"
|
|
state: started
|
|
enabled: true
|
|
|
|
- name: Verifier la sante locale de l'API
|
|
ansible.builtin.uri:
|
|
url: "http://{{ groupe_meditation_api_host }}:{{ groupe_meditation_api_port }}/api/health"
|
|
return_content: true
|
|
status_code: 200
|
|
register: api_health
|
|
retries: 6
|
|
delay: 5
|
|
until: api_health.status == 200
|