Merge pull request #59 from bbinet/pkgs

Prefer "pkgs" rather than "names" when using pkg.installed
diff --git a/README.rst b/README.rst
index 348f950..28619e0 100644
--- a/README.rst
+++ b/README.rst
@@ -242,6 +242,25 @@
 
 Note: not recommended to use both pagesizes in concurrently.
 
+Intel SR-IOV
+~~~~~~~~~~~~
+
+PCI-SIG Single Root I/O Virtualization and Sharing (SR-IOV) specification defines a standardized mechanism to virtualize PCIe devices. The mechanism can virtualize a single PCIe Ethernet controller to appear as multiple PCIe devices.
+
+.. code-block:: yaml
+
+    linux:
+      system:
+        kernel:
+          sriov: True
+          unsafe_interrupts: False # Default is false. for older platforms and AMD we need to add interrupt remapping workaround
+        rc:
+          local: |
+            #!/bin/sh -e
+            # Enable 7 VF on eth1
+            echo 7 > /sys/class/net/eth1/device/sriov_numvfs; sleep 2; ifup -a
+            exit 0
+
 
 Repositories
 ~~~~~~~~~~~~
diff --git a/linux/network/hostname.sls b/linux/network/hostname.sls
index 7c1594a..99de653 100644
--- a/linux/network/hostname.sls
+++ b/linux/network/hostname.sls
@@ -19,6 +19,7 @@
 linux_enforce_hostname:
   cmd.wait:
   - name: hostname {{ network.hostname }}
+  - unless: test "$(hostname)" = "{{ network.hostname }}"
 
 {#
 linux_hostname_hosts:
@@ -29,4 +30,4 @@
     - {{ network.hostname }}
 #}
 
-{%- endif %}
\ No newline at end of file
+{%- endif %}
diff --git a/linux/system/grub.sls b/linux/system/grub.sls
new file mode 100644
index 0000000..d36ba47
--- /dev/null
+++ b/linux/system/grub.sls
@@ -0,0 +1,11 @@
+grub_d_directory:
+  file.directory:
+    - name: /etc/default/grub.d
+    - user: root
+    - group: root
+    - mode: 755
+    - makedirs: True
+
+grub_update:
+  cmd.wait:
+  - name: update-grub
diff --git a/linux/system/hugepages.sls b/linux/system/hugepages.sls
index 6e55449..342d401 100644
--- a/linux/system/hugepages.sls
+++ b/linux/system/hugepages.sls
@@ -1,11 +1,18 @@
 {%- from "linux/map.jinja" import system with context %}
 
+include:
+  - linux.system.grub
+
 {%- if "pse" in grains.cpu_flags or "pdpe1gb" in grains.cpu_flags %}
 
 /etc/default/grub.d/90-hugepages.cfg:
   file.managed:
     - source: salt://linux/files/grub_hugepages
     - template: jinja
+    - require:
+      - file: grub_d_directory
+    - watch_in:
+      - cmd: grub_update
 
 {%- for hugepages_type, hugepages in system.kernel.hugepages.iteritems() %}
 
diff --git a/linux/system/init.sls b/linux/system/init.sls
index 02dade0..fb1b34d 100644
--- a/linux/system/init.sls
+++ b/linux/system/init.sls
@@ -14,6 +14,9 @@
 {%- if system.kernel.hugepages is defined %}
 - linux.system.hugepages
 {%- endif %}
+{%- if system.kernel.sriov is defined %}
+- linux.system.sriov
+{%- endif %}
 {%- endif %}
 {%- if system.cpu is defined %}
 - linux.system.cpu
diff --git a/linux/system/sriov.sls b/linux/system/sriov.sls
new file mode 100644
index 0000000..4421c67
--- /dev/null
+++ b/linux/system/sriov.sls
@@ -0,0 +1,27 @@
+{%- from "linux/map.jinja" import system with context %}
+
+include:
+  - linux.system.grub
+
+/etc/default/grub.d/90-sriov.cfg:
+  file.managed:
+    - contents: 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT intel_iommu=on iommu=pt"'
+    - require:
+      - file: grub_d_directory
+    - watch_in:
+      - cmd: grub_update
+
+/etc/modprobe.d/sriov.conf:
+  file.managed:
+    - contents: |
+        blacklist ixgbevf
+        blacklist igbvf
+        blacklist i40evf
+
+{%- if system.kernel.get('unsafe_interrupts', false) %}
+
+/etc/modprobe.d/iommu_unsafe_interrupts.conf:
+  file.managed:
+    - contents: options vfio_iommu_type1 allow_unsafe_interrupts=1
+
+{%- endif %}