From 12c78e622bc66ae2ef2aa0a890d8e1274a7eb4c0 Mon Sep 17 00:00:00 2001
From: "rong.zhang" <rong.zhang@easystack.cn>
Date: Mon, 5 Mar 2018 15:02:47 +0800
Subject: [PATCH] Remove nodes

Drain node except daemonsets resource
Use reset cluser for delete deploy data
Then delete node
---
 remove-node.yml                               | 29 +++++++++++++++++++
 roles/remove-node/post-remove/tasks/main.yml  |  8 +++++
 .../remove-node/pre-remove/defaults/main.yml  |  3 ++
 roles/remove-node/pre-remove/tasks/main.yml   | 15 ++++++++++
 4 files changed, 55 insertions(+)
 create mode 100644 remove-node.yml
 create mode 100644 roles/remove-node/post-remove/tasks/main.yml
 create mode 100644 roles/remove-node/pre-remove/defaults/main.yml
 create mode 100644 roles/remove-node/pre-remove/tasks/main.yml

diff --git a/remove-node.yml b/remove-node.yml
new file mode 100644
index 000000000..fbc5bc8ba
--- /dev/null
+++ b/remove-node.yml
@@ -0,0 +1,29 @@
+---
+
+- hosts: all
+  gather_facts: true
+
+- hosts: etcd:k8s-cluster:vault:calico-rr
+  vars_prompt:
+    name: "delete_nodes_confirmation"
+    prompt: "Are you sure you want to delete nodes state? Type 'yes' to delete nodes."
+    default: "no"
+    private: no
+
+  pre_tasks:
+    - name: check confirmation
+      fail:
+        msg: "Delete nodes confirmation failed"
+      when: delete_nodes_confirmation != "yes"
+
+- hosts: kube-master
+  roles:
+    - { role: remove-node/pre-remove, tags: pre-remove }
+
+- hosts: kube-node
+  roles:
+    - { role: reset, tags: reset }
+
+- hosts: kube-master
+  roles:
+    - { role: remove-node/post-remove, tags: post-remove }
diff --git a/roles/remove-node/post-remove/tasks/main.yml b/roles/remove-node/post-remove/tasks/main.yml
new file mode 100644
index 000000000..395f9986b
--- /dev/null
+++ b/roles/remove-node/post-remove/tasks/main.yml
@@ -0,0 +1,8 @@
+---
+
+- name: Delete node
+  command: kubectl delete node {{ item }}
+  with_items:
+    - "{{ groups['kube-node'] }}"
+  delegate_to: "{{ groups['kube-master'][0] }}"
+  ignore_errors: yes
diff --git a/roles/remove-node/pre-remove/defaults/main.yml b/roles/remove-node/pre-remove/defaults/main.yml
new file mode 100644
index 000000000..e9e1ba28d
--- /dev/null
+++ b/roles/remove-node/pre-remove/defaults/main.yml
@@ -0,0 +1,3 @@
+---
+drain_grace_period: 300
+drain_timeout: 360s
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..12091917a
--- /dev/null
+++ b/roles/remove-node/pre-remove/tasks/main.yml
@@ -0,0 +1,15 @@
+---
+
+- name: remove-node | Drain node except daemonsets resource
+  command: >-
+    {{ bin_dir }}/kubectl drain
+      --force
+      --ignore-daemonsets
+      --grace-period {{ drain_grace_period }}
+      --timeout {{ drain_timeout }}
+      --delete-local-data {{ item }}
+  with_items:
+    - "{{ groups['kube-node'] }}"
+  failed_when: false
+  delegate_to: "{{ groups['kube-master'][0] }}"
+  ignore_errors: yes
-- 
GitLab