From 44d851d5bbb8201547b0a8e3bde3123bd7f2aab4 Mon Sep 17 00:00:00 2001
From: Matthew Mosesohn <mmosesohn@mirantis.com>
Date: Wed, 22 Mar 2017 16:19:27 +0300
Subject: [PATCH] Only cordon Ready nodes

---
 roles/kubernetes/master/tasks/pre-upgrade.yml |  2 ++
 roles/upgrade/post-upgrade/tasks/main.yml     |  1 +
 roles/upgrade/pre-upgrade/tasks/main.yml      | 17 ++++++++++++++---
 3 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/roles/kubernetes/master/tasks/pre-upgrade.yml b/roles/kubernetes/master/tasks/pre-upgrade.yml
index 244c8b13e..adafe80ae 100644
--- a/roles/kubernetes/master/tasks/pre-upgrade.yml
+++ b/roles/kubernetes/master/tasks/pre-upgrade.yml
@@ -93,3 +93,5 @@
   delegate_to: "{{item}}"
   with_items: "{{groups['etcd']}}"
   when: needs_etcd_migration|bool
+  notify: "Master | reload kubelet"
+
diff --git a/roles/upgrade/post-upgrade/tasks/main.yml b/roles/upgrade/post-upgrade/tasks/main.yml
index d8243d04d..bff9983ff 100644
--- a/roles/upgrade/post-upgrade/tasks/main.yml
+++ b/roles/upgrade/post-upgrade/tasks/main.yml
@@ -3,3 +3,4 @@
 - name: Uncordon node
   command: "{{ bin_dir }}/kubectl uncordon {{ ansible_hostname }}"
   delegate_to: "{{ groups['kube-master'][0] }}"
+  when: needs_cordoning|default(false)
diff --git a/roles/upgrade/pre-upgrade/tasks/main.yml b/roles/upgrade/pre-upgrade/tasks/main.yml
index 9b47c845b..e0e5ded81 100644
--- a/roles/upgrade/pre-upgrade/tasks/main.yml
+++ b/roles/upgrade/pre-upgrade/tasks/main.yml
@@ -1,8 +1,21 @@
 ---
+- name: See if node is in ready state
+  command: "kubectl get nodes | grep {{ inventory_hostname }}"
+  register: kubectl_nodes
+  ignore_errors: true
+
+- set_fact:
+    needs_cordoning: >-
+      {% if " Ready" in kubectl_nodes.stdout %}
+      true
+      {% else %}
+      false
+      {% endif %}
 
 - name: Cordon node
   command: "{{ bin_dir }}/kubectl cordon {{ ansible_hostname }}"
   delegate_to: "{{ groups['kube-master'][0] }}"
+  when: needs_cordoning
 
 - name: Drain node
   command: >-
@@ -13,6 +26,4 @@
       --timeout {{ drain_timeout }}
       --delete-local-data {{ ansible_hostname }}
   delegate_to: "{{ groups['kube-master'][0] }}"
-
-- name: Sleep for grace period for draining
-  pause: seconds=30
+  when: needs_cordoning
-- 
GitLab