Commit 12a8d210 by Guba Sándor

Merge branch 'feature-request' into 'master'

Request 

🙏

TODO
- send notifications
- send request to irc bot
- reason for decline?

See merge request !303
parents 8d01770a 41bf99d6
......@@ -355,6 +355,7 @@ LOCAL_APPS = (
'manager',
'acl',
'monitor',
'request',
)
# See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps
......@@ -555,3 +556,4 @@ ADMIN_ENABLED = False
BLACKLIST_PASSWORD = get_env_variable("BLACKLIST_PASSWORD", "")
BLACKLIST_HOOK_URL = get_env_variable("BLACKLIST_HOOK_URL", "")
REQUEST_HOOK_URL = get_env_variable("REQUEST_HOOK_URL", "")
......@@ -56,6 +56,16 @@ LOGGING['handlers']['console'] = {'level': level,
'formatter': 'simple'}
for i in LOCAL_APPS:
LOGGING['loggers'][i] = {'handlers': ['console'], 'level': level}
# don't print SQL queries
LOGGING['handlers']['null'] = {'level': "DEBUG",
'class': "django.utils.log.NullHandler"}
LOGGING['loggers']['django.db.backends'] = {
'handlers': ['null'],
'propagate': False,
'level': 'DEBUG',
}
# Forbid store usage
STORE_URL = ""
......
......@@ -38,6 +38,7 @@ urlpatterns = patterns(
url(r'^network/', include('network.urls')),
url(r'^blacklist-add/', add_blacklist_item),
url(r'^dashboard/', include('dashboard.urls')),
url(r'^request/', include('request.urls')),
# django/contrib/auth/urls.py (care when new version)
url((r'^accounts/reset/(?P<uidb64>[0-9A-Za-z_\-]+)/'
......
......@@ -1395,6 +1395,7 @@
"vnc_port": 1234,
"num_cores": 2,
"status": "RUNNING",
"system": "system pls",
"modified": "2013-10-14T07:27:38.192Z"
}
},
......
......@@ -1272,8 +1272,46 @@ textarea[name="new_members"] {
margin-top: 20px;
}
#vm-renew-request-lease, #vm-request-resource-form {
display: none;
}
.label-100 {
display: block;
width: 100%;
}
#modify-the-resources {
font-size: 18px;
display: none;
}
#vm-request-resource-form textarea {
max-width: 500px;
height: 150px;
}
#disk-list-table {
td:last-child {
text-align: center;
}
}
#request-buttons {
form {
display: inline;
}
textarea {
resize: none;
min-height: 80px;
}
}
.nowrap {
white-space: nowrap;
}
.little-margin-bottom {
margin-bottom: 5px;
}
......@@ -223,4 +223,25 @@ $(function() {
return false;
});
$(document).on("click", "#vm-renew-request-lease-button", function(e) {
$("#vm-renew-request-lease").stop().slideToggle();
e.preventDefault();
});
$("#vm-request-resource").click(function(e) {
$(".cpu-priority-slider, .cpu-count-slider, .ram-slider").simpleSlider("setDisabled", false);
$(".ram-input, .cpu-count-input, .cpu-priority-input").prop("disabled", false);
$("#vm-details-resources-form").prop("action", $(this).prop("href"));
$("#vm-request-resource-form").show();
$("#modify-the-resources").show();
$(this).hide();
$("html, body").animate({
scrollTop: $("#modify-the-resources").offset().top - 60
});
return e.preventDefault();
});
});
......@@ -79,10 +79,26 @@
</div>
</div>
{% empty %}
{% trans "You can't start new virtual machines because no templates are shared with you." %}
{% if not template_access_types %}
{% trans "You can't start new virtual machines because no templates are shared with you." %}
{% else %}
{% trans "You can't start new virtual machines because no templates are shared with you however you can request them via the form below." %}
<hr />
{% include "request/_request-template-form.html" %}
{% endif %}
{% endfor %}
</div>
{% if templates and template_access_types %}
{% url "request.views.request-template" as request_url %}
<hr />
<p class="text-right">
{% blocktrans with url=request_url %}
Need other templates? Submit a new <a href="{{ url }}">request</a>.
{% endblocktrans %}
</p>
{% endif %}
<style>
.progress {
position: relative;
......
{% extends "dashboard/operate.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block formbuttons %}
<div class="pull-right">
<a class="btn btn-default" href="{{object.get_absolute_url}}" data-dismiss="modal">
{% trans "Cancel" %}
</a>
<a class="btn btn-primary" id="vm-renew-request-lease-button"
href="{% url "request.views.request-lease" vm_pk=object.pk %}">
<i class="fa fa-forward"></i>
{% trans "Request longer lease" %}
</a>
<button class="btn btn-{{ opview.effect }} btn-op-form-send" type="submit" id="op-form-send">
{% if opview.icon %}<i class="fa fa-fw fa-{{opview.icon}}"></i> {% endif %}{{ op.name|capfirst }}
</button>
</div>
{% endblock %}
{% block extra %}
<div class="clearfix"></div>
<div id="vm-renew-request-lease">
<hr />
{% include "request/_request-lease-form.html" with form=lease_request_form vm=object %}
</div>
{% endblock %}
......@@ -22,16 +22,29 @@
{% if user.is_superuser %}
{% if ADMIN_ENABLED %}
<li>
<a href="/admin/"><i class="fa fa-cogs"></i> {% trans "Admin" %}</a>
<a href="/admin/">
<i class="fa fa-cogs"></i>
<span class="hidden-sm">{% trans "Admin" %}</span>
</a>
</li>
{% endif %}
<li>
<a href="{% url "dashboard.views.storage" %}"><i class="fa fa-database"></i>
{% trans "Storage" %}
<a href="{% url "dashboard.views.storage" %}">
<i class="fa fa-database"></i>
<span class="hidden-sm">{% trans "Storage" %}</span>
</a>
</li>
<li>
<a href="/network/"><i class="fa fa-globe"></i> {% trans "Network" %}</a>
<a href="{% url "network.index" %}">
<i class="fa fa-globe"></i>
<span class="hidden-sm">{% trans "Network" %}</span>
</a>
</li>
<li>
<a href="{% url "request.views.request-list" %}">
<i class="fa fa-phone"></i>
<span class="hidden-sm">{% trans "Requests" %}</span>
</a>
</li>
{% endif %}
<li>
......
......@@ -16,6 +16,7 @@ Do you want to perform the following operation on
{% crispy form %}
{% endif %}
{% endblock %}
{% block formbuttons %}
<div class="pull-right">
<a class="btn btn-default" href="{{object.get_absolute_url}}"
data-dismiss="modal">{% trans "Cancel" %}</a>
......@@ -23,4 +24,7 @@ Do you want to perform the following operation on
{% if opview.icon %}<i class="fa fa-fw fa-{{opview.icon}}"></i> {% endif %}{{ op.name|capfirst }}
</button>
</div>
{% endblock %}
</form>
{% block extra %}{% endblock %}
......@@ -59,10 +59,11 @@
{% if instance.is_expiring %}<i class="fa fa-warning-sign text-danger"></i>{% endif %}
<span id="vm-details-renew-op">
{% with op=op.renew %}{% if op %}
<a href="{{op.get_url}}" class="btn btn-success btn-xs
<a href="{{op.get_url}}" class="btn btn-{{op.effect}} btn-xs
operation operation-{{op.op}}">
<i class="fa fa-{{op.icon}}"></i>
{{op.name}} </a>
{{op.name}}
</a>
{% endif %}{% endwith %}
</span>
</h4>
......
......@@ -2,19 +2,42 @@
{% load sizefieldtags %}
{% load crispy_forms_tags %}
<div class="label label-info label-100" id="modify-the-resources">
{% trans "Modify the resources" %}
</div>
<form method="POST" action="{{ op.resources_change.get_url }}" id="vm-details-resources-form">
{% csrf_token %}
{% include "dashboard/_resources-sliders.html" with field_priority=resources_form.priority field_num_cores=resources_form.num_cores field_ram_size=resources_form.ram_size %}
{% if op.resources_change %}
<button type="submit" class="btn btn-success btn-sm change-resources-button"
id="vm-details-resources-save" data-vm="{{ instance.pk }}"
{% if op.resources_change.disabled %}disabled{% endif %}>
<i class="fa fa-floppy-o"></i> {% trans "Save resources" %}
</button>
<span class="change-resources-help"
{% if not op.resources_change.disabled %}style="display: none;"{% endif %}
>{% trans "Stop your VM to change resources." %}</span>
<button type="submit" class="btn btn-success btn-sm change-resources-button"
id="vm-details-resources-save" data-vm="{{ instance.pk }}"
{% if op.resources_change.disabled %}disabled{% endif %}>
<i class="fa fa-floppy-o"></i> {% trans "Save resources" %}
</button>
<span class="change-resources-help"
{% if not op.resources_change.disabled %}style="display: none;"{% endif %}>
{% trans "Stop your VM to change resources." %}
</span>
{% else %}
<div id="vm-request-resource-form">
<div class="alert alert-info text-justify">
{% trans "Changing resources is only possible on virtual machines with STOPPED state. We suggest to turn off the VM after submitting the request otherwise it will be automatically stopped in the future when the request is accepted." %}
</div>
<div class="form-group">
<label>{% trans "Message" %}*</label>
<textarea class="form-control" name="message">{% include "request/initials/resources.html" %}</textarea>
</div>
<input type="submit" class="btn btn-success btn-sm"/>
</div>
<a href="{% url "request.views.request-resource" vm_pk=object.pk %}"
class="btn btn-primary btn-sm" id="vm-request-resource">
<i class="fa fa-tasks"></i>
{% trans "Request resources" %}
</a>
{% endif %}
</form>
......
......@@ -20,8 +20,7 @@ import json
# from unittest import skip
from django.test import TestCase
from django.test.client import Client
from django.contrib.auth.models import User, Group
from django.contrib.auth.models import Permission
from django.contrib.auth.models import User, Group, Permission
from django.contrib.auth import authenticate
from common.tests.celery_mock import MockCeleryMixin
......
......@@ -228,7 +228,6 @@ urlpatterns = patterns(
url(r'^vm/opensearch.xml$', OpenSearchDescriptionView.as_view(),
name="dashboard.views.vm-opensearch"),
url(r'^storage/$', StorageDetail.as_view(),
name="dashboard.views.storage"),
url(r'^disk/(?P<pk>\d+)/$', DiskDetail.as_view(),
......
......@@ -13,3 +13,4 @@ from util import *
from vm import *
from graph import *
from storage import *
from request import *
......@@ -66,6 +66,8 @@ from ..forms import (
VmPortRemoveForm, VmPortAddForm,
VmRemoveInterfaceForm,
)
from request.models import TemplateAccessType
from request.forms import LeaseRequestForm, TemplateRequestForm
from ..models import Favourite
from manager.scheduler import has_traits
......@@ -651,10 +653,12 @@ class VmRenewView(FormOperationMixin, TokenOperationView, VmOperationView):
op = 'renew'
icon = 'calendar'
effect = 'info'
effect = 'success'
show_in_toolbar = False
form_class = VmRenewForm
wait_for_result = 0.5
template_name = 'dashboard/_vm-renew.html'
with_reload = True
def get_form_kwargs(self):
choices = Lease.get_objects_with_level("user", self.request.user)
......@@ -674,6 +678,11 @@ class VmRenewView(FormOperationMixin, TokenOperationView, VmOperationView):
instance.time_of_suspend)
return extra
def get_context_data(self, **kwargs):
context = super(VmRenewView, self).get_context_data(**kwargs)
context['lease_request_form'] = LeaseRequestForm(request=self.request)
return context
class VmStateChangeView(FormOperationMixin, VmOperationView):
op = 'emergency_change_state'
......@@ -1043,6 +1052,8 @@ class VmCreate(LoginRequiredMixin, TemplateView):
'box_title': _('Create a VM'),
'ajax_title': True,
'templates': templates.all(),
'template_access_types': TemplateAccessType.objects.exists(),
'form': TemplateRequestForm(request=request),
})
return self.render_to_response(context)
......
......@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-03-05 14:32+0100\n"
"PO-Revision-Date: 2015-03-05 14:42+0116\n"
"Last-Translator: Daniel Bach <bd@doszgep.hu>\n"
"POT-Creation-Date: 2015-03-30 10:46+0200\n"
"PO-Revision-Date: 2015-03-30 12:58+0116\n"
"Last-Translator: Elek Elekebb EEeee <viktorvector@gmail.com>\n"
"Language-Team: Hungarian <cloud@ik.bme.hu>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
......@@ -32,79 +32,80 @@ msgstr "Hiba."
#: common/models.py:72
#, python-format
msgid "Unhandled exception: %(error)s"
msgstr "Kezeletlen kivétel: %(error)s"
#| msgid "Unhandled exception: %(error)s"
msgid "Unhandled exception: %(e)s: %(error)s"
msgstr "Kezeletlen kivétel: %(e)s: %(error)s"
#: common/models.py:147
#: common/models.py:148
#: dashboard/templates/dashboard/instanceactivity_detail.html:28
msgid "activity code"
msgstr "tevékenységkód"
#: common/models.py:150
#: common/models.py:151
msgid "human readable name"
msgstr "olvasható név"
#: common/models.py:151
#: common/models.py:152
msgid "Human readable name of activity."
msgstr "A tevékenység neve olvasható formában."
#: common/models.py:155
#: common/models.py:156
msgid "Celery task unique identifier."
msgstr "Celery feladat egyedi azonosítója."
#: common/models.py:156
#: common/models.py:157
msgid "task_uuid"
msgstr "feladat uuid"
#: common/models.py:157
#: common/models.py:158
#: dashboard/templates/dashboard/instanceactivity_detail.html:37
#: firewall/models.py:284 vm/models/common.py:84 vm/models/instance.py:130
#: vm/models/instance.py:211
#: firewall/models.py:284 request/models.py:223 vm/models/common.py:84
#: vm/models/instance.py:130 vm/models/instance.py:211
msgid "user"
msgstr "felhasználó"
#: common/models.py:158
#: common/models.py:159
msgid "The person who started this activity."
msgstr "A tevékenységet indító felhasználó."
#: common/models.py:159
#: common/models.py:160
msgid "started at"
msgstr "indítás ideje"
#: common/models.py:161
#: common/models.py:162
msgid "Time of activity initiation."
msgstr "A tevékenység megkezdésének időpontja."
#: common/models.py:162
#: common/models.py:163
msgid "finished at"
msgstr "befejezés ideje"
#: common/models.py:164
#: common/models.py:165
msgid "Time of activity finalization."
msgstr "A tevékenység befejeztének ideje."
#: common/models.py:166
#: common/models.py:167
msgid "True, if the activity has finished successfully."
msgstr "Igaz, ha a tevékenység sikeresen befejeződött."
#: common/models.py:168
#: common/models.py:169
#: dashboard/templates/dashboard/instanceactivity_detail.html:56
msgid "result"
msgstr "eredmény"
#: common/models.py:170
#: common/models.py:171
msgid "Human readable result of activity."
msgstr "A tevékenység eredménye olvasható formában."
#: common/models.py:535
#: common/models.py:536
msgid "Permission Denied"
msgstr "Hozzáférés megtagadva"
#: common/models.py:537
#: common/models.py:538
msgid "Unknown error"
msgstr "Ismeretlen hiba"
#: common/models.py:538
#: common/models.py:539
#, python-format
msgid "Unknown error: %(ex)s"
msgstr "Ismeretlen hiba: %(ex)s"
......@@ -139,12 +140,12 @@ msgid "realtime"
msgstr "valós idejű"
#: dashboard/forms.py:93 dashboard/forms.py:810 dashboard/forms.py:900
#: dashboard/forms.py:1351 dashboard/tables.py:268
#: dashboard/forms.py:1351 dashboard/tables.py:270
#: dashboard/templates/dashboard/_vm-create-2.html:20
#: dashboard/templates/dashboard/vm-detail/home.html:9
#: dashboard/templates/dashboard/vm-list.html:62 firewall/models.py:296
#: network/templates/network/index.html:24
#: network/templates/network/switch-port-edit.html:45
#: network/templates/network/switch-port-edit.html:45 request/models.py:57
msgid "Name"
msgstr "Név"
......@@ -195,6 +196,8 @@ msgstr ""
#: network/templates/network/switch-port-create.html:8
#: network/templates/network/vlan-create.html:8
#: network/templates/network/vlan-group-create.html:8
#: request/templates/request/lease-type-form.html:7
#: request/templates/request/template-type-form.html:7
msgid "Create"
msgstr "Létrehozás"
......@@ -212,6 +215,7 @@ msgstr "Létrehozás"
#: network/forms.py:86 network/forms.py:100 network/forms.py:122
#: network/forms.py:162 network/forms.py:187 network/forms.py:226
#: network/forms.py:247 network/forms.py:298 network/forms.py:323
#: request/forms.py:38 request/forms.py:54
msgid "Save"
msgstr "Mentés"
......@@ -223,7 +227,7 @@ msgstr "Gép"
#: dashboard/forms.py:383 dashboard/forms.py:781 dashboard/forms.py:991
#: dashboard/templates/dashboard/node-detail.html:5
#: dashboard/templates/dashboard/vm-detail/home.html:117
#: dashboard/templates/dashboard/vm-detail/home.html:118
#: dashboard/templates/dashboard/vm-list.html:87
msgid "Node"
msgstr "Csomópont"
......@@ -483,6 +487,7 @@ msgstr "összes"
#: dashboard/templates/dashboard/index-templates.html:40
#: dashboard/templates/dashboard/index-users.html:28
#: dashboard/templates/dashboard/index-vm.html:64
#: dashboard/templates/dashboard/storage/detail.html:91
#: network/templates/network/host-list.html:39
msgid "Search..."
msgstr "Keresés..."
......@@ -521,8 +526,8 @@ msgstr "elérés módja"
msgid "Type of the remote access method."
msgstr "Távoli elérési mód típusa."
#: dashboard/models.py:121 firewall/models.py:528 firewall/models.py:554
#: firewall/models.py:936 firewall/models.py:975 firewall/models.py:995
#: dashboard/models.py:121 firewall/models.py:533 firewall/models.py:564
#: firewall/models.py:951 firewall/models.py:995 firewall/models.py:1020
#: storage/models.py:49 storage/models.py:120 vm/models/common.py:65
#: vm/models/common.py:89 vm/models/common.py:165 vm/models/instance.py:134
#: vm/models/instance.py:224 vm/models/node.py:121
......@@ -545,69 +550,69 @@ msgstr ""
"Sablon a csatlakozási parancshoz. Elérhető paraméterek: username, password, "
"host, port."
#: dashboard/models.py:137
#: dashboard/models.py:140
msgid "preferred language"
msgstr "választott nyelv"
#: dashboard/models.py:143 dashboard/models.py:228
#: dashboard/models.py:146 dashboard/models.py:232
msgid "Unique identifier of the person, e.g. a student number."
msgstr "A személy egyedi azonosítója, például hallgatói azonosító."
#: dashboard/models.py:146
#: dashboard/models.py:149
msgid "Use Gravatar"
msgstr "Gravatar használata"
#: dashboard/models.py:147
#: dashboard/models.py:150
msgid "Whether to use email address as Gravatar profile image"
msgstr "Használható-e az e-mail cím a Gravatar profilkép betöltésére"
#: dashboard/models.py:149
#: dashboard/models.py:152
msgid "Email notifications"
msgstr "E-mail értesítések"
#: dashboard/models.py:150
#: dashboard/models.py:153
msgid "Whether user wants to get digested email notifications."
msgstr "A felhasználó kéri-e tömbösített e-mail értesítések küldését."
#: dashboard/models.py:153
#: dashboard/models.py:156
msgid "Samba password"
msgstr "Samba jelszó"
#: dashboard/models.py:155
#: dashboard/models.py:158
msgid "Generated password for accessing store from virtual machines."
msgstr "A tárhely virtuális gépekről való eléréséhez generált jelszó."
#: dashboard/models.py:160
#: dashboard/models.py:163
msgid "disk quota"
msgstr "lemezkvóta"
#: dashboard/models.py:162
#: dashboard/models.py:165
msgid "Disk quota in mebibytes."
msgstr "Lemezkvóta mebibyte-okban."
#: dashboard/models.py:222
#: dashboard/models.py:226
msgid "Can use autocomplete."
msgstr "Használhat automatikus kiegészítést."
#: dashboard/models.py:240 firewall/models.py:285 vm/models/common.py:85
#: vm/models/instance.py:131 vm/models/instance.py:212
#: dashboard/models.py:245 firewall/models.py:285 request/models.py:224
#: vm/models/common.py:85 vm/models/instance.py:131 vm/models/instance.py:212
msgid "operator"
msgstr "operátor"
#: dashboard/models.py:241 firewall/models.py:105 firewall/models.py:390
#: firewall/models.py:537 firewall/models.py:559 firewall/models.py:623
#: firewall/models.py:976 firewall/models.py:1004 vm/models/common.py:86
#: dashboard/models.py:246 firewall/models.py:105 firewall/models.py:390
#: firewall/models.py:542 firewall/models.py:569 firewall/models.py:638
#: firewall/models.py:996 firewall/models.py:1029 vm/models/common.py:86
#: vm/models/instance.py:132 vm/models/instance.py:213
msgid "owner"
msgstr "tulajdonos"
#: dashboard/models.py:247
#: dashboard/models.py:252
msgid "Unique identifier of the group at the organization."
msgstr "A csoport egyedi szervezeti azonosítója."
#. Translators: [T] as Template
#: dashboard/tables.py:53 dashboard/tables.py:308
#: dashboard/templates/dashboard/vm-detail/home.html:130
#: dashboard/tables.py:53 dashboard/tables.py:310
#: dashboard/templates/dashboard/vm-detail/home.html:131
msgid "Template"
msgstr "Sablon"
......@@ -616,7 +621,8 @@ msgid "[T]"
msgstr "[S]"
#. Translators: [VM] as Virtual Machine
#: dashboard/tables.py:56
#: dashboard/tables.py:56 request/templates/request/request-lease.html:17
#: request/templates/request/request-resource.html:20
msgid "Virtual machine"
msgstr "Virtuális gép"
......@@ -628,7 +634,8 @@ msgstr ""
msgid "Overcommit"
msgstr "Túlfoglalás"
#: dashboard/tables.py:73
#: dashboard/tables.py:73 request/tables.py:35
#: request/templates/request/detail.html:71
msgid "Status"
msgstr "Állapot"
......@@ -649,35 +656,36 @@ msgstr "Elérhető minionok"
msgid "Number of users"
msgstr "Felhasználók száma"
#: dashboard/tables.py:134 dashboard/templates/dashboard/base.html:25
#: dashboard/tables.py:134 dashboard/templates/dashboard/base.html:27
msgid "Admin"
msgstr "Adminisztráció"
#: dashboard/tables.py:141 dashboard/tables.py:218 dashboard/tables.py:249
#: dashboard/tables.py:283 dashboard/tables.py:312 network/tables.py:272
#: dashboard/tables.py:141 dashboard/tables.py:220 dashboard/tables.py:251
#: dashboard/tables.py:285 dashboard/tables.py:314 network/tables.py:272
msgid "Actions"
msgstr "Műveletek"
#: dashboard/tables.py:163 dashboard/templates/dashboard/profile.html:37
#: dashboard/tables.py:164 dashboard/templates/dashboard/profile.html:37
msgid "Organization ID"
msgstr "Címtári azonosító"
#: dashboard/tables.py:168
#: dashboard/tables.py:169
msgid "<abbr data-placement=\"left\" title=\"Superuser status\">SU</abbr>"
msgstr "<abbr data-placement=\"left\" title=\"Rendszergazda státusz\">SU</abbr>"
#: dashboard/tables.py:188 dashboard/templates/dashboard/_vm-create-2.html:38
#: dashboard/tables.py:190 dashboard/templates/dashboard/_vm-create-2.html:38
#: dashboard/templates/dashboard/node-detail.html:72
#: dashboard/templates/dashboard/vm-detail.html:200
msgid "Resources"
msgstr "Erőforrások"
#: dashboard/tables.py:194 dashboard/templates/dashboard/vm-list.html:74
#: dashboard/tables.py:196 dashboard/templates/dashboard/vm-list.html:74
#: request/forms.py:85 request/models.py:148 request/tables.py:63
#: vm/models/instance.py:104
msgid "Lease"
msgstr "Bérlet"
#: dashboard/tables.py:205 dashboard/templates/dashboard/template-edit.html:85
#: dashboard/tables.py:207 dashboard/templates/dashboard/template-edit.html:85
#: dashboard/templates/dashboard/template-edit.html:133
#: dashboard/templates/dashboard/vm-detail/access.html:2
#: dashboard/templates/dashboard/vm-detail/access.html:37
......@@ -685,31 +693,31 @@ msgstr "Bérlet"
msgid "Owner"
msgstr "Tulajdonos"
#: dashboard/tables.py:210 dashboard/tables.py:278
#: dashboard/tables.py:212 dashboard/tables.py:280
msgid "Created at"
msgstr "Létrehozva"
#: dashboard/tables.py:214
#: dashboard/tables.py:216
msgid "Running"
msgstr "Fut"
#: dashboard/tables.py:261
#: dashboard/tables.py:263
msgid "No available leases."
msgstr "Nincs elérhető bérlési mód."
#: dashboard/tables.py:273
#: dashboard/tables.py:275
msgid "Fingerprint"
msgstr "Ujjlenyomat"
#: dashboard/tables.py:294
#: dashboard/tables.py:296
msgid "You haven't added any public keys yet."
msgstr "Még nem adott meg publikus kulcsot."
#: dashboard/tables.py:304
#: dashboard/tables.py:306
msgid "Access method"
msgstr "Elérés módja"
#: dashboard/tables.py:325
#: dashboard/tables.py:327
msgid ""
"You don't have any custom connection commands yet. You can specify commands "
"to be displayed on VM detail pages instead of the defaults."
......@@ -717,18 +725,25 @@ msgstr ""
"Még nincs egyedi csatlakozási parancsa. Az itt megadott parancsok fognak "
"megjelenni a VM-részletező oldalon az alapértelmezettek helyett."
#: dashboard/tables.py:334 dashboard/templates/dashboard/vm-list.html:58
#: dashboard/tables.py:336 dashboard/templates/dashboard/vm-list.html:58
#: request/tables.py:31 request/tables.py:61 request/tables.py:77
msgid "ID"
msgstr "ID"
#: dashboard/tables.py:339 dashboard/templates/dashboard/storage/disk.html:18
#: dashboard/tables.py:341 dashboard/templates/dashboard/storage/disk.html:18
msgid "Appliance"
msgstr "Felhasználás"
#: dashboard/tables.py:343
#: dashboard/tables.py:345
msgid "ready"
msgstr "kész"
#: dashboard/tables.py:356
#, fuzzy
#| msgid "No related rules found."
msgid "No disk found."
msgstr "Nincs kapcsolódó szabály."
#: dashboard/tasks/local_periodic_tasks.py:60
#, python-format
msgid "%d new notification"
......@@ -789,10 +804,11 @@ msgstr ""
" "
#: dashboard/templates/dashboard/_client-check.html:23
#: dashboard/templates/dashboard/_vm-renew.html:9
#: dashboard/templates/dashboard/confirm/ajax-delete.html:19