Actualiser synology_upgrade_ssh.yml
This commit is contained in:
parent
1d9060d137
commit
834607c9ad
|
|
@ -1,28 +1,23 @@
|
||||||
---
|
---
|
||||||
- name: Synology DSM - télécharger puis installer une mise à jour via SSH (auto-detect synoupgrade)
|
- name: Synology DSM - télécharger puis installer une mise à jour via SSH (robuste Semaphore)
|
||||||
hosts: synology
|
hosts: synology
|
||||||
gather_facts: false
|
gather_facts: false
|
||||||
|
|
||||||
vars:
|
vars:
|
||||||
# Temps max (en secondes) pour attendre download / reboot
|
|
||||||
download_timeout: 3600
|
download_timeout: 3600
|
||||||
reboot_timeout: 1800
|
reboot_timeout: 1800
|
||||||
poll_delay: 20
|
poll_delay: 20
|
||||||
|
|
||||||
# Chemins probables (DSM varie selon versions/modèles)
|
|
||||||
synoupgrade_candidates:
|
synoupgrade_candidates:
|
||||||
- "/usr/syno/sbin/synoupgrade"
|
- "/usr/syno/sbin/synoupgrade"
|
||||||
- "/usr/syno/bin/synoupgrade"
|
- "/usr/syno/bin/synoupgrade"
|
||||||
- "/sbin/synoupgrade"
|
|
||||||
- "/bin/synoupgrade"
|
|
||||||
- "/usr/bin/synoupgrade"
|
|
||||||
- "/usr/sbin/synoupgrade"
|
|
||||||
- "/usr/syno/sbin/synoupgrade2"
|
- "/usr/syno/sbin/synoupgrade2"
|
||||||
- "/usr/syno/bin/synoupgrade2"
|
- "/usr/syno/bin/synoupgrade2"
|
||||||
- "/usr/bin/synoupgrade2"
|
- "/usr/sbin/synoupgrade"
|
||||||
|
- "/usr/bin/synoupgrade"
|
||||||
- "/usr/sbin/synoupgrade2"
|
- "/usr/sbin/synoupgrade2"
|
||||||
|
- "/usr/bin/synoupgrade2"
|
||||||
|
|
||||||
# Commandes possibles pour lancer l’install (selon DSM)
|
|
||||||
start_subcommands:
|
start_subcommands:
|
||||||
- "--start"
|
- "--start"
|
||||||
- "--upgrade"
|
- "--upgrade"
|
||||||
|
|
@ -31,20 +26,18 @@
|
||||||
- "--install"
|
- "--install"
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
# 0) Détecter le binaire présent
|
- name: Détecter synoupgrade (sans [ ] ; fallback PATH)
|
||||||
- name: Détecter synoupgrade (ou synoupgrade2) sur le NAS
|
|
||||||
ansible.builtin.raw: |
|
ansible.builtin.raw: |
|
||||||
set -e
|
set -e
|
||||||
FOUND=""
|
FOUND=""
|
||||||
for p in {{ synoupgrade_candidates | join(' ') }}; do
|
for p in {{ synoupgrade_candidates | join(' ') }}; do
|
||||||
if [ -x "$p" ]; then
|
if test -x "$p"; then
|
||||||
FOUND="$p"
|
FOUND="$p"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# fallback: PATH (busybox)
|
if test -z "$FOUND"; then
|
||||||
if [ -z "$FOUND" ]; then
|
|
||||||
if command -v synoupgrade >/dev/null 2>&1; then
|
if command -v synoupgrade >/dev/null 2>&1; then
|
||||||
FOUND="$(command -v synoupgrade)"
|
FOUND="$(command -v synoupgrade)"
|
||||||
elif command -v synoupgrade2 >/dev/null 2>&1; then
|
elif command -v synoupgrade2 >/dev/null 2>&1; then
|
||||||
|
|
@ -52,13 +45,7 @@
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$FOUND" ]; then
|
|
||||||
echo "FOUND=$FOUND"
|
echo "FOUND=$FOUND"
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
echo "FOUND="
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
register: detect
|
register: detect
|
||||||
changed_when: false
|
changed_when: false
|
||||||
|
|
||||||
|
|
@ -70,16 +57,15 @@
|
||||||
- name: Fail si synoupgrade introuvable
|
- name: Fail si synoupgrade introuvable
|
||||||
ansible.builtin.fail:
|
ansible.builtin.fail:
|
||||||
msg: >-
|
msg: >-
|
||||||
synoupgrade introuvable sur ce NAS (DSM/ modèle).
|
synoupgrade introuvable. Sortie détection:
|
||||||
stdout: {{ detect.stdout | default('') }}
|
{{ detect.stdout | default('') }}
|
||||||
=> Donne-moi la sortie de : "ls -l /usr/syno/sbin /usr/syno/bin | grep -i upgrad"
|
|
||||||
when: synoupgrade_bin == ""
|
when: synoupgrade_bin == ""
|
||||||
|
|
||||||
- name: Afficher le binaire trouvé
|
- name: Afficher le binaire trouvé
|
||||||
ansible.builtin.debug:
|
ansible.builtin.debug:
|
||||||
msg: "synoupgrade utilisé: {{ synoupgrade_bin }}"
|
msg: "synoupgrade utilisé: {{ synoupgrade_bin }}"
|
||||||
|
|
||||||
# 1) Check mise à jour dispo
|
# 1) Check update
|
||||||
- name: Check mise à jour disponible
|
- name: Check mise à jour disponible
|
||||||
ansible.builtin.raw: "{{ synoupgrade_bin }} --check || true"
|
ansible.builtin.raw: "{{ synoupgrade_bin }} --check || true"
|
||||||
register: check_out
|
register: check_out
|
||||||
|
|
@ -89,7 +75,8 @@
|
||||||
ansible.builtin.debug:
|
ansible.builtin.debug:
|
||||||
var: check_out.stdout_lines
|
var: check_out.stdout_lines
|
||||||
|
|
||||||
# Heuristique : stop si rien
|
# Si check ne renvoie rien, on NE STOP pas automatiquement, car certains DSM sont muets.
|
||||||
|
# On stop seulement si on voit des motifs "no update".
|
||||||
- name: Stop si aucune mise à jour détectée (heuristique)
|
- name: Stop si aucune mise à jour détectée (heuristique)
|
||||||
ansible.builtin.meta: end_play
|
ansible.builtin.meta: end_play
|
||||||
when: >
|
when: >
|
||||||
|
|
@ -108,8 +95,8 @@
|
||||||
ansible.builtin.debug:
|
ansible.builtin.debug:
|
||||||
var: download_start.stdout_lines
|
var: download_start.stdout_lines
|
||||||
|
|
||||||
# 3) Attendre fin download (status ou log)
|
# 3) Poll download
|
||||||
- name: Attendre fin du téléchargement (poll status/log)
|
- name: Attendre fin du téléchargement (status/log)
|
||||||
ansible.builtin.raw: |
|
ansible.builtin.raw: |
|
||||||
set -e
|
set -e
|
||||||
if {{ synoupgrade_bin }} --status >/dev/null 2>&1; then
|
if {{ synoupgrade_bin }} --status >/dev/null 2>&1; then
|
||||||
|
|
@ -133,7 +120,7 @@
|
||||||
ansible.builtin.debug:
|
ansible.builtin.debug:
|
||||||
var: dl_poll.stdout_lines
|
var: dl_poll.stdout_lines
|
||||||
|
|
||||||
# 4) Démarrer installation (essais)
|
# 4) Start install (best effort)
|
||||||
- name: Tenter de démarrer l'installation (plusieurs sous-commandes)
|
- name: Tenter de démarrer l'installation (plusieurs sous-commandes)
|
||||||
ansible.builtin.raw: "{{ synoupgrade_bin }} {{ item }} || true"
|
ansible.builtin.raw: "{{ synoupgrade_bin }} {{ item }} || true"
|
||||||
loop: "{{ start_subcommands }}"
|
loop: "{{ start_subcommands }}"
|
||||||
|
|
@ -141,7 +128,7 @@
|
||||||
changed_when: true
|
changed_when: true
|
||||||
failed_when: false
|
failed_when: false
|
||||||
|
|
||||||
- name: Choisir la première tentative qui ne ressemble pas à une erreur
|
- name: Choisir la première tentative OK (pas de mots d'erreur)
|
||||||
ansible.builtin.set_fact:
|
ansible.builtin.set_fact:
|
||||||
start_ok: >-
|
start_ok: >-
|
||||||
{{
|
{{
|
||||||
|
|
@ -152,7 +139,7 @@
|
||||||
| first) | default({})
|
| first) | default({})
|
||||||
}}
|
}}
|
||||||
|
|
||||||
- name: Fail si aucune commande de démarrage ne marche
|
- name: Fail si aucune commande start ne marche
|
||||||
ansible.builtin.fail:
|
ansible.builtin.fail:
|
||||||
msg: >-
|
msg: >-
|
||||||
Impossible de démarrer l'installation via synoupgrade.
|
Impossible de démarrer l'installation via synoupgrade.
|
||||||
|
|
@ -167,7 +154,7 @@
|
||||||
- "stdout: {{ start_ok.stdout | default('') }}"
|
- "stdout: {{ start_ok.stdout | default('') }}"
|
||||||
- "stderr: {{ start_ok.stderr | default('') }}"
|
- "stderr: {{ start_ok.stderr | default('') }}"
|
||||||
|
|
||||||
# 5) Attente reboot : le NAS peut couper SSH
|
# 5) Wait reboot (SSH down/up)
|
||||||
- name: Attendre que le NAS coupe SSH (reboot probable)
|
- name: Attendre que le NAS coupe SSH (reboot probable)
|
||||||
ansible.builtin.wait_for:
|
ansible.builtin.wait_for:
|
||||||
host: "{{ inventory_hostname }}"
|
host: "{{ inventory_hostname }}"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue