You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.4 KiB

  1. ---
  2. # Node Ready: type = ready, status = True
  3. # Node NotReady: type = ready, status = Unknown
  4. - name: See if node is in ready state
  5. shell: >-
  6. {{ bin_dir }}/kubectl get node {{ inventory_hostname }}
  7. -o jsonpath='{ range .status.conditions[?(@.type == "Ready")].status }{ @ }{ end }'
  8. register: kubectl_node_ready
  9. delegate_to: "{{ groups['kube-master'][0] }}"
  10. failed_when: false
  11. # SchedulingDisabled: unschedulable = true
  12. # else unschedulable key doesn't exist
  13. - name: See if node is schedulable
  14. shell: >-
  15. {{ bin_dir }}/kubectl get node {{ inventory_hostname }}
  16. -o jsonpath='{ .spec.unschedulable }'
  17. register: kubectl_node_schedulable
  18. delegate_to: "{{ groups['kube-master'][0] }}"
  19. failed_when: false
  20. - set_fact:
  21. needs_cordoning: >-
  22. {% if kubectl_node_ready.stdout == "True" and kubectl_node_schedulable.stdout == "" -%}
  23. true
  24. {%- else -%}
  25. false
  26. {%- endif %}
  27. - name: Cordon node
  28. command: "{{ bin_dir }}/kubectl cordon {{ inventory_hostname }}"
  29. delegate_to: "{{ groups['kube-master'][0] }}"
  30. when: needs_cordoning
  31. - name: Drain node
  32. command: >-
  33. {{ bin_dir }}/kubectl drain
  34. --force
  35. --ignore-daemonsets
  36. --grace-period {{ drain_grace_period }}
  37. --timeout {{ drain_timeout }}
  38. --delete-local-data {{ inventory_hostname }}
  39. delegate_to: "{{ groups['kube-master'][0] }}"
  40. when: needs_cordoning