diff --git a/plugins/module_utils/sap_launchpad_software_center_download_runner.py b/plugins/module_utils/sap_launchpad_software_center_download_runner.py index 09a54df..8469773 100644 --- a/plugins/module_utils/sap_launchpad_software_center_download_runner.py +++ b/plugins/module_utils/sap_launchpad_software_center_download_runner.py @@ -254,12 +254,15 @@ def _download_file(url, filepath, retry=0, **kwargs): logger.debug("checksum: %s; url: %s", checksum, res.request.url) if (not checksum) or _is_checksum_matched(filepath, checksum): return + + # If checksum validation fails, the file on disk is considered invalid. + # Remove it to ensure the next attempt (retry or external) starts fresh. logger.warning("checksum mismatch: %s: %s", filepath, checksum) + if os.path.exists(filepath): + os.remove(filepath) + if retry >= MAX_RETRY_TIMES: - # Remove partial file if exists. - if os.path.exists(filepath): - os.remove(filepath) - raise RuntimeError(f'failed to download {url}: md5 mismatch') + raise RuntimeError(f'failed to download {url}: checksum mismatch after {MAX_RETRY_TIMES} retries') return _download_file(url, filepath, retry+1, **kwargs) diff --git a/roles/sap_software_download/tasks/download_files.yml b/roles/sap_software_download/tasks/download_files.yml index 177e76f..1712f3b 100644 --- a/roles/sap_software_download/tasks/download_files.yml +++ b/roles/sap_software_download/tasks/download_files.yml @@ -14,8 +14,6 @@ loop_control: label: "{{ item }} : {{ __sap_software_download_files_results_venv.msg | d('') }}" register: __sap_software_download_files_results_venv - retries: 1 - until: __sap_software_download_files_results_venv is not failed environment: PATH: "{{ __sap_software_download_venv.path }}/bin:{{ ansible_env.PATH }}" PYTHONPATH: "{{ __sap_software_download_venv.path }}/lib/{{ sap_software_download_python_interpreter }}/site-packages" @@ -38,8 +36,6 @@ loop_control: label: "{{ item }} : {{ __sap_software_download_files_results_default.msg | d('') }}" register: __sap_software_download_files_results_default - retries: 1 - until: __sap_software_download_files_results_default is not failed vars: ansible_python_interpreter: "{{ '/usr/bin/' ~ sap_software_download_python_interpreter }}" ignore_errors: true # Errors are ignored and validated afterwards diff --git a/roles/sap_software_download/tasks/download_plan.yml b/roles/sap_software_download/tasks/download_plan.yml index b89af1f..b92feba 100644 --- a/roles/sap_software_download/tasks/download_plan.yml +++ b/roles/sap_software_download/tasks/download_plan.yml @@ -13,8 +13,6 @@ loop_control: label: "{{ item.Filename }} : {{ __sap_software_download_files_plan_results_venv.msg | d('') }}" register: __sap_software_download_files_plan_results_venv - retries: 1 - until: __sap_software_download_files_plan_results_venv is not failed environment: PATH: "{{ __sap_software_download_venv.path }}/bin:{{ ansible_env.PATH }}" PYTHONPATH: "{{ __sap_software_download_venv.path }}/lib/{{ sap_software_download_python_interpreter }}/site-packages" @@ -36,8 +34,6 @@ loop_control: label: "{{ item.Filename }} : {{ __sap_software_download_files_plan_results_default.msg | d('') }}" register: __sap_software_download_files_plan_results_default - retries: 1 - until: __sap_software_download_files_plan_results_default is not failed vars: ansible_python_interpreter: "{{ '/usr/bin/' ~ sap_software_download_python_interpreter }}" ignore_errors: true # Errors are ignored and validated afterwards diff --git a/roles/sap_software_download/tasks/download_stack.yml b/roles/sap_software_download/tasks/download_stack.yml index c7d6ff2..0b51109 100644 --- a/roles/sap_software_download/tasks/download_stack.yml +++ b/roles/sap_software_download/tasks/download_stack.yml @@ -9,7 +9,6 @@ transaction_name: "{{ sap_software_download_mp_transaction }}" dest: "{{ sap_software_download_directory }}" register: __sap_software_download_stack_results_venv - retries: 1 environment: PATH: "{{ __sap_software_download_venv.path }}/bin:{{ ansible_env.PATH }}" PYTHONPATH: "{{ __sap_software_download_venv.path }}/lib/{{ sap_software_download_python_interpreter }}/site-packages" @@ -27,7 +26,6 @@ transaction_name: "{{ sap_software_download_mp_transaction }}" dest: "{{ sap_software_download_directory }}" register: __sap_software_download_stack_results_default - retries: 1 vars: ansible_python_interpreter: "{{ '/usr/bin/' ~ sap_software_download_python_interpreter }}" ignore_errors: true # Errors are ignored and validated afterwards