From 03bb729fead564e777535ffcf88c684a8c3efcbf Mon Sep 17 00:00:00 2001
From: Brad Beam <brad.beam@b-rad.info>
Date: Fri, 9 Feb 2018 09:39:21 -0600
Subject: [PATCH] Making status and detection mo betta

---
 roles/upgrade/post-upgrade/tasks/main.yml |  3 ++-
 roles/upgrade/pre-upgrade/tasks/main.yml  | 20 +++++++++++++++++---
 2 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/roles/upgrade/post-upgrade/tasks/main.yml b/roles/upgrade/post-upgrade/tasks/main.yml
index cef98bb0b..3d16489ff 100644
--- a/roles/upgrade/post-upgrade/tasks/main.yml
+++ b/roles/upgrade/post-upgrade/tasks/main.yml
@@ -2,4 +2,5 @@
 - name: Uncordon node
   command: "{{ bin_dir }}/kubectl uncordon {{ inventory_hostname }}"
   delegate_to: "{{ groups['kube-master'][0] }}"
-  when: needs_cordoning|default(false)
+  when:
+    - needs_cordoning|default(false)
diff --git a/roles/upgrade/pre-upgrade/tasks/main.yml b/roles/upgrade/pre-upgrade/tasks/main.yml
index e4dbe569b..59a264f35 100644
--- a/roles/upgrade/pre-upgrade/tasks/main.yml
+++ b/roles/upgrade/pre-upgrade/tasks/main.yml
@@ -1,13 +1,27 @@
 ---
+# Node Ready: type = ready, status = True
+# Node NotReady: type = ready, status = Unknown
 - name: See if node is in ready state
-  shell: "{{ bin_dir }}/kubectl get nodes | grep {{ inventory_hostname }}"
-  register: kubectl_nodes
+  shell: >-
+     {{ bin_dir }}/kubectl get node {{ inventory_hostname }}
+     -o jsonpath='{ range .status.conditions[?(@.type == "Ready")].status }{ @ }{ end }'
+  register: kubectl_node_ready
+  delegate_to: "{{ groups['kube-master'][0] }}"
+  failed_when: false
+
+# SchedulingDisabled: unschedulable = true
+# else unschedulable key doesn't exist
+- name: See if node is schedulable
+  shell: >-
+     {{ bin_dir }}/kubectl get node {{ inventory_hostname }}
+     -o jsonpath='{ .spec.unschedulable }'
+  register: kubectl_node_schedulable
   delegate_to: "{{ groups['kube-master'][0] }}"
   failed_when: false
 
 - set_fact:
     needs_cordoning: >-
-      {% if " Ready" in kubectl_nodes.stdout -%}
+      {% if kubectl_node_ready.stdout == "True" and kubectl_node_schedulable.stdout == "" -%}
       true
       {%- else -%}
       false
-- 
GitLab