Actualiser synology_dsm_upgrade_api.yml

This commit is contained in:
l.covela 2026-01-07 10:10:43 +01:00
parent a48a3dae30
commit ce2a448b23
1 changed files with 30 additions and 34 deletions

View File

@ -1,5 +1,5 @@
--- ---
- name: Synology DSM - déclencher une mise à jour via l'API DSM - name: Synology DSM - déclencher une mise à jour via l'API DSM (Semaphore/legacy compatible)
hosts: synology hosts: synology
gather_facts: false gather_facts: false
@ -26,18 +26,14 @@
base_url: "{{ syno_scheme }}://{{ inventory_hostname }}:{{ syno_port }}" base_url: "{{ syno_scheme }}://{{ inventory_hostname }}:{{ syno_port }}"
# 1) Découverte des APIs (paths & versions) via SYNO.API.Info # 1) Découverte des APIs (paths & versions) via SYNO.API.Info
# IMPORTANT: Semaphore utilise souvent ansible.legacy.uri => pas de url_parameters, donc URL en 1 ligne
- name: Discover SYNO.API.Auth & SYNO.Core.Upgrade via SYNO.API.Info - name: Discover SYNO.API.Auth & SYNO.Core.Upgrade via SYNO.API.Info
ansible.builtin.uri: ansible.builtin.uri:
url: "{{ base_url }}/webapi/entry.cgi" url: "{{ base_url }}/webapi/entry.cgi?api=SYNO.API.Info&version=1&method=query&query=SYNO.API.Auth,SYNO.Core.Upgrade"
method: GET method: GET
return_content: true return_content: true
validate_certs: "{{ syno_verify_ssl }}" validate_certs: "{{ syno_verify_ssl }}"
status_code: 200 status_code: 200
url_parameters:
api: "SYNO.API.Info"
version: 1
method: "query"
query: "SYNO.API.Auth,SYNO.Core.Upgrade"
register: api_info register: api_info
failed_when: api_info.json.success is not defined or api_info.json.success != true failed_when: api_info.json.success is not defined or api_info.json.success != true
@ -70,14 +66,30 @@
validate_certs: "{{ syno_verify_ssl }}" validate_certs: "{{ syno_verify_ssl }}"
return_content: true return_content: true
status_code: 200 status_code: 200
url_parameters: # NOTE: pas de url_parameters (legacy). On passe les paramètres en query_string.
api: "SYNO.API.Auth" # Ansible uri accepte "body" pour POST, mais ici DSM Auth marche en GET.
version: "{{ auth_ver }}" # On encode en query directement:
method: "login" register: login
account: "{{ syno_user }}" failed_when: login.json.success != true
passwd: "{{ syno_pass }}" vars:
session: "{{ syno_session }}" _login_url: >-
format: "sid" {{ base_url }}/webapi/{{ auth_path }}
?api=SYNO.API.Auth
&version={{ auth_ver }}
&method=login
&account={{ syno_user | urlencode }}
&passwd={{ syno_pass | urlencode }}
&session={{ syno_session | urlencode }}
&format=sid
# surcharge url avec la version 1-ligne sans espaces
# (on ne peut pas mettre des espaces: donc on met une seule ligne ci-dessous)
- name: Login DSM API (SYNO.API.Auth) - URL finale
ansible.builtin.uri:
url: "{{ base_url }}/webapi/{{ auth_path }}?api=SYNO.API.Auth&version={{ auth_ver }}&method=login&account={{ syno_user | urlencode }}&passwd={{ syno_pass | urlencode }}&session={{ syno_session | urlencode }}&format=sid"
method: GET
validate_certs: "{{ syno_verify_ssl }}"
return_content: true
status_code: 200
register: login register: login
failed_when: login.json.success != true failed_when: login.json.success != true
@ -88,16 +100,11 @@
# 3) (Optionnel) Check update (si la méthode existe) # 3) (Optionnel) Check update (si la méthode existe)
- name: Check DSM update readiness (best effort) - name: Check DSM update readiness (best effort)
ansible.builtin.uri: ansible.builtin.uri:
url: "{{ base_url }}/webapi/{{ upgrade_path }}" url: "{{ base_url }}/webapi/{{ upgrade_path }}?api=SYNO.Core.Upgrade&version={{ upgrade_ver }}&method={{ upgrade_check_method }}&_sid={{ sid }}"
method: GET method: GET
validate_certs: "{{ syno_verify_ssl }}" validate_certs: "{{ syno_verify_ssl }}"
return_content: true return_content: true
status_code: 200 status_code: 200
url_parameters:
api: "SYNO.Core.Upgrade"
version: "{{ upgrade_ver }}"
method: "{{ upgrade_check_method }}"
_sid: "{{ sid }}"
register: upgrade_check register: upgrade_check
failed_when: false failed_when: false
@ -108,16 +115,11 @@
# 4) Start upgrade (l'update est supposée déjà téléchargée / prête) # 4) Start upgrade (l'update est supposée déjà téléchargée / prête)
- name: Start DSM upgrade (SYNO.Core.Upgrade) - name: Start DSM upgrade (SYNO.Core.Upgrade)
ansible.builtin.uri: ansible.builtin.uri:
url: "{{ base_url }}/webapi/{{ upgrade_path }}" url: "{{ base_url }}/webapi/{{ upgrade_path }}?api=SYNO.Core.Upgrade&version={{ upgrade_ver }}&method={{ upgrade_start_method }}&_sid={{ sid }}"
method: GET method: GET
validate_certs: "{{ syno_verify_ssl }}" validate_certs: "{{ syno_verify_ssl }}"
return_content: true return_content: true
status_code: 200 status_code: 200
url_parameters:
api: "SYNO.Core.Upgrade"
version: "{{ upgrade_ver }}"
method: "{{ upgrade_start_method }}"
_sid: "{{ sid }}"
register: upgrade_start register: upgrade_start
- name: Fail si start a échoué - name: Fail si start a échoué
@ -134,16 +136,10 @@
# 5) Logout # 5) Logout
- name: Logout DSM API - name: Logout DSM API
ansible.builtin.uri: ansible.builtin.uri:
url: "{{ base_url }}/webapi/{{ auth_path }}" url: "{{ base_url }}/webapi/{{ auth_path }}?api=SYNO.API.Auth&version={{ auth_ver }}&method=logout&session={{ syno_session | urlencode }}&_sid={{ sid }}"
method: GET method: GET
validate_certs: "{{ syno_verify_ssl }}" validate_certs: "{{ syno_verify_ssl }}"
return_content: true return_content: true
status_code: 200 status_code: 200
url_parameters:
api: "SYNO.API.Auth"
version: "{{ auth_ver }}"
method: "logout"
session: "{{ syno_session }}"
_sid: "{{ sid }}"
register: logout register: logout
failed_when: false failed_when: false