diff --git a/library/kube.py b/library/kube.py
index 8fc47bbc6630ef19eb09933ffe7bf630e0715d60..cb9f4f0cf480e58d00470b00723075a62c6a780f 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 9b25c721eb3cc4b5fa759a836d1914ac41b8364f..8663e8a247f4b59340bda367f368763c8fa51faa 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