From ce2a448b23ac6dfb7d7f08fffa38f4d4bdafed68 Mon Sep 17 00:00:00 2001 From: "l.covela" Date: Wed, 7 Jan 2026 10:10:43 +0100 Subject: [PATCH] Actualiser synology_dsm_upgrade_api.yml --- synology_dsm_upgrade_api.yml | 64 +++++++++++++++++------------------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/synology_dsm_upgrade_api.yml b/synology_dsm_upgrade_api.yml index a81b235..33bea30 100644 --- a/synology_dsm_upgrade_api.yml +++ b/synology_dsm_upgrade_api.yml @@ -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 gather_facts: false @@ -26,18 +26,14 @@ base_url: "{{ syno_scheme }}://{{ inventory_hostname }}:{{ syno_port }}" # 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 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 return_content: true validate_certs: "{{ syno_verify_ssl }}" status_code: 200 - url_parameters: - api: "SYNO.API.Info" - version: 1 - method: "query" - query: "SYNO.API.Auth,SYNO.Core.Upgrade" register: api_info failed_when: api_info.json.success is not defined or api_info.json.success != true @@ -70,14 +66,30 @@ validate_certs: "{{ syno_verify_ssl }}" return_content: true status_code: 200 - url_parameters: - api: "SYNO.API.Auth" - version: "{{ auth_ver }}" - method: "login" - account: "{{ syno_user }}" - passwd: "{{ syno_pass }}" - session: "{{ syno_session }}" - format: "sid" + # NOTE: pas de url_parameters (legacy). On passe les paramètres en query_string. + # Ansible uri accepte "body" pour POST, mais ici DSM Auth marche en GET. + # On encode en query directement: + register: login + failed_when: login.json.success != true + vars: + _login_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 + # 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 failed_when: login.json.success != true @@ -88,16 +100,11 @@ # 3) (Optionnel) Check update (si la méthode existe) - name: Check DSM update readiness (best effort) 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 validate_certs: "{{ syno_verify_ssl }}" return_content: true status_code: 200 - url_parameters: - api: "SYNO.Core.Upgrade" - version: "{{ upgrade_ver }}" - method: "{{ upgrade_check_method }}" - _sid: "{{ sid }}" register: upgrade_check failed_when: false @@ -108,16 +115,11 @@ # 4) Start upgrade (l'update est supposée déjà téléchargée / prête) - name: Start DSM upgrade (SYNO.Core.Upgrade) 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 validate_certs: "{{ syno_verify_ssl }}" return_content: true status_code: 200 - url_parameters: - api: "SYNO.Core.Upgrade" - version: "{{ upgrade_ver }}" - method: "{{ upgrade_start_method }}" - _sid: "{{ sid }}" register: upgrade_start - name: Fail si start a échoué @@ -134,16 +136,10 @@ # 5) Logout - name: Logout DSM API 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 validate_certs: "{{ syno_verify_ssl }}" return_content: true status_code: 200 - url_parameters: - api: "SYNO.API.Auth" - version: "{{ auth_ver }}" - method: "logout" - session: "{{ syno_session }}" - _sid: "{{ sid }}" register: logout failed_when: false