24 from datetime
import datetime
26 from django.db
import models
28 from cm.models.user
import User
29 from cm.utils
import log
30 from cm.utils.exception
import CMException
31 from common.states
import farm_states, vm_states
36 user = models.ForeignKey(User)
37 name = models.CharField(max_length=128)
38 description = models.TextField(null=
True, blank=
True)
39 state = models.IntegerField()
40 head = models.ForeignKey(
'VM', related_name=
'+')
51 d[
"farm_id"] = self.id
52 d[
"user_id"] = self.user.id
54 vms = list(self.vms.order_by(
'id'))
55 d[
"vms"] = [vm.dict
for vm
in vms]
56 d[
"state"] = self.
state
57 d[
"start_time"] = vms[0].start_time
58 delta = datetime.now() - vms[0].start_time
59 d[
'uptime'] = delta.seconds + 24 * 3600 * delta.days
60 d[
"image_name"] = vms[0].system_image.name
61 d[
"head_template_name"] = vms[0].template.name
if len(vms) > 0
else ''
62 d[
"template_name"] = vms[1].template.name
if len(vms) > 1
else ''
63 d[
"cpu"] = sum([vm.template.cpu
for vm
in vms])
64 d[
"memory"] = sum([vm.template.memory
for vm
in vms])
68 def get(user_id, farm_id):
70 farm = Farm.objects.get(pk=farm_id)
72 raise CMException(
'vm_get')
74 if farm.user.id != user_id:
75 raise CMException(
'user_permission')
82 farm = Farm.objects.get(pk=farm_id)
84 raise CMException(
'vm_get')
93 farm.description = description
94 farm.state = farm_states[
'init']
110 from cm.models.vm
import VM
115 if farm.state
in (farm_states[
'init'], farm_states[
'closing'], farm_states[
'closed']):
116 raise CMException(
'farm_wrong_state')
120 if farm.state == farm_states[
'init_head']:
121 for vm
in farm.vms.all():
124 vm.release_resources()
125 vm.state = vm_states[
'closed']
126 vm.stop_time = datetime.now()
128 log.debug(vm.user.id,
"vm state %s" % vm.state)
129 r = VM.destroy([farm.head])
131 log.debug(farm.user_id,
"killing wn: %s" % farm.vms)
132 r = VM.destroy(farm.vms.all())
135 if True in [x[
'status'] !=
'ok' for x
in r]:
136 farm.state = farm_states[
'failed']
140 raise CMException(
'farm_destroy')
143 farm.state = farm_states[
'closed']
148 raise CMException(
'farm_destroy')
150 log.debug(farm.user_id,
"session commited")
151 for vm
in farm.vms.all():
152 log.debug(vm.user.id,
"vm state %s" % vm.state)
161 from cm.models.vm
import VM
163 if farm.state == farm_states[
'failed']:
164 raise CMException(
'farm_wrong_state')
170 head_vm.description = description
174 head_vm.release_resources()
176 head_vm.state = vm_states[
'closed']
179 CMException(
'farm_save')
182 if farm.state == farm_states[
'init_head']:
183 for vm
in farm.vms.all():
186 vm.release_resources()
187 vm.state = vm_states[
'closed']
189 for vm
in farm.vms.all():
194 farm.state = farm_states[
'closed']
197 CMException(
'farm_save')
202 for vm
in self.vms.all():
205 hosts_list.append({
"ip": vm.lease_set.all()[0].vm_address,
"host_name":
"farm-head"})
207 hosts_list.append({
"ip": vm.lease_set.all()[0].vm_address,
"host_name": vm.name.replace(vm.farm.name,
'farm')})