|
1 |
| -- name: Get installed kernels |
2 |
| - command: dnf list --installed kernel |
3 |
| - register: _ofed_dnf_kernels |
| 1 | +- import_tasks: install-kernel-devel.yml |
| 2 | + |
| 3 | +- name: Install DOCA repo |
| 4 | + ansible.builtin.yum_repository: |
| 5 | + name: doca |
| 6 | + file: doca |
| 7 | + description: DOCA Online Repo |
| 8 | + baseurl: "{{ doca_repo_url }}" |
| 9 | + enabled: true |
| 10 | + gpgcheck: false |
| 11 | + |
| 12 | +- name: Install doca-extra package |
| 13 | + ansible.builtin.dnf: |
| 14 | + name: doca-extra |
| 15 | + |
| 16 | +- name: Build DOCA kernel modules |
| 17 | + ansible.builtin.shell: |
| 18 | + cmd: /opt/mellanox/doca/tools/doca-kernel-support |
| 19 | + register: _doca_kernel_build |
| 20 | + |
| 21 | + |
| 22 | +- name: Find generated doca-kernel-repo |
| 23 | + ansible.builtin.shell: 'find /tmp/DOCA.* -name doca-kernel-repo-*' |
| 24 | + register: _doca_kernel_repo # e.g. /tmp/DOCA.WVMchs2QWo/doca-kernel-repo-24.10.1.1.4.0-1.kver.5.14.0.427.31.1.el9.4.x86.64.x86_64.rpm |
4 | 25 | changed_when: false
|
5 | 26 |
|
6 |
| -- name: Determine running kernel |
7 |
| - command: uname -r # e.g. 4.18.0-513.18.1.el8_9.x86_64 |
8 |
| - register: _ofed_loaded_kernel |
9 |
| - changed_when: false |
10 |
| - |
11 |
| -- name: Check current kernel is newest installed |
12 |
| - assert: |
13 |
| - that: _ofed_kernel_current == _ofed_dnf_kernels_newest |
14 |
| - fail_msg: "Kernel {{ _ofed_loaded_kernel.stdout }} is loaded but newer {{ _ofed_dnf_kernels_newest }} is installed: consider rebooting?" |
15 |
| - vars: |
16 |
| - _ofed_kernel_current: >- |
17 |
| - {{ _ofed_loaded_kernel.stdout | regex_replace('\.(?:.(?!\.))+$', '') | regex_replace('\.(?:.(?!\.))+$', '') }} |
18 |
| - _ofed_dnf_kernels_newest: >- |
19 |
| - {{ _ofed_dnf_kernels.stdout_lines[1:] | map('split') | map(attribute=1) | map('regex_replace', '\.(?:.(?!\.))+$', '') | community.general.version_sort | last }} |
20 |
| - # dnf line format e.g. "kernel.x86_64 4.18.0-513.18.1.el8_9 @baseos " |
21 |
| - |
22 |
| -- name: Enable epel |
23 |
| - dnf: |
24 |
| - name: epel-release |
25 |
| - |
26 |
| -- name: Check for existing OFED installation |
27 |
| - command: ofed_info |
28 |
| - changed_when: false |
29 |
| - failed_when: |
30 |
| - - _ofed_info.rc > 0 |
31 |
| - - "'No such file or directory' not in _ofed_info.msg" |
32 |
| - register: _ofed_info |
| 27 | +- name: Create dnf cache |
| 28 | + ansible.builtin.command: dnf makecache |
33 | 29 |
|
34 |
| -- name: Install build prerequisites |
35 |
| - dnf: |
36 |
| - name: "{{ ofed_build_packages + (ofed_build_rl8_packages if ofed_distro_major_version == '8' else []) }}" |
37 |
| - when: "'MLNX_OFED_LINUX-' + ofed_version not in _ofed_info.stdout" |
38 |
| - # don't want to install a load of prereqs unnecessarily |
| 30 | +- name: Install DOCA repository package |
| 31 | + ansible.builtin.dnf: |
| 32 | + name: "{{ _doca_kernel_repo.stdout }}" |
| 33 | + disable_gpg_check: true |
39 | 34 |
|
40 |
| -- name: Download and unpack Mellanox OFED tarball |
41 |
| - ansible.builtin.unarchive: |
42 |
| - src: "{{ ofed_download_url }}" |
43 |
| - dest: "{{ ofed_tmp_dir }}" |
44 |
| - remote_src: yes |
45 |
| - become: no |
46 |
| - when: "'MLNX_OFED_LINUX-' + ofed_version not in _ofed_info.stdout" |
| 35 | +- name: Install DOCA packages |
| 36 | + ansible.builtin.dnf: |
| 37 | + name: "{{ doca_profile }}" |
47 | 38 |
|
48 |
| -# Below from https://docs.nvidia.com/networking/display/mlnxofedv24010331/user+manual |
49 |
| -- name: Run OFED install script |
50 |
| - command: |
51 |
| - cmd: > |
52 |
| - ./mlnxofedinstall |
53 |
| - --add-kernel-support |
54 |
| - {% if not ofed_update_firmware %}--without-fw-update{% endif %} |
55 |
| - --force |
56 |
| - --skip-repo |
57 |
| - {% for pkgsel in ofed_package_selection %} |
58 |
| - --{{ pkgsel }} |
59 |
| - {% endfor %} |
60 |
| - chdir: "{{ ofed_tmp_dir }}/MLNX_OFED_LINUX-{{ ofed_version }}-{{ ofed_distro }}{{ ofed_distro_version }}-{{ ofed_arch }}/" |
61 |
| - register: _ofed_install |
62 |
| - when: "'MLNX_OFED_LINUX-' + ofed_version not in _ofed_info.stdout" |
63 |
| - async: "{{ 45 * 60 }}" # wait for up to 45 minutes |
64 |
| - poll: 15 # check every 15 seconds |
| 39 | +- name: Cleanup DOCA build directories |
| 40 | + ansible.builtin.file: |
| 41 | + state: absent |
| 42 | + path: "{{ (_doca_kernel_repo.stdout | split('/'))[:2] | join('/') }}" |
65 | 43 |
|
66 | 44 | - name: Update initramfs
|
67 |
| - command: |
68 |
| - cmd: dracut -f |
69 |
| - when: '"update your initramfs" in _ofed_install.stdout | default("")' |
70 |
| - failed_when: false # always shows errors due to deleted modules for inbox RDMA drivers |
| 45 | + ansible.builtin.command: |
| 46 | + cmd: dracut -f --tmpdir /var/tmp |
| 47 | + environment: |
| 48 | + TMPDIR: /var/tmp |
| 49 | + register: _doca_dracut |
| 50 | + failed_when: _doca_dracut.stderr != '' # appears rc is always 0 |
71 | 51 |
|
72 | 52 | - name: Load the new driver
|
73 |
| - command: |
74 |
| - cmd: /etc/init.d/openibd restart |
75 |
| - when: '"To load the new driver" in _ofed_install.stdout | default("")' |
| 53 | + ansible.builtin.command: /etc/init.d/openibd restart |
0 commit comments