summaryrefslogtreecommitdiffstats
path: root/ansible/roles/enable_iommu_on_boot/tasks/main.yml
blob: 1b98a50b13d53dbd5b85e333c57371362dd22cbc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# Copyright (c) 2017 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
---
- name: Set iommu_boot_params for Intel
  set_fact:
    iommu_boot_params: ' intel_iommu=on iommu=pt'
  when: hostvars[inventory_hostname]['ansible_system_vendor'] == "Intel Corporation"

- name: Set iommu_boot_params for AMD
  set_fact:
    iommu_boot_params: ' amd_iommu=on iommu=pt'
  when: hostvars[inventory_hostname]['ansible_system_vendor'] == "AuthenticAMD"

- name: Set facts for this role
  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 }}'

- name: check if iommu is set by this role in /etc/default/grub
  lineinfile:
    path: /etc/default/grub
    line: '{{ iommu_enabled_kernel_params_with_help }}'
  #changed_when: no
  check_mode: yes
  register: is_mine_iommu_etc_grub
  ignore_errors: True

- name: check if iommu is set by someone else
  command: "grep -o 'iommu' /etc/default/grub"
  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: 'Configure iommu in /etc/default/grub'
# and /boot/grub/grub.cfg(when: ansible_distribution == "Ubuntu")'
  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

- name: find boot grub.cfg
  find:
    paths: /boot
    file_type: file
    patterns: 'grub*.cfg'
    recurse: yes
  register: grub_files

- include: manual_modify_grub.yml
  # only tested on Ubuntu, kernel line is probably different on other distros
  with_items: "{{ grub_files.files }}"
  when: ansible_distribution == "Ubuntu"