## ## Copyright (c) 2020-2021 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: install Python3 from epel-release package: name: - python36 - python36-devel - libselinux-python state: present enablerepo: "epel" when: - ansible_distribution == 'RedHat' or ansible_distribution == 'CentOS' - ansible_distribution_version < '8' - name: install dpdk-devel required for libraries enablement in RHEL / CentOS >= 8.2 dnf: name: dpdk-devel when: ansible_distribution in ["RedHat", "CentOS"] and ansible_distribution_version >= '8.2' - name: build and install dpdk using meson and ninja tools block: - name: install building tools as python packages pip: name: - selinux - meson>=0.53.2,<0.60.0 - ninja>=1.10.0 - pyelftools>=0.26 state: present register: pip_result retries: 5 until: pip_result is succeeded delay: 5 - name: meson build for ease of compiling and linking libraries enablement command: "meson build" args: chdir: "{{ dpdk_dir }}" - name: configure DPDK with ninja command: "ninja" args: chdir: "{{ dpdk_dir }}/build" - name: install DPDK with ninja command: "ninja install" args: chdir: "{{ dpdk_dir }}/build" - name: update the dynamic linker cache command: "ldconfig" args: chdir: "{{ dpdk_dir }}/build" vars: ansible_python_interpreter: /usr/bin/python3 - name: Ensure dpdk libs is in loader search path on RHEL/CentOS copy: dest: "/etc/ld.so.conf.d/libdpdk-x86_64.conf" content: "/usr/local/lib64/" mode: 0644 owner: root group: root become: yes when: ansible_os_family == "RedHat" - name: find dpdk tools find: path: "{{ dpdk_dir }}" patterns: "dpdk-devbind.py" recurse: yes register: dpdk_tools_dir - name: set path to dpdk usertools directory set_fact: dpdk_tools: "{{ dpdk_tools_dir.files[0].path }}" - name: load userspace modules modprobe: name: "{{ item }}" state: present with_items: - vfio-pci - uio - name: install dpdk-devbind.py in /usr/local/bin copy: remote_src: yes src: "{{ dpdk_tools }}" dest: "/usr/local/bin/dpdk-devbind.py" mode: 0700 owner: root group: root become: yes - name: clone intel module git: repo: "{{ dpdk_kmods_repo }}" dest: "{{ dpdk_kmods_dest }}" version: 'main' force: yes - name: apply fix to Makefile replace: path: "{{ dpdk_kmods_dest }}/linux/igb_uio/Makefile" regexp: "\\(PWD\\)" replace: "(CURDIR)" mode: "0644" - name: build intel module make: chdir: "{{ dpdk_kmods_dest }}/linux/igb_uio" - name: load intel module command: "insmod {{ dpdk_kmods_dest }}/linux/igb_uio/igb_uio.ko" register: result failed_when: "'No such file or directory' in result.stderr" changed_when: "'already bound' not in result.stderr"