## TO DO
-- gestion du remote_user avec inventaire générique?
+x gestion du remote_user avec inventaire générique?
x demander le password sudo à chaque lancement de playbook?
x créer ansible.cfg générique
-- créer un inventaire générique (pour l'instant inventaire dans gitignore)
+x créer un inventaire générique (pour l'instant inventaire dans gitignore)
x hostvar/groupvar
- vérif dépendances
- améliorer le nom des variables
- tâches pour supprimer les fichiers tempo sur ateliers et la vm ?
+- téléchargers les apps correspondants à la version nouvelle de nextcloud
+- utiliser le code de gresille?
## Requirements
# vars identiques sur tous les hosts
nextcloud_tmp_path: "/tmp/nextcloud_restore/{{ site_domain }}"
nextcloud_data_path: "{{ nextcloud_webroot }}/data"
-nextcloud_websrv: nginx # si besoin de apache, ecraser cette valeur viaun fichier de variables groupe ou host
\ No newline at end of file
+nextcloud_websrv: nginx # si besoin de apache, ecraser cette valeur viaun fichier de variables groupe ou host
+nextcloud_repo_url: 'https://download.nextcloud.com/server/releases'
\ No newline at end of file
-nextcloud_webroot: "/home/www/data/org/heureux-cyclage/nuages/instances/{{ site_domain }}"
+nextcloud_webroot: "/home/www/data/org/heureux-cyclage/nuages/instances/{{ domain }}"
nextcloud_websrv_user: php_nuages
-nextcloud_db_name: "php_nuage_{{ site_domain }}"
\ No newline at end of file
+nextcloud_db_name: "php_nuage_{{ domain }}"
\ No newline at end of file
-nextcloud_websrv_user: "php_{{domain_sigle}}_nuage"
-nextcloud_webroot: "/home/sites/data/org/{{ site_domain }}/nuage"
-nextcloud_files_path: "/home/sites/data/nextcloud"
-nextcloud_version: 27.0.2
\ No newline at end of file
+nextcloud_websrv_user: "php_{{ sigle }}_nuage"
+nextcloud_sources_files_path: "/home/sites/data/nextcloud/sources"
+nextcloud_common_files_path: "/home/sites/data/nextcloud/common"
+nextcloud_version: "{{ nouvelle_version }}"
+nextcloud_webroot: "/home/sites/data/{{ tld }}/{{ domain }}/nuage"
+nextcloud_source: "{{ nextcloud_sources_files_path }}/nextcloud-{{ nouvelle_version }}"
+nextcloud_common: "{{ nextcloud_common_files_path }}/nextcloud-{{ nouvelle_version }}"
\ No newline at end of file
ansible.builtin.file:
path: "{{ nextcloud_tmp_path }}"
state: directory
- mode: '0777'
+ mode: '777'
# play sur ateliers
- hosts: ateliers
ansible.builtin.file:
path: "{{ nextcloud_tmp_path }}"
state: directory
- mode: '0777'
+ mode: '777'
# - name: activate nextcloud maintenance mode
# become_user: "{{ nextcloud_websrv_user }}"
# dest: "{{ nextcloud_tmp_path }}/data.tar.gz"
# format: gz
# force_archive: true
-# mode: 777
+# mode: '777'
- name: Create a dump of the postgreSQL database
become: true
become_user: "{{ nextcloud_websrv_user }}"
command: "pg_dump -f {{ nextcloud_tmp_path }}/dump.sql -F c -O -b {{ nextcloud_db_name }}"
+- name: add read permissions to created tmp files
+ become: true
+ become_user: root
+ ansible.builtin.file:
+ path: "{{ nextcloud_tmp_path }}"
+ owner: "{{ nextcloud_websrv_user }}"
+ group: "{{ nextcloud_websrv_user }}"
+ state: directory
+ recurse: yes
+ mode: '644' #or 'u=rw,g=r,o=r'
+
- name: Fetch nextcloud_data from atelier to ansible controller
+ become: true
+ become_user: "{{ nextcloud_websrv_user }}"
fetch:
src: "{{ item }}"
dest: "{{ nextcloud_tmp_path }}/"
--- /dev/null
+- name: Download nextcloud source
+ become: true
+ become_user: nextcloud
+ ansible.builtin.get_url:
+ url: "{{ nextcloud_repo_url }}/nextcloud-{{ nouvelle_version }}.tar.bz2"
+ dest: "{{ nextcloud_sources_files_path }}/"
+ mode: '755' #or u=rwx,g=rx,o=rx
+ checksum: "md5:{{ nextcloud_repo_url }}/nextcloud-{{ nouvelle_version }}.tar.bz2.md5"
+
+- name: create nextcloud source dir
+ become: true
+ become_user: nextcloud
+ ansible.builtin.file:
+ path: "{{ nextcloud_sources_files_path }}/nextcloud-{{ nouvelle_version }}"
+ state: directory
+ mode: '755' #or u=rwx,g=rx,o=rx
+
+- name: Extract downloaded nextcloud source
+ become: true
+ become_user: nextcloud
+ ansible.builtin.unarchive:
+ src: "{{ nextcloud_sources_files_path }}/nextcloud-{{ nouvelle_version }}.tar.bz2"
+ dest: "{{ nextcloud_sources_files_path }}/"
+# mode: '755' #or u=rwx,g=rx,o=rx
+ remote_src: yes
+
+- name: "rename nextloud dir to nextcloud-{{ nouvelle_version }}"
+ become: true
+ become_user: nextcloud
+ ansible.builtin.copy:
+ src: "{{ nextcloud_sources_files_path }}/nextcloud/"
+ dest: "{{ nextcloud_sources_files_path }}/nextcloud-{{ nouvelle_version }}"
+ remote_src: yes #because the config file is already in the nextcloud_tmp_path
+
+- name: deleted downloaded nextcloud files
+ become: true
+ become_user: nextcloud
+ ansible.builtin.file:
+ path: "{{ item }}"
+ state: absent
+ loop:
+ - "{{ nextcloud_sources_files_path }}/nextcloud-{{ nouvelle_version }}.tar.bz2"
+ - "{{ nextcloud_sources_files_path }}/nextcloud"
\ No newline at end of file
remote_src: yes #because the config file is already in the nextcloud_tmp_path
owner: "{{ nextcloud_websrv_user }}"
group: "{{ nextcloud_websrv_user }}"
- mode: 0640
+ mode: '640' #or u=rwx,g=r,o=
- name: update nextcloud root dir symbolic link
become_user: "{{ nextcloud_websrv_user }}"
--- /dev/null
+---
+- name: stop webserver service
+ become: true
+ ansible.builtin.service:
+ name: "{{ nextcloud_websrv }}"
+ state: stopped
+
+- name: update nextcloud root dir symbolic link
+ become: true
+ ansible.builtin.file:
+ src: "{{ nextcloud_source }}"
+ dest: "{{ nextcloud_webroot }}/nextcloud"
+ owner: nextcloud
+ group: nextcloud
+ state: link
+ follow: false
+
+- name: update nextcloud common app dir symbolic link
+ become: true
+ ansible.builtin.file:
+ src: "{{ nextcloud_common }}"
+ dest: "{{ nextcloud_webroot }}/common"
+ owner: nextcloud
+ group: nextcloud
+ state: link
+ follow: false
+
+- name: start webserver service
+ become: true
+ ansible.builtin.service:
+ name: "{{ nextcloud_websrv }}"
+ state: started
+
+- name: Run nextcloud upgrade script
+ become_user: "{{ nextcloud_websrv_user }}"
+ become: true
+ command: ./console upgrade
+ args:
+ chdir: "{{ nextcloud_webroot }}"
+ register: nc_upgrade_result
+
+- name: display upgrade result
+ debug:
+ var: nc_upgrade_result.stdout_lines
+
+- block:
+ - name: wait for nextcloud maintenance mode to become false
+ become_user: "{{ nextcloud_websrv_user }}"
+ become: true
+ command: ./console status
+ args:
+ chdir: "{{ nextcloud_webroot }}"
+ register: result
+ until: "'maintenance: false' in result.stdout"
+ retries: 15
+ delay: 20
+ rescue:
+ - name: deactivate maintenance mode manually
+ become_user: "{{ nextcloud_websrv_user }}"
+ become: true
+ command: ./console maintenance:mode --off
+ args:
+ chdir: "{{ nextcloud_webroot }}"
+ register: rescue
+ - name: display rescue
+ debug:
+ var: rescue.stdout_lines
\ No newline at end of file
--- /dev/null
+- hosts: ligatures
+ vars:
+ nouvelle_version: 27.1.1
+ ancienne_version: 27.1.0
+ tasks:
+
+ # - name: Vérif si le dossier common app est créé
+ # become: true
+ # ansible.builtin.stat:
+ # path: "/home/sites/data/nextcloud/common/nextcloud-{{ nouvelle_version }}"
+ # register: new_nextcloud_common
+
+ # - name: create new app common folder from old version one
+ # become_user: nextcloud
+ # become: true
+ # ansible.builtin.copy:
+ # src: "/home/sites/data/nextcloud/common/nextcloud-{{ ancienne_version }}"
+ # dest: "/home/sites/data/nextcloud/common/nextcloud-{{ nouvelle_version }}"
+ # remote_src: yes #because the config file is already in the nextcloud_tmp_path
+ # mode: '754'
+ # when: not new_nextcloud_common.stat.exists
+
+ - name: Extract downloaded archive
+ become: true
+ become_user: nextcloud
+ ansible.builtin.unarchive:
+ src: "/tmp/test_nextcloud/groupfolder_v15.3.1.tar.gz"
+ dest: "/tmp/test_nextcloud/"
+ # mode: '755' #or u=rwx,g=rx,o=rx
+ remote_src: yes
+
+ - name: "rename"
+ become: true
+ become_user: nextcloud
+ ansible.builtin.copy:
+ src: "/tmp/test_nextcloud/groupfolders-15.3.1/"
+ dest: "/tmp/test_nextcloud/groupfolder"
+ remote_src: yes #because the config file is already in the nextcloud_tmp_path
+
+ - name: deleted downloaded nextcloud files
+ become: true
+ become_user: nextcloud
+ ansible.builtin.file:
+ path: "{{ item }}"
+ state: absent
+ loop:
+ - "/tmp/test_nextcloud/groupfolders-15.3.1"
\ No newline at end of file
--- /dev/null
+---
+# commande pour lancer le playbook: ansible-playbook update_nuage_instance.yml -e "site_domain=cyclocoop"
+
+# promp pour définir les variables
+- hosts: ligatures
+ vars_prompt:
+ - name: nouvelle_version
+ prompt: 'Nouvelle version nextcloud à télécharger?(ex: 27.1.0)'
+ private: false
+
+ - name: tld
+ prompt: 'TLD du site à mettre à jour?(ex: org)'
+ private: false
+
+ - name: domain
+ prompt: 'Domaine du site à mettre à jour?(ex: heureux-cyclage)'
+ private: false
+
+ - name: sigle
+ prompt: 'Sigle du site à mettre à jour?(ex: lhc)'
+ private: false
+ pre_tasks:
+ - name: Vérif si la source nextcloud est téléchargé
+ become: true
+ ansible.builtin.stat:
+ path: "{{ nextcloud_source }}"
+ register: new_nextcloud_source
+
+ - name: Vérif si le dossier common app est créé
+ become: true
+ ansible.builtin.stat:
+ path: "{{ nextcloud_common }}"
+ register: new_nextcloud_common
+
+ - name: obtenir l'ancienne version
+ become_user: "{{ nextcloud_websrv_user }}"
+ become: true
+ command: '{{ nextcloud_webroot }}/console status --output=json'
+ register: result
+
+ - name: enregistrer l'ancienne version
+ set_fact:
+ ancienne_version: "{{ tmp.versionstring }}"
+ vars:
+ tmp: "{{ result.stdout | from_json }}"
+
+ tasks:
+
+ - include_tasks: tasks/download_nextcloud_source.yml
+ when: not new_nextcloud_source.stat.exists
+ vars:
+ ansible_become: true
+ become_user: nextcloud
+
+ - name: create new app common folder from old version one
+ become_user: nextcloud
+ become: true
+ ansible.builtin.copy:
+ src: "{{ nextcloud_common_files_path }}/nextcloud-{{ ancienne_version }}/"
+ dest: "{{ nextcloud_common_files_path }}/nextcloud-{{ nouvelle_version }}"
+ remote_src: yes #because the config file is already in the nextcloud_tmp_path
+ mode: '754' #or 'u=rwx,g=rx,o=r'
+ when: not new_nextcloud_common.stat.exists
+
+ - include_tasks: tasks/update_nextcloud.yml
+
+ - name: display upgrade result
+ debug:
+ msg: "Le nuage de {{ domain }} a été mis à jour avec la nouvelle version {{ nouvelle_version }}"