From: rominique Date: Thu, 21 Sep 2023 16:13:51 +0000 (+0200) Subject: ajout du playbook upgrade_nuage_instance X-Git-Url: https://git.cyclocoop.org/?a=commitdiff_plain;h=fdd0c75bf23bf60d504d53615ead32ba4a1aaf58;p=lhc%2Fansible.git ajout du playbook upgrade_nuage_instance --- diff --git a/README.md b/README.md index 3c2e0f7..d84fba8 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,15 @@ ## 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 diff --git a/group_vars/all.yml b/group_vars/all.yml index d709894..8eedb3e 100644 --- a/group_vars/all.yml +++ b/group_vars/all.yml @@ -2,4 +2,5 @@ # 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 diff --git a/host_vars/ateliers.yml b/host_vars/ateliers.yml index 81e3682..4e5aa25 100644 --- a/host_vars/ateliers.yml +++ b/host_vars/ateliers.yml @@ -1,3 +1,3 @@ -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 diff --git a/host_vars/ligatures.yml b/host_vars/ligatures.yml index ffc6f15..8fc2292 100644 --- a/host_vars/ligatures.yml +++ b/host_vars/ligatures.yml @@ -1,4 +1,7 @@ -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 diff --git a/play_move_and_restore.yml b/play_move_and_restore.yml index 0c7da40..2640df1 100644 --- a/play_move_and_restore.yml +++ b/play_move_and_restore.yml @@ -9,7 +9,7 @@ ansible.builtin.file: path: "{{ nextcloud_tmp_path }}" state: directory - mode: '0777' + mode: '777' # play sur ateliers - hosts: ateliers diff --git a/tasks/backup_from_ateliers.yml b/tasks/backup_from_ateliers.yml index dfc7f38..11cd3ff 100644 --- a/tasks/backup_from_ateliers.yml +++ b/tasks/backup_from_ateliers.yml @@ -3,7 +3,7 @@ ansible.builtin.file: path: "{{ nextcloud_tmp_path }}" state: directory - mode: '0777' + mode: '777' # - name: activate nextcloud maintenance mode # become_user: "{{ nextcloud_websrv_user }}" @@ -20,14 +20,27 @@ # 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 }}/" diff --git a/tasks/download_nextcloud_source.yml b/tasks/download_nextcloud_source.yml new file mode 100644 index 0000000..e05ada3 --- /dev/null +++ b/tasks/download_nextcloud_source.yml @@ -0,0 +1,43 @@ +- 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 diff --git a/tasks/restore_to_vm.yml b/tasks/restore_to_vm.yml index 8045db8..f2812e8 100644 --- a/tasks/restore_to_vm.yml +++ b/tasks/restore_to_vm.yml @@ -44,7 +44,7 @@ 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 }}" diff --git a/tasks/update_nextcloud.yml b/tasks/update_nextcloud.yml new file mode 100644 index 0000000..e541c37 --- /dev/null +++ b/tasks/update_nextcloud.yml @@ -0,0 +1,67 @@ +--- +- 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 diff --git a/test.yml b/test.yml new file mode 100644 index 0000000..ee3db82 --- /dev/null +++ b/test.yml @@ -0,0 +1,47 @@ +- 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 diff --git a/update_nuage_instance.yml b/update_nuage_instance.yml new file mode 100644 index 0000000..f68ce5c --- /dev/null +++ b/update_nuage_instance.yml @@ -0,0 +1,69 @@ +--- +# 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 }}"