diff --git a/roles/upgrade/tasks/main.yml b/roles/upgrade/tasks/main.yml
index 535141fb2c64e52471997cf1f6c15ea54c372907..68967867ab828dcbd56c987890cc9b2e760325e1 100644
--- a/roles/upgrade/tasks/main.yml
+++ b/roles/upgrade/tasks/main.yml
@@ -16,3 +16,32 @@
   become: true
   become_user: root
   when: ansible_os_family=="RedHat"
+
+- name: get kernel-devel version
+  shell: rpm -q kernel-devel | cut -f 3,4 -d "-"
+  register: rpm_q_output
+
+- name: get kernel version
+  shell: uname -r
+  register: uname_r_output
+
+- name: default dont reboot
+  set_fact: reboot_now=False
+
+- name: set reboot when kernel has changed
+  set_fact: reboot_now=True
+  when: not rpm_q_output.stdout in uname_r_output.stdout
+
+- name: restart machine
+  shell: "sleep 5; sudo shutdown -r now"
+  async: 2
+  poll: 1
+  ignore_errors: true
+  sudo: true
+  when: reboot_now
+
+- name: waiting for server to come back
+  local_action: wait_for host={{ ansible_host }} state=started port=22 delay=30 timeout=600 search_regex=OpenSSH
+  sudo: false
+  when: reboot_now
+