Blob Blame History Raw
commit f30be1952fe55cc4a5e153bfd13863f527643d40
Author: Bernd Finger <bfinger@redhat.com>
Date:   Wed Aug 11 21:38:45 2021 +0200

    Solve issues #177, #193, and #194.

diff --git a/tasks/RedHat/generic/assert-tsx.yml b/tasks/RedHat/generic/assert-tsx.yml
index 4ace64c..d7da1d2 100644
--- a/tasks/RedHat/generic/assert-tsx.yml
+++ b/tasks/RedHat/generic/assert-tsx.yml
@@ -4,6 +4,24 @@
     msg: "imported RedHat/generic/assert-tsx.yml"
 
 - block:
+# There are CPUs which are not capable of enabling the rtm flag, so we just report the status:
+    - name: Get all CPU flags
+      shell: lscpu | grep "^Flags:"
+      register: __sap_hana_preconfigure_register_lscpu_flags
+      changed_when: no
+
+    - name: Report that the rtm CPU flag exists
+      debug:
+        msg: "INFO: The CPU flags contain ' rtm'."
+      when: "' rtm' in __sap_hana_preconfigure_register_lscpu_flags.stdout"
+
+    - name: Report that the rtm CPU flag does not exist
+      debug:
+        msg: "INFO: The CPU flags do not contain ' rtm'."
+      when: "' rtm' not in __sap_hana_preconfigure_register_lscpu_flags.stdout"
+
+# Note: Assertions are only necessary if rtm is not in the CPU flags.
+#       If rtm is present, we just print an INFO message.
     - name: Get contents of GRUB_CMDLINE_LINUX in /etc/default/grub
       command: grep GRUB_CMDLINE_LINUX /etc/default/grub
       register: __sap_hana_preconfigure_register_default_grub_cmdline_tsx_assert
@@ -15,6 +33,21 @@
         fail_msg: "FAIL: 'tsx=on' is not in GRUB_CMDLINE_LINUX in /etc/default/grub!"
         success_msg: "PASS: 'tsx=on' is in GRUB_CMDLINE_LINUX in /etc/default/grub."
       ignore_errors: "{{ sap_hana_preconfigure_assert_ignore_errors|d(false) }}"
+      when: "' rtm' not in __sap_hana_preconfigure_register_lscpu_flags.stdout"
+
+    - name: Report if tsx=on is in GRUB_CMDLINE_LINUX in /etc/default/grub
+      debug:
+        msg: "INFO: 'tsx=on' is in GRUB_CMDLINE_LINUX in /etc/default/grub."
+      when:
+        - "'tsx=on' in __sap_hana_preconfigure_register_default_grub_cmdline_tsx_assert.stdout"
+        - "' rtm' in __sap_hana_preconfigure_register_lscpu_flags.stdout"
+
+    - name: Report if tsx=on is not in GRUB_CMDLINE_LINUX in /etc/default/grub
+      debug:
+        msg: "INFO: 'tsx=on' is not in GRUB_CMDLINE_LINUX in /etc/default/grub."
+      when:
+        - "'tsx=on' not in __sap_hana_preconfigure_register_default_grub_cmdline_tsx_assert.stdout"
+        - "' rtm' in __sap_hana_preconfigure_register_lscpu_flags.stdout"
 
     - name: Get contents of /proc/cmdline
       command: cat /proc/cmdline
@@ -27,20 +60,21 @@
         fail_msg: "FAIL: 'tsx=on' is not in /proc/cmdline!"
         success_msg: "PASS: 'tsx=on' is in /proc/cmdline."
       ignore_errors: "{{ sap_hana_preconfigure_assert_ignore_errors|d(false) }}"
+      when: "' rtm' not in __sap_hana_preconfigure_register_lscpu_flags.stdout"
 
-# We are counting the number of cpuinfo lines which contain "flags" and subtracting those lines
-#   which contain "flags" and " rtm ". If the result is 0, all CPUs contain flag "rtm".
-    - name: Get rtm status of all CPUs
-      shell: awk '$1=="flags"{n++}$1=="flags"&&$0~" rtm" {a++}END{print n-a}' /proc/cpuinfo
-      register: __sap_hana_preconfigure_register_cpuinfo_flags_contain_rtm
-      changed_when: no
+    - name: Report if tsx=on is in /proc/cmdline
+      debug:
+        msg: "INFO: 'tsx=on' is in /proc/cmdline."
+      when:
+        - "'tsx=on' in __sap_hana_preconfigure_register_proc_cmdline_tsx_assert.stdout"
+        - "' rtm' in __sap_hana_preconfigure_register_lscpu_flags.stdout"
 
-    - name: Assert that all CPUs contain flag rtm
-      assert:
-        that: "__sap_hana_preconfigure_register_cpuinfo_flags_contain_rtm.stdout == '0'"
-        fail_msg: "FAIL: At least one of the CPUs does not contain flag 'rtm'!"
-        success_msg: "PASS: All CPUs contain flag 'rtm'."
-      ignore_errors: "{{ sap_hana_preconfigure_assert_ignore_errors|d(false) }}"
+    - name: Report if tsx=on is not in /proc/cmdline
+      debug:
+        msg: "INFO: 'tsx=on' is not in /proc/cmdline."
+      when:
+        - "'tsx=on' not in __sap_hana_preconfigure_register_proc_cmdline_tsx_assert.stdout"
+        - "' rtm' in __sap_hana_preconfigure_register_lscpu_flags.stdout"
 
   when: ansible_architecture == 'x86_64' and
         ansible_distribution == 'RedHat' and
diff --git a/tasks/RedHat/generic/enable-tsx.yml b/tasks/RedHat/generic/enable-tsx.yml
index 879f0bf..3dd6d09 100644
--- a/tasks/RedHat/generic/enable-tsx.yml
+++ b/tasks/RedHat/generic/enable-tsx.yml
@@ -3,7 +3,16 @@
 - debug:
     msg: "imported RedHat/generic/enable-tsx.yml"
 
-- name: Enable TSX at boot time
+- name: Get the CPU flags
+  shell: lscpu | grep "^Flags"
+  register: __sap_hana_preconfigure_register_lscpu
+  when:
+    - ansible_architecture == 'x86_64'
+    - ansible_distribution == 'RedHat'
+    - ansible_distribution_major_version == '8'
+    - __sap_hana_preconfigure_fact_ansible_distribution_minor_version >= '3'
+
+- name: Enable TSX at boot time if CPU flag rtm is not present
   lineinfile:
     path: /etc/default/grub
     backup: yes
@@ -14,10 +23,12 @@
   with_items:
      - "tsx=on"
   notify: __sap_hana_preconfigure_regenerate_grub2_conf_handler
-  when: ansible_architecture == 'x86_64' and
-        ansible_distribution == 'RedHat' and
-        ansible_distribution_major_version == '8' and
-        __sap_hana_preconfigure_fact_ansible_distribution_minor_version >= '3'
+  when:
+    - ansible_architecture == 'x86_64'
+    - ansible_distribution == 'RedHat'
+    - ansible_distribution_major_version == '8'
+    - __sap_hana_preconfigure_fact_ansible_distribution_minor_version >= '3'
+    - not ' rtm' in __sap_hana_preconfigure_register_lscpu.stdout
   tags: grubconfig
   loop_control:
     loop_var: line_item
diff --git a/tasks/RedHat/installation.yml b/tasks/RedHat/installation.yml
index fabeaac..a5bdb94 100644
--- a/tasks/RedHat/installation.yml
+++ b/tasks/RedHat/installation.yml
@@ -63,22 +63,19 @@
     - ansible_architecture == "ppc64le"
     - sap_hana_preconfigure_add_ibm_power_repo|d(true)
 
-- name: Accept the license for the IBM tools
-  shell: |
-    MORE=+1000 /opt/ibm/lop/configure <<-EOF
-    y
-    EOF
+- name: Accept the license for the IBM Service and Productivity Tools
+  shell: LESS=+q /opt/ibm/lop/configure <<<'y'
   when:
     - ansible_architecture == "ppc64le"
     - sap_hana_preconfigure_add_ibm_power_repo|d(true)
 
-- name: Install IBM tools
+- name: Install the IBM Service and Productivity Tools
   package:
     state: latest
     name: "{{ __sap_hana_preconfigure_required_ppc64le }}"
   when: ansible_architecture == "ppc64le"
 
-- name: Get status of installed IBM tools
+- name: Get the status of installed IBM Service and Productivity Tools
   yum:
     name: "{{ __sap_hana_preconfigure_required_ppc64le }}"
   register: __sap_hana_preconfigure_register_required_ppc64le_packages
diff --git a/tasks/sapnote/2055470.yml b/tasks/sapnote/2055470.yml
index 5efbd6d..697913c 100644
--- a/tasks/sapnote/2055470.yml
+++ b/tasks/sapnote/2055470.yml
@@ -32,7 +32,7 @@
     loop_var: line_item
 
 ## This only works if interfacename=device name, otherwise it fails 
-- name: add largesend options to interface
+- name: Add largesend options to interfaces
   lineinfile:
     regexp: '^ETHTOOL_OPTIONS_tso='
     line: ETHTOOL_OPTIONS_tso='-K iface tso on'
@@ -45,8 +45,9 @@
         )
   loop_control:
     loop_var: line_item
+  ignore_errors: true
 
-- name: Add largesend parameters for ppc64le
+- name: Add largesend kernel parameters for ppc64le
   sysctl:
     sysctl_file: /etc/sysctl.d/ibm_largesend.conf
     name: "{{ line_item.name }}"