From 79f6cd774a4d66ebe909bddf3aca93c377f45c42 Mon Sep 17 00:00:00 2001
From: Robin Wallace <robin.wallace@elastisys.com>
Date: Mon, 20 Jun 2022 09:34:31 +0200
Subject: [PATCH] create snapshot-controller only if needed

---
 library/kube.py                                  |  7 ++++++-
 .../snapshots/snapshot-controller/tasks/main.yml | 16 ++++++++++++++--
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/library/kube.py b/library/kube.py
index 8fc47bbc6..cb9f4f0cf 100644
--- a/library/kube.py
+++ b/library/kube.py
@@ -314,7 +314,7 @@ def main():
             wait=dict(default=False, type='bool'),
             all=dict(default=False, type='bool'),
             log_level=dict(default=0, type='int'),
-            state=dict(default='present', choices=['present', 'absent', 'latest', 'reloaded', 'stopped']),
+            state=dict(default='present', choices=['present', 'absent', 'latest', 'reloaded', 'stopped', 'exists']),
             recursive=dict(default=False, type='bool'),
             ),
             mutually_exclusive=[['filename', 'list']]
@@ -339,6 +339,11 @@ def main():
     elif state == 'latest':
         result = manager.replace()
 
+    elif state == 'exists':
+        result = manager.exists()
+        module.exit_json(changed=changed,
+                     msg='%s' % result)
+
     else:
         module.fail_json(msg='Unrecognized state %s.' % state)
 
diff --git a/roles/kubernetes-apps/snapshots/snapshot-controller/tasks/main.yml b/roles/kubernetes-apps/snapshots/snapshot-controller/tasks/main.yml
index 9b25c721e..8663e8a24 100644
--- a/roles/kubernetes-apps/snapshots/snapshot-controller/tasks/main.yml
+++ b/roles/kubernetes-apps/snapshots/snapshot-controller/tasks/main.yml
@@ -1,15 +1,27 @@
 ---
+- name: check if snapshot namespace exists
+  register: snapshot_namespace_exists
+  kube:
+    kubectl: "{{ bin_dir }}/kubectl"
+    name: "{{ snapshot_controller_namespace }}"
+    resource: "namespace"
+    state: "exists"
+  when: inventory_hostname == groups['kube_control_plane'][0]
+  tags: snapshot-controller
+
 - name: Snapshot Controller | Generate Manifests
   template:
     src: "{{ item.file }}.j2"
     dest: "{{ kube_config_dir }}/{{ item.file }}"
     mode: 0644
   with_items:
-    - {name: snapshot-ns, file: snapshot-ns.yml}
+    - {name: snapshot-ns, file: snapshot-ns.yml, apply: not snapshot_namespace_exists}
     - {name: rbac-snapshot-controller, file: rbac-snapshot-controller.yml}
     - {name: snapshot-controller, file: snapshot-controller.yml}
   register: snapshot_controller_manifests
-  when: inventory_hostname == groups['kube_control_plane'][0]
+  when:
+    - inventory_hostname == groups['kube_control_plane'][0]
+    - item.apply | default(True) | bool
   tags: snapshot-controller
 
 - name: Snapshot Controller | Apply Manifests
-- 
GitLab