From eca82477018fc8502e1862d82732b1b830271724 Mon Sep 17 00:00:00 2001
From: Chris Hines <chris.hines@monash.edu>
Date: Fri, 6 Jan 2017 14:25:36 +1100
Subject: [PATCH] Extend the GPU role

The GPU role used to just detect if any driver was installed and skip installation if one was found
it will now execute nvidia-smi to determine the current driver version and compare it against the desired
driver version, installing in the case of mismatch

Note that if an existing driver is installed, the nvidia persistence daemon must be stopped before installation can proceed


Former-commit-id: 2b1ad61632751b0d643bab9e244656b93b876438
---
 roles/gpu/tasks/main.yml | 38 ++++++++++++++++++++++++++++++++++++--
 1 file changed, 36 insertions(+), 2 deletions(-)

diff --git a/roles/gpu/tasks/main.yml b/roles/gpu/tasks/main.yml
index d667addf..c13e7db2 100644
--- a/roles/gpu/tasks/main.yml
+++ b/roles/gpu/tasks/main.yml
@@ -62,11 +62,45 @@
   register: nvidia_driver
   ignore_errors: true
 
+- name: set default driver version
+  set_fact: 
+    installed_driver_version: '0.0'
+
+- name: check nvidia driver version
+  shell: 'nvidia-smi | grep -Po "Driver Version: \K\S+"'
+  register: installed_driver_version
+  when: nvidia_driver.stat.exists
+  check_mode: no
+
+- name: set install default
+  set_fact: 
+    install_driver: false
+
+- name: set uninstall default
+  set_fact: 
+    install_driver: false
+
+- name: set install
+  set_fact: 
+    install_driver: true
+  when: not nvidia_driver.stat.exists or not installed_driver_version == nvidia_version
+
+- name: set uninstall
+  set_fact: 
+    uninstall_driver: true
+  when: nvidia_driver.stat.exists and not installed_driver_version == nvidia_version
+
+- name: stop the persistence daemon
+  service: name=nvidia-persistenced state=stopped
+  become: true
+  become_user: root
+  when: uninstall_driver
+
 - name: get nvidia driver 
   get_url: url=http://consistency0/src/NVIDIA-Linux-x86_64-{{ nvidia_version }}.run dest=/tmp/NVIDIA-Linux-x86_64-{{ nvidia_version }}.run
   become: true
   become_user: root
-  when: not nvidia_driver.stat.exists
+  when: install_driver
 
 #- name: Copy boot file
 #  template: src=grub.conf.j2 dest=/boot/grub/grub.conf 
@@ -83,7 +117,7 @@
 - name: build nvidia driver 
   shell: chmod 755 /tmp/NVIDIA-Linux-x86_64-{{ nvidia_version }}.run; /tmp/NVIDIA-Linux-x86_64-{{ nvidia_version }}.run --silent
   sudo: true
-  when: not nvidia_driver.stat.exists
+  when: install_driver
 
 - name: set the GOM
   shell: nvidia-smi --gom=0
-- 
GitLab