summaryrefslogtreecommitdiff
path: root/roles/kubernetes/decorations/tasks/taints.yml
diff options
context:
space:
mode:
Diffstat (limited to 'roles/kubernetes/decorations/tasks/taints.yml')
-rw-r--r--roles/kubernetes/decorations/tasks/taints.yml44
1 files changed, 44 insertions, 0 deletions
diff --git a/roles/kubernetes/decorations/tasks/taints.yml b/roles/kubernetes/decorations/tasks/taints.yml
new file mode 100644
index 00000000..fd60ef88
--- /dev/null
+++ b/roles/kubernetes/decorations/tasks/taints.yml
@@ -0,0 +1,44 @@
+---
+- name: get list of current taints
+ delegate_to: "{{ groups['_kubernetes_primary_controlplane_node_'] | first }}"
+ check_mode: no
+ command: kubectl --kubeconfig /etc/kubernetes/admin.conf get node '{{ kubernetes_node_name }}' -o jsonpath='{.spec.taints}'
+ changed_when: false
+ register: kubectl_list_taints
+
+- set_fact:
+ current_taints: "{{ kubectl_list_taints.stdout | ternary(kubectl_list_taints.stdout, '[]') | from_json }}"
+
+- name: add taints to node
+ delegate_to: "{{ groups['_kubernetes_primary_controlplane_node_'] | first }}"
+ loop: "{{ kubernetes_node_taints | dict2items }}"
+ loop_control:
+ label: "{{ item.key }}={{ item.value }}"
+ when: "item.key not in current_taints or current_taints[item.key] != item.value"
+ command: kubectl --kubeconfig /etc/kubernetes/admin.conf taint --overwrite node '{{ kubernetes_node_name }}' '{{ item.key }}={{ item.value }}'
+
+- name: add stamp files for managed taints
+ loop: "{{ kubernetes_node_taints | dict2items }}"
+ loop_control:
+ label: "{{ item.key }}={{ item.value }}"
+ copy:
+ dest: "/etc/kubernetes/decorations/taints/{{ item.key }}"
+ content: "{{ item.value }}"
+
+- name: get list of managed taints
+ find:
+ path: /etc/kubernetes/decorations/taints
+ register: managed_taints
+
+- name: remove superflous taints from node
+ delegate_to: "{{ groups['_kubernetes_primary_controlplane_node_'] | first }}"
+ loop: "{{ managed_taints.files | map(attribute='path') | map('basename') }}"
+ when: "item not in kubernetes_node_taints"
+ command: kubectl --kubeconfig /etc/kubernetes/admin.conf taint --overwrite node '{{ kubernetes_node_name }}' '{{ item }}-'
+
+- name: remove stamp files for superflous taints
+ loop: "{{ managed_taints.files | map(attribute='path') | map('basename') }}"
+ when: "item not in kubernetes_node_taints"
+ file:
+ path: "/etc/kubernetes/decorations/taints/{{ item }}"
+ state: absent