diff --git a/cfg_checker/nodes.py b/cfg_checker/nodes.py
index 9570978..c1b3d4c 100644
--- a/cfg_checker/nodes.py
+++ b/cfg_checker/nodes.py
@@ -1308,3 +1308,52 @@
 
     def expose_benchmark_agent(self, agent):
         return self.kube.expose_pod_port(agent, 8765)
+
+    def cleanup_resource_by_name(self, res_type, name, ns=None, wait=False):
+        """Cleansup resource using string res_type and the ns/name
+
+        Args:
+            res_type (string): resource type name: pod, pv, pvc, svc
+            name (string): resource name to cleanup
+            ns (string, optional): Namespace to use. Default is 'qa-space'
+
+            return: (Bool) Is Success?
+        """
+        # fill defaults
+        if not ns:
+            ns = self._namespace
+        # Handle res_type errors and choose resource type
+        if not res_type:
+            logger_cli.debug(
+                "... resource type invalid: '{}'".format(res_type)
+            )
+            return False
+        elif not name:
+            logger_cli.debug("... resource name invalid: '{}'".format(name))
+            return False
+        elif res_type == "svc":
+            # Delete service
+            logger_cli.info("-> deleting svc {}/{}".format(ns, name))
+            self.kube.CoreV1.delete_namespaced_service(name, ns)
+            # TODO: Check if successfull
+        elif res_type == "pod":
+            # Delete a pod
+            logger_cli.info("-> deleting pod {}/{}".format(ns, name))
+            self.kube.CoreV1.delete_namespaced_pod(name, ns)
+            if wait:
+                self.kube.wait_for_phase(res_type, name, ns, ["Terminated"])
+        elif res_type == "pvc":
+            logger_cli.info("-> deleting pvc {}/{}".format(ns, name))
+            self.kube.CoreV1.delete_namespaced_persistent_volume_claim(
+                name,
+                ns
+            )
+            if wait:
+                self.kube.wait_for_phase(res_type, name, ns, ["Terminated"])
+        elif res_type == "pv":
+            logger_cli.info("-> deleting pv {}/{}".format(ns, name))
+            self.kube.CoreV1.delete_persistent_volume(name)
+            if wait:
+                self.kube.wait_for_phase(res_type, name, None, ["Terminated"])
+
+        return True
