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