---
# 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 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 kubectl_node_ready.stdout == "True" and kubectl_node_schedulable.stdout == "" -%}
      true
      {%- else -%}
      false
      {%- endif %}

- name: Cordon node
  command: "{{ bin_dir }}/kubectl cordon {{ inventory_hostname }}"
  delegate_to: "{{ groups['kube-master'][0] }}"
  when: needs_cordoning

- name: Drain node
  command: >-
    {{ bin_dir }}/kubectl drain
      --force
      --ignore-daemonsets
      --grace-period {{ drain_grace_period }}
      --timeout {{ drain_timeout }}
      --delete-local-data {{ inventory_hostname }}
  delegate_to: "{{ groups['kube-master'][0] }}"
  when: needs_cordoning
