Revision 2e0916f2 snf-cyclades-app/synnefo/neutron/models.py

b/snf-cyclades-app/synnefo/neutron/models.py
124 124
                             default='PENDING')
125 125
    machines = models.ManyToManyField(VirtualMachine,
126 126
                                      through='NetworkInterface',
127
                                      related_name='neutron_machines')
127
                                      related_name='neutron_networks')
128 128
    action = models.CharField(choices=ACTIONS, max_length=32, null=True,
129 129
                              default=None)
130 130
    drained = models.BooleanField("Drained", default=False, null=False)
......
134 134
    #serial = models.ForeignKey(QuotaHolderSerial, related_name='network',
135 135
    #                           null=True)
136 136

  
137
    public = models.BooleanField('public', default=True)
137 138
    objects = ForUpdateManager()
138 139

  
139
    def __unicode__(self):
140
        return "<Network: %s>" % str(self.id)
141

  
142
    @property
143
    def backend_id(self):
144
        """Return the backend id by prepending backend-prefix."""
145
        if not self.id:
146
            raise Network.InvalidBackendIdError("self.id is None")
147
        return "%snet-%s" % (settings.BACKEND_PREFIX_ID, str(self.id))
148

  
149
    @property
150
    def backend_tag(self):
151
        """Return the network tag to be used in backend
152

  
153
        """
154
        if self.tags:
155
            return self.tags.split(',')
156
        else:
157
            return []
158

  
159
    def create_backend_network(self, backend=None):
160
        """Create corresponding BackendNetwork entries."""
161

  
162
        backends = [backend] if backend else\
163
            Backend.objects.filter(offline=False)
164
        for backend in backends:
165
            backend_exists =\
166
                BackendNetwork.objects.filter(backend=backend, network=self)\
167
                                      .exists()
168
            if not backend_exists:
169
                BackendNetwork.objects.create(backend=backend, network=self)
170

  
171
    def get_pool(self, with_lock=True):
172
        if not self.pool_id:
173
            self.pool = IPPoolTable.objects.create(available_map='',
174
                                                   reserved_map='',
175
                                                   size=0)
176
            self.save()
177
        objects = IPPoolTable.objects
178
        if with_lock:
179
            objects = objects.select_for_update()
180
        return objects.get(id=self.pool_id).pool
181

  
182
    def reserve_address(self, address):
183
        pool = self.get_pool()
184
        pool.reserve(address)
185
        pool.save()
186

  
187
    def release_address(self, address):
188
        pool = self.get_pool()
189
        pool.put(address)
190
        pool.save()
191

  
192
    class InvalidBackendIdError(Exception):
193
        def __init__(self, value):
194
            self.value = value
195

  
196
        def __str__(self):
197
            return repr(self.value)
198

  
199
    class InvalidBackendMsgError(Exception):
200
        def __init__(self, opcode, status):
201
            self.opcode = opcode
202
            self.status = status
203

  
204
        def __str__(self):
205
            return repr('<opcode: %s, status: %s>'
206
                        % (self.opcode, self.status))
207

  
208
    class InvalidActionError(Exception):
209
        def __init__(self, action):
210
            self._action = action
211

  
212
        def __str__(self):
213
            return repr(str(self._action))
214

  
215 140

  
216 141
class Subnet(models.Model):
217 142
    SUBNET_NAME_LENGTH = 128
......
243 168
        ("BUILDING", "Building"),
244 169
    )
245 170

  
246
    name = models.CharField('Network Name', max_length=128)
171
    name = models.CharField('nic name', max_length=128)
247 172
    machine = models.ForeignKey(VirtualMachine, related_name='neutron_nics')
248 173
    network = models.ForeignKey(Network, related_name='neutron_nics')
174
    subnet = models.ForeignKey(Subnet, related_names='neutron_nics')
249 175
    created = models.DateTimeField(auto_now_add=True)
250 176
    updated = models.DateTimeField(auto_now=True)
251 177
    index = models.IntegerField(null=True)
......
271 197
            return network.floating_ips.filter(machine=self.machine,
272 198
                                               ipv4=self.ipv4,
273 199
                                               deleted=False).exists()
200

  
201

  
202

  

Also available in: Unified diff