Browse Source

Listen for new containers being added.

master
Chris Smith 8 years ago
parent
commit
7dd94bf61a
1 changed files with 33 additions and 18 deletions
  1. 33
    18
      report.py

+ 33
- 18
report.py View File

@@ -28,6 +28,27 @@ def get_ports(container):
28 28
   return ports
29 29
 
30 30
 
31
+def add_containers(infos):
32
+  global containers, label_index, network_index
33
+  for info in infos:
34
+    container = {
35
+      'image': info['Image'],
36
+      'labels': info['Labels'],
37
+      'net': {
38
+        'addr': get_addresses(info),
39
+        'ports': get_ports(info)
40
+      }
41
+    }
42
+
43
+    name = info['Names'][0][1:]
44
+    containers[name] = container
45
+
46
+    for k, v in container['labels'].items():
47
+      label_index[k][name] = v
48
+    for k, v in container['net']['addr'].items():
49
+      network_index[k][name] = v
50
+
51
+
31 52
 parser = argparse.ArgumentParser()
32 53
 parser.add_argument('--name', help='Name of this docker host', default='unknown')
33 54
 parser.add_argument('--etcd-port', type=int, help='Port to connect to etcd on', default=2379)
@@ -39,25 +60,13 @@ docker_client = docker.Client(base_url='unix://var/run/docker.sock')
39 60
 etcd_client = etcd.Client(host=args.etcd_host, port=args.etcd_port)
40 61
 prefix = args.etcd_prefix
41 62
 
63
+event_gen = docker_client.events(decode=True, filters={'type': 'container', 'event': ['die', 'start']})
64
+
42 65
 containers = {}
43 66
 label_index = defaultdict(dict) 
44 67
 network_index = defaultdict(dict)
45 68
 
46
-for container in docker_client.containers():
47
-  containers[container['Names'][0][1:]] = {
48
-    'image': container['Image'],
49
-    'labels': container['Labels'],
50
-    'net': {
51
-      'addr': get_addresses(container),
52
-      'ports': get_ports(container)
53
-    }
54
-  }
55
-
56
-for name, details in containers.items():
57
-  for k, v in details['labels'].items():
58
-    label_index[k][name] = v
59
-  for k, v in details['net']['addr'].items():
60
-    network_index[k][name] = v
69
+add_containers(docker_client.containers())
61 70
 
62 71
 try:
63 72
   etcd_client.delete(prefix, recursive=True)
@@ -68,6 +77,12 @@ etcd_put(etcd_client, prefix + '/containers', containers)
68 77
 etcd_put(etcd_client, prefix + '/labels', label_index)
69 78
 etcd_put(etcd_client, prefix + '/networks', network_index)
70 79
 
71
-print(containers)
72
-print(label_index)
73
-print(network_index)
80
+for event in event_gen:
81
+  if event['Action'] == 'start':
82
+    print('New container %s' % event['id'])
83
+    add_containers(docker_client.containers(filters={'id': event['id']}))
84
+  elif event['Action'] == 'die':
85
+    print('Dead container %s' % event['id'])
86
+  else:
87
+    print('Unexpected event %s' % event['Action'])
88
+

Loading…
Cancel
Save