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