29 from cm.models.farm
import Farm
30 from cm.models.node
import Node
31 from cm.models.template
import Template
32 from cm.models.user
import User
33 from cm.models.vm
import VM
34 from cm.utils
import log
35 from cm.utils.decorators
import user_log
36 from cm.utils.exception
import CMException
37 from cm.utils.threads.vm
import VMThread
38 from common.states
import farm_states, node_states
39 from cm.utils
import message
53 return Farm.get(caller_id, farm_id).dict
76 def create(caller_id, name, description, image_id, head_template_id, worker_template_id, public_ip_id, iso_list, disk_list, vnc, groups, count):
77 user = User.get(caller_id)
81 message.warn(caller_id,
'point_limit', {
'used_points': user.used_points,
'point_limit': user.points})
83 farm = Farm.create(user=user, name=name, description=description)
85 vms = VM.create(user, name=name, description=description, image_id=image_id, template_id=worker_template_id,
86 head_template_id=head_template_id, public_ip_id=public_ip_id, iso_list=iso_list, disk_list=disk_list,
87 vnc=vnc, groups=groups, farm=farm, count=count)
100 log.exception(caller_id,
'farm_create')
101 raise CMException(
'farm_create')
103 VMThread(vms[0],
'create').
start()
104 return [vm.dict
for vm
in vms]
119 return Farm.destroy([Farm.get(caller_id, farm_id)])
131 farms = [farm.dict
for farm
in Farm.objects.exclude(state=farm_states[
'closed']).filter(user__id__exact=caller_id).order_by(
'-id')]
152 farm = Farm.get(caller_id, farm_id)
153 if farm.user.id == caller_id:
154 return Farm.save_and_shutdown(farm, name, description)
156 raise CMException(
"farm_save")
173 wn_template = Template.get(template_id)
175 for node
in list(Node.objects.filter(state=node_states[
'ok'])):
176 available += node.cpu_free / wn_template.cpu
178 return available >= count + 1