Revision f600b74e snf-cyclades-app/synnefo/quotas/enforce.py
b/snf-cyclades-app/synnefo/quotas/enforce.py | ||
---|---|---|
155 | 155 |
ip_actions[ip.id] = viol_id, state, backend_id, "REMOVE" |
156 | 156 |
|
157 | 157 |
|
158 |
def get_vms(users=None): |
|
158 |
def get_vms(users=None, projects=None):
|
|
159 | 159 |
vms = VirtualMachine.objects.filter(deleted=False).\ |
160 | 160 |
select_related("flavor").order_by('-id') |
161 | 161 |
if users is not None: |
162 | 162 |
vms = vms.filter(userid__in=users) |
163 |
if projects is not None: |
|
164 |
vms = vms.filter(project__in=projects) |
|
163 | 165 |
|
164 |
return _partition_by(lambda vm: vm.userid, vms) |
|
166 |
vmsdict = _partition_by(lambda vm: vm.project, vms) |
|
167 |
for project, projectdict in vmsdict.iteritems(): |
|
168 |
vmsdict[project] = _partition_by(lambda vm: vm.userid, projectdict) |
|
169 |
return vmsdict |
|
165 | 170 |
|
166 | 171 |
|
167 |
def get_floating_ips(users=None): |
|
172 |
def get_floating_ips(users=None, projects=None):
|
|
168 | 173 |
ips = IPAddress.objects.filter(deleted=False, floating_ip=True).\ |
169 | 174 |
select_related("nic__machine") |
170 | 175 |
if users is not None: |
171 | 176 |
ips = ips.filter(userid__in=users) |
177 |
if projects is not None: |
|
178 |
ips = ips.filter(project__in=projects) |
|
172 | 179 |
|
173 |
return _partition_by(lambda ip: ip.userid, ips) |
|
180 |
ipsdict = _partition_by(lambda ip: ip.project, ips) |
|
181 |
for project, projectdict in ipsdict.iteritems(): |
|
182 |
ipsdict[project] = _partition_by(lambda ip: ip.userid, projectdict) |
|
183 |
return ipsdict |
|
174 | 184 |
|
175 | 185 |
|
176 |
def get_actual_resources(resource_type, users=None): |
|
186 |
def get_actual_resources(resource_type, users=None, projects=None):
|
|
177 | 187 |
ACTUAL_RESOURCES = { |
178 | 188 |
"vm": get_vms, |
179 | 189 |
"floating_ip": get_floating_ips, |
180 | 190 |
} |
181 |
return ACTUAL_RESOURCES[resource_type](users=users) |
|
191 |
return ACTUAL_RESOURCES[resource_type](users=users, projects=projects) |
|
192 |
|
|
193 |
|
|
194 |
def skip_check(obj, to_check=None, excluded=None): |
|
195 |
return (to_check is not None and obj not in to_check or |
|
196 |
excluded is not None and obj in excluded) |
|
197 |
|
|
198 |
|
|
199 |
def pick_project_resources(project_dict, users=None, excluded_users=None): |
|
200 |
resources = [] |
|
201 |
for user, user_resources in project_dict.iteritems(): |
|
202 |
if skip_check(user, users, excluded_users): |
|
203 |
continue |
|
204 |
resources += user_resources |
|
205 |
return resources |
|
182 | 206 |
|
183 | 207 |
|
184 | 208 |
VM_ACTION = { |
Also available in: Unified diff