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