]> git.proxmox.com Git - ceph.git/blob - ceph/src/python-common/ceph/rgw/diff.py
import quincy beta 17.1.0
[ceph.git] / ceph / src / python-common / ceph / rgw / diff.py
1 class ZoneEPs:
2 def __init__(self):
3 self.endpoints = set()
4
5 def add(self, ep):
6 if not ep:
7 return
8
9 self.endpoints.add(ep)
10
11 def diff(self, zep):
12 return list(self.endpoints.difference(zep.endpoints))
13
14 def get_all(self):
15 for ep in self.endpoints:
16 yield ep
17
18
19 class RealmEPs:
20 def __init__(self):
21 self.zones = {}
22
23 def add(self, zone, ep=None):
24 if not zone:
25 return
26
27 z = self.zones.get(zone)
28 if not z:
29 z = ZoneEPs()
30 self.zones[zone] = z
31
32 z.add(ep)
33
34 def diff(self, rep):
35 result = {}
36 for z, zep in rep.zones.items():
37 myzep = self.zones.get(z)
38 if not myzep:
39 continue
40
41 d = myzep.diff(zep)
42 if len(d) > 0:
43 result[z] = myzep.diff(zep)
44
45 return result
46
47 def get_all(self):
48 for z, zep in self.zones.items():
49 eps = []
50 for ep in zep.get_all():
51 eps.append(ep)
52 yield z, eps
53
54
55 class RealmsEPs:
56 def __init__(self):
57 self.realms = {}
58
59 def add(self, realm, zone=None, ep=None):
60 if not realm:
61 return
62
63 r = self.realms.get(realm)
64 if not r:
65 r = RealmEPs()
66 self.realms[realm] = r
67
68 r.add(zone, ep)
69
70 def diff(self, rep):
71 result = {}
72
73 for r, rep in rep.realms.items():
74 myrealm = self.realms.get(r)
75 if not myrealm:
76 continue
77
78 d = myrealm.diff(rep)
79 if d:
80 result[r] = d
81
82 return result
83
84 def get_all(self):
85 result = {}
86 for r, rep in self.realms.items():
87 zs = {}
88 for z, eps in rep.get_all():
89 zs[z] = eps
90
91 result[r] = zs
92
93 return result