Files
ansible/playbooks/nextcloud-upgrade.yml
T

131 lines
4.3 KiB
YAML

---
- name: Nextcloud Upgrade
hosts: nextcloud
become: yes
vars:
ansible_remote_tmp: "/var/tmp/.ansible"
nextcloud_path: "/var/www/nextcloud"
php_bin: "/usr/bin/php"
pre_tasks:
- name: Ensure remote tmp exists
file:
path: "/var/tmp/.ansible"
state: directory
owner: root
group: root
mode: "0755"
tasks:
- name: Pause playbook for 3 seconds
pause:
seconds: 3
- name: 1.1 - Get current Nextcloud status
command: "{{ php_bin }} occ status --output=json"
args:
chdir: "{{ nextcloud_path }}"
register: nc_status_json
- name: 1.2 - Parse current version
set_fact:
nc_current_version: "{{ (nc_status_json.stdout | from_json).versionstring }}"
- name: 1.3 - Show current version
debug:
msg: "Current Nextcloud version: {{ nc_current_version }}"
- name: 2.1 - Get list of installed apps
command: "{{ php_bin }} occ app:list --output=json"
args:
chdir: "{{ nextcloud_path }}"
register: app_list
- name: 2.2 - Disable 3rd-party apps (non-core)
command: "{{ php_bin }} occ app:disable {{ item }}"
args:
chdir: "{{ nextcloud_path }}"
loop: "{{ (app_list.stdout | from_json).enabled | difference(['files','activity','dav','federation','files_external','files_sharing','files_trashbin','files_versions','lookup_server_connector','notifications','provisioning_api','settings','systemtags','theming','updatenotification','user_status']) }}"
register: disabled_apps
changed_when: "'Disabled' in disabled_apps.stdout"
when: false # Optional: Disabled if you want.
- name: 2.3 - Save disabled apps list
set_fact:
nc_disabled_apps: "{{ disabled_apps.results | map(attribute='item') | list }}"
- name: 3.1 - Enable maintenance mode
command: "{{ php_bin }} occ maintenance:mode --on"
args:
chdir: "{{ nextcloud_path }}"
register: maintenance_on
changed_when: true
- block:
# ───────────────────────────────
# 3.2 — RUN NEXTCLOUD UPDATER
# ───────────────────────────────
- name: 3.2 - Run Nextcloud CLI updater
command: "{{ php_bin }} updater/updater.phar --no-interaction"
args:
chdir: "{{ nextcloud_path }}"
register: updater_output
retries: 3
delay: 3
until: updater_output.rc == 0
- name: Check if update actually happened
set_fact:
update_message: "{{ updater_output.stdout }}"
- name: If already newest version, show message
debug:
msg: "Nextcloud is already at the latest version. Nothing to upgrade."
when: "'No update available' in updater_output.stdout"
# ───────────────────────────────
# 3.3 — DATABASE UPGRADE
# ───────────────────────────────
- name: 3.3 - Run occ upgrade (only if update occurred)
command: "{{ php_bin }} occ upgrade"
args:
chdir: "{{ nextcloud_path }}"
register: occ_upgrade_output
when: "'No update available' not in updater_output.stdout"
rescue:
- name: ❌ UPGRADE FAILED - Details
debug:
msg: |
!!!!!!!!!!! NEXTCLOUD UPGRADE FAILED !!!!!!!!!!!!
Check logs:
- {{ nextcloud_path }}/data/updater.log
- {{ nextcloud_path }}/data/nextcloud.log
- name: Mark failure
set_fact:
upgrade_failed: true
always:
- name: ALWAYS disable maintenance mode
command: "{{ php_bin }} occ maintenance:mode --off"
args:
chdir: "{{ nextcloud_path }}"
post_tasks:
- name: Final status
debug:
msg: >-
Upgrade finished successfully (or nothing to update).
when: upgrade_failed is not defined
- name: Final failure
debug:
msg: "Nextcloud upgrade failed — maintenance mode disabled."
when: upgrade_failed is defined