1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
# Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves <bmr@redhat.com>
# This file is part of the sos project: https://github.com/sosreport/sos
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions of
# version 2 of the GNU General Public License.
#
# See the LICENSE file in the source distribution for further information.
from sos.plugins import Plugin, RedHatPlugin, UbuntuPlugin
class Docker(Plugin):
"""Docker containers
"""
plugin_name = 'docker'
profiles = ('container',)
option_list = [
("all", "enable capture for all containers, even containers "
"that have terminated", 'fast', False),
("logs", "capture logs for running containers",
'fast', False),
("size", "capture image sizes for docker ps", 'slow', False)
]
def setup(self):
self.add_copy_spec([
"/etc/docker/daemon.json",
"/var/lib/docker/repositories-*"
])
subcmds = [
'info',
'images',
'network ls',
'ps',
'ps -a',
'stats --no-stream',
'version'
]
for subcmd in subcmds:
self.add_cmd_output("docker %s" % subcmd)
# separately grab ps -s as this can take a *very* long time
if self.get_option('size'):
self.add_cmd_output('docker ps -as')
self.add_journal(units="docker")
self.add_cmd_output("ls -alhR /etc/docker")
nets = self.get_command_output('docker network ls')
if nets['status'] == 0:
n = [n.split()[1] for n in nets['output'].splitlines()[1:]]
for net in n:
self.add_cmd_output("docker network inspect %s" % net)
ps_cmd = 'docker ps -q'
if self.get_option('all'):
ps_cmd = "%s -a" % ps_cmd
img_cmd = 'docker images -q'
insp = set()
for icmd in [ps_cmd, img_cmd]:
result = self.get_command_output(icmd)
if result['status'] == 0:
for con in result['output'].splitlines():
insp.add(con)
insp = list(insp)
if insp:
for container in insp:
self.add_cmd_output("docker inspect %s" % container)
if self.get_option('logs'):
for container in insp:
self.add_cmd_output("docker logs -t %s" % container)
class RedHatDocker(Docker, RedHatPlugin):
packages = ('docker', 'docker-latest', 'docker-io', 'docker-engine')
def setup(self):
super(RedHatDocker, self).setup()
self.add_copy_spec([
"/etc/udev/rules.d/80-docker.rules",
"/etc/containers/"
])
class UbuntuDocker(Docker, UbuntuPlugin):
packages = ('docker.io', 'docker-engine')
def setup(self):
super(UbuntuDocker, self).setup()
self.add_copy_spec([
"/etc/default/docker",
"/var/run/docker/libcontainerd/containerd/events.log"
])
# vim: set et ts=4 sw=4 :
|