Commit f6fdeffe by Őry Máté

Merge branch 'release-13.03.2' into releases

parents 0d188bd6 d9588334
......@@ -5,7 +5,7 @@ jsfiles += one/static/script/util.min.js
jsfiles += one/static/script/store.min.js
cssfiles += one/static/style/style.css
default: migrate generatestatic collectstatic mo restart
default: migrate generatestatic collectstatic mo setbranch restart
pulldef: pull default
pull:
......@@ -23,6 +23,10 @@ generatestatic: $(jsfiles) $(cssfiles)
collectstatic:
./manage.py collectstatic --noinput
setbranch:
sed -i cloud/local_settings.py -e '/RELEASE=/d' || true
echo "RELEASE='`git rev-parse --abbrev-ref HEAD`'" >>cloud/local_settings.py
mo:
for i in */locale/*/*/*.po; do echo -ne "$$i:\t"; msgfmt --statistics $$i;done
for i in */; do cd $$i; ls locale &>/dev/null && ../manage.py compilemessages || true; cd ..; done
......
from cloud.settings import DEBUG
from cloud.settings import DEBUG, STAT_DEBUG, RELEASE
from django.core.cache import cache
import subprocess
import json
def process_debug(req):
return {'DEBUG': DEBUG}
def process_stat(req):
if STAT_DEBUG:
stat = {
'CPU': {
'USED_CPU': 10,
'ALLOC_CPU': 20,
'FREE_CPU': 70
},
'MEM': {
'USED_MEM': 567,
'ALLOC_MEM': 371,
'FREE_MEM': 2048-567-371
}
}
else:
stat = cache.get('cloud_stat')
return {
'STAT_DEBUG': STAT_DEBUG,
'cloud_stat': stat,
}
def process_release(req):
return {
'release': RELEASE,
}
......@@ -3,6 +3,7 @@
DEBUG = True
TEMPLATE_DEBUG = DEBUG
STAT_DEBUG = True
ADMINS = (
('IK', 'cloud@cloud.ik.bme.hu'),
......@@ -119,6 +120,8 @@ TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.tz',
'django.contrib.messages.context_processors.messages',
'cloud.context_processors.process_debug',
'cloud.context_processors.process_stat',
'cloud.context_processors.process_release',
)
TEMPLATE_DIRS = (
......@@ -200,8 +203,17 @@ CELERY_ROUTES = {
'firewall.tasks.reload_blacklist_task': {'queue': 'firewall'},
'firewall.tasks.Periodic': {'queue': 'local'},
'one.tasks.SendMailTask': {'queue': 'local'},
'one.tasks.UpdateInstanceStateTask': {'queue': 'local'}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
store_settings = {
"basic_auth": "True",
"verify_ssl": "False",
......@@ -225,6 +237,7 @@ firewall_settings = {
EMAIL_HOST='152.66.243.92' # giccero ipv4
CLOUD_URL='https://cloud.ik.bme.hu/'
RELEASE='master'
try:
from cloud.local_settings import *
......
{% extends "base.html" %}
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
{% block content %}
<div class="irasmu">
<h2>Változtatások listája</h2>
<section>
<p>Az IK Cloud fejlesztése kéthetes ciklusokban történik, az rendes kiadások élesítése
páros heteken csütörtök este zajlik. Alább foglaljuk össze az egyes
kiadások főbb, a felhasználók által is látható változtatásait.</p>
</section>
<a id="master"></a>
<section>
<h3 id="release-13.03.2"><a href="#13.03.2">13.03.2 (2013. március 21.)</a></h3>
<ul>
<li>Súgó.</li>
<li>Változáslista.</li>
<li>Reszponzív és folyékony elrendezés.</li>
<li>Statikus oldalak új külalakja.</li>
<li>Gyorsabb oldalbetöltés.</li>
<li>Statisztika a cluster állapotáról.</li>
</ul>
</section>
<section>
<h3 id="release-13.03.1"><a href="#13.03.1">13.03.1 (2013. március 7.)</a></h3>
<ul>
<li>Határidős felfüggesztés élesítve.</li>
<li>Csatlakozási adatoknál IP cím helyett DNS név jelenik meg.</li>
<li>Ha a portált IPV6-on érik el, a csatlakozási adatoknál egyedi DNS név és publikus port jelenik meg.</li>
<li>Legújabb fájloktól vissza lehet lépni az összeshez.</li>
<li>Bemutató képernyő elérhető bejelentkezve is.</li>
<li>Megosztás adatai szerkeszthetőek.</li>
<li>Sablon adatai szerkeszthetőek.</li>
<li>Lábléc; impresszum, szabályzat, támogatás oldalak.</li>
<li>Megosztásnál is látszik a géptípus.</li>
<li>Dobozok rejthetőek.</li>
<li>Sablon mentésének menete gördülékenyebb.</li>
<li>Jelszómegjelenítés javítva.</li>
<li>Fájlok rendezése működik.</li>
<li>Segítség-dobozok bővítve.</li>
<li>Szebb HTTP hibaüzenetek.</li>
<li>Kulcs hozzáadásának visszaigazolása.</li>
<li>Sablonok állapotának helyes kijelzése.</li>
<li>Minimalizált js és css kód.</li>
</ul>
</section>
<section>
<h3 id="release-13.02.2"><a href="#13.02.2">13.02.2 (2013. február 21.)</a></h3>
<ul>
<li>Felhasználói kvóták megvalósítása.</li>
<li>Publikus kulcsok kezelése.</li>
<li>További részletek gombok.</li>
<li>Saját csoportok rejthetőek.</li>
<li>Segítség-dobozok a legtöbb helyre.</li>
<li>Csoporttulajdonosok kezelése, több adat megjelenítése.</li>
<li>VM átnevezhető.</li>
</ul>
</section>
</div>
{% endblock %}
......@@ -5,10 +5,15 @@
{% block content %}
<div class="irasmu">
<h2>Impresszum</h2>
<section>
<p>Az IK Cloud a BME IK és IIT együttműködésében, a VIK támogatásával létrejött rendszer, amelyben az IIT oktatói és hallgatói szükség szerint vehetnek igénybe virtuális erőforrásokat.
</p>
</section>
<section>
<p>Az oldal üzemeltetője a BME Közigazgatási Informatikai Központ.</p>
<p>A rendszer fejlesztésében részt vettek:
<p>A rendszer fejlesztésében részt vettek:
Bach Dániel,
Dányi Bence,
Dudás Ádám,
......@@ -17,6 +22,7 @@
dr. Szeberényi Imre.</p>
<p>A rendszer HP hardveren, Ubuntu operációs rendszeren, KVM virtualizációval, Open vSwitch virtuális hálózaton, libvirt köztes réteggel, OpenNebula cloud menedzserrel, Django alapú webportállal működik.</p>
<p>Some icons by <a href="http://p.yusukekamiyamane.com/">Yusuke Kamiyamane</a>. Licensed under a <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0 License</a>.</p>
</section>
</div>
{% endblock %}
......@@ -5,6 +5,8 @@
{% block content %}
<div class="irasmu">
<h2>Felhasználási feltételek</h2>
<section>
<p>Az IK Cloud a BME IK és IIT együttműködésében, a VIK támogatásával létrejött rendszer, amelyben az IIT oktatói és hallgatói szükség szerint vehetnek igénybe <strong>virtuális erőforrásokat</strong>.</p>
<p>Az IIT géptermeiben telepített kliensszoftver segítségével az oktató által előkészített és kiajánlott <strong>virtuális környezetet a hallgató</strong> a számára megszabott <strong>kvóta keretein belül</strong> igény szerint indíthatja.</p>
......@@ -14,11 +16,15 @@
<p>Lehetőség van a gépteremben elkezdett munka otthoni folytatására is a korábban elindított környezetben. A rendszer segítségével az otthoni feladatot végző hallgató is elkerülheti az összetett szoftverkörnyezet telepítésével járó kellemetlenségeket, figyelmét a szakmai munkára irányíthatja.</p>
<p>A rendszer segítséget nyújt önálló labor, szakdolgozat, diplomaterv vagy tdk-munka készítésénél is: a munkához szükséges virtuális gépeket az önkiszolgáló rendszeren keresztül azonnal használatba lehet venni.</p>
</section>
<section>
<p>Az elindított virtuális gépekre az adott operációs rendszeren szokásos módon lehet távolról csatlakozni: Windows esetén RDP (távoli asztal), Linux esetén SSH, vagy grafikusan NoMachine NX segítségével. A kapcsolódást a géptermekben telepített kliensszoftver még kényelmesebbé teszi.</p>
<p>Az elindított gépeken a <strong>felhasználói adattár</strong> automatikusan csatolásra kerül. Minden munkát itt érdemes végezni, mivel az a gép leállítása után is elérhető marad.</p>
</section>
<section>
<p>A felhasználók a rendszert jelen önkiszolgáló felületen keresztül érhetik el, amelybe az egyetemi címtárszolgáltatás (eduID) segítségével léphetnek be. A továbblépéssel elfogadják a következőekben összefoglalt <strong>felhasználási feltételeket</strong>.</p>
<ul>
<li>A rendszer <strong>nem használható</strong> semmilyen jogszabályba, vagy <a href="http://net.bme.hu/regula/">egyetemi</a> <strong>szabályzatba ütköző tevékenységre</strong>.</li>
......@@ -29,6 +35,7 @@
<li>A rendszert üzemeltető BME IK lehetőségeihez mérten mindent megtesz a szolgáltatásbiztos üzemért, az egyetemi infrastruktúra sajátosságai miatt előforduló üzemszünetekre azonban számítani kell. A BME IK az üzemeltetés kapcsán a folyamatos üzem sérüléséért vagy adatvesztésért <strong>minden felelősséget kizár</strong>. Ezeknek megfelelően szükség esetén a biztonsági mentés és a magas rendelkezésre állású környezet kialakítása a felhasználóra hárul.</li>
</ul>
<p>A szabályok betartása közös érdekünk. Reméljük, hogy a rendszerünk használata megkönnyíti munkájukat, melyhez sok sikert kívánunk!</p>
</section>
</div>
{% endblock %}
......@@ -5,6 +5,8 @@
{% block content %}
<div class="irasmu">
<h2>Támogatás</h2>
<section>
<p>A rendszer használatával kapcsolatos kérdéseket, általános észrevételeket a <tt>cloud <em>(kukac)</em>
ik.bme.hu</tt> e-mail címen várjuk.
Ugyancsak örömmel fogadjuk a rendszer használatával kapcsolatos beszámolókat.</p>
......@@ -12,5 +14,7 @@
<a href="https://giccero.cloud.ik.bme.hu/trac/cloud/newticket" rel="nofollow">
hibajegy felvételével</a> jelezze.
</p>
</section>
</div>
{% endblock %}
#!/usr/bin/env python
from celery import Celery, task
import subprocess
import time, re
import socket
import sys
BROKER_URL = 'amqp://nyuszi:teszt@localhost:5672/django'
try:
from local_settings import *
except:
pass
CELERY_CREATE_MISSING_QUEUES=True
celery = Celery('tasks', broker=BROKER_URL)
def main(argv):
celery.send_task('one.tasks.UpdateInstanceStateTask', [ int(sys.argv[1]),
], queue='local')
if __name__ == "__main__":
main(sys.argv)
......@@ -5,8 +5,16 @@ echo "En vagyok a $0 !"
arr=( $((echo 'ibase=16' ; ifconfig eth0 | awk '/HWaddr/ {print $5}' | tr ':a-z' '\nA-Z') | bc ) )
ipv4="${arr[2]}.${arr[3]}.${arr[4]}.${arr[5]}"
gw4="${arr[2]}.${arr[3]}.255.254"
net4="255.255.0.0"
ipv6="2001:738:2001:4031:${arr[3]}:${arr[4]}:${arr[5]}:0"
gw6="2001:738:2001:4031:${arr[3]}:255:254:0"
net6="80"
if [ "${arr[2]}" == "152" ]; then
gw4="${arr[2]}.${arr[3]}.243.126"
net4="255.255.255.192"
gw6="2001:738:2001:4031:66:243:126:0"
fi
echo ok "$ipv4 $ipv6 $gw4 $gw6"
......@@ -20,12 +28,12 @@ iface lo inet loopback
auto eth0
iface eth0 inet static
address $ipv4
netmask 255.255.0.0
netmask $net4
gateway $gw4
dns-nameservers 152.66.243.60
iface eth0 inet6 static
address $ipv6
netmask 80
netmask $net6
gateway $gw6
EOF
......@@ -46,10 +54,10 @@ DNS1="152.66.243.60"
PEERDNS="yes"
IPADDR="$ipv4"
NETMASK="255.255.0.0"
NETMASK="$net4"
GATEWAY=$gw4
IPV6ADDR="$ipv6/80"
IPV6ADDR="$ipv6/$net6"
IPV6_DEFAULTGW="$gw6"
EOF
......
......@@ -6,12 +6,13 @@ do
sudo stop $i || true
done
sudo apt-get install rabbitmq-server gettext
sudo apt-get install rabbitmq-server gettext memcached
sudo rabbitmqctl delete_user guest || true
sudo rabbitmqctl add_user nyuszi teszt || true
sudo rabbitmqctl add_vhost django || true
sudo rabbitmqctl set_permissions -p django nyuszi '.*' '.*' '.*' || true
sudo pip install python-memcached
sudo cp /opt/webadmin/cloud/miscellaneous/devenv/boot_url.py /opt/
......
#!/bin/bash
# install xml.vim
mkdir -p ~/.vim/{ftplugin,indent}
cd ~/.vim
wget 'http://www.vim.org/scripts/download_script.php?src_id=16073' -O ftplugin/xml.vim
echo 'let b:did_indent = 1' > indent/xml.vim
for i in docbk xsl html xhtml
do
ln -s xml.vim ftplugin/$i.vim
echo 'let b:did_indent = 1' > indent/$i.vim
done
\documentclass[12pt,a4paper]{article}
\title{Harnessing Wasted Computing Power for Scientific Computing}
\author{S\'andor Guba, M\'at\'e \H{O}ry and Imre Szeber\'enyi\\
Budapest University of Technology and Economics, %\\
%Magyar Tud\'osok k\"or\'utja 2, H-1117 Budapest,
Hungary}
\date{\empty}
\begin{document}
\maketitle
Nowadays more and more general purpose workstations installed in a student
laboratory have built in multi-core CPU and graphics card providing significant
computing power. In most cases the utilization of these resources is low, and
limited to lecture hours. The concept of utility computing plays an important
role in nowadays technological development. As part of utility computing, cloud
computing offers greater flexibility and responsiveness to ICT users at lower
cost.
In  this paper, we introduce a cloud management system which enables the
simultaneous use of both dedicated resources and opportunistic environment. All
the free workstations (powered or not) are automatically added to a resource
pool, and can be used like ordinary cloud resources. Researchers can launch
various virtualized software appliances. Our solution leverages the advantages
of HTCondor and OpenNebula systems.
Modern graphics processing units (GPUs) with many-core architectures have
emerged as general-purpose parallel computing platforms that can dramatically
accelerate  scientific applications used for various simulations. Our business
model harnesses computing power of GPUs as well, using the needed amount of
unused machines. This makes the infrastructure flexible and power efficient.
Our pilot infrastructure consist of a high performance cluster and 28
workstations with dual-core CPUs and dedicated graphics cards. Altogether we
can use 10,752 CUDA cores through the network.
\end{document}
% clmomu01.ind
%-----------------------------------------------------------------------
% CLMoMu01 1.0: LaTeX style files for books
% Sample index file for User's guide
% (c) Springer-Verlag HD
%-----------------------------------------------------------------------
\begin{theindex}
\item Absorption\idxquad 327
\item Absorption of radiation \idxquad 289--292,\, 299,\,300
\item Actinides \idxquad 244
\item Aharonov-Bohm effect\idxquad 142--146
\item Angular momentum\idxquad 101--112
\subitem algebraic treatment\idxquad 391--396
\item Angular momentum addition\idxquad 185--193
\item Angular momentum commutation relations\idxquad 101
\item Angular momentum quantization\idxquad 9--10,\,104--106
\item Angular momentum states\idxquad 107,\,321,\,391--396
\item Antiquark\idxquad 83
\item $\alpha$-rays\idxquad 101--103
\item Atomic theory\idxquad 8--10,\,219--249,\,327
\item Average value\newline ({\it see also\/} Expectation value)
15--16,\,25,\,34,\,37,\,357
\indexspace
\item Baker-Hausdorff formula\idxquad 23
\item Balmer formula\idxquad 8
\item Balmer series\idxquad 125
\item Baryon\idxquad 220,\,224
\item Basis\idxquad 98
\item Basis system\idxquad 164,\,376
\item Bell inequality\idxquad 379--381,\,382
\item Bessel functions\idxquad 201,\,313,\,337
\subitem spherical\idxquad 304--306,\, 309,\, 313--314,\,322
\item Bound state\idxquad 73--74,\,78--79,\,116--118,\,202,\, 267,\,
273,\,306,\,348,\,351
\item Boundary conditions\idxquad 59,\, 70
\item Bra\idxquad 159
\item Breit-Wigner formula\idxquad 80,\,84,\,332
\item Brillouin-Wigner perturbation theory\idxquad 203
\indexspace
\item Cathode rays\idxquad 8
\item Causality\idxquad 357--359
\item Center-of-mass frame\idxquad 232,\,274,\,338
\item Central potential\idxquad 113--135,\,303--314
\item Centrifugal potential\idxquad 115--116,\,323
\item Characteristic function\idxquad 33
\item Clebsch-Gordan coefficients\idxquad 191--193
\item Cold emission\idxquad 88
\item Combination principle, Ritz's\idxquad 124
\item Commutation relations\idxquad 27,\,44,\,353,\,391
\item Commutator\idxquad 21--22,\,27,\,44,\,344
\item Compatibility of measurements\idxquad 99
\item Complete orthonormal set\idxquad 31,\,40,\,160,\,360
\item Complete orthonormal system, {\it see}\newline
Complete orthonormal set
\item Complete set of observables, {\it see\/} Complete
set of operators
\indexspace
\item Eigenfunction\idxquad 34,\,46,\,344--346
\subitem radial\idxquad 321
\subsubitem calculation\idxquad 322--324
\item EPR argument\idxquad 377--378
\item Exchange term\idxquad 228,\,231,\,237,\,241,\,268,\,272
\indexspace
\item $f$-sum rule\idxquad 302
\item Fermi energy\idxquad 223
\indexspace
\item H$^+_2$ molecule\idxquad 26
\item Half-life\idxquad 65
\item Holzwarth energies\idxquad 68
\end{theindex}
from one.models import *
from django_extensions.management.jobs import QuarterHourlyJob
from django.core.cache import cache
import json
class Job(QuarterHourlyJob):
help = "Update statistics from OpenNebula."
def execute(self):
stat = json.loads(subprocess.check_output(['/opt/webadmin/cloud/miscellaneous/stat/stat_wrap.sh']))
cache.set('cloud_stat', stat)
......@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-03-07 18:16+0100\n"
"POT-Creation-Date: 2013-03-22 10:43+0100\n"
"PO-Revision-Date: 2013-03-07 17:02+0100\n"
"Last-Translator: \n"
"Language-Team: Hungarian <cloud@ik.bme.hu>\n"
......@@ -17,18 +17,17 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"X-Generator: Lokalize 1.4\n"
#: static/script/cloud.js:24 static/script/cloud.min.js:1
#: static/script/cloud.js:24
msgid "Are you sure deleting key?"
msgstr "Biztosan törli a kulcsot?"
#: static/script/cloud.js:24 static/script/cloud.js.c:296
#: static/script/cloud.js:370 static/script/cloud.js.c:623
#: static/script/cloud.min.js:1 static/script/store.js:288
#: static/script/store.min.js:1
#: static/script/cloud.js:24 static/script/cloud.js.c:301
#: static/script/cloud.js:373 static/script/cloud.js.c:600
#: static/script/store.js:288
msgid "Delete"
msgstr "Törlés"
#: static/script/cloud.js:36 static/script/cloud.min.js:1
#: static/script/cloud.js:36
msgid ""
"Are you sure about reseting store credentials?<br /> You will lose your "
"access to your store account on your existing virtual machines!"
......@@ -36,96 +35,92 @@ msgstr ""
"Biztosan újragenerálja az adattár-kulcsait?<br /> El fogja veszteni az "
"adattár-hozzáférést a már futó virtuális gépekből!"
#: static/script/cloud.js:36 static/script/cloud.min.js:1
#: static/script/cloud.js:36
msgid "Reset"
msgstr "Újragenerálás"
#: static/script/cloud.js:75 static/script/cloud.min.js:1
#: static/script/store.js:323 static/script/store.min.js:1
#: static/script/cloud.js:76 static/script/store.js:323
msgid "Rename"
msgstr "Átnevezés"
#: static/script/cloud.js:271 static/script/cloud.min.js:1
#: static/script/store.js:288 static/script/store.min.js:1
#: static/script/cloud.js:276 static/script/store.js:288
msgid "Cancel"
msgstr "Mégsem"
#: static/script/cloud.js:285 static/script/cloud.min.js:1
#: static/script/cloud.js:290
#, c-format
msgid "Are you sure stopping %s?"
msgstr "Biztosan felfüggeszti a következőt: %s?"
#: static/script/cloud.js:286 static/script/cloud.min.js:1
#: static/script/cloud.js:291
msgid "Stop"
msgstr "Felfüggesztés"
#: static/script/cloud.js:295 static/script/cloud.min.js:1
#: static/script/cloud.js:300
#, c-format
msgid "Are you sure deleting %s?"
msgstr "Biztosan törli a következőt: %s?"
#: static/script/cloud.js:305 static/script/cloud.min.js:1
#: static/script/cloud.js:310
#, c-format
msgid "Are you sure restarting %s?"
msgstr "Biztosan újraindítja a következőt: %s?"
#: static/script/cloud.js:306 static/script/cloud.min.js:1
#: static/script/cloud.js:311
msgid "Restart"
msgstr "Újraindítás"
#: static/script/cloud.js:369 static/script/cloud.min.js:1
#: static/script/cloud.js:372
#, c-format
msgid "Are you sure deleting this %s template?"
msgstr "Biztosan törli a következő sablont: %s?"
#: static/script/cloud.js:547 static/script/cloud.js.c:550
#: static/script/cloud.min.js:1
#: static/script/cloud.js:551 static/script/cloud.js.c:554
msgid "Add owner"
msgstr "Tulajdonos hozzáadása"
#: static/script/cloud.js:550 static/script/cloud.min.js:1
#: static/script/cloud.js:554
msgid "Unknown"
msgstr "Ismeretlen"
#: static/script/cloud.js:623 static/script/cloud.min.js:1
#: static/script/cloud.js:600
#, c-format
msgid "Are you sure deleting <strong>%s</strong>"
msgstr "Törli a következő fájlt: <strong>%s</strong>"
#: static/script/store.js:52 static/script/store.js.c:61
#: static/script/store.js:70 static/script/store.js.c:220
#: static/script/store.js:282 static/script/store.min.js:1
#: static/script/store.js:282
msgid "file"
msgstr "fájl"
#: static/script/store.js:125 static/script/store.min.js:1
#: static/script/store.js:125
msgid "Toplist"
msgstr "Legújabb fájlok"
#: static/script/store.js:127 static/script/store.min.js:1
#: static/script/store.js:127
msgid "Back to the root folder"
msgstr "Vissza a gyökérmappába"
#: static/script/store.js:283 static/script/store.min.js:1
#: static/script/store.js:283
#, c-format
msgid "You are removing the file <strong>%s</strong>."
msgstr "Törli a következő fájlt: <strong>%s</strong>."
#: static/script/store.js:285 static/script/store.min.js:1
#: static/script/store.js:285
#, c-format
msgid "You are removing the folder <strong>%s</strong> (and its content)."
msgstr "Törli a következő könyvtárat és tartalmát: <strong>%s</strong>."
#: static/script/store.js:288 static/script/store.min.js:1
#: static/script/store.js:288
msgid "Are you sure?"
msgstr "Biztos benne?"
#: static/script/store.js:446 static/script/store.js.c:448
#: static/script/store.min.js:1
msgid "Upload"
msgstr "Feltöltés"
#: static/script/store.js:448 static/script/store.min.js:1
#: static/script/store.js:448
msgid "done, processing..."
msgstr "kész, feldolgozás..."
......
......@@ -18,6 +18,7 @@ from firewall.models import Host, Rule, Vlan, Record
from school.models import Person, Group
from store.api import StoreApi
from .util import keygen
from cloud.settings import CLOUD_URL
logger = logging.getLogger(__name__)
pwgen = User.objects.make_random_password
......@@ -487,7 +488,8 @@ class Instance(models.Model):
"""Submit a new instance to OpenNebula."""
from django.template.defaultfilters import escape
out = ""
inst = Instance(pw=pwgen(), template=template, owner=owner, share=share)
inst = Instance(pw=pwgen(), template=template, owner=owner,
share=share, state='PENDING')
inst.save()
hostname = u"cloud-%d" % (inst.id, )
with tempfile.NamedTemporaryFile(delete=False) as f:
......@@ -529,7 +531,7 @@ class Instance(models.Model):
"smbpw": escape(details.smb_password),
"sshkey": escape(details.ssh_private_key),
"neptun": escape(owner.username),
"booturl": "https://cloud.ik.bme.hu/b/%s/" % token,
"booturl": "%sb/%s/" % ( CLOUD_URL, token ),
"extra": extra}
f.write(tpl)
f.close()
......@@ -551,7 +553,6 @@ class Instance(models.Model):
{'neptun': owner.username, 'template': template.name,
'id': inst.one_id})
inst.save()
inst.update_state()
host = Host(vlan=Vlan.objects.get(name=template.network.name),
owner=owner)
host.hostname = hostname
......@@ -618,17 +619,23 @@ class Instance(models.Model):
def _change_state(self, new_state):
"""Change host state in OpenNebula."""
self._update_vm("<STATE>" + new_state + "</STATE>")
self.waiting = True
self.save()
def stop(self):
self._change_state("STOPPED")
self.waiting = True
self.save()
def resume(self):
self._change_state("RESUME")
def poweroff(self):
self._change_state("POWEROFF")
def restart(self):
self._change_state("RESET")
self.waiting = False
self.save()
def renew(self, which='both'):
if which in ['suspend', 'both']:
self.time_of_suspend = self.share.get_type()['suspendx']
......@@ -637,12 +644,12 @@ class Instance(models.Model):
if not (which in ['suspend', 'delete', 'both']):
raise ValueError('No such expiration type.')
self.save()
def save_as(self):
"""Save image and shut down."""
imgname = "template-%d-%d" % (self.template.id, self.id)
self._update_vm('<DISK id="0"><SAVE_AS name="%s"/></DISK>' % imgname)
self._change_state("SHUTDOWN")
self.waiting = True
self.save()
t = self.template
t.state = 'SAVING'
......
......@@ -15,7 +15,7 @@ $(function() {
$('.delete-template').click(function(e) {
e.preventDefault();
e.stopPropagation();
delete_template_confirm($(this).data('id'), $(this).data('name'));
delete_template_confirm($(this).data('url'), $(this).data('id'), $(this).data('name'));
});
$('.delete-key').click(function(e) {
var id = $(this).data('id');
......@@ -25,7 +25,7 @@ $(function() {
$.ajax({
'type': 'POST',
'data': 'id=' + id,
'url': '/ajax/key/delete/',
'url': $(this).data('url'),
'success': function() {
$('#key-' + id).slideUp(700);
}
......@@ -36,7 +36,7 @@ $(function() {
vm_confirm_popup(gettext('Are you sure about reseting store credentials?<br /> You will lose your access to your store account on your existing virtual machines!'), gettext('Reset'), function() {
$.ajax({
type: 'POST',
url: '/ajax/key/reset/',
url: $(this).data('url'),
success: function() {
window.location.reload();
}
......@@ -63,6 +63,7 @@ $(function() {
var oldName = $(this).data('name');
var content = $('#vm-' + id + '-name').html();
var self=this;
var url = $(this).data('url');
$(this).unbind('click').click(function(e){
e.preventDefault();
e.stopPropagation();
......@@ -72,7 +73,7 @@ $(function() {
})
$('#vm-' + id + '-name-details').hide();
$('#vm-' + id + '-name').html('<input type="text" value="' + oldName + '" />\
<input type="submit" value="' + gettext('Rename') + '" />');
<input type="submit" value="' + gettext('Rename') + '" data-url="'+url+'"/>');
$('#vm-' + id + '-name').find('input[type="text"]').click(function(f) {
f.preventDefault();
f.stopPropagation();
......@@ -85,7 +86,7 @@ $(function() {
type: 'POST',
data: 'name=' + newName,
dataType: 'json',
url: '/ajax/vm/rename/' + id + '/',
url: $(this).data('url'),
success: function(data) {
$('#vm-' + id + '-name-details').removeAttr('style');
$('#vm-' + id + '-name').text(data.name);
......@@ -97,7 +98,7 @@ $(function() {
$('.try-template').click(function(e) {
e.preventDefault();
e.stopPropagation();
new_vm($(this).data('id'));
new_vm($(this).data('url'));