Skip to content

Commit 6e650af

Browse files
committed
add doca role run by fatimage
1 parent 4de581c commit 6e650af

File tree

5 files changed

+90
-0
lines changed

5 files changed

+90
-0
lines changed

ansible/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,5 @@ roles/*
6666
!roles/lustre/**
6767
!roles/dnf_repos/
6868
!roles/dnf_repos/**
69+
!roles/doca/
70+
!roles/doca/**

ansible/fatimage.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,14 @@
199199
name: cloudalchemy.grafana
200200
tasks_from: install.yml
201201

202+
- hosts: doca
203+
become: yes
204+
gather_facts: yes
205+
tasks:
206+
- name: Install Mellanox DOCA
207+
include_role:
208+
name: doca
209+
202210
- name: Run post.yml hook
203211
vars:
204212
appliances_environment_root: "{{ lookup('env', 'APPLIANCES_ENVIRONMENT_ROOT') }}"

ansible/roles/doca/defaults/main.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
doca_version: '2.9.1' # 2.9 is LTS, last to support ConnectX-4, 3 years for bug fixes and CVE updates
2+
doca_profile: doca-ofed
3+
doca_repo_url: "https://linux.mellanox.com/public/repo/doca/{{ doca_version }}/rhel{{ ansible_distribution_version }}/{{ ansible_architecture }}/"
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
- name: Get installed kernels
2+
command: dnf list --installed kernel
3+
register: _ofed_dnf_kernels
4+
changed_when: false
5+
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: Install matching kernel-devel package
23+
dnf:
24+
name: "kernel-devel-{{ _ofed_loaded_kernel.stdout | trim }}"

ansible/roles/doca/tasks/install.yml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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
25+
changed_when: false
26+
27+
- name: Create dnf cache
28+
ansible.builtin.command: dnf makecache
29+
30+
- name: Install DOCA repository package
31+
ansible.builtin.dnf:
32+
name: "{{ _doca_kernel_repo.stdout }}"
33+
disable_gpg_check: true
34+
35+
- name: Install DOCA packages
36+
ansible.builtin.dnf:
37+
name: "{{ doca_profile }}"
38+
39+
- name: Cleanup DOCA build directories
40+
ansible.builtin.file:
41+
state: absent
42+
path: "{{ (_doca_kernel_repo.stdout | split('/'))[:2] | join('/') }}"
43+
44+
- name: Update initramfs
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
51+
52+
- name: Load the new driver
53+
ansible.builtin.command: /etc/init.d/openibd restart

0 commit comments

Comments
 (0)