27 from django.db
import models
28 from django.db.models
import Sum
30 from cm.utils.exception
import CMException
31 from common.states
import node_states, vm_states
49 username = models.CharField(max_length=30)
50 address = models.CharField(max_length=45)
51 transport = models.CharField(max_length=45)
52 driver = models.CharField(max_length=45)
53 suffix = models.CharField(max_length=20)
54 cpu_total = models.IntegerField()
55 memory_total = models.IntegerField()
56 hdd_total = models.IntegerField()
57 state = models.IntegerField()
58 comment = models.TextField(null=
True, blank=
True)
59 errors = models.TextField(null=
True, blank=
True)
85 d[
'node_id'] = self.id
86 d[
'address'] = self.
address or ''
93 d[
'state'] = self.
state or ''
94 d[
'comment'] = self.
comment or ''
95 d[
'errors'] = self.
errors or ''
120 d[
'node_id'] = self.id
122 d[
'address'] = self.
address or ''
124 d[
'driver'] = self.
driver or ''
131 d[
'state'] = self.
state or ''
132 d[
'suffix'] = self.
suffix or ''
133 d[
'comment'] = self.
comment or ''
134 d[
'errors'] = self.
errors or ''
165 d[
'node_id'] = self.id
167 d[
'address'] = self.
address or ''
169 d[
'driver'] = self.
driver or ''
176 d[
'state'] = self.
state or ''
177 d[
'suffix'] = self.
suffix or ''
186 d[
'comment'] = self.
comment or ''
187 d[
'errors'] = self.
errors or ''
214 c = self.vm_set.exclude(state__in=[vm_states[
'closed'], vm_states[
'erased']]).aggregate(cpu_sum=Sum(
'template__cpu'))
215 csum = c[
'cpu_sum']
or 0
228 m = self.vm_set.exclude(state__in=[vm_states[
'closed'], vm_states[
'erased']]).aggregate(memory_sum=Sum(
'template__memory'))
229 msum = m[
'memory_sum']
or 0
242 s = self.vm_set.exclude(state__in=[vm_states[
'closed'], vm_states[
'erased']]).aggregate(size_sum=Sum(
'system_image__size'))
243 ssum = s[
'size_sum']
or 0
262 if hasattr(self,
'lv_data'):
268 total_cpu = conn.getInfo()[2]
269 total_memory = conn.getInfo()[1]
270 free_memory = conn.getFreeMemory()
272 pool = conn.storagePoolLookupByName(
'images')
274 pool_total_space = pool.info()[1]
275 pool_free_space = pool.info()[3]
276 for id_dom
in conn.listDomainsID():
277 dom = conn.lookupByID(id_dom)
280 used_memory += info[1]
281 self.
lv_data = [used_cpu, used_memory, total_cpu, total_memory, free_memory, pool_total_space, pool_free_space]
361 conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
362 conn.connect((self.
address, 22))
364 raise CMException(
'node_connect')
365 ip = conn.getsockname()[0]
380 def get(user_id, node_id):
383 n = Node.objects.get(pk=node_id)
385 raise CMException(
'node_get')
419 node = Node.objects.get(pk=node_id)
420 if node.cpu_free >= template.cpu
and node.memory_free >= template.memory
and node.hdd_free >= image.size:
423 raise CMException(
'node_get')
428 for node
in Node.objects.filter(state__exact=node_states[
'ok']).order_by(
'id'):
429 if node.cpu_free >= template.cpu
and node.memory_free >= template.memory
and node.hdd_free >= image.size:
430 available_nodes.append(node)
432 if not available_nodes:
433 raise CMException(
'node_get')
436 available_nodes.sort(key=
lambda node: node.cpu_free)
437 return available_nodes[0]