34 |
34 |
|
35 |
35 |
import os
|
36 |
36 |
|
37 |
|
from urlparse import urlparse
|
38 |
|
|
39 |
37 |
from django.conf import settings
|
40 |
38 |
from django.utils.translation import gettext_lazy as _
|
41 |
39 |
from django.template import loader
|
... | ... | |
45 |
43 |
from synnefo_branding.utils import render_to_string
|
46 |
44 |
from django.core.urlresolvers import reverse
|
47 |
45 |
from django.template import RequestContext
|
48 |
|
from synnefo_branding import settings as snf_settings
|
49 |
46 |
|
50 |
47 |
from synnefo.util.version import get_component_version
|
51 |
|
from synnefo.lib import join_urls
|
52 |
48 |
|
53 |
|
from synnefo import cyclades_settings
|
54 |
49 |
from synnefo.ui import settings as uisettings
|
55 |
50 |
|
56 |
51 |
SYNNEFO_JS_LIB_VERSION = get_component_version('app')
|
... | ... | |
101 |
96 |
# Additional settings
|
102 |
97 |
VM_NAME_TEMPLATE = getattr(settings, "VM_CREATE_NAME_TPL", "My {0} server")
|
103 |
98 |
VM_HOSTNAME_FORMAT = getattr(settings, "UI_VM_HOSTNAME_FORMAT",
|
104 |
|
'snf-%(id)s.vm.synnefo.org')
|
|
99 |
'snf-%(id)s.vm.synnefo.org')
|
105 |
100 |
|
106 |
101 |
if isinstance(VM_HOSTNAME_FORMAT, basestring):
|
107 |
102 |
VM_HOSTNAME_FORMAT = VM_HOSTNAME_FORMAT % {'id': '{0}'}
|
... | ... | |
173 |
168 |
current_template = template_path + name + '.html'
|
174 |
169 |
t = loader.get_template(current_template)
|
175 |
170 |
media_context = {
|
176 |
|
'UI_MEDIA_URL': UI_MEDIA_URL,
|
177 |
|
'SYNNEFO_JS_URL': UI_SYNNEFO_JS_URL,
|
178 |
|
'SYNNEFO_JS_LIB_URL': UI_SYNNEFO_JS_LIB_URL,
|
179 |
|
'SYNNEFO_JS_WEB_URL': UI_SYNNEFO_JS_WEB_URL,
|
180 |
|
'SYNNEFO_IMAGES_URL': UI_SYNNEFO_IMAGES_URL,
|
181 |
|
'SYNNEFO_CSS_URL': UI_SYNNEFO_CSS_URL,
|
182 |
|
'SYNNEFO_JS_LIB_VERSION': SYNNEFO_JS_LIB_VERSION,
|
183 |
|
'DEBUG': settings.DEBUG
|
|
171 |
'UI_MEDIA_URL': UI_MEDIA_URL,
|
|
172 |
'SYNNEFO_JS_URL': UI_SYNNEFO_JS_URL,
|
|
173 |
'SYNNEFO_JS_LIB_URL': UI_SYNNEFO_JS_LIB_URL,
|
|
174 |
'SYNNEFO_JS_WEB_URL': UI_SYNNEFO_JS_WEB_URL,
|
|
175 |
'SYNNEFO_IMAGES_URL': UI_SYNNEFO_IMAGES_URL,
|
|
176 |
'SYNNEFO_CSS_URL': UI_SYNNEFO_CSS_URL,
|
|
177 |
'SYNNEFO_JS_LIB_VERSION': SYNNEFO_JS_LIB_VERSION,
|
|
178 |
'DEBUG': settings.DEBUG
|
184 |
179 |
}
|
185 |
180 |
context.update(media_context)
|
186 |
181 |
return HttpResponse(t.render(RequestContext(request, context)))
|
187 |
182 |
|
188 |
183 |
|
189 |
184 |
def home(request):
|
190 |
|
context = {'timeout': TIMEOUT,
|
191 |
|
'project': '+nefo',
|
192 |
|
'request': request,
|
193 |
|
'current_lang': get_language() or 'en',
|
194 |
|
'compute_api_url': json.dumps(uisettings.COMPUTE_URL),
|
195 |
|
'user_catalog_url': json.dumps(uisettings.USER_CATALOG_URL),
|
196 |
|
'feedback_post_url': json.dumps(uisettings.FEEDBACK_URL),
|
197 |
|
'accounts_api_url': json.dumps(uisettings.ACCOUNT_URL),
|
198 |
|
'logout_redirect': json.dumps(uisettings.LOGOUT_REDIRECT),
|
199 |
|
'login_redirect': json.dumps(uisettings.LOGIN_URL),
|
200 |
|
'glance_api_url': json.dumps(uisettings.GLANCE_URL),
|
201 |
|
'translate_uuids': json.dumps(True),
|
202 |
|
# update interval settings
|
203 |
|
'update_interval': UPDATE_INTERVAL,
|
204 |
|
'update_interval_increase': UPDATE_INTERVAL_INCREASE,
|
205 |
|
'update_interval_increase_after_calls':
|
206 |
|
UPDATE_INTERVAL_INCREASE_AFTER_CALLS_COUNT,
|
207 |
|
'update_interval_fast': UPDATE_INTERVAL_FAST,
|
208 |
|
'update_interval_max': UPDATE_INTERVAL_MAX,
|
209 |
|
'changes_since_alignment': CHANGES_SINCE_ALIGNMENT,
|
210 |
|
'image_icons': IMAGE_ICONS,
|
211 |
|
'auth_cookie_name': AUTH_COOKIE_NAME,
|
212 |
|
'auth_skip_redirects': json.dumps(AUTH_SKIP_REDIRECTS),
|
213 |
|
'suggested_flavors': json.dumps(SUGGESTED_FLAVORS),
|
214 |
|
'suggested_roles': json.dumps(SUGGESTED_ROLES),
|
215 |
|
'vm_image_common_metadata': json.dumps(VM_IMAGE_COMMON_METADATA),
|
216 |
|
'synnefo_version': SYNNEFO_JS_LIB_VERSION,
|
217 |
|
'delay_on_blur': json.dumps(DELAY_ON_BLUR),
|
218 |
|
'update_hidden_views': json.dumps(UPDATE_HIDDEN_VIEWS),
|
219 |
|
'handle_window_exceptions': json.dumps(HANDLE_WINDOW_EXCEPTIONS),
|
220 |
|
'skip_timeouts': json.dumps(SKIP_TIMEOUTS),
|
221 |
|
'vm_name_template': json.dumps(VM_NAME_TEMPLATE),
|
222 |
|
'flavors_disk_templates_info':
|
223 |
|
json.dumps(FLAVORS_DISK_TEMPLATES_INFO),
|
224 |
|
'support_ssh_os_list': json.dumps(SUPPORT_SSH_OS_LIST),
|
225 |
|
'unknown_os': json.dumps(UNKNOWN_OS),
|
226 |
|
'os_created_users': json.dumps(OS_CREATED_USERS),
|
227 |
|
'userdata_keys_limit': json.dumps(MAX_SSH_KEYS_PER_USER),
|
228 |
|
'use_glance': json.dumps(ENABLE_GLANCE),
|
229 |
|
'system_images_owners': json.dumps(SYSTEM_IMAGES_OWNERS),
|
230 |
|
'custom_image_help_url': CUSTOM_IMAGE_HELP_URL,
|
231 |
|
'image_deleted_title': json.dumps(IMAGE_DELETED_TITLE),
|
232 |
|
'image_deleted_size_title': json.dumps(IMAGE_DELETED_SIZE_TITLE),
|
233 |
|
'network_suggested_subnets': json.dumps(NETWORK_SUBNETS),
|
234 |
|
'network_available_types': json.dumps(NETWORK_TYPES),
|
235 |
|
'network_allow_duplicate_vm_nics':
|
236 |
|
json.dumps(NETWORK_DUPLICATE_NICS),
|
237 |
|
'network_strict_destroy': json.dumps(NETWORK_STRICT_DESTROY),
|
238 |
|
'network_allow_multiple_destroy':
|
239 |
|
json.dumps(NETWORK_ALLOW_MULTIPLE_DESTROY),
|
240 |
|
'automatic_network_range_format':
|
241 |
|
json.dumps(AUTOMATIC_NETWORK_RANGE_FORMAT),
|
242 |
|
'grouped_public_network_name':
|
243 |
|
json.dumps(GROUPED_PUBLIC_NETWORK_NAME),
|
244 |
|
'group_public_networks': json.dumps(GROUP_PUBLIC_NETWORKS),
|
245 |
|
'private_networks_nic_hotplug':
|
246 |
|
json.dumps(PRIVATE_NETWORKS_NIC_HOTPLUG),
|
247 |
|
'diagnostics_update_interval':
|
248 |
|
json.dumps(DIAGNOSTICS_UPDATE_INTERVAL),
|
249 |
|
'vm_hostname_format': json.dumps(VM_HOSTNAME_FORMAT)
|
250 |
|
}
|
|
185 |
context = {
|
|
186 |
'timeout': TIMEOUT,
|
|
187 |
'project': '+nefo',
|
|
188 |
'request': request,
|
|
189 |
'current_lang': get_language() or 'en',
|
|
190 |
'compute_api_url': json.dumps(uisettings.COMPUTE_URL),
|
|
191 |
'user_catalog_url': json.dumps(uisettings.USER_CATALOG_URL),
|
|
192 |
'feedback_post_url': json.dumps(uisettings.FEEDBACK_URL),
|
|
193 |
'accounts_api_url': json.dumps(uisettings.ACCOUNT_URL),
|
|
194 |
'logout_redirect': json.dumps(uisettings.LOGOUT_REDIRECT),
|
|
195 |
'login_redirect': json.dumps(uisettings.LOGIN_URL),
|
|
196 |
'glance_api_url': json.dumps(uisettings.GLANCE_URL),
|
|
197 |
'translate_uuids': json.dumps(True),
|
|
198 |
# update interval settings
|
|
199 |
'update_interval': UPDATE_INTERVAL,
|
|
200 |
'update_interval_increase': UPDATE_INTERVAL_INCREASE,
|
|
201 |
'update_interval_increase_after_calls':
|
|
202 |
UPDATE_INTERVAL_INCREASE_AFTER_CALLS_COUNT,
|
|
203 |
'update_interval_fast': UPDATE_INTERVAL_FAST,
|
|
204 |
'update_interval_max': UPDATE_INTERVAL_MAX,
|
|
205 |
'changes_since_alignment': CHANGES_SINCE_ALIGNMENT,
|
|
206 |
'image_icons': IMAGE_ICONS,
|
|
207 |
'auth_cookie_name': AUTH_COOKIE_NAME,
|
|
208 |
'auth_skip_redirects': json.dumps(AUTH_SKIP_REDIRECTS),
|
|
209 |
'suggested_flavors': json.dumps(SUGGESTED_FLAVORS),
|
|
210 |
'suggested_roles': json.dumps(SUGGESTED_ROLES),
|
|
211 |
'vm_image_common_metadata': json.dumps(VM_IMAGE_COMMON_METADATA),
|
|
212 |
'synnefo_version': SYNNEFO_JS_LIB_VERSION,
|
|
213 |
'delay_on_blur': json.dumps(DELAY_ON_BLUR),
|
|
214 |
'update_hidden_views': json.dumps(UPDATE_HIDDEN_VIEWS),
|
|
215 |
'handle_window_exceptions': json.dumps(HANDLE_WINDOW_EXCEPTIONS),
|
|
216 |
'skip_timeouts': json.dumps(SKIP_TIMEOUTS),
|
|
217 |
'vm_name_template': json.dumps(VM_NAME_TEMPLATE),
|
|
218 |
'flavors_disk_templates_info': json.dumps(FLAVORS_DISK_TEMPLATES_INFO),
|
|
219 |
'support_ssh_os_list': json.dumps(SUPPORT_SSH_OS_LIST),
|
|
220 |
'unknown_os': json.dumps(UNKNOWN_OS),
|
|
221 |
'os_created_users': json.dumps(OS_CREATED_USERS),
|
|
222 |
'userdata_keys_limit': json.dumps(MAX_SSH_KEYS_PER_USER),
|
|
223 |
'use_glance': json.dumps(ENABLE_GLANCE),
|
|
224 |
'system_images_owners': json.dumps(SYSTEM_IMAGES_OWNERS),
|
|
225 |
'custom_image_help_url': CUSTOM_IMAGE_HELP_URL,
|
|
226 |
'image_deleted_title': json.dumps(IMAGE_DELETED_TITLE),
|
|
227 |
'image_deleted_size_title': json.dumps(IMAGE_DELETED_SIZE_TITLE),
|
|
228 |
'network_suggested_subnets': json.dumps(NETWORK_SUBNETS),
|
|
229 |
'network_available_types': json.dumps(NETWORK_TYPES),
|
|
230 |
'network_allow_duplicate_vm_nics': json.dumps(NETWORK_DUPLICATE_NICS),
|
|
231 |
'network_strict_destroy': json.dumps(NETWORK_STRICT_DESTROY),
|
|
232 |
'network_allow_multiple_destroy':
|
|
233 |
json.dumps(NETWORK_ALLOW_MULTIPLE_DESTROY),
|
|
234 |
'automatic_network_range_format':
|
|
235 |
json.dumps(AUTOMATIC_NETWORK_RANGE_FORMAT),
|
|
236 |
'grouped_public_network_name': json.dumps(GROUPED_PUBLIC_NETWORK_NAME),
|
|
237 |
'group_public_networks': json.dumps(GROUP_PUBLIC_NETWORKS),
|
|
238 |
'private_networks_nic_hotplug':
|
|
239 |
json.dumps(PRIVATE_NETWORKS_NIC_HOTPLUG),
|
|
240 |
'diagnostics_update_interval': json.dumps(DIAGNOSTICS_UPDATE_INTERVAL),
|
|
241 |
'vm_hostname_format': json.dumps(VM_HOSTNAME_FORMAT)
|
|
242 |
}
|
251 |
243 |
return template('home', request, context)
|
252 |
244 |
|
|
245 |
|
253 |
246 |
def machines_console(request):
|
254 |
247 |
host, port, password = ('', '', '')
|
255 |
248 |
host = request.GET.get('host', '')
|
... | ... | |
259 |
252 |
host_ip = request.GET.get('host_ip', '')
|
260 |
253 |
host_ip_v6 = request.GET.get('host_ip_v6', '')
|
261 |
254 |
context = {'host': host, 'port': port, 'password': password,
|
262 |
|
'machine': machine, 'host_ip': host_ip, 'host_ip_v6': host_ip_v6}
|
|
255 |
'machine': machine, 'host_ip': host_ip,
|
|
256 |
'host_ip_v6': host_ip_v6}
|
263 |
257 |
return template('machines_console', request, context)
|
264 |
258 |
|
265 |
259 |
|
... | ... | |
278 |
272 |
<a target="_blank"
|
279 |
273 |
href="http://en.wikipedia.org/wiki/Remote_Desktop_Services">
|
280 |
274 |
Remote Desktop Service</a>.
|
281 |
|
To do so, open the following file with an appropriate remote desktop client.""")
|
|
275 |
To do so, open the following file with an appropriate \
|
|
276 |
remote desktop client.""")
|
282 |
277 |
CONNECT_LINUX_WINDOWS_SUBMESSAGE = \
|
283 |
278 |
_("""If you don't have a Remote Desktop client already installed,
|
284 |
279 |
we suggest the use of <a target="_blank"
|
... | ... | |
389 |
384 |
'ip_address': ip_address,
|
390 |
385 |
'hostname': hostname,
|
391 |
386 |
'user': username
|
392 |
|
}
|
|
387 |
}
|
393 |
388 |
|
394 |
389 |
rdp_context = {
|
395 |
390 |
'username': username,
|
... | ... | |
454 |
449 |
mimetype='application/json') # no windows, no rdp
|
455 |
450 |
|
456 |
451 |
return response
|
457 |
|
|