Add IOMMU to grub to support OVS/SRIOV SA contexts 87/63287/2
authorStepan Andrushko <stepanx.andrushko@intel.com>
Mon, 8 Oct 2018 17:04:10 +0000 (20:04 +0300)
committerAbhijit Sinha <abhijit.sinha@intel.com>
Fri, 26 Oct 2018 11:01:20 +0000 (11:01 +0000)
It is required to setup IOMMU in grub to run standalone context tests:
OVS/DPDK and SRIOV. Updated existing "enable_iommu_on_boot" role and
NSB setup scripts: "ansible/install.yaml" and
"ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml".

JIRA: YARDSTICK-1469

Change-Id: I348e4ebbffe89c7356352f43b7a6c1fdc4d81479
Signed-off-by: Stepan Andrushko <stepanx.andrushko@intel.com>
ansible/install.yaml
ansible/roles/enable_iommu_on_boot/tasks/main.yml
ansible/roles/enable_iommu_on_boot/tasks/manual_modify_grub.yml
ansible/roles/enable_iommu_on_boot/vars/main.yml
ansible/ubuntu_server_baremetal_deploy_samplevnfs.yml

index 0800ee5..01478fb 100644 (file)
@@ -63,8 +63,8 @@
     - role: set_package_installer_proxy
       when: proxy_env is defined and proxy_env
     # can't update grub in chroot/docker
-    # ?? - enable_iommu_on_boot
     - enable_hugepages_on_boot
+    - enable_iommu_on_boot
     # needed for collectd plugins
     - increase_open_file_limits
     - install_image_dependencies
index 1b98a50..e406fcc 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
     iommu_boot_params: ' amd_iommu=on iommu=pt'
   when: hostvars[inventory_hostname]['ansible_system_vendor'] == "AuthenticAMD"
 
-- name: Set facts for this role
+- name: Define grub string for IOMMU
   set_fact:
-    hugepages_help_string: '  # added by hugepages role'
-    iommu_help_string: ', added by iommu role'
-    hugepages_params: " default_hugepagesz=1G hugepagesz=1G hugepages=8"
-    iommu_original_kernel_params: 'GRUB_CMDLINE_LINUX="\$GRUB_CMDLINE_LINUX{{ hugepages_params }}'
-    iommu_enabled_kernel_params: '{{ iommu_original_kernel_params }}{{ iommu_boot_params }}"'
-    iommu_enabled_kernel_params_with_help: '{{ iommu_original_kernel_params }}{{ iommu_boot_params }}"{{ hugepages_help_string }}{{ iommu_help_string }}'
+    enable_iommu: 'GRUB_CMDLINE_LINUX="$GRUB_CMDLINE_LINUX{{ iommu_boot_params }}'
 
-- name: check if iommu is set by this role in /etc/default/grub
+- name: check if iommu is set by this role in {{ grub_file}}
   lineinfile:
-    path: /etc/default/grub
-    line: '{{ iommu_enabled_kernel_params_with_help }}'
-  #changed_when: no
+    path: "{{ grub_file}}"
+    regexp: '{{ iommu_help_string }}'
+    line: '{{ iommu_help_string }}'
+    state: absent
   check_mode: yes
-  register: is_mine_iommu_etc_grub
+  register: is_nsb_iommu_role
   ignore_errors: True
 
-- name: check if iommu is set by someone else
-  command: "grep -o 'iommu' /etc/default/grub"
+- name: Check if IOMMU is set by someone else
+  lineinfile:
+    path: "{{ grub_file}}"
+    regexp: "_iommu="
+    line: '{{ iommu_help_string }}'
+    state: absent
+  check_mode: yes
   register: is_iommu
   ignore_errors: True
 
-- fail:
-    msg: "Iommu already set by someone else"
-  when: is_mine_iommu_etc_grub.changed == false and is_iommu.stdout != ""
+- name: Send info that IOMMU is configured by someone else
+  debug:
+    msg: "INFO: NOT modified, IOMMU is already configured by someone."
+  when:
+    - not is_nsb_iommu_role.changed
+    - is_iommu.changed
 
-- name: 'Configure iommu in /etc/default/grub'
-# and /boot/grub/grub.cfg(when: ansible_distribution == "Ubuntu")'
+- name: Add IOMMU when it is not set
   lineinfile:
-    path: /etc/default/grub
-    regexp: '({{ iommu_original_kernel_params }})"{{ hugepages_help_string }}'
-    line: '\1{{ iommu_boot_params }}"{{ hugepages_help_string }}{{ iommu_help_string }}'
-    backrefs: yes
-  when: is_mine_iommu_etc_grub.changed == true
+    path: "{{ grub_file }}"
+    regexp: "{{ iommu_help_string }}"
+    line: '{{ enable_iommu }}" {{ iommu_help_string }}'
+  when:
+    - not is_nsb_iommu_role.changed
+    - not is_iommu.changed
 
 - name: find boot grub.cfg
   find:
index 6760c3f..e0c8809 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # See the License for the specific language governing permissions and
 # limitations under the License.
 ---
-
-
 - name: check if iommu is set by this role in /boot grub.cfg files
   lineinfile:
     path: "{{ item.path }}"
-    regexp: '{{ hugepages_params }}{{ iommu_boot_params }}'
-    line: ''
-  #changed_when: no
+    regexp: '{{ iommu_boot_params }}'
+    line: '{{ iommu_boot_params }}'
+    state: absent
   check_mode: yes
   register: is_mine_iommu_boot_grub
   ignore_errors: True
@@ -29,6 +27,6 @@
     path: "{{ item.path }}"
     regexp: '(.*linux\s+/boot/vmlinuz.*)$'
     replace: '\1{{ iommu_boot_params }}'
-  when: is_mine_iommu_boot_grub.msg != "line replaced"
+  when: not is_mine_iommu_boot_grub.changed
 
 - debug: var=ansible_kernel
index 1b642dc..d2575ff 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Intel Corporation
+# Copyright (c) 2017-2018 Intel Corporation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -12,6 +12,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 ---
+grub_file: "/etc/default/grub"
+iommu_help_string: '  # added by Yardstick ansible iommu role'
 update_grub:
   Debian: "update-grub2"
   RedHat: "grub2-mkconfig -o /boot/grub2/grub.cfg"
index 3a29a8a..5f0dec6 100644 (file)
@@ -24,6 +24,7 @@
       when: proxy_env is defined and proxy_env
 #     can't update grub in chroot/docker
     - enable_hugepages_on_boot
+    - enable_iommu_on_boot
     # needed for collectd plugins
     - increase_open_file_limits
     - install_image_dependencies