Revision f96f60fd

b/snf-cyclades-app/synnefo/logic/allocators/default_allocator.py
33 33

  
34 34
from __future__ import division
35 35
import logging
36
from synnefo.api.util import backend_public_networks
36

  
37 37

  
38 38
log = logging.getLogger(__name__)
39 39

  
......
68 68

  
69 69

  
70 70
def vm_fits_in_backend(backend, vm):
71
    return backend.dfree > vm['disk'] and backend.mfree > vm['ram'] and\
72
           has_free_ip(backend)
71
    return backend.dfree > vm['disk'] and backend.mfree > vm['ram']
73 72

  
74 73

  
75 74
def backend_score(backend, flavor):
......
77 76
    dratio = 1 - (backend.dfree / backend.dtotal)
78 77
    cratio = (backend.pinst_cnt + 1) / (backend.ctotal * 4)
79 78
    return 0.7 * (mratio + dratio) * 0.3 * cratio
80

  
81

  
82
def has_free_ip(backend):
83
    """Find if Backend has any free public IP."""
84
    for network in backend_public_networks(backend):
85
        if not network.get_pool().empty():
86
            return True
87
    return False
b/snf-cyclades-app/synnefo/logic/backend_allocator.py
34 34
from synnefo import settings
35 35
from synnefo.db.models import Backend
36 36
from synnefo.logic.backend import update_resources
37
from synnefo.api.util import backend_public_networks
37 38

  
38 39
log = logging.getLogger(__name__)
39 40

  
......
88 89
    """Get available backends from db.
89 90

  
90 91
    """
91
    return list(Backend.objects.select_for_update().filter(drained=False,
92
                                                           offline=False))
92
    backends = list(Backend.objects.select_for_update().filter(drained=False,
93
                                                               offline=False))
94
    return filter(lambda x: has_free_ip(x), backends)
95

  
96

  
97
def has_free_ip(backend):
98
    """Find if Backend has any free public IP."""
99
    for network in backend_public_networks(backend):
100
        if not network.get_pool().empty():
101
            return True
102
    return False
93 103

  
94 104

  
95 105
def flavor_disk(flavor):

Also available in: Unified diff