]> git.proxmox.com Git - ceph.git/blame - ceph/src/python-common/ceph/rgw/types.py
import quincy beta 17.1.0
[ceph.git] / ceph / src / python-common / ceph / rgw / types.py
CommitLineData
20effc67
TL
1import json
2
3from abc import abstractmethod
4
5
6class RGWAMException(Exception):
7 def __init__(self, message, orig=None):
8 if orig:
9 self.message = message + ': ' + orig.message
10 self.retcode = orig.retcode
11 self.stdout = orig.stdout
12 self.stderr = orig.stdout
13 else:
14 self.message = message
15 self.retcode = 0
16 self.stdout = None
17 self.stderr = None
18
19
20class RGWAMCmdRunException(RGWAMException):
21 def __init__(self, cmd, retcode, stdout, stderr):
22 super().__init__('Command error (%d): %s\nstdout:%s\nstderr:%s' %
23 (retcode, cmd, stdout, stderr))
24 self.retcode = retcode
25 self.stdout = stdout
26 self.stderr = stderr
27
28
29class RGWAMEnvMgr:
30 @abstractmethod
31 def tool_exec(self, prog, args):
32 pass
33
34 @abstractmethod
35 def apply_rgw(self, svc_id, realm_name, zone_name, port=None):
36 pass
37
38 @abstractmethod
39 def list_daemons(self, service_name, daemon_type=None, daemon_id=None, hostname=None,
40 refresh=True):
41 pass
42
43
44class JSONObj:
45 def to_json(self):
46 return json.dumps(self, default=lambda o: o.__dict__, indent=4)
47
48
49class RealmToken(JSONObj):
50 def __init__(self, realm_id, endpoint, uid, access_key, secret):
51 self.realm_id = realm_id
52 self.endpoint = endpoint
53 self.uid = uid
54 self.access_key = access_key
55 self.secret = secret
56
57
58class RGWZone(JSONObj):
59 def __init__(self, zone_dict):
60 self.id = zone_dict['id']
61 self.name = zone_dict['name']
62 self.endpoints = zone_dict['endpoints']
63
64
65class RGWZoneGroup(JSONObj):
66 def __init__(self, zg_dict):
67 self.id = zg_dict['id']
68 self.name = zg_dict['name']
69 self.api_name = zg_dict['api_name']
70 self.is_master = zg_dict['is_master']
71 self.endpoints = zg_dict['endpoints']
72
73 self.zones_by_id = {}
74 self.zones_by_name = {}
75 self.all_endpoints = []
76
77 for zone in zg_dict['zones']:
78 z = RGWZone(zone)
79 self.zones_by_id[zone['id']] = z
80 self.zones_by_name[zone['name']] = z
81 self.all_endpoints += z.endpoints
82
83 def endpoint_exists(self, endpoint):
84 for ep in self.all_endpoints:
85 if ep == endpoint:
86 return True
87 return False
88
89 def get_zone_endpoints(self, zone_id):
90 z = self.zones_by_id.get(zone_id)
91 if not z:
92 return None
93
94 return z.endpoints
95
96 def iter_zones(self):
97 for zone in self.zones_by_id.values():
98 yield zone
99
100
101class RGWPeriod(JSONObj):
102 def __init__(self, period_dict):
103 self.id = period_dict['id']
104 self.epoch = period_dict['epoch']
105 self.master_zone = period_dict['master_zone']
106 self.master_zonegroup = period_dict['master_zonegroup']
107 self.realm_name = period_dict['realm_name']
108 self.realm_id = period_dict['realm_id']
109 pm = period_dict['period_map']
110 self.zonegroups_by_id = {}
111 self.zonegroups_by_name = {}
112
113 for zg in pm['zonegroups']:
114 self.zonegroups_by_id[zg['id']] = RGWZoneGroup(zg)
115 self.zonegroups_by_name[zg['name']] = RGWZoneGroup(zg)
116
117 def endpoint_exists(self, endpoint):
118 for _, zg in self.zonegroups_by_id.items():
119 if zg.endpoint_exists(endpoint):
120 return True
121 return False
122
123 def find_zonegroup_by_name(self, zonegroup):
124 if not zonegroup:
125 return self.find_zonegroup_by_id(self.master_zonegroup)
126 return self.zonegroups_by_name.get(zonegroup)
127
128 def find_zonegroup_by_id(self, zonegroup):
129 return self.zonegroups_by_id.get(zonegroup)
130
131 def get_zone_endpoints(self, zonegroup_id, zone_id):
132 zg = self.zonegroups_by_id.get(zonegroup_id)
133 if not zg:
134 return None
135
136 return zg.get_zone_endpoints(zone_id)
137
138 def iter_zonegroups(self):
139 for zg in self.zonegroups_by_id.values():
140 yield zg
141
142
143class RGWAccessKey(JSONObj):
144 def __init__(self, d):
145 self.uid = d['user']
146 self.access_key = d['access_key']
147 self.secret_key = d['secret_key']
148
149
150class RGWUser(JSONObj):
151 def __init__(self, d):
152 self.uid = d['user_id']
153 self.display_name = d['display_name']
154 self.email = d['email']
155
156 self.keys = []
157
158 for k in d['keys']:
159 self.keys.append(RGWAccessKey(k))
160
161 is_system = d.get('system') or 'false'
162 self.system = (is_system == 'true')