Update the appendix in install guide
[oom/offline-installer.git] / ansible / library / docker_list_containers.py
1 #!/usr/bin/python
2
3 ANSIBLE_METADATA = {
4     'metadata_version': '1.1',
5     'status': ['preview'],
6     'supported_by': 'community'
7 }
8
9 DOCUMENTATION = '''
10 ---
11 module: docker_list_containers
12
13 short_description: "List running docker containers"
14
15 description:
16     - "Lists all running containers or those with matching label"
17
18 options:
19     label_name:
20         description:
21             - container label name to match
22         required: false
23     label_value:
24         description:
25             - container label value to match
26         required: false
27
28 author:
29     - Bartek Grzybowski (b.grzybowski@partner.samsung.com)
30 '''
31
32 EXAMPLES = '''
33 # List all running containers
34 - name: List containers
35   docker_list_containers:
36
37 # List all running containers matching label
38 - name: List containers
39   docker_list_containers:
40     label_name: 'io.rancher.project.name'
41     label_value: 'kubernetes'
42 '''
43
44 RETURN = '''
45 containers:
46     description: List of running containers matching module criteria
47     type: list
48     returned: always
49     sample: [
50         "rancher-agent",
51         "rancher-server",
52         "kubernetes-node-1",
53         "infrastructure-server"
54     ]
55 '''
56
57 from ansible.module_utils.docker_common import AnsibleDockerClient
58
59 class DockerListContainers:
60
61     def __init__(self):
62         self.docker_client = AnsibleDockerClient(
63             argument_spec=dict(
64                 label_name=dict(type='str', required=False),
65                 label_value=dict(type='str', required=False)
66             )
67         )
68
69         self.containers = self.docker_client.containers()
70         self.label_name=self.docker_client.module.params.get('label_name')
71         self.label_value=self.docker_client.module.params.get('label_value')
72
73         if self.label_name:
74             self.containers_names=self._get_containers_names_by_label()
75         else:
76             self.containers_names=self._get_containers_names()
77
78         self.result=dict(
79             containers=self.containers_names,
80             changed=False
81         )
82
83     def _get_containers_names(self):
84         return [str(container_meta.get('Names')[0][1:]) for container_meta in self.containers if 'Names' in container_meta]
85
86     def _get_containers_names_by_label(self):
87         names=[]
88         for container_meta in self.containers:
89             if container_meta.get('Labels',{}).get(self.label_name) == self.label_value:
90                 names.append(str(container_meta['Names'][0][1:])) # strip leading '/' in container name and convert to str from unicode
91
92         return names
93
94 def main():
95     cont=DockerListContainers()
96     cont.docker_client.module.exit_json(**cont.result)
97
98 if __name__ == '__main__':
99     main()