Revision ce9abd26 snf-cyclades-app/synnefo/db/models.py

b/snf-cyclades-app/synnefo/db/models.py
155 155
                                 "with backend: %s" % self)
156 156
        else:
157 157
            # ON_DELETE = SET NULL
158
            for vm in self.virtual_machines.all():
159
                vm.backend = None
160
                vm.save()
158 161
            self.virtual_machines.all().backend = None
159 162
            # Remove BackendNetworks of this Backend.
160 163
            # Do not use networks.all().delete(), since delete() method of
......
168 171
        if not self.pk:
169 172
            # Generate a unique index for the Backend
170 173
            indexes = Backend.objects.all().values_list('index', flat=True)
171
            first_free = [x for x in xrange(0, 16) if x not in indexes][0]
172
            self.index = first_free
174
            try:
175
                first_free = [x for x in xrange(0, 16) if x not in indexes][0]
176
                self.index = first_free
177
            except IndexError:
178
                raise Exception("Can not create more than 16 backends")
173 179

  
174 180

  
175 181
# A backend job may be in one of the following possible states
......
520 526

  
521 527
        backends = [backend] if backend else Backend.objects.all()
522 528
        for backend in backends:
523
            BackendNetwork.objects.create(backend=backend, network=self)
529
            if not BackendNetwork.objects.filter(backend=backend, network=self)\
530
                                 .exists():
531
                BackendNetwork.objects.create(backend=backend, network=self)
524 532

  
525 533
    def get_pool(self):
526 534
        if not self.pool_id:

Also available in: Unified diff