--- /dev/null
+#!/usr/bin/python
+
+ANSIBLE_METADATA = {
+    'metadata_version': '1.1',
+    'status': ['preview'],
+    'supported_by': 'community'
+}
+
+DOCUMENTATION = '''
+---
+module: docker_list_containers
+
+short_description: "List running docker containers"
+
+description:
+    - "Lists all running containers or those with matching label"
+
+options:
+    label_name:
+        description:
+            - container label name to match
+        required: false
+    label_value:
+        description:
+            - container label value to match
+        required: false
+
+author:
+    - Bartek Grzybowski (b.grzybowski@partner.samsung.com)
+'''
+
+EXAMPLES = '''
+# List all running containers
+- name: List containers
+  docker_list_containers:
+
+# List all running containers matching label
+- name: List containers
+  docker_list_containers:
+    label_name: 'io.rancher.project.name'
+    label_value: 'kubernetes'
+'''
+
+RETURN = '''
+containers:
+    description: List of running containers matching module criteria
+    type: list
+    returned: always
+    sample: [
+        "rancher-agent",
+        "rancher-server",
+        "kubernetes-node-1",
+        "infrastructure-server"
+    ]
+'''
+
+from ansible.module_utils.docker_common import AnsibleDockerClient
+
+class DockerListContainers:
+
+    def __init__(self):
+        self.docker_client = AnsibleDockerClient(
+            argument_spec=dict(
+                label_name=dict(type='str', required=False),
+                label_value=dict(type='str', required=False)
+            )
+        )
+
+        self.containers = self.docker_client.containers()
+        self.label_name=self.docker_client.module.params.get('label_name')
+        self.label_value=self.docker_client.module.params.get('label_value')
+
+        if self.label_name:
+            self.containers_names=self._get_containers_names_by_label()
+        else:
+            self.containers_names=self._get_containers_names()
+
+        self.result=dict(
+            containers=self.containers_names,
+            changed=False
+        )
+
+    def _get_containers_names(self):
+        return [str(container_meta.get('Names')[0][1:]) for container_meta in self.containers if 'Names' in container_meta]
+
+    def _get_containers_names_by_label(self):
+        names=[]
+        for container_meta in self.containers:
+            if container_meta.get('Labels',{}).get(self.label_name) == self.label_value:
+                names.append(str(container_meta['Names'][0][1:])) # strip leading '/' in container name and convert to str from unicode
+
+        return names
+
+def main():
+    cont=DockerListContainers()
+    cont.docker_client.module.exit_json(**cont.result)
+
+if __name__ == '__main__':
+    main()
 
         container_list:
           - rancher-agent
           - rancher-server
-          # For some reason getting error "Device busy error" when trying to delete directory with root privileges and rancher-containers not anymore running.
-          # - role: cleanup-directories
-          #  vars:
-          #    directories_files_list_to_remove:
-          #      - /var/lib/rancher/
+    - role: cleanup-rancher
+      vars:
+        container_list_by_label:
+          - { 'label':'io.rancher.project.name', 'value':'healthcheck'}
+          - { 'label':'io.rancher.project.name', 'value':'kubernetes'}
 
--- /dev/null
+---
+# Remove containers spawned by Rancher Agent
+- name: Get list of containers spawned by Rancher Agent
+  docker_list_containers:
+    label_name: "{{ item.label }}"
+    label_value: "{{ item.value }}"
+  loop: "{{ container_list_by_label }}"
+  register: docker_list_containers_var
+
+- name: set fact # save a list of containers found by previous task to orphaned_containers var
+  set_fact: orphaned_containers="{{ orphaned_containers|default([]) + item.containers }}"
+  loop: "{{ docker_list_containers_var.results }}"
+
+- name: Remove orphaned containers
+  docker_container:
+    name: "{{ item }}"
+    state: absent
+  loop: "{{ orphaned_containers }}"