commit db645e39a38070ac0b3fe9f2f447d60e6eedac4a Author: Bernd Finger Date: Fri Jun 19 19:25:34 2020 +0200 fix Comparing installed versions of a package with the required version is not reliable diff --git a/tasks/installation.yml b/tasks/installation.yml index 8ad40b9..b8788bc 100644 --- a/tasks/installation.yml +++ b/tasks/installation.yml @@ -1,10 +1,10 @@ --- # tasks file for sap-preconfigure: installation -- name: Ensure required package groups are installed - package: - state: present - name: "{{ __sap_preconfigure_packagegroups }}" +# - name: Ensure required package groups are installed +# package: +# state: present +# name: "{{ __sap_preconfigure_packagegroups }}" - name: Ensure required packages are installed package: @@ -14,38 +14,67 @@ - name: Ensure minimum packages are installed block: - - name: check if minimum release needs to be installed - shell: | - set -x - required_pkg={{ pkg | join('-') }} - newest=$(echo -e "$required_pkg\n$(rpm -q {{ pkg[0] }} )"| sort -V | tail -1) - if [ $newest == $required_pkg ]; then - echo $newest - fi - loop: "{{ __sap_preconfigure_min_pkgs }}" - loop_control: - loop_var: pkg - check_mode: no - register: __sap_preconfigure_register_minpkglist - changed_when: false - - - name: Initialize an empty list for our strings - set_fact: - __sap_preconfigure_fact_minpkglist: [] - - - name: Create list of packages to be installed - set_fact: - __sap_preconfigure_fact_minpkglist: "{{ __sap_preconfigure_fact_minpkglist | difference(['']) + [ pkg.stdout ] }}" - loop: "{{ __sap_preconfigure_register_minpkglist.results }}" - loop_control: - loop_var: pkg - - debug: var=__sap_preconfigure_fact_minpkglist - - - name: Install minimum packages if required - package: - name: "{{ __sap_preconfigure_fact_minpkglist }}" - state: present - when: not ( __sap_preconfigure_fact_minpkglist == [ "" ] ) + - name: Gather package facts + package_facts: + + - set_fact: + reqpkgs: "{{ __sap_preconfigure_min_pkgs }}" + + - debug: + var: reqpkgs + + - set_fact: + sap_preconfigure_fact_minpkglist: |- + {% set ns = namespace() %} + {% set ns.pkgs = [] %} + {% for reqpkg in reqpkgs %} + {% if not reqpkg[0] in ansible_facts.packages %} + {% set _ = ns.pkgs.append(reqpkg | join('-')) %} + {% else %} + {% set pkg = ansible_facts.packages[reqpkg[0]][-1] %} + {% set verrel = pkg.version ~ '-' ~ pkg.release %} + {% if reqpkg[1].replace (".el", ".0.0.") is version(verrel.replace (".el", ".0.0."), '>', strict=false) %} + {% set _ = ns.pkgs.append(reqpkg | join('-')) %} + {% else %} + {% set _ = "pkg already installed with same or later version" %} + {% endif %} + {% endif %} + {% endfor %} + {{ ns.pkgs }} + +# - name: check if minimum release needs to be installed +# shell: | +# set -x +# required_pkg={{ pkg | join('-') }} +# newest=$(echo -e "$required_pkg\n$(rpm -q {{ pkg[0] }} )"| sort -V | tail -1) +# if [ $newest == $required_pkg ]; then +# echo $newest +# fi +# loop: "{{ __sap_preconfigure_min_pkgs }}" +# loop_control: +# loop_var: pkg +# check_mode: no +# register: __sap_preconfigure_register_minpkglist +# changed_when: false + +# - name: Initialize an empty list for our strings +# set_fact: +# __sap_preconfigure_fact_minpkglist: [] + +# - name: Create list of packages to be installed +# set_fact: +# __sap_preconfigure_fact_minpkglist: "{{ __sap_preconfigure_fact_minpkglist | difference(['']) + [ pkg.stdout ] }}" +# loop: "{{ __sap_preconfigure_register_minpkglist.results }}" +# loop_control: +# loop_var: pkg + + - debug: var=sap_preconfigure_fact_minpkglist + + - name: Install minimum packages if required + yum: + name: "{{ sap_preconfigure_fact_minpkglist }}" + state: present + when: not ( sap_preconfigure_fact_minpkglist == [ "" ] ) when: - sap_preconfigure_min_package_check|bool