Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE
/
cloud
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
94
Merge Requests
10
Pipelines
Wiki
Snippets
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
942db813
authored
Sep 04, 2013
by
tarokkk
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor deploy()
parent
42fb490c
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
64 additions
and
39 deletions
+64
-39
circle/manager/manager.py
+1
-26
circle/vm/models.py
+63
-13
No files found.
circle/manager/manager.py
View file @
942db813
#!/usr/bin/env python
#!/usr/bin/env python
from
mancelery
import
celery
from
mancelery
import
celery
from
celery
import
current_task
import
scheduler
@celery.task
@celery.task
def
deploy
(
instance
):
def
deploy
(
instance
):
'''Create new virtual machine from VM class.
'''Create new virtual machine from VM class.
'''
'''
# Get info from scheduler (free space, node with enough cpu and ram)
instance
.
deploy
(
task_uuid
=
deploy
.
request
.
id
)
current_task
.
update_state
(
state
=
'PENDING'
)
instance
.
node
=
scheduler
.
get_node
()
# Create hard drives (storage)
current_task
.
update_state
(
state
=
'PREPARE'
)
for
disk
in
instance
.
disks
:
disk
.
deploy
()
# Create context
instance
.
create_context
()
# Create machine (vmdriver)
current_task
.
update_state
(
state
=
'DEPLOY VM'
)
instance
.
deploy_task
()
# Estabilish network connection (vmdriver)
current_task
.
update_state
(
state
=
'DEPLOY NET'
)
instance
.
deploy_net
()
# Resume machine (vmdriver)
current_task
.
update_state
(
state
=
'BOOT'
)
instance
.
resume
()
pass
def
delete
():
def
delete
():
...
...
circle/vm/models.py
View file @
942db813
...
@@ -5,6 +5,8 @@ import logging
...
@@ -5,6 +5,8 @@ import logging
from
.
import
tasks
from
.
import
tasks
from
manager
import
manager
,
scheduler
from
django.contrib.auth.models
import
User
from
django.contrib.auth.models
import
User
from
django.db
import
models
from
django.db
import
models
from
django.db.models.signals
import
pre_delete
from
django.db.models.signals
import
pre_delete
...
@@ -16,7 +18,6 @@ from model_utils.models import TimeStampedModel
...
@@ -16,7 +18,6 @@ from model_utils.models import TimeStampedModel
from
firewall.models
import
Vlan
,
Host
from
firewall.models
import
Vlan
,
Host
from
storage.models
import
Disk
from
storage.models
import
Disk
import
manager
logger
=
logging
.
getLogger
(
__name__
)
logger
=
logging
.
getLogger
(
__name__
)
pwgen
=
User
.
objects
.
make_random_password
pwgen
=
User
.
objects
.
make_random_password
...
@@ -31,6 +32,7 @@ ACCESS_METHODS = [(k, ap[0]) for k, ap in ACCESS_PROTOCOLS.iteritems()]
...
@@ -31,6 +32,7 @@ ACCESS_METHODS = [(k, ap[0]) for k, ap in ACCESS_PROTOCOLS.iteritems()]
class
BaseResourceConfigModel
(
models
.
Model
):
class
BaseResourceConfigModel
(
models
.
Model
):
"""Abstract base class for models with base resource configuration
"""Abstract base class for models with base resource configuration
parameters.
parameters.
"""
"""
...
@@ -48,6 +50,7 @@ class BaseResourceConfigModel(models.Model):
...
@@ -48,6 +50,7 @@ class BaseResourceConfigModel(models.Model):
class
NamedBaseResourceConfig
(
BaseResourceConfigModel
,
TimeStampedModel
):
class
NamedBaseResourceConfig
(
BaseResourceConfigModel
,
TimeStampedModel
):
"""Pre-created, named base resource configurations.
"""Pre-created, named base resource configurations.
"""
"""
name
=
models
.
CharField
(
max_length
=
50
,
unique
=
True
,
name
=
models
.
CharField
(
max_length
=
50
,
unique
=
True
,
...
@@ -58,6 +61,7 @@ class NamedBaseResourceConfig(BaseResourceConfigModel, TimeStampedModel):
...
@@ -58,6 +61,7 @@ class NamedBaseResourceConfig(BaseResourceConfigModel, TimeStampedModel):
class
Node
(
TimeStampedModel
):
class
Node
(
TimeStampedModel
):
"""A VM host machine.
"""A VM host machine.
"""
"""
name
=
models
.
CharField
(
max_length
=
50
,
unique
=
True
,
name
=
models
.
CharField
(
max_length
=
50
,
unique
=
True
,
...
@@ -82,7 +86,8 @@ class Node(TimeStampedModel):
...
@@ -82,7 +86,8 @@ class Node(TimeStampedModel):
class
NodeActivity
(
TimeStampedModel
):
class
NodeActivity
(
TimeStampedModel
):
activity_code
=
models
.
CharField
(
max_length
=
100
)
activity_code
=
models
.
CharField
(
max_length
=
100
)
task_uuid
=
models
.
CharField
(
max_length
=
50
,
unique
=
True
)
task_uuid
=
models
.
CharField
(
max_length
=
50
,
unique
=
True
,
null
=
True
,
blank
=
True
)
node
=
models
.
ForeignKey
(
Node
,
related_name
=
'activity_log'
)
node
=
models
.
ForeignKey
(
Node
,
related_name
=
'activity_log'
)
user
=
models
.
ForeignKey
(
User
,
blank
=
True
,
null
=
True
)
user
=
models
.
ForeignKey
(
User
,
blank
=
True
,
null
=
True
)
started
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
started
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
...
@@ -92,6 +97,7 @@ class NodeActivity(TimeStampedModel):
...
@@ -92,6 +97,7 @@ class NodeActivity(TimeStampedModel):
class
Lease
(
models
.
Model
):
class
Lease
(
models
.
Model
):
"""Lease times for VM instances.
"""Lease times for VM instances.
Specifies a time duration until suspension and deletion of a VM
Specifies a time duration until suspension and deletion of a VM
...
@@ -123,6 +129,7 @@ class Lease(models.Model):
...
@@ -123,6 +129,7 @@ class Lease(models.Model):
class
InstanceTemplate
(
BaseResourceConfigModel
,
TimeStampedModel
):
class
InstanceTemplate
(
BaseResourceConfigModel
,
TimeStampedModel
):
"""Virtual machine template.
"""Virtual machine template.
Every template has:
Every template has:
...
@@ -184,6 +191,7 @@ class InstanceTemplate(BaseResourceConfigModel, TimeStampedModel):
...
@@ -184,6 +191,7 @@ class InstanceTemplate(BaseResourceConfigModel, TimeStampedModel):
class
InterfaceTemplate
(
models
.
Model
):
class
InterfaceTemplate
(
models
.
Model
):
"""Network interface template for an instance template.
"""Network interface template for an instance template.
If the interface is managed, a host will be created for it.
If the interface is managed, a host will be created for it.
...
@@ -200,6 +208,7 @@ class InterfaceTemplate(models.Model):
...
@@ -200,6 +208,7 @@ class InterfaceTemplate(models.Model):
class
Instance
(
BaseResourceConfigModel
,
TimeStampedModel
):
class
Instance
(
BaseResourceConfigModel
,
TimeStampedModel
):
"""Virtual machine instance.
"""Virtual machine instance.
Every instance has:
Every instance has:
...
@@ -388,15 +397,8 @@ class Instance(BaseResourceConfigModel, TimeStampedModel):
...
@@ -388,15 +397,8 @@ class Instance(BaseResourceConfigModel, TimeStampedModel):
except
:
except
:
return
return
def
deploy
(
self
):
def
get_vm_desc
(
self
):
''' Launch celery task to handle asyncron jobs.
return
{
'''
manager
.
deploy
.
apply_async
(
self
)
def
deploy_task
(
self
):
''' Deploy virtual machine on remote node
'''
instance
=
{
'name'
:
'cloud-'
+
self
.
id
,
'name'
:
'cloud-'
+
self
.
id
,
'vcpu'
:
self
.
num_cores
,
'vcpu'
:
self
.
num_cores
,
'memory'
:
self
.
ram_size
,
'memory'
:
self
.
ram_size
,
...
@@ -413,7 +415,42 @@ class Instance(BaseResourceConfigModel, TimeStampedModel):
...
@@ -413,7 +415,42 @@ class Instance(BaseResourceConfigModel, TimeStampedModel):
'port'
:
self
.
get_vnc_port
()},
'port'
:
self
.
get_vnc_port
()},
'raw_data'
:
self
.
raw_data
'raw_data'
:
self
.
raw_data
}
}
tasks
.
create
.
apply_async
(
instance
,
queue
=
self
.
node
+
".vm"
)
.
get
()
def
deploy_async
(
self
):
''' Launch celery task to handle asyncron jobs.
'''
manager
.
deploy
.
apply_async
(
self
)
def
deploy
(
self
,
user
,
task_uuid
=
None
):
''' Deploy new virtual machine with network
1. Schedule
'''
act
=
InstanceActivity
(
user
=
user
,
task_uuid
=
task_uuid
)
# Schedule
act
.
update_state
(
"PENDING"
)
self
.
node
=
scheduler
.
get_node
()
# Create virtual images
act
.
update_state
(
"PREPARING DISKS"
)
for
disk
in
self
.
disks
:
disk
.
deploy
()
# Deploy VM on remote machine
act
.
update_state
(
"DEPLOYING VM"
)
tasks
.
create
.
apply_async
(
self
.
get_vm_desc
,
queue
=
self
.
node
+
".vm"
)
.
get
()
# Estabilish network connection (vmdriver)
act
.
update_state
(
"DEPLOYING NET"
)
for
net
in
self
.
interface_set
.
all
():
net
.
deploy
()
# Resume vm
act
.
update_state
(
"BOOTING"
)
tasks
.
resume
.
apply_async
(
"cloud-"
+
self
.
id
,
queue
=
self
.
node
+
".vm"
)
.
get
()
act
.
finish
()
def
stop
(
self
):
def
stop
(
self
):
# TODO implement
# TODO implement
...
@@ -476,7 +513,8 @@ def delete_instance_pre(sender, instance, using, **kwargs):
...
@@ -476,7 +513,8 @@ def delete_instance_pre(sender, instance, using, **kwargs):
class
InstanceActivity
(
TimeStampedModel
):
class
InstanceActivity
(
TimeStampedModel
):
activity_code
=
models
.
CharField
(
max_length
=
100
)
activity_code
=
models
.
CharField
(
max_length
=
100
)
task_uuid
=
models
.
CharField
(
max_length
=
50
,
unique
=
True
)
task_uuid
=
models
.
CharField
(
max_length
=
50
,
unique
=
True
,
null
=
True
,
blank
=
True
)
instance
=
models
.
ForeignKey
(
Instance
,
related_name
=
'activity_log'
)
instance
=
models
.
ForeignKey
(
Instance
,
related_name
=
'activity_log'
)
user
=
models
.
ForeignKey
(
User
,
blank
=
True
,
null
=
True
)
user
=
models
.
ForeignKey
(
User
,
blank
=
True
,
null
=
True
)
started
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
started
=
models
.
DateTimeField
(
blank
=
True
,
null
=
True
)
...
@@ -484,6 +522,18 @@ class InstanceActivity(TimeStampedModel):
...
@@ -484,6 +522,18 @@ class InstanceActivity(TimeStampedModel):
result
=
models
.
TextField
(
blank
=
True
,
null
=
True
)
result
=
models
.
TextField
(
blank
=
True
,
null
=
True
)
status
=
models
.
CharField
(
default
=
'PENDING'
,
max_length
=
50
)
status
=
models
.
CharField
(
default
=
'PENDING'
,
max_length
=
50
)
def
__init__
(
self
):
# TODO
pass
def
update_state
(
self
):
# TODO
pass
def
finish
(
self
):
# TODO
pass
class
Interface
(
models
.
Model
):
class
Interface
(
models
.
Model
):
...
...
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