AETHER-1839 initial sriov role

Change-Id: I54af5c451a18d160d3799e9264ef5af9cfa19d36
diff --git a/tasks/main.yml b/tasks/main.yml
new file mode 100644
index 0000000..702d868
--- /dev/null
+++ b/tasks/main.yml
@@ -0,0 +1,65 @@
+---
+# sriov tasks/main.yml
+#
+# SPDX-FileCopyrightText: © 2021 Open Networking Foundation <support@opennetworking.org>
+# SPDX-License-Identifier: Apache-2.0
+
+- name: include OS-specific vars
+  include_vars: "{{ ansible_os_family }}.yml"
+
+- name: include OS-specific tasks
+  include_tasks: "{{ ansible_os_family }}.yml"
+
+- name: Ensure VT-d is enabled in BIOS
+  tags: molecule-notest
+  shell: "set -o pipefail && dmesg | grep DMAR-IR"
+  args:
+    executable: /bin/bash
+  register: check_vt_d
+  changed_when: check_vt_d.rc != 0
+  failed_when: check_vt_d.rc != 0
+
+- name: Load vfio_pci module to the kernel
+  modprobe:
+    name: vfio_pci
+    state: present
+  when: ansible_kernel is version('5.4','<')
+
+- name: Set the vfio_pci module to load on boot
+  lineinfile:
+    dest: /etc/modules-load.d/vfio_pci.conf
+    create: true
+    regexp: "^vfio_pci"
+    line: "vfio_pci"
+    mode: 0644
+  when: ansible_kernel is version('5.4','<')
+
+- name: Create sriov system service
+  template:
+    src: "{{ item.src }}"
+    dest: "{{ item.dest }}"
+    mode: "{{ item.mode }}"
+    owner: root
+    group: root
+  loop:
+    - {src: 'sriov', dest: '/etc/default/sriov', mode: 644}
+    - {src: 'sriov.sh.j2', dest: '/usr/local/bin/sriov.sh', mode: 'a+x'}
+    - {src: 'sriov.service.j2', dest: '/etc/systemd/system/sriov.service', mode: 644}
+  notify: enable sriov.service
+
+- name: Flush handlers
+  meta: flush_handlers
+
+- name: Add kernel boot parameters to the grub
+  lineinfile:
+    dest: /etc/default/grub
+    regexp: '^GRUB_CMDLINE_LINUX="(?!.* {{ item.regex }})(.*)"'
+    line: 'GRUB_CMDLINE_LINUX="\1 {{ item.context }}"'
+    state: present
+    backrefs: true
+  loop:
+    - {regex: 'intel_iommu=', context: 'intel_iommu=on'}
+    - {regex: 'transparent_hugepage=', context: 'transparent_hugepage=never'}
+    - {regex: 'default_hugepagesz=', context: 'default_hugepagesz=1G'}
+    - {regex: 'hugepagesz=1G', context: 'hugepagesz=1G hugepages={{ sriov_1g_hugepages }}'}
+  notify: update grub