|
1 | 1 | # SPDX-License-Identifier: Apache-2.0
|
2 | 2 | ---
|
3 | 3 |
|
4 |
| -- name: Get list of what provides packages # noqa command-instead-of-module |
5 |
| - ansible.builtin.command: |
6 |
| - cmd: "rpm -q --whatprovides {{ item }}" |
7 |
| - register: __sap_general_preconfigure_register_whatprovides |
| 4 | +# Both sap_general_preconfigure_packages and __sap_general_preconfigure_min_pkgs are checked at same time. |
| 5 | +# Check rpm --whatprovides only if package cannot be found directly. |
| 6 | +- name: Query RPM packages |
| 7 | + ansible.builtin.shell: |
| 8 | + cmd: | |
| 9 | + if rpm -q {{ item }} &> /dev/null; |
| 10 | + then rpm -q {{ item }} |
| 11 | + else rpm -q --whatprovides {{ item }}; |
| 12 | + fi |
| 13 | + register: __sap_general_preconfigure_register_packages |
8 | 14 | changed_when: false
|
9 | 15 | ignore_errors: true
|
10 |
| - loop: "{{ sap_general_preconfigure_packages }}" |
| 16 | + loop: "{{ sap_general_preconfigure_packages if not sap_general_preconfigure_min_package_check | bool |
| 17 | + else ((sap_general_preconfigure_packages | d([])) + (__sap_general_preconfigure_min_pkgs | d([])) | map(attribute='0') | unique) }}" |
11 | 18 |
|
12 | 19 |
|
13 |
| -# Both sap_general_preconfigure_packages and __sap_general_preconfigure_min_pkgs are checked at same time. |
14 | 20 | - name: Assert that all required packages are installed
|
15 | 21 | ansible.builtin.assert:
|
16 |
| - that: item in ansible_facts.packages |
17 |
| - or __sap_general_preconfigure_register_whatprovides.results | selectattr('item', 'equalto', item) | map(attribute='rc') | first == 0 |
| 22 | + that: __sap_general_preconfigure_register_packages.results | selectattr('item', 'equalto', item) | map(attribute='rc') | first == 0 |
18 | 23 | fail_msg: "FAIL: Package '{{ item }}' is not installed!"
|
19 | 24 | success_msg: "PASS: Package '{{ item }}' is installed."
|
20 | 25 | loop: "{{ sap_general_preconfigure_packages if not sap_general_preconfigure_min_package_check | bool
|
21 | 26 | else ((sap_general_preconfigure_packages | d([])) + (__sap_general_preconfigure_min_pkgs | d([])) | map(attribute='0') | unique) }}"
|
22 | 27 | ignore_errors: "{{ sap_general_preconfigure_assert_ignore_errors | d(false) }}"
|
23 | 28 |
|
24 | 29 |
|
25 |
| -# Availability of minimum packages is checked above. |
26 |
| -- name: Assert that all minimum required packages are installed with minimum version |
27 |
| - ansible.builtin.assert: |
28 |
| - that: |
29 |
| - - __version is version(item[1], '>=') |
30 |
| - fail_msg: "FAIL: Minimum package version '{{ item[0] }}-{{ item[1] }}' is not installed! Current version: '{{ __version }}'" |
31 |
| - success_msg: "PASS: Minimum package version '{{ item[0] }}-{{ item[1] }}' is installed." |
32 |
| - vars: |
33 |
| - __version: "{{ ansible_facts.packages[item[0]][0]['version'] ~ '-' ~ ansible_facts.packages[item[0]][0]['release'] |
34 |
| - ~ '.' ~ ansible_facts.packages[item[0]][0]['arch']}}" |
35 |
| - loop: "{{ __sap_general_preconfigure_min_pkgs }}" |
| 30 | +- name: Block for minimum required packages assert |
36 | 31 | when:
|
37 | 32 | - sap_general_preconfigure_min_package_check | bool
|
38 | 33 | - __sap_general_preconfigure_min_pkgs | d([])
|
39 |
| - ignore_errors: "{{ sap_general_preconfigure_assert_ignore_errors | d(false) }}" |
| 34 | + block: |
| 35 | + - name: Query RPM packages for minimum required packages |
| 36 | + ansible.builtin.shell: |
| 37 | + cmd: | |
| 38 | + if rpm -q {{ item[0] }} &> /dev/null; |
| 39 | + then rpm -q --queryformat '%{VERSION}-%{RELEASE}.%{ARCH}\n' {{ item[0] }} |
| 40 | + else rpm -q --queryformat '%{VERSION}-%{RELEASE}.%{ARCH}\n' --whatprovides {{ item[0] }}; |
| 41 | + fi |
| 42 | + register: __sap_general_preconfigure_register_packages_minimum |
| 43 | + changed_when: false |
| 44 | + ignore_errors: true |
| 45 | + loop: "{{ __sap_general_preconfigure_min_pkgs }}" |
40 | 46 |
|
41 | 47 |
|
| 48 | + - name: Assert that all minimum required packages are installed with minimum version |
| 49 | + ansible.builtin.assert: |
| 50 | + that: |
| 51 | + - __version[0] is version(item[1], '>=') |
| 52 | + fail_msg: "FAIL: Minimum package version '{{ item[0] }}-{{ item[1] }}' is not installed! Current version: '{{ __version[0] }}'" |
| 53 | + success_msg: "PASS: Minimum package version '{{ item[0] }}-{{ item[1] }}' is installed." |
| 54 | + vars: |
| 55 | + __version: |
| 56 | + "{{ __sap_general_preconfigure_register_packages_minimum.results | selectattr('item', 'equalto', item) | map(attribute='stdout') }}" |
| 57 | + loop: "{{ __sap_general_preconfigure_min_pkgs }}" |
| 58 | + ignore_errors: "{{ sap_general_preconfigure_assert_ignore_errors | d(false) }}" |
| 59 | + when: __sap_general_preconfigure_register_packages.results | selectattr('item', 'equalto', item[0]) | map(attribute='rc') | first == 0 |
| 60 | + |
| 61 | + |
| 62 | +- name: Gather service facts |
| 63 | + ansible.builtin.service_facts: |
| 64 | + |
| 65 | +# Service packagekit is part of PackageKit-backend-zypp (SLE-Module-Desktop-Applications) |
| 66 | +# This service creates zypper locks and causes package install failures. |
| 67 | +- name: Wait for stop of packagekit.service |
| 68 | + ansible.builtin.shell: | |
| 69 | + set -o pipefail && bash -c ' |
| 70 | + while (ps aux | grep "[z]ypper" | grep -v grep) || (ps aux | grep "/usr/lib/packagekitd" | grep -v grep) || |
| 71 | + ([ -f /var/run/zypp.pid ] && [ -s /var/run/zypp.pid ]); do |
| 72 | + sleep 10; |
| 73 | + done' |
| 74 | + register: __packagekit_service_check |
| 75 | + changed_when: false |
| 76 | + until: __packagekit_service_check.rc == 0 |
| 77 | + retries: 60 |
| 78 | + when: "'packagekit.service' in ansible_facts.services" |
| 79 | + |
42 | 80 | - name: Get info about possible package updates # noqa command-instead-of-module
|
43 | 81 | ansible.builtin.command:
|
44 | 82 | cmd: zypper -q patch-check
|
45 |
| - timeout: 120 |
46 |
| - retries: 5 |
| 83 | + timeout: 60 |
47 | 84 | register: __sap_general_preconfigure_register_zypper_check_update_assert
|
48 | 85 | changed_when: false
|
49 | 86 | ignore_errors: true # true, because unpatched system is always error.
|
|
81 | 118 | ignore_errors: "{{ sap_general_preconfigure_assert_ignore_errors | d(false) }}"
|
82 | 119 |
|
83 | 120 |
|
84 |
| -- name: Assert saptune is at requested version |
85 |
| - ansible.builtin.assert: |
86 |
| - that: ansible_facts.packages['saptune'][0]['version'] == sap_general_preconfigure_saptune_version |
87 |
| - fail_msg: "FAIL: saptune version installed is {{ ansible_facts.packages['saptune'][0]['version'] |
88 |
| - }} but the version {{ sap_general_preconfigure_saptune_version }} was expected" |
89 |
| - success_msg: "PASS: the installed version of saptune meets the expected version: {{ sap_general_preconfigure_saptune_version }}" |
| 121 | +- name: Block to assert that correct saptune version is installed |
90 | 122 | when:
|
91 | 123 | - __sap_general_preconfigure_use_saptune
|
92 | 124 | - sap_general_preconfigure_saptune_version is defined
|
93 | 125 | - sap_general_preconfigure_saptune_version | length > 0
|
| 126 | + block: |
| 127 | + # We are checking for %{VERSION} (e.g. 3.1.4), not full %{VERSION}-%{RELEASE}.%{ARCH} |
| 128 | + - name: Check saptune version # noqa: command-instead-of-module |
| 129 | + ansible.builtin.command: |
| 130 | + cmd: rpm -q --queryformat '%{VERSION}\n' saptune |
| 131 | + register: __sap_general_preconfigure_register_saptune_version |
| 132 | + changed_when: false |
| 133 | + ignore_errors: true |
| 134 | + |
| 135 | + - name: Assert saptune is at requested version |
| 136 | + ansible.builtin.assert: |
| 137 | + that: __sap_general_preconfigure_register_saptune_version.stdout == sap_general_preconfigure_saptune_version |
| 138 | + fail_msg: "FAIL: saptune version installed is {{ __sap_general_preconfigure_register_saptune_version.stdout |
| 139 | + }} but the version {{ sap_general_preconfigure_saptune_version }} was expected" |
| 140 | + success_msg: "PASS: the installed version of saptune meets the expected version: {{ sap_general_preconfigure_saptune_version }}" |
| 141 | + when: __sap_general_preconfigure_register_saptune_version.rc == 0 |
0 commit comments