Add support of sriov CNI
Change-Id: Ibb8792f8b5baaec61094bcf75d38a0be5a2dd4dc
diff --git a/README.rst b/README.rst
index c9dc10a..662556a 100644
--- a/README.rst
+++ b/README.rst
@@ -492,6 +492,35 @@
- 172.16.10.150-172.16.10.180
- 172.16.10.192/26
+Kubernetes with SRIOV
+-----------------------
+
+On Master:
+
+.. code-block:: yaml
+
+ kubernetes:
+ master:
+ network:
+ sriov:
+ enabled: true
+ interface: eno2
+ subnet: 10.55.208.0/24
+ gateway: 10.55.208.1
+
+On pools:
+
+.. code-block:: yaml
+
+ kubernetes:
+ pool:
+ network:
+ sriov:
+ enabled: true
+ interface: eno2
+ subnet: 10.55.208.0/24
+ gateway: 10.55.208.1
+
Kubernetes with Flannel
-----------------------
diff --git a/kubernetes/files/sriov/sriov.conf b/kubernetes/files/sriov/sriov.conf
new file mode 100644
index 0000000..637b4be
--- /dev/null
+++ b/kubernetes/files/sriov/sriov.conf
@@ -0,0 +1,13 @@
+{
+ "name": "mynet",
+ "type": "sriov",
+ "master": "{{ sriov_interface }}",
+ "ipam": {
+ "type": "host-local",
+ "subnet": "{{ sriov_subnet }}",
+ "routes": [
+ { "dst": "0.0.0.0/0" }
+ ],
+ "gateway": "{{ sriov_gateway }}"
+ }
+}
diff --git a/kubernetes/master/init.sls b/kubernetes/master/init.sls
index ee62c6b..29cf645 100644
--- a/kubernetes/master/init.sls
+++ b/kubernetes/master/init.sls
@@ -18,6 +18,9 @@
- kubernetes.master.genie
{%- endif %}
{%- endif %}
+{%- if master.network.get('sriov', {}).get('enabled', False) %}
+- kubernetes.master.sriov
+{%- endif %}
{%- if master.storage.get('engine', 'none') == 'glusterfs' %}
- kubernetes.master.glusterfs
{%- endif %}
diff --git a/kubernetes/master/sriov.sls b/kubernetes/master/sriov.sls
new file mode 100644
index 0000000..19ea51b
--- /dev/null
+++ b/kubernetes/master/sriov.sls
@@ -0,0 +1,30 @@
+{%- from "kubernetes/map.jinja" import master with context %}
+{%- if master.enabled %}
+
+/etc/cni/net.d/13-sriov.conf:
+ file.managed:
+ - source: salt://kubernetes/files/sriov/sriov.conf
+ - user: root
+ - group: root
+ - mode: 644
+ - makedirs: true
+ - dir_mode: 755
+ - template: jinja
+ - defaults:
+ sriov_interface: {{ master.network.sriov.interface }}
+ sriov_subnet: {{ master.network.sriov.subnet }}
+ sriov_gateway: {{ master.network.sriov.gateway }}
+
+/opt/cni/bin/sriov:
+ file.managed:
+ - source: {{ master.network.sriov.source }}
+ - source_hash: {{ master.network.sriov.source_hash }}
+ - user: root
+ - group: root
+ - mode: 751
+ - makedirs: true
+ {%- if grains.get('noservices') %}
+ - onlyif: /bin/false
+ {%- endif %}
+
+{%- endif %}
diff --git a/kubernetes/pool/init.sls b/kubernetes/pool/init.sls
index 1270cc2..117ca47 100644
--- a/kubernetes/pool/init.sls
+++ b/kubernetes/pool/init.sls
@@ -13,6 +13,9 @@
{%- if pool.network.get('genie', {}).get('enabled', False) %}
- kubernetes.pool.genie
{%- endif %}
+{%- if pool.network.get('sriov', {}).get('enabled', False) %}
+- kubernetes.pool.sriov
+{%- endif %}
{%- if pool.get('kube_proxy', {}).get('enabled', True) %}
- kubernetes.pool.kube-proxy
{%- endif %}
diff --git a/kubernetes/pool/sriov.sls b/kubernetes/pool/sriov.sls
new file mode 100644
index 0000000..d471c37
--- /dev/null
+++ b/kubernetes/pool/sriov.sls
@@ -0,0 +1,30 @@
+{%- from "kubernetes/map.jinja" import pool with context %}
+{%- if pool.enabled %}
+
+/etc/cni/net.d/13-sriov.conf:
+ file.managed:
+ - source: salt://kubernetes/files/sriov/sriov.conf
+ - user: root
+ - group: root
+ - mode: 644
+ - makedirs: true
+ - dir_mode: 755
+ - template: jinja
+ - defaults:
+ sriov_interface: {{ pool.network.sriov.interface }}
+ sriov_subnet: {{ pool.network.sriov.subnet }}
+ sriov_gateway: {{ pool.network.sriov.gateway }}
+
+/opt/cni/bin/sriov:
+ file.managed:
+ - source: {{ pool.network.sriov.source }}
+ - source_hash: {{ pool.network.sriov.source_hash }}
+ - user: root
+ - group: root
+ - mode: 751
+ - makedirs: true
+ {%- if grains.get('noservices') %}
+ - onlyif: /bin/false
+ {%- endif %}
+
+{%- endif %}