Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Fukász Rómeó Ervin
/
cloud
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
Commit
15b660c1
authored
Mar 13, 2013
by
Bach Dániel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
one: UpdateInstanceStateTask added
parent
93f3d61a
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
46 additions
and
11 deletions
+46
-11
cloud/settings.py
+1
-0
miscellaneous/celery/update_state.py
+23
-0
one/models.py
+9
-5
one/tasks.py
+13
-0
one/views.py
+0
-6
No files found.
cloud/settings.py
View file @
15b660c1
...
...
@@ -203,6 +203,7 @@ 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
=
{
...
...
miscellaneous/celery/update_state.py
0 → 100755
View file @
15b660c1
#!/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
)
one/models.py
View file @
15b660c1
...
...
@@ -487,7 +487,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
:
...
...
@@ -551,7 +552,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 +618,21 @@ 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"
)
def
renew
(
self
,
which
=
'both'
):
if
which
in
[
'suspend'
,
'both'
]:
self
.
time_of_suspend
=
self
.
share
.
get_type
()[
'suspendx'
]
...
...
@@ -637,12 +641,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'
...
...
one/tasks.py
View file @
15b660c1
...
...
@@ -5,6 +5,7 @@ import os
import
sys
import
time
from
django.core.mail
import
send_mail
from
one.models
import
Instance
logger
=
logging
.
getLogger
(
__name__
)
...
...
@@ -12,3 +13,15 @@ class SendMailTask(Task):
def
run
(
self
,
to
,
subject
,
msg
,
sender
=
u'noreply@cloud.ik.bme.hu'
):
send_mail
(
subject
,
msg
,
sender
,
[
to
],
fail_silently
=
False
)
logger
.
info
(
"[django][one][tasks.py]
%
s->
%
s [
%
s]"
%
(
sender
,
to
,
subject
)
)
class
UpdateInstanceStateTask
(
Task
):
def
run
(
self
,
one_id
):
print
one_id
try
:
inst
=
Instance
.
objects
.
get
(
one_id
=
one_id
)
except
:
print
'nincs ilyen'
return
inst
.
update_state
()
print
inst
.
state
one/views.py
View file @
15b660c1
...
...
@@ -32,8 +32,6 @@ logger = logging.getLogger(__name__)
def
_list_instances
(
request
):
instances
=
Instance
.
objects
.
exclude
(
state
=
'DONE'
)
.
filter
(
owner
=
request
.
user
)
for
i
in
instances
:
i
.
update_state
()
instances
=
instances
.
exclude
(
state
=
'DONE'
)
return
instances
...
...
@@ -356,9 +354,6 @@ vm_list = login_required(VmListView.as_view())
@login_required
def
vm_show
(
request
,
iid
):
inst
=
get_object_or_404
(
Instance
,
id
=
iid
,
owner
=
request
.
user
)
inst
.
update_state
()
if
inst
.
template
.
state
==
"SAVING"
:
inst
.
check_if_is_save_as_done
()
try
:
ports
=
inst
.
firewall_host
.
list_ports
()
except
:
...
...
@@ -388,7 +383,6 @@ def vm_show(request, iid):
@login_required
def
vm_ajax_instance_status
(
request
,
iid
):
inst
=
get_object_or_404
(
Instance
,
id
=
iid
,
owner
=
request
.
user
)
inst
.
update_state
()
return
HttpResponse
(
json
.
dumps
({
'booting'
:
not
inst
.
active_since
,
'state'
:
inst
.
state
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment