27 from colorsys
import hsv_to_rgb
29 from django.contrib
import messages
30 from django.shortcuts
import redirect
31 from django.utils.decorators
import method_decorator
32 from django.utils.translation
import ugettext
as _
34 from wi.commontags.templatetags.templatetags
import filesizeformatmb
35 from wi.utils
import messages_ajax, parsing, get_dicts_from_list, get_dict_from_list
36 from wi.utils.decorators
import django_view, user_permission
37 from wi.utils.exceptions
import RestErrorException
38 from wi.utils.formatters
import time_from_sec
39 from wi.utils.messages_ajax
import ajax_request
40 from wi.utils.states
import farm_states_reversed
as farm_states, \
41 vm_states_reversed, farm_descriptions_reversed
as farm_states_help
42 from wi.utils.views
import prep_data, CustomWizardView
50 url_done =
'far_show_farm'
51 url_start =
'far_create_farm'
53 wizard_name =
'create_farm_wizard'
54 template_dir_name =
'farms'
60 def done(self, form_list, **kwargs):
61 form_data = self.get_all_cleaned_data()
63 prep_data({
'farm': (
'user/farm/create/', form_data)}, self.request.session)
64 except RestErrorException
as ex:
65 messages.error(self.request, ex.value)
67 messages.success(self.request, _(
'Farm is being created.'))
76 rest_data =
prep_data({
'templates':
'user/template/get_list/'}, self.request.session)
77 initial_data = {
'rest_data': rest_data,
78 'session': self.request.session}
81 rest_data =
prep_data({
'ips':
'user/public_ip/get_list/',
82 'disks':
'user/storage_image/get_list/',
83 'iso':
'user/iso_image/get_list/'},
85 initial_data = {
'rest_data': rest_data}
90 context = super(CreateFarmWizard, self).
get_context_data(form=form, **kwargs)
91 context.update({
'steps_desc': [_(
'Image'), _(
'Hardware'), _(
'Optional resources'), _(
'Summary')]})
93 if self.steps.current ==
'0':
94 rest_data =
prep_data({
'groups':
'user/group/list_groups/'}, self.request.session)
97 [
'all', _(
'All images')],
98 [
'private', _(
'My images')],
99 [
'public', _(
'Public images')],
101 for item
in parsing.parse_groups(rest_data):
102 categories.append([item[0], _(
'Group images: ') + item[1]])
104 context.update({
'image_categories': categories})
106 elif self.steps.current ==
'1':
107 form_cleaned_data = self.get_all_cleaned_data()
108 rest_data =
prep_data({
'image': (
'user/system_image/get_by_id/', {
'system_image_id': form_cleaned_data[
'image_id']})},
109 self.request.session)
111 context.update({
'steps_desc': [rest_data[
'image'][
'name']
if len(rest_data[
'image'][
'name']) <= 15
else rest_data[
'image'][
'name'][:15] +
'...',
113 _(
'Optional resources'),
116 elif self.steps.current ==
'2':
117 form_cleaned_data = self.get_all_cleaned_data()
118 rest_data =
prep_data({
'image': (
'user/system_image/get_by_id/', {
'system_image_id': form_cleaned_data[
'image_id']}),
119 'templates':
'user/template/get_list/'},
120 self.request.session)
121 template =
get_dict_from_list(rest_data[
'templates'], form_cleaned_data[
'worker_template_id'], key=
'template_id')
122 context.update({
'steps_desc': [rest_data[
'image'][
'name']
if len(rest_data[
'image'][
'name']) <= 15
else rest_data[
'image'][
'name'][:15] +
'...',
123 str(form_cleaned_data[
'count']) +
'x' + str(template[
'cpu']) +
' CPU/' + str(
filesizeformatmb(template[
'memory'])),
124 _(
'Optional resources'),
127 elif self.steps.current ==
'3':
128 form_cleaned_data = self.get_all_cleaned_data()
129 rest_data =
prep_data({
'image': (
'user/system_image/get_by_id/', {
'system_image_id': form_cleaned_data[
'image_id']}),
130 'templates':
'user/template/get_list/',
131 'ips':
'user/public_ip/get_list/',
132 'disks':
'user/storage_image/get_list/',
133 'iso':
'user/iso_image/get_list/'},
134 self.request.session)
135 summary_data = {
'summary_image': rest_data[
'image'],
136 'summary_head_template':
get_dict_from_list(rest_data[
'templates'], form_cleaned_data[
'head_template_id'], key=
'template_id'),
137 'summary_template':
get_dict_from_list(rest_data[
'templates'], form_cleaned_data[
'worker_template_id'], key=
'template_id'),
138 'summary_count': form_cleaned_data[
'count'],
139 'summary_ip':
get_dict_from_list(rest_data[
'ips'], form_cleaned_data[
'public_ip_id'], key=
'public_ip_id'),
140 'summary_disks':
get_dicts_from_list(rest_data[
'disks'], form_cleaned_data[
'disk_list'], key=
'storage_image_id'),
141 'summary_iso':
get_dicts_from_list(rest_data[
'iso'], form_cleaned_data[
'iso_list'], key=
'iso_image_id'),
142 'summary_vnc': form_cleaned_data[
'vnc']}
144 template =
get_dict_from_list(rest_data[
'templates'], form_cleaned_data[
'worker_template_id'], key=
'template_id')
145 context.update({
'steps_desc': [rest_data[
'image'][
'name']
if len(rest_data[
'image'][
'name']) <= 15
else rest_data[
'image'][
'name'][:15] +
'...',
146 str(form_cleaned_data[
'count']) +
'x' + str(template[
'cpu']) +
' CPU/' + str(
filesizeformatmb(template[
'memory'])),
147 _(
'Optional resources'),
150 context.update(summary_data)
155 CreateFarmWizard.dispatch = method_decorator(user_permission)(
156 method_decorator(django_view)(
157 CreateFarmWizard.dispatch))
168 if request.method ==
'GET':
169 rest_data =
prep_data(
'user/farm/get_list/', request.session)
171 for item
in rest_data:
173 item[
'stateName'] = unicode(farm_states[item[
'state']])
174 item[
'stateTooltip'] = unicode(farm_states_help[item[
'state']])
176 for vm
in item[
'vms']:
177 vm[
'stateName'] = unicode(vm_states_reversed[vm[
'state']])
179 for i
in vm[
'leases']:
180 if i[
'public_ip'] !=
"":
181 vm[
'pub_ip'].append(i[
'public_ip'][
'address'])
184 for i
in vm[
'leases']:
185 vm[
'priv_ip'].append(i[
'address'])
187 vm[
'cpuLoadPercent'] = int(min(float(vm[
'cpu_load'].
get(
'60')
or 0) * 100, 100))
188 vm[
'cpuLoadColor'] =
"#%02x%02x%02x" % tuple(i * 255
for i
in hsv_to_rgb(float(vm[
'cpuLoadPercent']) / 300, 1.0, 0.8))
190 return messages_ajax.success(rest_data)