|
@@ -1,55 +1,8 @@
|
1
|
1
|
#!/usr/bin/env python3
|
2
|
2
|
|
3
|
|
-from collections import defaultdict
|
4
|
3
|
from monitor import Monitor
|
|
4
|
+from updater import Updater
|
5
|
5
|
import argparse
|
6
|
|
-import etcd
|
7
|
|
-
|
8
|
|
-
|
9
|
|
-def etcd_put(client, prefix, obj):
|
10
|
|
- for key, value in obj.items():
|
11
|
|
- new_prefix = "%s/%s" % (prefix, key)
|
12
|
|
-
|
13
|
|
- if isinstance(value, dict):
|
14
|
|
- etcd_put(client, new_prefix, value)
|
15
|
|
- else:
|
16
|
|
- client.write(new_prefix, str(value))
|
17
|
|
-
|
18
|
|
-
|
19
|
|
-def add_containers(new_containers):
|
20
|
|
- global containers, host_index, label_index, network_index
|
21
|
|
- for container in new_containers:
|
22
|
|
- name = container['name']
|
23
|
|
- containers[name] = container
|
24
|
|
-
|
25
|
|
- for k, v in container['labels'].items():
|
26
|
|
- label_index[k][name] = v
|
27
|
|
- for k, v in container['net']['addr'].items():
|
28
|
|
- network_index[k][name] = v
|
29
|
|
-
|
30
|
|
- host_index[host][name] = name
|
31
|
|
-
|
32
|
|
- etcd_put(etcd_client, prefix + '/containers', containers)
|
33
|
|
- etcd_put(etcd_client, prefix + '/labels', label_index)
|
34
|
|
- etcd_put(etcd_client, prefix + '/networks', network_index)
|
35
|
|
- etcd_put(etcd_client, prefix + '/hosts', host_index)
|
36
|
|
-
|
37
|
|
-
|
38
|
|
-def remove_containers(old_containers):
|
39
|
|
- global containers, host_index, label_index, network_index
|
40
|
|
- for container in old_containers:
|
41
|
|
- name = container['name']
|
42
|
|
- del containers[name]
|
43
|
|
- etcd_client.delete(prefix + '/containers/' + name, recursive=True)
|
44
|
|
-
|
45
|
|
- for k, v in container['labels'].items():
|
46
|
|
- del label_index[k][name]
|
47
|
|
- etcd_client.delete(prefix + '/labels/' + k + '/' + name)
|
48
|
|
- for k, v in container['net']['addr'].items():
|
49
|
|
- del network_index[k][name]
|
50
|
|
- etcd_client.delete(prefix + '/networks/' + k + '/' + name)
|
51
|
|
- etcd_client.delete(prefix + '/hosts/' + host + '/' + name)
|
52
|
|
-
|
53
|
6
|
|
54
|
7
|
parser = argparse.ArgumentParser()
|
55
|
8
|
parser.add_argument('--name', help='Name of this docker host', default='unknown')
|
|
@@ -58,19 +11,9 @@ parser.add_argument('--etcd-host', help='Host to connect to etcd on', default='e
|
58
|
11
|
parser.add_argument('--etcd-prefix', help='Prefix to use when adding keys to etcd', default='/docker')
|
59
|
12
|
args = parser.parse_args()
|
60
|
13
|
|
61
|
|
-monitor = Monitor(args.name, add_containers, remove_containers)
|
62
|
|
-etcd_client = etcd.Client(host=args.etcd_host, port=args.etcd_port)
|
63
|
|
-prefix = args.etcd_prefix
|
64
|
|
-host = args.name
|
65
|
|
-
|
66
|
|
-containers = {}
|
67
|
|
-label_index = defaultdict(dict)
|
68
|
|
-network_index = defaultdict(dict)
|
69
|
|
-host_index = defaultdict(dict)
|
70
|
|
-
|
71
|
|
-try:
|
72
|
|
- etcd_client.delete(prefix, recursive=True)
|
73
|
|
-except etcd.EtcdKeyNotFound:
|
74
|
|
- pass
|
|
14
|
+updater = Updater(args.etcd_host, args.etcd_port, args.etcd_prefix)
|
|
15
|
+monitor = Monitor(args.name, updater.add_containers, updater.remove_containers)
|
75
|
16
|
|
|
17
|
+updater.wipe()
|
76
|
18
|
monitor.monitor()
|
|
19
|
+
|