Updating sriov playbook to meet requirements of updated device 72/98272/3
authorAkhila Kishore <akhila.kishore@intel.com>
Tue, 12 Nov 2019 06:57:39 +0000 (22:57 -0800)
committerAkhila Kishore <akhila.kishore@intel.com>
Wed, 13 Nov 2019 23:17:57 +0000 (15:17 -0800)
Previous sriov playbook supported X710 SRIOV NIC. Updating
the scripts to support new device XL710.
Other changes include syntactical corrections
to "WHEN" condition in ansible.
Co-authored-by: hle2 <huifeng.le@intel.com>
Signed-off-by: Akhila Kishore <akhila.kishore@intel.com>
Issue-ID: MULTICLOUD-929
Change-Id: I697a49a64472ad2d755753e58f8fd4e7857b0456

kud/deployment_infra/images/sriov-daemonset.yml
kud/deployment_infra/playbooks/configure-sriov.yml
kud/deployment_infra/playbooks/install_iavf_drivers.sh
kud/deployment_infra/playbooks/preconfigure-sriov.yml
kud/deployment_infra/playbooks/sriov_hardware_check.sh
kud/tests/sriov.sh

index 1edbc6c..a133dbe 100644 (file)
@@ -13,8 +13,8 @@ data:
       "resourceList": [{
          "resourceName": "intel_sriov_700",
          "selectors": {
-            "vendors": ["8086"]
-            "devices": ["37cd"]
+            "vendors": ["8086"],
+            "drivers": ["i40evf"]
          }
        }]
     }
index 8ba6cf4..45f276c 100644 (file)
 
 - hosts: localhost
   become: yes
-  pre_tasks:
-  - block:
-    - name: "End play if SRIOV is False"
-      debug:
-        msg: "SRIOV option not available, ending play"
-    - meta: end_play
-    when: SRIOV_NODE == "False"
   tasks:
     - debug:
         var: SRIOV_NODE
     - name: Apply Multus
       shell: "/usr/local/bin/kubectl apply -f {{ playbook_dir }}/../images/multus-daemonset.yml"
-      when: SRIOV_NODE==True
+      when: SRIOV_NODE
     - name: Apply SRIOV CNI
-      shell: "/usr/local/bin/kubectl apply -f {{ playbook_dir }}/../images/sriov-cni.yaml"
-      when: SRIOV_NODE==True
+      shell: "/usr/local/bin/kubectl apply -f {{ playbook_dir }}/../images/sriov-cni.yml"
+      when: SRIOV_NODE
     - name: Apply SRIOV DaemonSet
-      shell: "/usr/local/bin/kubectl apply -f {{ playbook_dir }}/../images/sriov-daemonset.yaml"
-      when: SRIOV_NODE==True
+      shell: "/usr/local/bin/kubectl apply -f {{ playbook_dir }}/../images/sriov-daemonset.yml"
+      when: SRIOV_NODE
     - name: Apply SRIOV Network Attachment definition
       shell: "/usr/local/bin/kubectl apply -f {{ playbook_dir }}/sriov-nad.yml"
-      when: SRIOV_NODE==True
+      when: SRIOV_NODE
index d44483d..7a54e9f 100755 (executable)
@@ -3,6 +3,10 @@
 # Based on:
 # https://gerrit.akraino.org/r/#/c/icn/+/1359/1/deploy/kud-plugin-addons/device-plugins/sriov/driver/install_iavf_drivers.sh
 
+nic_models=(XL710 X722)
+nic_drivers=(i40e)
+device_checkers=(is_not_used is_driver_match is_model_match)
+
 function install_iavf_driver {
     local ifname=$1
 
@@ -27,22 +31,55 @@ function install_iavf_driver {
     echo '8' > /sys/class/net/$ifname/device/sriov_numvfs
 }
 
-function is_used {
+function is_not_used {
     local ifname=$1
     route_info=`ip route show | grep $ifname`
     if [ -z "$route_info" ]; then
-        return 0
-    else
         return 1
+    else
+        return 0
+    fi
+}
+
+function is_driver_match {
+    local ifname=$1
+    driver=`cat /sys/class/net/$ifname/device/uevent | grep DRIVER | cut -f2 -d "="`
+    if [ ! -z "$driver" ]; then
+        for nic_driver in ${nic_drivers[@]}; do
+            if [ "$driver" = "$nic_driver" ]; then
+                return 1
+            fi
+        done
+    fi
+    return 0
+}
+
+function is_model_match {
+    local ifname=$1
+    pci_addr=`cat /sys/class/net/$ifname/device/uevent | grep PCI_SLOT_NAME | cut -f2 -d "=" | cut -f2,3 -d ":"`
+    if [ ! -z "$pci_addr" ]; then
+        for nic_model in ${nic_models[@]}; do
+            model_match=$(lspci | grep $pci_addr | grep $nic_model)
+            if [ ! -z "$model_match" ]; then
+                return 1
+            fi
+        done
     fi
+    return 0
 }
 
 function get_sriov_ifname {
     for net_device in /sys/class/net/*/ ; do
         if [ -e $net_device/device/sriov_numvfs ] ; then
             ifname=$(basename $net_device)
-            is_used $ifname
-            if [ "$?" = "0" ]; then
+            for device_checker in ${device_checkers[@]}; do
+                eval $device_checker $ifname
+                if [ "$?" = "0" ]; then
+                    ifname=""
+                    break
+                fi
+            done
+            if [ ! -z "$ifname" ]; then
                 echo $ifname
                 return
             fi
index c4276e1..fd16d93 100644 (file)
@@ -31,7 +31,7 @@
       command: sriov/sriov_hardware_check.sh
       register: output
     - set_fact:
-        SRIOV: "{{ output.stdout }}"
+        _SRIOV: "{{ output.stdout }}"
     - name: Recreate the conf file for every host
       file:
         path: /tmp/sriov.conf
@@ -40,7 +40,7 @@
     - lineinfile : >
        dest=/tmp/sriov.conf
        create=yes
-       line='{{SRIOV}}'
+       line='{{_SRIOV}}'
       delegate_to: localhost
     - name: Clean the script and folder.
       file:
       become: yes
     - set_fact:
         SRIOV_NODE: "{{ installer_output.stdout }}"
-    - meta: end_play
-      when: SRIOV_NODE == "False"
     - name: Load kud variables
       include_vars:
         file: kud-vars.yml
-      when: SRIOV_NODE == "True"
+      when: SRIOV_NODE
   tasks:
     - name: Create sriov folder
       file:
         state: directory
         path: "{{ sriov_dest }}"
-      when: SRIOV_NODE == "True"
       ignore_errors: yes
+      when: SRIOV_NODE
     - name: Get SRIOV compatible driver
       get_url: "url={{ driver_url }}  dest=/tmp/{{ package }}.tar.gz"
-      when: SRIOV_NODE == "True"
+      when: SRIOV_NODE
     - name: Extract sriov source code
       unarchive:
          src: "/tmp/{{ package }}.tar.gz"
          dest: "{{ sriov_dest }}"
-      when: SRIOV_NODE == "True"
+      when: SRIOV_NODE
     - name: Build the default target
       make:
         chdir: "/tmp/sriov/{{ package }}/src"
       become: yes
-      when: SRIOV_NODE == "True"
+      when: SRIOV_NODE
 # Copy all the driver and install script into target node
 - hosts: kube-node
   become: yes
@@ -91,7 +89,7 @@
     - name: Load kud variables
       include_vars:
         file: kud-vars.yml
-      when: SRIOV == "True"
+      when: _SRIOV
   tasks:
     - name: create SRIOV driver folder in the target destination
       file:
         path: "{{ item }}"
       with_items:
         - sriov_driver
-      when: SRIOV == "True"
-    - name: Copy SRIOV driver to target destination
-      command: "cp {{ sriov_dest }}/{{ package }}/src/iavf.ko /root/sriov_driver/"
-      when: SRIOV == "True"
-    - name: Copy SRIOV driver install script to target folder
-      command: "cp {{ playbook_dir }}/install_iavf_drivers.sh /root/sriov_driver/install.sh"
-      when: SRIOV == "True"
+      when: _SRIOV
+    - copy:
+        src: "{{ sriov_dest }}/{{ package }}/src/iavf.ko"
+        dest: sriov_driver
+        remote_src: no
+      when: _SRIOV
+    - copy:
+        src: "{{ playbook_dir }}/install_iavf_drivers.sh"
+        dest: sriov_driver/install.sh
+        remote_src: no
+      when: _SRIOV
     - name: Changing perm of "install.sh", adding "+x"
-      file: dest=/root/sriov_driver/install.sh mode=a+x
-      when: SRIOV == "True"
+      file: dest=sriov_driver/install.sh mode=a+x
+      when: _SRIOV
     - name: Run a script with arguments
       shell: ./install.sh
       args:
-        chdir: "/root/sriov_driver"
-      when: SRIOV == "True"
+        chdir: "sriov_driver"
+      when: _SRIOV
index ea1b7b0..662c28c 100644 (file)
@@ -12,14 +12,14 @@ set -o pipefail
 
 source /etc/environment
 
-ethernet_adpator_version=$( lspci | grep "Ethernet Controller X710" | head -n 1 | cut -d " " -f 8 )
+ethernet_adpator_version=$( lspci | grep "Ethernet Controller XL710" | head -n 1 | cut -d " " -f 8 )
 if [ -z "$ethernet_adpator_version" ]; then
     echo "False"
     exit 0
 fi
 SRIOV_ENABLED=${ethernet_adpator_version:-"false"}
 #checking for the right hardware version of NIC on the machine
-if [ "$ethernet_adpator_version" == "X710" ]; then
+if [ "$ethernet_adpator_version" == "XL710" ]; then
     echo "True"
 else
     echo "False"
index c66f5db..a721b72 100755 (executable)
 
 set -o pipefail
 
-ethernet_adpator_version=$( lspci | grep "Ethernet Controller X710" | head -n 1 | cut -d " " -f 8 )
+ethernet_adpator_version=$( lspci | grep "Ethernet Controller XL710" | head -n 1 | cut -d " " -f 8 )
 if [ -z "$ethernet_adpator_version" ]; then
     echo " Ethernet adapator version is not set. SRIOV test case cannot run on this machine"
     exit 0
 fi
 #checking for the right hardware version of NIC on the machine
-if [ $ethernet_adpator_version == "X710" ]; then
+if [ $ethernet_adpator_version == "XL710" ]; then
     echo "NIC card specs match. SRIOV option avaiable for this version."
 else
     echo -e "Failed. The version supplied does not match.\nTest cannot be executed."