diff --git a/roles/cvlExtraFiles/tasks/main.yml b/roles/cvlExtraFiles/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4dff080397f5cdf7d9897f912b77cc2e1da90832
--- /dev/null
+++ b/roles/cvlExtraFiles/tasks/main.yml
@@ -0,0 +1,7 @@
+---
+- name: extra file symbolic links 
+  file: src={{ item.src }} path={{ item.dest }} state={{ item.type }} force=yes
+  with_items: 
+    extraFiles
+  sudo: true
+  when: extraFiles is defined
diff --git a/roles/cvlExtraFiles/vars/readme.txt b/roles/cvlExtraFiles/vars/readme.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6aae5abbb4a3f6cdd16a8082efc38473f74fc6ea
--- /dev/null
+++ b/roles/cvlExtraFiles/vars/readme.txt
@@ -0,0 +1,9 @@
+---
+extraFiles:
+  - {src: '/usr/local/etc/sshfs_default_sites.cfg', dest: '/etc/sshfs_default_sites.cfg', type: 'link'}
+  - {src: '/usr/local/etc/vnc/turbovncserver-auth.conf', dest: '/etc/turbovncserver-auth.conf', type: 'link'}
+  - {src: '/usr/local/etc/vnc/turbovncserver.conf', dest: '/etc/turbovncserver.conf', type: 'link'}
+  - {src: '/usr/local/etc/profile.d/modules.sh', dest: '/etc/profile.d/modules.sh', type: 'link'}
+  - {src: '/usr/local/etc/profile.d/modules.csh', dest: '/etc/profile.d/modules.csh', type: 'link'}
+  - {src: '/usr/local/etc/profile.d/cvl.sh', dest: '/etc/profile.d/cvl.sh', type: 'link'}
+
diff --git a/roles/cvlFijiCronJob/tasks/main.yml b/roles/cvlFijiCronJob/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f3f586d0dd7ee60957f4c292e9b0b6d86a7a94b7
--- /dev/null
+++ b/roles/cvlFijiCronJob/tasks/main.yml
@@ -0,0 +1,10 @@
+---
+- name: Check CVL cron job
+  shell: ls /cvl/local/bin/fiji_daily_update.sh
+  ignore_errors: true
+  register: fijiupdatescript
+
+- name: CVL fiji cron job 
+  cron: name=fijiupdate job=/cvl/local/bin/fiji_daily_update.sh user=root hour=5 state=present
+  sudo: true
+  when: fijiupdatescript | success
diff --git a/roles/extra_rpms/vars/main.yml b/roles/extra_rpms/vars/main.yml
index b02a910e9059ec0650b2bb85cb717c77912c2968..a8a78add72c210a0c7d2140a7ce5eef32577b980 100644
--- a/roles/extra_rpms/vars/main.yml
+++ b/roles/extra_rpms/vars/main.yml
@@ -145,6 +145,8 @@ pkgs:
  - perl-devel
  - perl-ExtUtils-MakeMaker
  - perl-ExtUtils-ParseXS
+ - perl-HTML-Parser
+ - perl-HTML-Tagset 
  - perl-Test-Harness
  - perl-Time-HiRes
  - pexpect
@@ -159,6 +161,8 @@ pkgs:
  - plymouth-system-theme
  - polkit-gnome
  - postgresql
+ - postgresql-contrib
+ - postgresql-devel
  - postgresql-libs
  - postgresql-server
  - PyGreSQL
@@ -179,10 +183,12 @@ pkgs:
  - qt-sqlite
  - qt-x11
  - rhino
+ - rsync 
  - scipy
  - spice-vdagent
  - suitesparse
  - system-gnome-theme
+ - tcl
  - tcsh
  - Terminal
  - texlive-texmf-errata-fonts
@@ -235,8 +241,3 @@ pkgs:
  - xvattr
  - yum-utils
  - zip
- - perl-HTML-Parser
- - perl-HTML-Tagset 
- - postgresql-contrib
- - postgresql-devel
- - environment-modules
diff --git a/roles/gpu/tasks/main.yml b/roles/gpu/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a08e9fb7fd3c74c0b63d023e4efc6a1ab220f10a
--- /dev/null
+++ b/roles/gpu/tasks/main.yml
@@ -0,0 +1,98 @@
+---
+- name: install deps 
+  yum: name={{ item }} state=installed
+  sudo: true
+  with_items:
+    - gcc
+    - perl
+    - wget
+    - pciutils
+    - kernel-headers
+    - kernel-devel 
+    - xterm
+    - libX11-common
+    - libX11-devel
+    - libX11
+    - xorg-x11-server-common
+    - xorg-x11-util-macros
+    - xorg-x11-server-utils
+    - xorg-x11-font-utils
+    - xorg-x11-server-Xorg
+    - xorg-x11-glamor
+    - xorg-x11-xinit
+    - xorg-x11-utils
+    - xorg-x11-xauth
+    - xorg-x11-proto-devel
+    - xorg-x11-xkb-utils
+
+- name: Add nouveau from blacklist
+  lineinfile: 
+  args:
+    dest: /etc/modprobe.d/blacklist.conf 
+    line: "blacklist nouveau"  
+    state: present
+  sudo: true
+
+- name: Template disable-nouvear.conf 
+  template: dest=/etc/modprobe.d/disable-nouveau.conf src=disable-nouveau.conf.j2
+  sudo: true
+
+- name: Template nvidia.conf 
+  template: dest=/etc/modprobe.d/nvidia.conf src=nvidia.conf.j2
+  sudo: true
+
+- name: check nvidia driver
+  shell: ls /usr/lib64/libnvidia-opencl.so.{{ nvidia_version }} 
+  register: has_been_compiled
+  ignore_errors: true
+
+- name: Copy boot file
+  template: src=grub.conf.j2 dest=/boot/grub/grub.conf 
+  sudo: true
+
+- name: Copy X config file
+  template: src=xorg.conf.j2 dest=/etc/X11/xorg.conf 
+  sudo: true
+
+- name: Copy xserver file
+  template: src=xserver.j2 dest=/etc/pam.d/xserver
+  sudo: true
+  
+- name: restart_host
+  command: shutdown -r now "Reboot triggered by Ansible"
+  async: 0
+  poll: 0
+  sudo: true
+  ignore_errors: true
+  when: has_been_compiled | failed
+
+- name: wait_restart
+  local_action: wait_for host="{{ inventory_hostname }}" port=22 delay=5 timeout=600
+  sudo: true 
+  when: has_been_compiled | failed
+ 
+- name: get nvidia driver 
+  shell: wget http://us.download.nvidia.com/XFree86/Linux-x86_64/{{ nvidia_version }}/NVIDIA-Linux-x86_64-{{ nvidia_version }}.run
+  args:
+    chdir: /tmp
+    creates: /tmp/NVIDIA-Linux-x86_64-{{ nvidia_version }}.run
+  sudo: true 
+  when: has_been_compiled | failed
+
+- name: build nvidia driver 
+  shell: chmod 755 /tmp/NVIDIA-Linux-x86_64-{{ nvidia_version }}.run; /tmp/NVIDIA-Linux-x86_64-{{ nvidia_version }}.run --silent --kernel-source-path /usr/src/kernels/{{ kernel_version }}.el6.x86_64
+  sudo: true
+  when: has_been_compiled | failed
+
+- name: set persistence mode 
+  lineinfile: 
+  args:
+    dest: /etc/rc.d/rc.local
+    line: "nvidia-smi --persistence-mode=1"  
+    state: present
+  sudo: true
+
+- name: Load module
+  shell: modprobe nvidia
+  sudo: true
+
diff --git a/roles/gpu/templates/disable-nouveau.conf.j2 b/roles/gpu/templates/disable-nouveau.conf.j2
new file mode 100644
index 0000000000000000000000000000000000000000..96993361f370408d6cb1e6fe227b69e63e0f4cab
--- /dev/null
+++ b/roles/gpu/templates/disable-nouveau.conf.j2
@@ -0,0 +1,3 @@
+blacklist nouveau
+options nouveau modeset=0
+
diff --git a/roles/gpu/templates/grub.conf.j2 b/roles/gpu/templates/grub.conf.j2
new file mode 100644
index 0000000000000000000000000000000000000000..26b822130ddcf46ec8b43965e41ea02ab3352d2d
--- /dev/null
+++ b/roles/gpu/templates/grub.conf.j2
@@ -0,0 +1,17 @@
+# grub.conf generated by anaconda
+#
+# Note that you do not have to rerun grub after making changes to this file
+# NOTICE:  You do not have a /boot partition.  This means that
+#          all kernel and initrd paths are relative to /, eg.
+#          root (hd0,0)
+#          kernel /boot/vmlinuz-version ro root=/dev/vda1
+#          initrd /boot/initrd-[generic-]version.img
+#boot=/dev/vda
+default=0
+timeout=5
+splashimage=(hd0,0)/boot/grub/splash.xpm.gz
+hiddenmenu
+title CentOS (2.6.32-504.el6.x86_64)
+	root (hd0,0)
+	kernel /boot/vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/vda1 rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto elevator=noop biosdevname=0 console=ttyS0 rdblacklist=nouveau nouveau.modeset=0 rd_NO_LVM rd_NO_DM rhgb quiet 
+	initrd /boot/initramfs-2.6.32-504.el6.x86_64.img
diff --git a/roles/gpu/templates/nvidia.conf.j2 b/roles/gpu/templates/nvidia.conf.j2
new file mode 100644
index 0000000000000000000000000000000000000000..d5c81c1f576c20be851dc2061c395f11238aad27
--- /dev/null
+++ b/roles/gpu/templates/nvidia.conf.j2
@@ -0,0 +1,2 @@
+options nvidia NVreg_DeviceFileMode=0666
+
diff --git a/roles/gpu/templates/xorg.conf.j2 b/roles/gpu/templates/xorg.conf.j2
new file mode 100644
index 0000000000000000000000000000000000000000..b6df768fe69c46466f2f8e51c52279746df7f067
--- /dev/null
+++ b/roles/gpu/templates/xorg.conf.j2
@@ -0,0 +1,62 @@
+# nvidia-xconfig: X configuration file generated by nvidia-xconfig
+# nvidia-xconfig:  version 340.58  (buildmeister@swio-display-x86-rhel47-09)  Fri Oct 31 17:40:05 PDT 2014
+Section "DRI"
+	Mode 0660
+	Group "vglusers"
+EndSection
+
+Section "ServerLayout"
+    Identifier     "Layout0"
+    Screen      0  "Screen0"
+    InputDevice    "Keyboard0" "CoreKeyboard"
+    InputDevice    "Mouse0" "CorePointer"
+EndSection
+
+Section "Files"
+    FontPath        "/usr/share/fonts/default/Type1"
+EndSection
+
+Section "InputDevice"
+    # generated from default
+    Identifier     "Mouse0"
+    Driver         "mouse"
+    Option         "Protocol" "auto"
+    Option         "Device" "/dev/input/mice"
+    Option         "Emulate3Buttons" "no"
+    Option         "ZAxisMapping" "4 5"
+EndSection
+
+Section "InputDevice"
+    # generated from data in "/etc/sysconfig/keyboard"
+    Identifier     "Keyboard0"
+    Driver         "kbd"
+    Option         "XkbLayout" "us"
+    Option         "XkbModel" "pc105"
+EndSection
+
+Section "Monitor"
+    Identifier     "Monitor0"
+    VendorName     "Unknown"
+    ModelName      "Unknown"
+    HorizSync       28.0 - 33.0
+    VertRefresh     43.0 - 72.0
+    Option         "DPMS"
+EndSection
+
+Section "Device"
+    Identifier     "Device0"
+    Driver         "nvidia"
+    VendorName     "NVIDIA Corporation"
+    BusID          "PCI:00:06:0"
+EndSection
+
+Section "Screen"
+    Identifier     "Screen0"
+    Device         "Device0"
+    Monitor        "Monitor0"
+    DefaultDepth    24
+    SubSection     "Display"
+        Depth       24
+    EndSubSection
+EndSection
+
diff --git a/roles/gpu/templates/xserver.j2 b/roles/gpu/templates/xserver.j2
new file mode 100644
index 0000000000000000000000000000000000000000..737d03ba940650104a96e56b861bdaf255c517f4
--- /dev/null
+++ b/roles/gpu/templates/xserver.j2
@@ -0,0 +1,5 @@
+#%PAM-1.0
+auth       sufficient	pam_rootok.so
+auth sufficient pam_permit.so
+account    required	pam_permit.so
+session    optional	pam_keyinit.so force revoke
diff --git a/roles/openLdapClient/tasks/configLdapClient.yml b/roles/openLdapClient/tasks/configLdapClient.yml
index c401d4b4d96dc784805d2887b283898f9301ad1c..e50aab3a95f95c14d5251a07617200f72b39fb3d 100644
--- a/roles/openLdapClient/tasks/configLdapClient.yml
+++ b/roles/openLdapClient/tasks/configLdapClient.yml
@@ -27,15 +27,15 @@
   sudo: true
   when: ldapCaCertContents is defined
 
-- name: "Copy pam config to ldap client"
-  template: src=system-auth-ac.j2 dest=/etc/pam.d/system-auth
+- name: "Copy system auth"
+  template: src=system-auth.j2 dest=/etc/pam.d/system-auth
   sudo: true
 
-- name: "Copy pam config to ldap client"
+- name: "Copy password auth"
   template: src=password-auth.j2 dest=/etc/pam.d/password-auth
   sudo: true
 
-- name: "Copy system auth to ldap client"
+- name: "Copy authconfig"
   template: src=authconfig.j2 dest=/etc/sysconfig/authconfig
   sudo: true
 
@@ -43,6 +43,10 @@
   template: src=ldap.conf.j2 dest=/etc/openldap/ldap.conf
   sudo: true
 
+- name: "Copy pam xserver file "
+  template: src=xserver.j2 dest=/etc/pam.d/xserver
+  sudo: true
+
 - name: "Add LDAP server IP address to /etc/hosts"
   lineinfile: dest=/etc/hosts line="{{ ldapServerHostIpLine }}" state=present insertafter=EOF
   sudo: true
diff --git a/roles/openLdapClient/templates/system-auth-ac.j2 b/roles/openLdapClient/templates/system-auth.j2
similarity index 100%
rename from roles/openLdapClient/templates/system-auth-ac.j2
rename to roles/openLdapClient/templates/system-auth.j2
diff --git a/roles/setupKnownHosts/tasks/main.yml b/roles/setupKnownHosts/tasks/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..56872722f40b8aa2daa2ca14a50d1f716a5f87b7
--- /dev/null
+++ b/roles/setupKnownHosts/tasks/main.yml
@@ -0,0 +1,13 @@
+- name: "Templating /etc/ssh/known_hosts"
+  template: src=known_hosts.j2 dest=/etc/ssh/known_hosts owner=root group=root mode=600
+  delegate_to: "{{ slurmlogin }}"
+  run_once: true
+  sudo: true
+  register: sshknowhost 
+
+- name: ecrypt the hosts file
+  shell: ssh-keygen -H -f /etc/ssh/known_hosts
+  sudo: true
+  run_once: true
+  when: sshknowhost.changed
+
diff --git a/roles/setupKnownHosts/templates/known_hosts.j2 b/roles/setupKnownHosts/templates/known_hosts.j2
new file mode 100644
index 0000000000000000000000000000000000000000..c5df8c27755da771d9fc950e19351c48f0f30a2d
--- /dev/null
+++ b/roles/setupKnownHosts/templates/known_hosts.j2
@@ -0,0 +1,15 @@
+{% set nodelist = [] %}
+{% for desktop in desktopNodeList %}
+{% for node in groups[desktop.name] %}
+{% if hostvars[node]['ansible_'+desktop.interface] is defined %}
+{% set host = {'name': node, 'ip': hostvars[node]['ansible_'+desktop.interface]['ipv4']['address'], 'rsa': hostvars[node]['ansible_ssh_host_key_rsa_public']} %}
+{% if nodelist.append(host) %}
+{% endif %}
+{% endif %}
+{% endfor %}
+{% endfor %}
+
+{% for host in nodelist|unique %}
+{{ host.name }} {{ host.rsa }}
+{{ host.ip }} {{ host.rsa }}
+{% endfor %}
diff --git a/roles/setupKnownHosts/templates/known_hosts.j2.v1 b/roles/setupKnownHosts/templates/known_hosts.j2.v1
new file mode 100644
index 0000000000000000000000000000000000000000..ed9688799f614aa527e856640fab46fabde6fb2a
--- /dev/null
+++ b/roles/setupKnownHosts/templates/known_hosts.j2.v1
@@ -0,0 +1,17 @@
+{% set nodelist = [] %}
+{% for desktop in desktopNodeList %}
+{% for node in groups[desktop.name] %}
+{% if hostvars[node]['ansible_'+desktop.interface] is defined %}
+{% if not ssh-keygen -F hostvars[node] -f /etc/ssh/known_hosts and not ssh-keygen -F hostvars[node]['ansible_'+desktop.interface] -f /etc/ssh/known_hosts %}
+{% set host = {name: node, ip: hostvars[node]['ansible_'+desktop.interface]} %}
+{% if nodelist.append(host) %}
+{% endif %}
+{% endif %}
+{% endif %}
+{% endfor %}
+{% endfor %}
+
+{% for host in nodelist|unique %}
+ssh-keyscan -t rsa {{ host.name }} >> /etc/ssh/known_hosts
+ssh-keyscan -t rsa {{ host.ip }} >> /etc/ssh/known_hosts
+{% endfor %}
diff --git a/roles/setupKnownHosts/templates/known_hosts.j2.v2 b/roles/setupKnownHosts/templates/known_hosts.j2.v2
new file mode 100644
index 0000000000000000000000000000000000000000..3fa6710a8da171e959e43dde50470e656421554a
--- /dev/null
+++ b/roles/setupKnownHosts/templates/known_hosts.j2.v2
@@ -0,0 +1,18 @@
+{% set nodelist = [] %}
+{% for desktop in desktopNodeList %}
+{% for node in groups[desktop.name] %}
+{% if hostvars[node]['ansible_'+desktop.interface] is defined %}
+{% if not ssh-keygen -F node -f /etc/ssh/known_hosts and not ssh-keygen -F hostvars[node]['ansible_'+desktop.interface]['ipv4']['address'] -f /etc/ssh/known_hosts %}
+{% set host = {name: node, ip: hostvars[node]['ansible_'+desktop.interface]['ipv4']['address']} %}
+{% if nodelist.append(host) %}
+{% endif %}
+{% endif %}
+{% endif %}
+{% endfor %}
+{% endfor %}
+
+{% for host in nodelist|unique %}
+echo "{{ host.name }} {{ host.ip }}"
+#ssh-keyscan -t rsa {{ host.name }} >> /etc/ssh/known_hosts
+#ssh-keyscan -t rsa {{ host.ip }} >> /etc/ssh/known_hosts
+{% endfor %}
diff --git a/roles/setupKnownHosts/templates/known_hosts.j2.v3 b/roles/setupKnownHosts/templates/known_hosts.j2.v3
new file mode 100644
index 0000000000000000000000000000000000000000..b3898e0351824a69793583fb84578018cfeb9f8c
--- /dev/null
+++ b/roles/setupKnownHosts/templates/known_hosts.j2.v3
@@ -0,0 +1,16 @@
+{% set nodelist = [] %}
+{% for desktop in desktopNodeList %}
+{% for node in groups[desktop.name] %}
+{% if hostvars[node]['ansible_'+desktop.interface] is defined %}
+{% set host = {'name': node, 'ip': hostvars[node]['ansible_'+desktop.interface]['ipv4']['address']} %}
+{% if nodelist.append(host) %}
+{% endif %}
+{% endif %}
+{% endfor %}
+{% endfor %}
+
+{% for host in nodelist|unique %}
+echo "{{ host.name }} {{ host.ip }}"
+#ssh-keyscan -t rsa {{ host.name }} >> /etc/ssh/known_hosts
+#ssh-keyscan -t rsa {{ host.ip }} >> /etc/ssh/known_hosts
+{% endfor %}
diff --git a/roles/slurm/defaults/main.yml b/roles/slurm/defaults/main.yml
index 2b482d25ec92db781dfa5ef8e1b56cc33d47940a..362d9cf4ae92e58c49950d6a09dcaaf9df92cba6 100644
--- a/roles/slurm/defaults/main.yml
+++ b/roles/slurm/defaults/main.yml
@@ -1,8 +1,12 @@
 ---
-clustername: "CIAB" 
-slurmctlddebug: {} 
-slurmddebug: {} 
-slurmschedlog: {} 
-slurmdbdlog: {}
+slurm_use_vpn: False 
+slurmctlddebug: {level: 9, log: '/var/log/slurm/slurmctld.log'}
+slurmddebug: {level: 9, log: '/var/log/slurm/slurmd.log'}
+slurmschedlog: {level: 9, log: '/var/log/slurm/slurmsched.log'}
+slurmdbdlog: {level: 9, log: '/var/log/slurm/slurmdbd.log'}
 slurmfairshare: {def: false, val: 10000}
 slurmdatadir: "/var/spool/slurm"
+slurmselecttype: "select/linear"
+slurmfastschedule: "1"
+slurmschedulertype: "sched/backfill"
+
diff --git a/roles/slurm/templates/slurm.conf.j2 b/roles/slurm/templates/slurm.conf.j2
index d389c913844d7123a646cf1ec4f229cbabdf6114..a1535220bb43b6ee403e772872dd19ae38c7423c 100644
--- a/roles/slurm/templates/slurm.conf.j2
+++ b/roles/slurm/templates/slurm.conf.j2
@@ -58,12 +58,12 @@ KillWait=30
 Waittime=0
 #
 # SCHEDULING
-SchedulerType=sched/backfill
+SchedulerType={{ slurmschedulertype }}
 #SchedulerAuth=
 #SchedulerPort=
 #SchedulerRootFilter=
-SelectType=select/linear
-FastSchedule=1
+SelectType={{ slurmselecttype }}
+FastSchedule={{ slurmfastschedule }}
 #PriorityType=priority/multifactor
 #PriorityDecayHalfLife=14-0
 #PriorityUsageResetPeriod=14-0
@@ -109,6 +109,8 @@ AccountingStorageHost={{ slurmctrl }}
 #AccountingStoragePass=
 #AccountingStorageUser=
 #
+#GRES
+GresTypes=gpu
 
 # Fair share
 {% if slurmfairshare.def %}
diff --git a/roles/slurm/vars/readme.txt b/roles/slurm/vars/readme.txt
deleted file mode 100644
index c038c3c6ce63b81f4fd674cd0b76d9292471b5f6..0000000000000000000000000000000000000000
--- a/roles/slurm/vars/readme.txt
+++ /dev/null
@@ -1,3 +0,0 @@
----
-slurm_use_vpn: True
-clustername: "CIAB"