summaryrefslogtreecommitdiffstats
path: root/ansible/library/docker_list_containers.py
diff options
context:
space:
mode:
Diffstat (limited to 'ansible/library/docker_list_containers.py')
-rw-r--r--ansible/library/docker_list_containers.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/ansible/library/docker_list_containers.py b/ansible/library/docker_list_containers.py
new file mode 100644
index 00000000..d8a789c6
--- /dev/null
+++ b/ansible/library/docker_list_containers.py
@@ -0,0 +1,99 @@
+#!/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()