Blob Blame History Raw
commit db645e39a38070ac0b3fe9f2f447d60e6eedac4a
Author: Bernd Finger <bfinger@redhat.com>
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