diff --git a/roles/sap_software_download/README.md b/roles/sap_software_download/README.md
index 93fdd7b..e26dbe0 100644
--- a/roles/sap_software_download/README.md
+++ b/roles/sap_software_download/README.md
@@ -256,6 +256,13 @@ A list of SAP software file names to download.
The name or display ID of a transaction from the SAP Maintenance Planner.
If provided, the role will download all files associated with this Maintenance Plan transaction.
+### sap_software_download_mp_stack_xml
+- _Type:_ `boolean`
+- _Default:_ `true`
+
+Enables download of Maintenance Plan Stack XML file together with files.
+If set to `false`, Stack XML file will not be downloaded.
+
### sap_software_download_find_alternatives
- _Type:_ `boolean`
- _Default:_ `true`
diff --git a/roles/sap_software_download/defaults/main.yml b/roles/sap_software_download/defaults/main.yml
index 50ac01f..d4a209f 100644
--- a/roles/sap_software_download/defaults/main.yml
+++ b/roles/sap_software_download/defaults/main.yml
@@ -43,6 +43,10 @@ sap_software_download_files: []
# If provided, the role will download all files associated with this Maintenance Plan transaction.
sap_software_download_mp_transaction: ''
+# Enables download of Maintenance Plan Stack XML file together with files.
+# If set to `false`, Stack XML file will not be downloaded.
+sap_software_download_mp_stack_xml: true
+
# Enables searching for alternative files if the requested file is not found.
# Only applies to files specified in `sap_software_download_files`.
# If set to `false`, the role will not search for alternatives.
diff --git a/roles/sap_software_download/meta/argument_spec.yml b/roles/sap_software_download/meta/argument_spec.yml
index 6a64e3e..f62f9da 100644
--- a/roles/sap_software_download/meta/argument_spec.yml
+++ b/roles/sap_software_download/meta/argument_spec.yml
@@ -82,6 +82,14 @@ argument_specs:
- The name or display ID of a transaction from the SAP Maintenance Planner.
- If provided, the role will download all files associated with this Maintenance Plan transaction.
+ sap_software_download_mp_stack_xml:
+ type: bool
+ required: false
+ default: true
+ description:
+ - Enables download of Maintenance Plan Stack XML file together with files.
+ - If set to `false`, Stack XML file will not be downloaded.
+
sap_software_download_find_alternatives:
type: bool
required: true
diff --git a/roles/sap_software_download/tasks/download_stack.yml b/roles/sap_software_download/tasks/download_stack.yml
new file mode 100644
index 0000000..c7d6ff2
--- /dev/null
+++ b/roles/sap_software_download/tasks/download_stack.yml
@@ -0,0 +1,49 @@
+# SPDX-License-Identifier: Apache-2.0
+---
+
+- name: Download - Maintenance Plan Stack XML - Get file with Python venv
+ when: sap_software_download_use_venv | d(true)
+ community.sap_launchpad.maintenance_planner_stack_xml_download:
+ suser_id: "{{ sap_software_download_suser_id }}"
+ suser_password: "{{ sap_software_download_suser_password }}"
+ 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"
+ VIRTUAL_ENV: "{{ __sap_software_download_venv.path }}"
+ vars:
+ ansible_python_interpreter: "{{ __sap_software_download_venv.path ~ '/bin/' ~ sap_software_download_python_interpreter }}"
+ ignore_errors: true # Errors are ignored and validated afterwards
+
+
+- name: Download - Maintenance Plan Stack XML - Get file with Python system default
+ when: not sap_software_download_use_venv | d(true)
+ community.sap_launchpad.maintenance_planner_stack_xml_download:
+ suser_id: "{{ sap_software_download_suser_id }}"
+ suser_password: "{{ sap_software_download_suser_password }}"
+ 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
+
+
+- name: Download - Maintenance Plan Stack XML - Set fact with maintenance_planner_stack_xml_download output
+ ansible.builtin.set_fact:
+ __sap_software_download_stack_results: "{{ __sap_software_download_stack_results_venv
+ if sap_software_download_use_venv | d(true) else __sap_software_download_stack_results_default }}"
+
+- name: Download - Maintenance Plan Stack XML - Show failed results
+ ansible.builtin.fail:
+ msg: |
+ Download of Stack XML failed.
+ Either ensure correct value in `sap_software_download_mp_transaction`
+ or ignore this error with `sap_software_download_ignore_plan_not_found` set to `true`.
+ when:
+ - not sap_software_download_ignore_plan_not_found | d(false)
+ - __sap_software_download_stack_results.failed
diff --git a/roles/sap_software_download/tasks/main.yml b/roles/sap_software_download/tasks/main.yml
index 299dcf5..4763943 100644
--- a/roles/sap_software_download/tasks/main.yml
+++ b/roles/sap_software_download/tasks/main.yml
@@ -29,6 +29,13 @@
- sap_software_download_validate_relationships
+- name: SAP Software Download - Download - Stack XML {{ sap_software_download_mp_transaction | d('') }}
+ ansible.builtin.include_tasks:
+ file: download_stack.yml
+ when:
+ - sap_software_download_mp_transaction | length > 0
+ - sap_software_download_mp_stack_xml | d(true)
+
- name: SAP Software Download - Download - Maintenance Plan {{ sap_software_download_mp_transaction | d('') }}
ansible.builtin.include_tasks:
file: download_plan.yml