diff --git a/playbooks/remove_node.yml b/playbooks/remove_node.yml index f4a3a1613..7cd53a8a5 100644 --- a/playbooks/remove_node.yml +++ b/playbooks/remove_node.yml @@ -43,7 +43,7 @@ when: reset_nodes | default(True) | bool roles: - { role: kubespray_defaults, when: reset_nodes | default(True) | bool } - - { role: remove-node/pre-remove, tags: pre-remove } + - { role: remove_node/pre_remove, tags: pre-remove } - role: remove-node/remove-etcd-node when: "'etcd' in group_names" - { role: reset, tags: reset, when: reset_nodes | default(True) | bool } diff --git a/roles/container-engine/validate-container-engine/tasks/main.yml b/roles/container-engine/validate-container-engine/tasks/main.yml index ffb541c24..c1e9d45f8 100644 --- a/roles/container-engine/validate-container-engine/tasks/main.yml +++ b/roles/container-engine/validate-container-engine/tasks/main.yml @@ -84,7 +84,7 @@ block: - name: Drain node include_role: - name: remove-node/pre-remove + name: remove_node/pre_remove apply: tags: - pre-remove @@ -111,7 +111,7 @@ block: - name: Drain node include_role: - name: remove-node/pre-remove + name: remove_node/pre_remove apply: tags: - pre-remove @@ -137,7 +137,7 @@ block: - name: Drain node include_role: - name: remove-node/pre-remove + name: remove_node/pre_remove apply: tags: - pre-remove diff --git a/roles/remove-node/pre-remove/tasks/main.yml b/roles/remove-node/pre-remove/tasks/main.yml index 6f6c31461..94d0ab205 100644 --- a/roles/remove-node/pre-remove/tasks/main.yml +++ b/roles/remove-node/pre-remove/tasks/main.yml @@ -1,43 +1,10 @@ --- -- name: Remove-node | List nodes - command: >- - {{ kubectl }} get nodes -o go-template={% raw %}'{{ range .items }}{{ .metadata.name }}{{ "\n" }}{{ end }}'{% endraw %} - register: nodes - when: - - groups['kube_control_plane'] | length > 0 - delegate_to: "{{ groups['kube_control_plane'] | first }}" - changed_when: false +- name: Warn for usage of deprecated role + fail: + msg: remove-node/pre-remove is deprecated, switch to remove_node/pre_remove + ignore_errors: true # noqa ignore-errors run_once: true -- name: Remove-node | Drain node except daemonsets resource - command: >- - {{ kubectl }} drain - --force - --ignore-daemonsets - --grace-period {{ drain_grace_period }} - --timeout {{ drain_timeout }} - --delete-emptydir-data {{ kube_override_hostname | default(inventory_hostname) }} - when: - - groups['kube_control_plane'] | length > 0 - # ignore servers that are not nodes - - kube_override_hostname | default(inventory_hostname) in nodes.stdout_lines - register: result - failed_when: result.rc != 0 and not allow_ungraceful_removal - delegate_to: "{{ groups['kube_control_plane'] | first }}" - until: result.rc == 0 or allow_ungraceful_removal - retries: "{{ drain_retries }}" - delay: "{{ drain_retry_delay_seconds }}" - -- name: Remove-node | Wait until Volumes will be detached from the node - command: >- - {{ kubectl }} get volumeattachments -o go-template={% raw %}'{{ range .items }}{{ .spec.nodeName }}{{ "\n" }}{{ end }}'{% endraw %} - register: nodes_with_volumes - delegate_to: "{{ groups['kube_control_plane'] | first }}" - changed_when: false - until: not (kube_override_hostname | default(inventory_hostname) in nodes_with_volumes.stdout_lines) - retries: 3 - delay: "{{ drain_grace_period }}" - when: - - groups['kube_control_plane'] | length > 0 - - not allow_ungraceful_removal - - kube_override_hostname | default(inventory_hostname) in nodes.stdout_lines +- name: Compat for direct role import + import_role: + name: remove_node/pre_remove diff --git a/roles/remove-node/pre-remove/defaults/main.yml b/roles/remove_node/pre_remove/defaults/main.yml similarity index 100% rename from roles/remove-node/pre-remove/defaults/main.yml rename to roles/remove_node/pre_remove/defaults/main.yml diff --git a/roles/remove_node/pre_remove/tasks/main.yml b/roles/remove_node/pre_remove/tasks/main.yml new file mode 100644 index 000000000..6f6c31461 --- /dev/null +++ b/roles/remove_node/pre_remove/tasks/main.yml @@ -0,0 +1,43 @@ +--- +- name: Remove-node | List nodes + command: >- + {{ kubectl }} get nodes -o go-template={% raw %}'{{ range .items }}{{ .metadata.name }}{{ "\n" }}{{ end }}'{% endraw %} + register: nodes + when: + - groups['kube_control_plane'] | length > 0 + delegate_to: "{{ groups['kube_control_plane'] | first }}" + changed_when: false + run_once: true + +- name: Remove-node | Drain node except daemonsets resource + command: >- + {{ kubectl }} drain + --force + --ignore-daemonsets + --grace-period {{ drain_grace_period }} + --timeout {{ drain_timeout }} + --delete-emptydir-data {{ kube_override_hostname | default(inventory_hostname) }} + when: + - groups['kube_control_plane'] | length > 0 + # ignore servers that are not nodes + - kube_override_hostname | default(inventory_hostname) in nodes.stdout_lines + register: result + failed_when: result.rc != 0 and not allow_ungraceful_removal + delegate_to: "{{ groups['kube_control_plane'] | first }}" + until: result.rc == 0 or allow_ungraceful_removal + retries: "{{ drain_retries }}" + delay: "{{ drain_retry_delay_seconds }}" + +- name: Remove-node | Wait until Volumes will be detached from the node + command: >- + {{ kubectl }} get volumeattachments -o go-template={% raw %}'{{ range .items }}{{ .spec.nodeName }}{{ "\n" }}{{ end }}'{% endraw %} + register: nodes_with_volumes + delegate_to: "{{ groups['kube_control_plane'] | first }}" + changed_when: false + until: not (kube_override_hostname | default(inventory_hostname) in nodes_with_volumes.stdout_lines) + retries: 3 + delay: "{{ drain_grace_period }}" + when: + - groups['kube_control_plane'] | length > 0 + - not allow_ungraceful_removal + - kube_override_hostname | default(inventory_hostname) in nodes.stdout_lines