Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / ui / views.py @ f019f93d

History | View | Annotate | Download (18.4 kB)

1 b4b82ec4 Giorgos Korfiatis
# Copyright 2011, 2012, 2013 GRNET S.A. All rights reserved.
2 8950a78f Christodoulos Psaltis
#
3 a5bc3755 Vangelis Koukis
# Redistribution and use in source and binary forms, with or
4 a5bc3755 Vangelis Koukis
# without modification, are permitted provided that the following
5 a5bc3755 Vangelis Koukis
# conditions are met:
6 8950a78f Christodoulos Psaltis
#
7 a5bc3755 Vangelis Koukis
#   1. Redistributions of source code must retain the above
8 a5bc3755 Vangelis Koukis
#      copyright notice, this list of conditions and the following
9 a5bc3755 Vangelis Koukis
#      disclaimer.
10 8950a78f Christodoulos Psaltis
#
11 a5bc3755 Vangelis Koukis
#   2. Redistributions in binary form must reproduce the above
12 a5bc3755 Vangelis Koukis
#      copyright notice, this list of conditions and the following
13 a5bc3755 Vangelis Koukis
#      disclaimer in the documentation and/or other materials
14 a5bc3755 Vangelis Koukis
#      provided with the distribution.
15 8950a78f Christodoulos Psaltis
#
16 a5bc3755 Vangelis Koukis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 a5bc3755 Vangelis Koukis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 a5bc3755 Vangelis Koukis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 a5bc3755 Vangelis Koukis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 a5bc3755 Vangelis Koukis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 a5bc3755 Vangelis Koukis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 a5bc3755 Vangelis Koukis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 a5bc3755 Vangelis Koukis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 a5bc3755 Vangelis Koukis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 a5bc3755 Vangelis Koukis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 a5bc3755 Vangelis Koukis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 a5bc3755 Vangelis Koukis
# POSSIBILITY OF SUCH DAMAGE.
28 8950a78f Christodoulos Psaltis
#
29 a5bc3755 Vangelis Koukis
# The views and conclusions contained in the software and
30 a5bc3755 Vangelis Koukis
# documentation are those of the authors and should not be
31 a5bc3755 Vangelis Koukis
# interpreted as representing official policies, either expressed
32 a5bc3755 Vangelis Koukis
# or implied, of GRNET S.A.
33 8950a78f Christodoulos Psaltis
#
34 258235f4 Kostas Papadimitriou
35 edda4d30 Markos Gogoulos
import os
36 258235f4 Kostas Papadimitriou
37 abf90954 Markos Gogoulos
from django.conf import settings
38 edda4d30 Markos Gogoulos
from django.utils.translation import gettext_lazy as _
39 479c3051 Ilias Tsitsimpis
from django.template import loader
40 cc7c5902 Dimitris Moraitis
from django.http import HttpResponse
41 ec06b07c Dimitris Moraitis
from django.utils.translation import get_language
42 9c901aec Markos Gogoulos
from django.utils import simplejson as json
43 734107ef Kostas Papadimitriou
from synnefo_branding.utils import render_to_string
44 b687587e Kostas Papadimitriou
from django.core.urlresolvers import reverse
45 0d0466bf Kostas Papadimitriou
from django.template import RequestContext
46 31f9a55b Kostas Papadimitriou
47 07d104d8 Kostas Papadimitriou
from synnefo.util.version import get_component_version
48 7970aa87 Kostas Papadimitriou
49 27738c43 Kostas Papadimitriou
from synnefo.ui import settings as uisettings
50 02f0cd19 Kostas Papadimitriou
51 07d104d8 Kostas Papadimitriou
SYNNEFO_JS_LIB_VERSION = get_component_version('app')
52 30b6f316 Kostas Papadimitriou
53 66be390b Kostas Papadimitriou
# UI preferences settings
54 66be390b Kostas Papadimitriou
TIMEOUT = getattr(settings, "TIMEOUT", 10000)
55 1cc6e94f Kostas Papadimitriou
UPDATE_INTERVAL = getattr(settings, "UI_UPDATE_INTERVAL", 5000)
56 6de7fde5 Kostas Papadimitriou
CHANGES_SINCE_ALIGNMENT = getattr(settings, "UI_CHANGES_SINCE_ALIGNMENT", 0)
57 e3ff6830 Georgios D. Tsoukalas
UPDATE_INTERVAL_INCREASE = getattr(settings, "UI_UPDATE_INTERVAL_INCREASE",
58 e3ff6830 Georgios D. Tsoukalas
                                   500)
59 479c3051 Ilias Tsitsimpis
UPDATE_INTERVAL_INCREASE_AFTER_CALLS_COUNT = \
60 479c3051 Ilias Tsitsimpis
    getattr(settings, "UI_UPDATE_INTERVAL_INCREASE_AFTER_CALLS_COUNT", 3)
61 1cc6e94f Kostas Papadimitriou
UPDATE_INTERVAL_FAST = getattr(settings, "UI_UPDATE_INTERVAL_FAST", 2500)
62 1cc6e94f Kostas Papadimitriou
UPDATE_INTERVAL_MAX = getattr(settings, "UI_UPDATE_INTERVAL_MAX", 10000)
63 30b6f316 Kostas Papadimitriou
64 66be390b Kostas Papadimitriou
# predefined values settings
65 479c3051 Ilias Tsitsimpis
VM_IMAGE_COMMON_METADATA = \
66 479c3051 Ilias Tsitsimpis
    getattr(settings, "UI_VM_IMAGE_COMMON_METADATA", ["OS", "users"])
67 66be390b Kostas Papadimitriou
SUGGESTED_FLAVORS_DEFAULT = {}
68 140d08d0 Kostas Papadimitriou
SUGGESTED_FLAVORS = getattr(settings, "VM_CREATE_SUGGESTED_FLAVORS",
69 140d08d0 Kostas Papadimitriou
                            SUGGESTED_FLAVORS_DEFAULT)
70 140d08d0 Kostas Papadimitriou
SUGGESTED_ROLES_DEFAULT = ["Database server", "File server", "Mail server",
71 140d08d0 Kostas Papadimitriou
                           "Web server", "Proxy"]
72 140d08d0 Kostas Papadimitriou
SUGGESTED_ROLES = getattr(settings, "VM_CREATE_SUGGESTED_ROLES",
73 140d08d0 Kostas Papadimitriou
                          SUGGESTED_ROLES_DEFAULT)
74 30b6f316 Kostas Papadimitriou
IMAGE_ICONS = settings.IMAGE_ICONS
75 479c3051 Ilias Tsitsimpis
IMAGE_DELETED_TITLE = \
76 479c3051 Ilias Tsitsimpis
    getattr(settings, 'UI_IMAGE_DELETED_TITLE', '(deleted)')
77 479c3051 Ilias Tsitsimpis
IMAGE_DELETED_SIZE_TITLE = \
78 479c3051 Ilias Tsitsimpis
    getattr(settings, 'UI_IMAGE_DELETED_SIZE_TITLE', '(none)')
79 66be390b Kostas Papadimitriou
80 556dcd88 Kostas Papadimitriou
SUPPORT_SSH_OS_LIST = getattr(settings, "UI_SUPPORT_SSH_OS_LIST",)
81 556dcd88 Kostas Papadimitriou
OS_CREATED_USERS = getattr(settings, "UI_OS_DEFAULT_USER_MAP")
82 8fa1cbc9 Kostas Papadimitriou
UNKNOWN_OS = getattr(settings, "UI_UNKNOWN_OS", "unknown")
83 e3ff6830 Georgios D. Tsoukalas
84 85f1cd1e Kostas Papadimitriou
AUTH_COOKIE_NAME = getattr(settings, "UI_AUTH_COOKIE_NAME", 'synnefo_user')
85 30b6f316 Kostas Papadimitriou
86 acb284f7 Kostas Papadimitriou
# never change window location. Helpful in development environments
87 acb284f7 Kostas Papadimitriou
AUTH_SKIP_REDIRECTS = getattr(settings, "UI_AUTH_SKIP_REDIRECTS", False)
88 acb284f7 Kostas Papadimitriou
89 66be390b Kostas Papadimitriou
# UI behaviour settings
90 66be390b Kostas Papadimitriou
DELAY_ON_BLUR = getattr(settings, "UI_DELAY_ON_BLUR", True)
91 66be390b Kostas Papadimitriou
UPDATE_HIDDEN_VIEWS = getattr(settings, "UI_UPDATE_HIDDEN_VIEWS", False)
92 479c3051 Ilias Tsitsimpis
HANDLE_WINDOW_EXCEPTIONS = \
93 479c3051 Ilias Tsitsimpis
    getattr(settings, "UI_HANDLE_WINDOW_EXCEPTIONS", True)
94 66be390b Kostas Papadimitriou
SKIP_TIMEOUTS = getattr(settings, "UI_SKIP_TIMEOUTS", 1)
95 30b6f316 Kostas Papadimitriou
96 258235f4 Kostas Papadimitriou
# Additional settings
97 258235f4 Kostas Papadimitriou
VM_NAME_TEMPLATE = getattr(settings, "VM_CREATE_NAME_TPL", "My {0} server")
98 3796f345 Kostas Papadimitriou
VM_HOSTNAME_FORMAT = getattr(settings, "UI_VM_HOSTNAME_FORMAT",
99 f019f93d Ilias Tsitsimpis
                             'snf-%(id)s.vm.synnefo.org')
100 f5e97e7f Kostas Papadimitriou
101 f5e97e7f Kostas Papadimitriou
if isinstance(VM_HOSTNAME_FORMAT, basestring):
102 479c3051 Ilias Tsitsimpis
    VM_HOSTNAME_FORMAT = VM_HOSTNAME_FORMAT % {'id': '{0}'}
103 f5e97e7f Kostas Papadimitriou
104 258235f4 Kostas Papadimitriou
MAX_SSH_KEYS_PER_USER = getattr(settings, "USERDATA_MAX_SSH_KEYS_PER_USER")
105 479c3051 Ilias Tsitsimpis
FLAVORS_DISK_TEMPLATES_INFO = \
106 479c3051 Ilias Tsitsimpis
    getattr(settings, "UI_FLAVORS_DISK_TEMPLATES_INFO", {})
107 1faf0b9c Kostas Papadimitriou
SYSTEM_IMAGES_OWNERS = getattr(settings, "UI_SYSTEM_IMAGES_OWNERS", {})
108 28958b8e Kostas Papadimitriou
CUSTOM_IMAGE_HELP_URL = getattr(settings, "UI_CUSTOM_IMAGE_HELP_URL", None)
109 30b6f316 Kostas Papadimitriou
110 7970aa87 Kostas Papadimitriou
# MEDIA PATHS
111 479c3051 Ilias Tsitsimpis
UI_MEDIA_URL = \
112 479c3051 Ilias Tsitsimpis
    getattr(settings, "UI_MEDIA_URL",
113 479c3051 Ilias Tsitsimpis
            "%ssnf-%s/" % (settings.MEDIA_URL, SYNNEFO_JS_LIB_VERSION))
114 479c3051 Ilias Tsitsimpis
UI_SYNNEFO_IMAGES_URL = \
115 479c3051 Ilias Tsitsimpis
    getattr(settings,
116 479c3051 Ilias Tsitsimpis
            "UI_SYNNEFO_IMAGES_URL", UI_MEDIA_URL + "images/")
117 479c3051 Ilias Tsitsimpis
UI_SYNNEFO_CSS_URL = \
118 479c3051 Ilias Tsitsimpis
    getattr(settings,
119 479c3051 Ilias Tsitsimpis
            "UI_SYNNEFO_CSS_URL", UI_MEDIA_URL + "css/")
120 479c3051 Ilias Tsitsimpis
UI_SYNNEFO_JS_URL = \
121 479c3051 Ilias Tsitsimpis
    getattr(settings,
122 479c3051 Ilias Tsitsimpis
            "UI_SYNNEFO_JS_URL", UI_MEDIA_URL + "js/")
123 479c3051 Ilias Tsitsimpis
UI_SYNNEFO_JS_LIB_URL = \
124 479c3051 Ilias Tsitsimpis
    getattr(settings,
125 479c3051 Ilias Tsitsimpis
            "UI_SYNNEFO_JS_LIB_URL", UI_SYNNEFO_JS_URL + "lib/")
126 479c3051 Ilias Tsitsimpis
UI_SYNNEFO_JS_WEB_URL = \
127 479c3051 Ilias Tsitsimpis
    getattr(settings, "UI_SYNNEFO_JS_WEB_URL", UI_SYNNEFO_JS_URL + "ui/web/")
128 c62c6b91 Kostas Papadimitriou
129 30b6f316 Kostas Papadimitriou
# extensions
130 30b6f316 Kostas Papadimitriou
ENABLE_GLANCE = getattr(settings, 'UI_ENABLE_GLANCE', True)
131 e3ff6830 Georgios D. Tsoukalas
132 479c3051 Ilias Tsitsimpis
DIAGNOSTICS_UPDATE_INTERVAL = \
133 479c3051 Ilias Tsitsimpis
    getattr(settings, 'UI_DIAGNOSTICS_UPDATE_INTERVAL', 2000)
134 d965e6dc Kostas Papadimitriou
135 126a01f2 Kostas Papadimitriou
# network settings
136 479c3051 Ilias Tsitsimpis
DEFAULT_NETWORK_TYPES = {'MAC_FILTERED': 'mac-filtering',
137 479c3051 Ilias Tsitsimpis
                         'PHYSICAL_VLAN': 'physical-vlan'}
138 479c3051 Ilias Tsitsimpis
NETWORK_TYPES = \
139 479c3051 Ilias Tsitsimpis
    getattr(settings,
140 479c3051 Ilias Tsitsimpis
            'UI_NETWORK_AVAILABLE_NETWORK_TYPES', DEFAULT_NETWORK_TYPES)
141 126a01f2 Kostas Papadimitriou
DEFAULT_NETWORK_SUBNETS = ['10.0.0.0/24', '192.168.1.1/24']
142 479c3051 Ilias Tsitsimpis
NETWORK_SUBNETS = \
143 479c3051 Ilias Tsitsimpis
    getattr(settings,
144 479c3051 Ilias Tsitsimpis
            'UI_NETWORK_AVAILABLE_SUBNETS', DEFAULT_NETWORK_SUBNETS)
145 479c3051 Ilias Tsitsimpis
NETWORK_DUPLICATE_NICS = \
146 479c3051 Ilias Tsitsimpis
    getattr(settings,
147 479c3051 Ilias Tsitsimpis
            'UI_NETWORK_ALLOW_DUPLICATE_VM_NICS', False)
148 479c3051 Ilias Tsitsimpis
NETWORK_STRICT_DESTROY = \
149 479c3051 Ilias Tsitsimpis
    getattr(settings,
150 479c3051 Ilias Tsitsimpis
            'UI_NETWORK_STRICT_DESTROY', False)
151 5b90c56d Kostas Papadimitriou
PRIVATE_NETWORKS_NIC_HOTPLUG = \
152 5b90c56d Kostas Papadimitriou
    getattr(settings,
153 5b90c56d Kostas Papadimitriou
            'UI_PRIVATE_NETWORK_NIC_HOTPLUG', False)
154 479c3051 Ilias Tsitsimpis
NETWORK_ALLOW_MULTIPLE_DESTROY = \
155 479c3051 Ilias Tsitsimpis
    getattr(settings,
156 479c3051 Ilias Tsitsimpis
            'UI_NETWORK_ALLOW_MULTIPLE_DESTROY', False)
157 29cf98c9 Kostas Papadimitriou
AUTOMATIC_NETWORK_RANGE_FORMAT = getattr(settings,
158 29cf98c9 Kostas Papadimitriou
                                         'UI_AUTOMATIC_NETWORK_RANGE_FORMAT',
159 7f16b9b1 Kostas Papadimitriou
                                         "192.168.%d.0/24").replace("%d",
160 7f16b9b1 Kostas Papadimitriou
                                                                    "{0}")
161 9555268a Kostas Papadimitriou
GROUP_PUBLIC_NETWORKS = getattr(settings, 'UI_GROUP_PUBLIC_NETWORKS', True)
162 479c3051 Ilias Tsitsimpis
GROUPED_PUBLIC_NETWORK_NAME = \
163 479c3051 Ilias Tsitsimpis
    getattr(settings, 'UI_GROUPED_PUBLIC_NETWORK_NAME', 'Internet')
164 126a01f2 Kostas Papadimitriou
165 8f53cfa3 Kostas Papadimitriou
166 0d0466bf Kostas Papadimitriou
def template(name, request, context):
167 e646ebe5 Dimitris Moraitis
    template_path = os.path.join(os.path.dirname(__file__), "templates/")
168 b303ba05 Christodoulos Psaltis
    current_template = template_path + name + '.html'
169 b303ba05 Christodoulos Psaltis
    t = loader.get_template(current_template)
170 7970aa87 Kostas Papadimitriou
    media_context = {
171 f019f93d Ilias Tsitsimpis
        'UI_MEDIA_URL': UI_MEDIA_URL,
172 f019f93d Ilias Tsitsimpis
        'SYNNEFO_JS_URL': UI_SYNNEFO_JS_URL,
173 f019f93d Ilias Tsitsimpis
        'SYNNEFO_JS_LIB_URL': UI_SYNNEFO_JS_LIB_URL,
174 f019f93d Ilias Tsitsimpis
        'SYNNEFO_JS_WEB_URL': UI_SYNNEFO_JS_WEB_URL,
175 f019f93d Ilias Tsitsimpis
        'SYNNEFO_IMAGES_URL': UI_SYNNEFO_IMAGES_URL,
176 f019f93d Ilias Tsitsimpis
        'SYNNEFO_CSS_URL': UI_SYNNEFO_CSS_URL,
177 f019f93d Ilias Tsitsimpis
        'SYNNEFO_JS_LIB_VERSION': SYNNEFO_JS_LIB_VERSION,
178 f019f93d Ilias Tsitsimpis
        'DEBUG': settings.DEBUG
179 7970aa87 Kostas Papadimitriou
    }
180 7970aa87 Kostas Papadimitriou
    context.update(media_context)
181 0d0466bf Kostas Papadimitriou
    return HttpResponse(t.render(RequestContext(request, context)))
182 cc7c5902 Dimitris Moraitis
183 479c3051 Ilias Tsitsimpis
184 cc7c5902 Dimitris Moraitis
def home(request):
185 f019f93d Ilias Tsitsimpis
    context = {
186 f019f93d Ilias Tsitsimpis
        'timeout': TIMEOUT,
187 f019f93d Ilias Tsitsimpis
        'project': '+nefo',
188 f019f93d Ilias Tsitsimpis
        'request': request,
189 f019f93d Ilias Tsitsimpis
        'current_lang': get_language() or 'en',
190 f019f93d Ilias Tsitsimpis
        'compute_api_url': json.dumps(uisettings.COMPUTE_URL),
191 f019f93d Ilias Tsitsimpis
        'user_catalog_url': json.dumps(uisettings.USER_CATALOG_URL),
192 f019f93d Ilias Tsitsimpis
        'feedback_post_url': json.dumps(uisettings.FEEDBACK_URL),
193 f019f93d Ilias Tsitsimpis
        'accounts_api_url': json.dumps(uisettings.ACCOUNT_URL),
194 f019f93d Ilias Tsitsimpis
        'logout_redirect': json.dumps(uisettings.LOGOUT_REDIRECT),
195 f019f93d Ilias Tsitsimpis
        'login_redirect': json.dumps(uisettings.LOGIN_URL),
196 f019f93d Ilias Tsitsimpis
        'glance_api_url': json.dumps(uisettings.GLANCE_URL),
197 f019f93d Ilias Tsitsimpis
        'translate_uuids': json.dumps(True),
198 f019f93d Ilias Tsitsimpis
        # update interval settings
199 f019f93d Ilias Tsitsimpis
        'update_interval': UPDATE_INTERVAL,
200 f019f93d Ilias Tsitsimpis
        'update_interval_increase': UPDATE_INTERVAL_INCREASE,
201 f019f93d Ilias Tsitsimpis
        'update_interval_increase_after_calls':
202 f019f93d Ilias Tsitsimpis
        UPDATE_INTERVAL_INCREASE_AFTER_CALLS_COUNT,
203 f019f93d Ilias Tsitsimpis
        'update_interval_fast': UPDATE_INTERVAL_FAST,
204 f019f93d Ilias Tsitsimpis
        'update_interval_max': UPDATE_INTERVAL_MAX,
205 f019f93d Ilias Tsitsimpis
        'changes_since_alignment': CHANGES_SINCE_ALIGNMENT,
206 f019f93d Ilias Tsitsimpis
        'image_icons': IMAGE_ICONS,
207 f019f93d Ilias Tsitsimpis
        'auth_cookie_name': AUTH_COOKIE_NAME,
208 f019f93d Ilias Tsitsimpis
        'auth_skip_redirects': json.dumps(AUTH_SKIP_REDIRECTS),
209 f019f93d Ilias Tsitsimpis
        'suggested_flavors': json.dumps(SUGGESTED_FLAVORS),
210 f019f93d Ilias Tsitsimpis
        'suggested_roles': json.dumps(SUGGESTED_ROLES),
211 f019f93d Ilias Tsitsimpis
        'vm_image_common_metadata': json.dumps(VM_IMAGE_COMMON_METADATA),
212 f019f93d Ilias Tsitsimpis
        'synnefo_version': SYNNEFO_JS_LIB_VERSION,
213 f019f93d Ilias Tsitsimpis
        'delay_on_blur': json.dumps(DELAY_ON_BLUR),
214 f019f93d Ilias Tsitsimpis
        'update_hidden_views': json.dumps(UPDATE_HIDDEN_VIEWS),
215 f019f93d Ilias Tsitsimpis
        'handle_window_exceptions': json.dumps(HANDLE_WINDOW_EXCEPTIONS),
216 f019f93d Ilias Tsitsimpis
        'skip_timeouts': json.dumps(SKIP_TIMEOUTS),
217 f019f93d Ilias Tsitsimpis
        'vm_name_template': json.dumps(VM_NAME_TEMPLATE),
218 f019f93d Ilias Tsitsimpis
        'flavors_disk_templates_info': json.dumps(FLAVORS_DISK_TEMPLATES_INFO),
219 f019f93d Ilias Tsitsimpis
        'support_ssh_os_list': json.dumps(SUPPORT_SSH_OS_LIST),
220 f019f93d Ilias Tsitsimpis
        'unknown_os': json.dumps(UNKNOWN_OS),
221 f019f93d Ilias Tsitsimpis
        'os_created_users': json.dumps(OS_CREATED_USERS),
222 f019f93d Ilias Tsitsimpis
        'userdata_keys_limit': json.dumps(MAX_SSH_KEYS_PER_USER),
223 f019f93d Ilias Tsitsimpis
        'use_glance': json.dumps(ENABLE_GLANCE),
224 f019f93d Ilias Tsitsimpis
        'system_images_owners': json.dumps(SYSTEM_IMAGES_OWNERS),
225 f019f93d Ilias Tsitsimpis
        'custom_image_help_url': CUSTOM_IMAGE_HELP_URL,
226 f019f93d Ilias Tsitsimpis
        'image_deleted_title': json.dumps(IMAGE_DELETED_TITLE),
227 f019f93d Ilias Tsitsimpis
        'image_deleted_size_title': json.dumps(IMAGE_DELETED_SIZE_TITLE),
228 f019f93d Ilias Tsitsimpis
        'network_suggested_subnets': json.dumps(NETWORK_SUBNETS),
229 f019f93d Ilias Tsitsimpis
        'network_available_types': json.dumps(NETWORK_TYPES),
230 f019f93d Ilias Tsitsimpis
        'network_allow_duplicate_vm_nics': json.dumps(NETWORK_DUPLICATE_NICS),
231 f019f93d Ilias Tsitsimpis
        'network_strict_destroy': json.dumps(NETWORK_STRICT_DESTROY),
232 f019f93d Ilias Tsitsimpis
        'network_allow_multiple_destroy':
233 f019f93d Ilias Tsitsimpis
        json.dumps(NETWORK_ALLOW_MULTIPLE_DESTROY),
234 f019f93d Ilias Tsitsimpis
        'automatic_network_range_format':
235 f019f93d Ilias Tsitsimpis
        json.dumps(AUTOMATIC_NETWORK_RANGE_FORMAT),
236 f019f93d Ilias Tsitsimpis
        'grouped_public_network_name': json.dumps(GROUPED_PUBLIC_NETWORK_NAME),
237 f019f93d Ilias Tsitsimpis
        'group_public_networks': json.dumps(GROUP_PUBLIC_NETWORKS),
238 f019f93d Ilias Tsitsimpis
        'private_networks_nic_hotplug':
239 f019f93d Ilias Tsitsimpis
        json.dumps(PRIVATE_NETWORKS_NIC_HOTPLUG),
240 f019f93d Ilias Tsitsimpis
        'diagnostics_update_interval': json.dumps(DIAGNOSTICS_UPDATE_INTERVAL),
241 f019f93d Ilias Tsitsimpis
        'vm_hostname_format': json.dumps(VM_HOSTNAME_FORMAT)
242 f019f93d Ilias Tsitsimpis
    }
243 0d0466bf Kostas Papadimitriou
    return template('home', request, context)
244 cc7c5902 Dimitris Moraitis
245 f019f93d Ilias Tsitsimpis
246 f533f224 Vangelis Koukis
def machines_console(request):
247 479c3051 Ilias Tsitsimpis
    host, port, password = ('', '', '')
248 479c3051 Ilias Tsitsimpis
    host = request.GET.get('host', '')
249 479c3051 Ilias Tsitsimpis
    port = request.GET.get('port', '')
250 479c3051 Ilias Tsitsimpis
    password = request.GET.get('password', '')
251 479c3051 Ilias Tsitsimpis
    machine = request.GET.get('machine', '')
252 479c3051 Ilias Tsitsimpis
    host_ip = request.GET.get('host_ip', '')
253 479c3051 Ilias Tsitsimpis
    host_ip_v6 = request.GET.get('host_ip_v6', '')
254 140d08d0 Kostas Papadimitriou
    context = {'host': host, 'port': port, 'password': password,
255 f019f93d Ilias Tsitsimpis
               'machine': machine, 'host_ip': host_ip,
256 f019f93d Ilias Tsitsimpis
               'host_ip_v6': host_ip_v6}
257 0d0466bf Kostas Papadimitriou
    return template('machines_console', request, context)
258 e646ebe5 Dimitris Moraitis
259 cbf7b384 Kostas Papadimitriou
260 8d08f18a Kostas Papadimitriou
def js_tests(request):
261 0d0466bf Kostas Papadimitriou
    return template('tests', request, {})
262 6f4c1371 Kostas Papadimitriou
263 479c3051 Ilias Tsitsimpis
264 479c3051 Ilias Tsitsimpis
CONNECT_LINUX_LINUX_MESSAGE = \
265 479c3051 Ilias Tsitsimpis
    _("""A direct connection to this machine can be established using the
266 479c3051 Ilias Tsitsimpis
<a target="_blank" href="http://en.wikipedia.org/wiki/Secure_Shell">
267 479c3051 Ilias Tsitsimpis
SSH Protocol</a>.
268 479c3051 Ilias Tsitsimpis
To do so open a terminal and type the following at the prompt to connect
269 479c3051 Ilias Tsitsimpis
to your machine:""")
270 479c3051 Ilias Tsitsimpis
CONNECT_LINUX_WINDOWS_MESSAGE = \
271 479c3051 Ilias Tsitsimpis
    _("""A direct connection to this machine can be established using
272 479c3051 Ilias Tsitsimpis
<a target="_blank"
273 479c3051 Ilias Tsitsimpis
href="http://en.wikipedia.org/wiki/Remote_Desktop_Services">
274 479c3051 Ilias Tsitsimpis
Remote Desktop Service</a>.
275 f019f93d Ilias Tsitsimpis
To do so, open the following file with an appropriate \
276 f019f93d Ilias Tsitsimpis
remote desktop client.""")
277 479c3051 Ilias Tsitsimpis
CONNECT_LINUX_WINDOWS_SUBMESSAGE = \
278 479c3051 Ilias Tsitsimpis
    _("""If you don't have a Remote Desktop client already installed,
279 ab3e9eb8 Kostas Papadimitriou
we suggest the use of <a target="_blank"
280 479c3051 Ilias Tsitsimpis
href=
281 479c3051 Ilias Tsitsimpis
"http://sourceforge.net/projects/tsclient/files/latest/download?source=files">
282 479c3051 Ilias Tsitsimpis
tsclient</a>.<br /><span class="important">IMPORTANT: It may take up to 15
283 479c3051 Ilias Tsitsimpis
minutes for your Windows VM to become available
284 99a005df Kostas Papadimitriou
after its creation.</span>""")
285 479c3051 Ilias Tsitsimpis
CONNECT_WINDOWS_LINUX_MESSAGE = \
286 479c3051 Ilias Tsitsimpis
    _("""A direct connection to this machine can be established using the
287 479c3051 Ilias Tsitsimpis
<a target="_blank"
288 bdf369a2 Kostas Papadimitriou
href="http://en.wikipedia.org/wiki/Secure_Shell">SSH Protocol</a>.
289 ae748a9d Kostas Papadimitriou
Open an ssh client such as PuTTY and type the following:""")
290 479c3051 Ilias Tsitsimpis
CONNECT_WINDOWS_LINUX_SUBMESSAGE = \
291 479c3051 Ilias Tsitsimpis
    _("""If you do not have an ssh client already installed,
292 479c3051 Ilias Tsitsimpis
<a target="_blank"
293 479c3051 Ilias Tsitsimpis
href="http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe">
294 479c3051 Ilias Tsitsimpis
Download PuTTY</a>""")
295 479c3051 Ilias Tsitsimpis
296 479c3051 Ilias Tsitsimpis
CONNECT_WINDOWS_WINDOWS_MESSAGE = \
297 479c3051 Ilias Tsitsimpis
    _("""A direct connection to this machine can be
298 17ab1a48 Vangelis Koukis
established using Remote Desktop. Click on the following link, and if asked
299 17ab1a48 Vangelis Koukis
open it using "Remote Desktop Connection".
300 479c3051 Ilias Tsitsimpis
<br /><span class="important">
301 479c3051 Ilias Tsitsimpis
IMPORTANT: It may take up to 15 minutes for your Windows VM to become available
302 3796f345 Kostas Papadimitriou
after its creation.</span>""")
303 479c3051 Ilias Tsitsimpis
CONNECT_WINDOWS_WINDOWS_SUBMESSAGE = \
304 479c3051 Ilias Tsitsimpis
    _("""Save this file to disk for future use.""")
305 bdf369a2 Kostas Papadimitriou
306 bdf369a2 Kostas Papadimitriou
# info/subinfo for all os combinations
307 bdf369a2 Kostas Papadimitriou
#
308 bdf369a2 Kostas Papadimitriou
# [0] info gets displayed on top of the message box
309 bdf369a2 Kostas Papadimitriou
# [1] subinfo gets displayed on the bottom as extra info
310 bdf369a2 Kostas Papadimitriou
# provided to the user when needed
311 65ecc5e4 Kostas Papadimitriou
CONNECT_PROMPT_MESSAGES = {
312 6f4c1371 Kostas Papadimitriou
    'linux': {
313 479c3051 Ilias Tsitsimpis
        'linux': [CONNECT_LINUX_LINUX_MESSAGE, ""],
314 479c3051 Ilias Tsitsimpis
        'windows': [CONNECT_LINUX_WINDOWS_MESSAGE,
315 479c3051 Ilias Tsitsimpis
                    CONNECT_LINUX_WINDOWS_SUBMESSAGE],
316 479c3051 Ilias Tsitsimpis
        'ssh_message': "ssh %(user)s@%(hostname)s"
317 3796f345 Kostas Papadimitriou
    },
318 6f4c1371 Kostas Papadimitriou
    'windows': {
319 479c3051 Ilias Tsitsimpis
        'linux': [CONNECT_WINDOWS_LINUX_MESSAGE,
320 479c3051 Ilias Tsitsimpis
                  CONNECT_WINDOWS_LINUX_SUBMESSAGE],
321 479c3051 Ilias Tsitsimpis
        'windows': [CONNECT_WINDOWS_WINDOWS_MESSAGE,
322 479c3051 Ilias Tsitsimpis
                    CONNECT_WINDOWS_WINDOWS_SUBMESSAGE],
323 479c3051 Ilias Tsitsimpis
        'ssh_message': "%(user)s@%(hostname)s"
324 3796f345 Kostas Papadimitriou
    },
325 3796f345 Kostas Papadimitriou
}
326 3796f345 Kostas Papadimitriou
327 479c3051 Ilias Tsitsimpis
APPEND_CONNECT_PROMPT_MESSAGES = \
328 479c3051 Ilias Tsitsimpis
    getattr(settings, 'UI_CONNECT_PROMPT_MESSAGES', {})
329 3796f345 Kostas Papadimitriou
for k, v in APPEND_CONNECT_PROMPT_MESSAGES.iteritems():
330 3796f345 Kostas Papadimitriou
    CONNECT_PROMPT_MESSAGES[k].update(v)
331 6f4c1371 Kostas Papadimitriou
332 65ecc5e4 Kostas Papadimitriou
# retrieve domain prefix from settings
333 140d08d0 Kostas Papadimitriou
DOMAIN_PREFIX = getattr(settings, 'MACHINE_DOMAIN_PREFIX', getattr(settings,
334 140d08d0 Kostas Papadimitriou
                        'BACKEND_PREFIX_ID', ""))
335 65ecc5e4 Kostas Papadimitriou
336 65ecc5e4 Kostas Papadimitriou
# domain template string
337 65ecc5e4 Kostas Papadimitriou
DOMAIN_TPL = "%s%%s" % DOMAIN_PREFIX
338 65ecc5e4 Kostas Papadimitriou
339 479c3051 Ilias Tsitsimpis
340 fd70c1db Markos Gogoulos
def machines_connect(request):
341 479c3051 Ilias Tsitsimpis
    ip_address = request.GET.get('ip_address', '')
342 479c3051 Ilias Tsitsimpis
    hostname = request.GET.get('hostname', '')
343 479c3051 Ilias Tsitsimpis
    operating_system = metadata_os = request.GET.get('os', '')
344 bdf369a2 Kostas Papadimitriou
    server_id = request.GET.get('srv', 0)
345 479c3051 Ilias Tsitsimpis
    host_os = request.GET.get('host_os', 'Linux').lower()
346 5bc1794f Kostas Papadimitriou
    username = request.GET.get('username', None)
347 65ecc5e4 Kostas Papadimitriou
    domain = request.GET.get("domain", DOMAIN_TPL % int(server_id))
348 6f4c1371 Kostas Papadimitriou
349 406bf0d9 Kostas Papadimitriou
    # guess host os
350 319091c7 Kostas Papadimitriou
    if host_os != "windows":
351 319091c7 Kostas Papadimitriou
        host_os = 'linux'
352 319091c7 Kostas Papadimitriou
353 406bf0d9 Kostas Papadimitriou
    # guess username
354 406bf0d9 Kostas Papadimitriou
    if not username:
355 406bf0d9 Kostas Papadimitriou
        username = "root"
356 406bf0d9 Kostas Papadimitriou
357 406bf0d9 Kostas Papadimitriou
        if metadata_os.lower() in ['ubuntu', 'kubuntu', 'fedora']:
358 406bf0d9 Kostas Papadimitriou
            username = "user"
359 406bf0d9 Kostas Papadimitriou
360 406bf0d9 Kostas Papadimitriou
        if metadata_os.lower() == "windows":
361 406bf0d9 Kostas Papadimitriou
            username = "Administrator"
362 406bf0d9 Kostas Papadimitriou
363 406bf0d9 Kostas Papadimitriou
    # operating system provides ssh access
364 406bf0d9 Kostas Papadimitriou
    ssh = False
365 6f4c1371 Kostas Papadimitriou
    if operating_system != "windows":
366 6f4c1371 Kostas Papadimitriou
        operating_system = "linux"
367 406bf0d9 Kostas Papadimitriou
        ssh = True
368 6f4c1371 Kostas Papadimitriou
369 bdf369a2 Kostas Papadimitriou
    # rdp param is set, the user requested rdp file
370 406bf0d9 Kostas Papadimitriou
    # check if we are on windows
371 406bf0d9 Kostas Papadimitriou
    if operating_system == 'windows' and request.GET.get("rdp", False):
372 9f6eb417 Kostas Papadimitriou
        extra_rdp_content = ''
373 406bf0d9 Kostas Papadimitriou
        # UI sent domain info (from vm metadata) use this
374 406bf0d9 Kostas Papadimitriou
        # otherwise use our default snf-<vm_id> domain
375 3796f345 Kostas Papadimitriou
        EXTRA_RDP_CONTENT = getattr(settings, 'UI_EXTRA_RDP_CONTENT', '')
376 3796f345 Kostas Papadimitriou
        if callable(EXTRA_RDP_CONTENT):
377 3796f345 Kostas Papadimitriou
            extra_rdp_content = EXTRA_RDP_CONTENT(server_id, ip_address,
378 3796f345 Kostas Papadimitriou
                                                  hostname, username)
379 3796f345 Kostas Papadimitriou
        else:
380 9f6eb417 Kostas Papadimitriou
            if EXTRA_RDP_CONTENT:
381 9f6eb417 Kostas Papadimitriou
                extra_rdp_content = EXTRA_RDP_CONTENT % \
382 9f6eb417 Kostas Papadimitriou
                    {
383 9f6eb417 Kostas Papadimitriou
                        'server_id': server_id,
384 9f6eb417 Kostas Papadimitriou
                        'ip_address': ip_address,
385 9f6eb417 Kostas Papadimitriou
                        'hostname': hostname,
386 9f6eb417 Kostas Papadimitriou
                        'user': username
387 f019f93d Ilias Tsitsimpis
                    }
388 3796f345 Kostas Papadimitriou
389 406bf0d9 Kostas Papadimitriou
        rdp_context = {
390 479c3051 Ilias Tsitsimpis
            'username': username,
391 479c3051 Ilias Tsitsimpis
            'domain': domain,
392 479c3051 Ilias Tsitsimpis
            'ip_address': ip_address,
393 479c3051 Ilias Tsitsimpis
            'hostname': hostname,
394 479c3051 Ilias Tsitsimpis
            'extra_content': extra_rdp_content
395 406bf0d9 Kostas Papadimitriou
        }
396 406bf0d9 Kostas Papadimitriou
397 406bf0d9 Kostas Papadimitriou
        rdp_file_data = render_to_string("synnefo-windows.rdp", rdp_context)
398 406bf0d9 Kostas Papadimitriou
        response = HttpResponse(rdp_file_data, mimetype='application/x-rdp')
399 bdf369a2 Kostas Papadimitriou
400 bdf369a2 Kostas Papadimitriou
        # proper filename, use server id and ip address
401 3796f345 Kostas Papadimitriou
        filename = "%d-%s.rdp" % (int(server_id), hostname)
402 bdf369a2 Kostas Papadimitriou
        response['Content-Disposition'] = 'attachment; filename=%s' % filename
403 fd70c1db Markos Gogoulos
    else:
404 3796f345 Kostas Papadimitriou
        ssh_message = CONNECT_PROMPT_MESSAGES['linux'].get('ssh_message')
405 3796f345 Kostas Papadimitriou
        if host_os == 'windows':
406 3796f345 Kostas Papadimitriou
            ssh_message = CONNECT_PROMPT_MESSAGES['windows'].get('ssh_message')
407 3796f345 Kostas Papadimitriou
        if callable(ssh_message):
408 3796f345 Kostas Papadimitriou
            link_title = ssh_message(server_id, ip_address, hostname, username)
409 3796f345 Kostas Papadimitriou
        else:
410 3796f345 Kostas Papadimitriou
            link_title = ssh_message % {
411 479c3051 Ilias Tsitsimpis
                'server_id': server_id,
412 479c3051 Ilias Tsitsimpis
                'ip_address': ip_address,
413 479c3051 Ilias Tsitsimpis
                'hostname': hostname,
414 479c3051 Ilias Tsitsimpis
                'user': username
415 479c3051 Ilias Tsitsimpis
            }
416 b687587e Kostas Papadimitriou
        if (operating_system != "windows"):
417 bdf369a2 Kostas Papadimitriou
            link_url = None
418 bdf369a2 Kostas Papadimitriou
419 3796f345 Kostas Papadimitriou
        else:
420 3796f345 Kostas Papadimitriou
            link_title = _("Remote desktop to %s") % ip_address
421 479c3051 Ilias Tsitsimpis
            link_url = \
422 479c3051 Ilias Tsitsimpis
                "%s?ip_address=%s&os=%s&rdp=1&srv=%d&username=%s&domain=%s" \
423 479c3051 Ilias Tsitsimpis
                "&hostname=%s" % (
424 3796f345 Kostas Papadimitriou
                    reverse("ui_machines_connect"), ip_address,
425 479c3051 Ilias Tsitsimpis
                    operating_system, int(server_id), username,
426 479c3051 Ilias Tsitsimpis
                    domain, hostname)
427 b687587e Kostas Papadimitriou
428 6f4c1371 Kostas Papadimitriou
        # try to find a specific message
429 6f4c1371 Kostas Papadimitriou
        try:
430 479c3051 Ilias Tsitsimpis
            connect_message = \
431 479c3051 Ilias Tsitsimpis
                CONNECT_PROMPT_MESSAGES[host_os][operating_system][0]
432 65ecc5e4 Kostas Papadimitriou
            subinfo = CONNECT_PROMPT_MESSAGES[host_os][operating_system][1]
433 6f4c1371 Kostas Papadimitriou
        except KeyError:
434 479c3051 Ilias Tsitsimpis
            connect_message = \
435 479c3051 Ilias Tsitsimpis
                _("You are trying to connect from a %s "
436 479c3051 Ilias Tsitsimpis
                  "machine to a %s machine") % (host_os, operating_system)
437 bdf369a2 Kostas Papadimitriou
            subinfo = ""
438 6f4c1371 Kostas Papadimitriou
439 b687587e Kostas Papadimitriou
        response_object = {
440 479c3051 Ilias Tsitsimpis
            'ip': ip_address,
441 479c3051 Ilias Tsitsimpis
            'os': operating_system,
442 479c3051 Ilias Tsitsimpis
            'ssh': ssh,
443 479c3051 Ilias Tsitsimpis
            'info': unicode(connect_message),
444 479c3051 Ilias Tsitsimpis
            'subinfo': unicode(subinfo),
445 479c3051 Ilias Tsitsimpis
            'link': {'title': unicode(link_title), 'url': link_url}
446 479c3051 Ilias Tsitsimpis
        }
447 479c3051 Ilias Tsitsimpis
        response = \
448 479c3051 Ilias Tsitsimpis
            HttpResponse(json.dumps(response_object),
449 479c3051 Ilias Tsitsimpis
                         mimetype='application/json')  # no windows, no rdp
450 6f4c1371 Kostas Papadimitriou
451 fd70c1db Markos Gogoulos
    return response