1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 """
17 Resource class and its manager for Quota sets in Block Storage API v2
18 """
19
20 from yakumo import base
21 from yakumo.constant import UNDEF
22 from yakumo import mapper
23 from yakumo import utils
24
25
26 ATTRIBUTE_MAPPING = [
27 ('id', 'id', mapper.Noop),
28 ('volumes', 'volumes', mapper.Noop),
29 ('per_volume_gigabytes', 'per_volume_gigabytes', mapper.Noop),
30 ('snapshots', 'snapshots', mapper.Noop),
31 ('gigabytes', 'gigabytes', mapper.Noop),
32 ('backups', 'backups', mapper.Noop),
33 ('backup_gigabytes', 'backup_gigabytes', mapper.Noop),
34 ]
35
36
38 """Resource class for Quota sets in Block Storage API v2"""
39
40
42 """Manager class for Quota sets in Block Storage API v2"""
43
44 resource_class = Resource
45 service_type = 'volume'
46 _attr_mapping = ATTRIBUTE_MAPPING
47 _hidden_methods = ["create"]
48 _json_resource_key = 'quota_set'
49 _url_resource_path = '/os-quota-sets'
50
51 - def get(self, project=None, user=None):
52 """
53 Get quota set for a project
54
55 @keyword project: Project (required)
56 @type project: yakumo.project.Resource
57 @keyword user: User
58 @type user: yakumo.user.Resource
59 @rtype: yakumo.cinder.v2.quota_set.Resource
60 """
61 if project is None:
62 project = self._project
63 params = {}
64 if user:
65 params = dict(user_id=user.get_id())
66 try:
67 ret = self._http.get(self._url_resource_path, project._id,
68 params=params)
69 json_params = ret.get(self._json_resource_key)
70 attrs = self._json2attr(json_params)
71 return self.resource_class(self, **attrs)
72 except:
73 return None
74
78 """
79 Update quota set for a project
80
81 @keyword project: Project object (required)
82 @type project: yakumo.project.Resource
83 @keyword user: User object
84 @type user: yakumo.user.Resource
85 @keyword volumes: Max number of volumes
86 @type volumes: int
87 @keyword per_volume_gigabytes: Max size of a volume in GB
88 @type per_volume_gigabytes: int
89 @keyword snapshots: Max number of snapshots
90 @type snapshots: int
91 @keyword gigabytes: Max total size of volumes in GB
92 @type gigabytes:int
93 @keyword backups: Max number of volume backups
94 @type backups: int
95 @keyword backup_gigabytes: max total size of volume backup in GB
96 @type backup_gigabytes: int
97 @rtype: None
98 """
99 if project is None:
100 project = self._project
101 params = {}
102 if user:
103 params = dict(user_id=user._id)
104 kwargs = dict(volumes=volumes,
105 per_volume_gigabytes=per_volume_gigabytes,
106 snapshots=snapshots,
107 gigabytes=gigabytes,
108 backups=backups,
109 backup_gigabytes=backup_gigabytes)
110 json_params = self._attr2json(kwargs)
111 self._http.put(self._url_resource_path, project._id,
112 params=params,
113 data=utils.get_json_body(self._json_resource_key,
114 **json_params))
115
116 - def delete(self, project=None, user=None):
117 """
118 Delete quota set for a project
119
120 @keyword project: Project
121 @type project: yakumo.project.Resource
122 @keyword user: User
123 @type user: yakumo.user.Resource
124 @rtype: None
125 """
126 if project is None:
127 project = self._project
128 params = {}
129 if user:
130 params = dict(user_id=user._id)
131 self._http.delete(self._url_resource_path, project._id,
132 params=params)
133
135 """
136 Get default quota set for a project
137
138 @keyword project: Project
139 @type project: yakumo.project.Resource
140 @return: Default quota set
141 @rtype: yakumo.cinder.v2.quota_set.Resource
142 """
143 if project is None:
144 project = self._project
145 try:
146 ret = self._http.get(self._url_resource_path, project._id)
147 json_params = ret.get(self._json_resource_key)
148 attrs = self._json2attr(json_params)
149 return self.resource_class(self, **attrs)
150 except:
151 return None
152