ajout du playbook upgrade_nuage_instance
authorrominique <romain.legoff@heureux-cyclage.org>
Thu, 21 Sep 2023 16:13:51 +0000 (18:13 +0200)
committerrominique <romain.legoff@heureux-cyclage.org>
Thu, 21 Sep 2023 16:13:51 +0000 (18:13 +0200)
README.md
group_vars/all.yml
host_vars/ateliers.yml
host_vars/ligatures.yml
play_move_and_restore.yml
tasks/backup_from_ateliers.yml
tasks/download_nextcloud_source.yml [new file with mode: 0644]
tasks/restore_to_vm.yml
tasks/update_nextcloud.yml [new file with mode: 0644]
test.yml [new file with mode: 0644]
update_nuage_instance.yml [new file with mode: 0644]

index 3c2e0f7..d84fba8 100644 (file)
--- 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
 
index d709894..8eedb3e 100644 (file)
@@ -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
index 81e3682..4e5aa25 100644 (file)
@@ -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
index ffc6f15..8fc2292 100644 (file)
@@ -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
index 0c7da40..2640df1 100644 (file)
@@ -9,7 +9,7 @@
     ansible.builtin.file:
       path: "{{ nextcloud_tmp_path }}"
       state: directory
-      mode: '0777'
+      mode: '777'
 
 # play sur ateliers
 - hosts: ateliers
index dfc7f38..11cd3ff 100644 (file)
@@ -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 }}"
 #     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 (file)
index 0000000..e05ada3
--- /dev/null
@@ -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
index 8045db8..f2812e8 100644 (file)
@@ -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 (file)
index 0000000..e541c37
--- /dev/null
@@ -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 (file)
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 (file)
index 0000000..f68ce5c
--- /dev/null
@@ -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 }}"