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
Commit
f6e1dcbe
authored
Mar 18, 2014
by
Guba Sándor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
save_as fixes
parent
4db5bd68
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
41 additions
and
23 deletions
+41
-23
circle/storage/models.py
+17
-3
circle/storage/tasks/periodic_tasks.py
+6
-5
circle/vm/models/instance.py
+18
-15
No files found.
circle/storage/models.py
View file @
f6e1dcbe
...
@@ -107,6 +107,18 @@ class Disk(AclBase, TimeStampedModel):
...
@@ -107,6 +107,18 @@ class Disk(AclBase, TimeStampedModel):
self
.
disk
=
disk
self
.
disk
=
disk
class
DiskIsNotReady
(
Exception
):
def
__init__
(
self
,
disk
,
message
=
None
):
if
message
is
None
:
message
=
(
"The requested operation can'T be performed on "
"disk '
%
s (
%
s)' because it has never been"
"deployed."
%
(
disk
.
name
,
disk
.
filename
))
Exception
.
__init__
(
self
,
message
)
self
.
disk
=
disk
@property
@property
def
ready
(
self
):
def
ready
(
self
):
return
self
.
activity_log
.
filter
(
activity_code__endswith
=
"deploy"
,
return
self
.
activity_log
.
filter
(
activity_code__endswith
=
"deploy"
,
...
@@ -306,6 +318,7 @@ class Disk(AclBase, TimeStampedModel):
...
@@ -306,6 +318,7 @@ class Disk(AclBase, TimeStampedModel):
datastore
=
params
.
pop
(
'datastore'
,
DataStore
.
objects
.
get
())
datastore
=
params
.
pop
(
'datastore'
,
DataStore
.
objects
.
get
())
disk
=
cls
(
filename
=
str
(
uuid
.
uuid4
()),
datastore
=
datastore
,
**
params
)
disk
=
cls
(
filename
=
str
(
uuid
.
uuid4
()),
datastore
=
datastore
,
**
params
)
disk
.
save
()
disk
.
save
()
logger
.
debug
(
"Disk created:
%
s"
,
params
)
with
disk_activity
(
code_suffix
=
"create"
,
with
disk_activity
(
code_suffix
=
"create"
,
user
=
user
,
user
=
user
,
disk
=
disk
):
disk
=
disk
):
...
@@ -366,8 +379,6 @@ class Disk(AclBase, TimeStampedModel):
...
@@ -366,8 +379,6 @@ class Disk(AclBase, TimeStampedModel):
kwargs
.
setdefault
(
'name'
,
url
.
split
(
'/'
)[
-
1
])
kwargs
.
setdefault
(
'name'
,
url
.
split
(
'/'
)[
-
1
])
disk
=
Disk
.
create
(
type
=
"iso"
,
instance
=
instance
,
user
=
user
,
disk
=
Disk
.
create
(
type
=
"iso"
,
instance
=
instance
,
user
=
user
,
size
=
None
,
**
kwargs
)
size
=
None
,
**
kwargs
)
# TODO get proper datastore
disk
.
datastore
=
DataStore
.
objects
.
get
()
queue_name
=
disk
.
get_remote_queue_name
(
'storage'
)
queue_name
=
disk
.
get_remote_queue_name
(
'storage'
)
def
__on_abort
(
activity
,
error
):
def
__on_abort
(
activity
,
error
):
...
@@ -439,6 +450,7 @@ class Disk(AclBase, TimeStampedModel):
...
@@ -439,6 +450,7 @@ class Disk(AclBase, TimeStampedModel):
"""
"""
mapping
=
{
mapping
=
{
'qcow2-snap'
:
(
'qcow2-norm'
,
self
.
base
),
'qcow2-snap'
:
(
'qcow2-norm'
,
self
.
base
),
'qcow2-norm'
:
(
'qcow2-norm'
,
self
),
}
}
if
self
.
type
not
in
mapping
.
keys
():
if
self
.
type
not
in
mapping
.
keys
():
raise
self
.
WrongDiskTypeError
(
self
.
type
)
raise
self
.
WrongDiskTypeError
(
self
.
type
)
...
@@ -446,6 +458,9 @@ class Disk(AclBase, TimeStampedModel):
...
@@ -446,6 +458,9 @@ class Disk(AclBase, TimeStampedModel):
if
self
.
is_in_use
:
if
self
.
is_in_use
:
raise
self
.
DiskInUseError
(
self
)
raise
self
.
DiskInUseError
(
self
)
if
not
self
.
ready
:
raise
self
.
DiskIsNotReady
(
self
)
# from this point on, the caller has to guarantee that the disk is not
# from this point on, the caller has to guarantee that the disk is not
# going to be used until the operation is complete
# going to be used until the operation is complete
...
@@ -455,7 +470,6 @@ class Disk(AclBase, TimeStampedModel):
...
@@ -455,7 +470,6 @@ class Disk(AclBase, TimeStampedModel):
name
=
self
.
name
,
size
=
self
.
size
,
name
=
self
.
name
,
size
=
self
.
size
,
type
=
new_type
)
type
=
new_type
)
disk
.
save
()
with
disk_activity
(
code_suffix
=
"save_as"
,
disk
=
self
,
with
disk_activity
(
code_suffix
=
"save_as"
,
disk
=
self
,
user
=
user
,
task_uuid
=
task_uuid
):
user
=
user
,
task_uuid
=
task_uuid
):
with
disk_activity
(
code_suffix
=
"deploy"
,
disk
=
disk
,
with
disk_activity
(
code_suffix
=
"deploy"
,
disk
=
disk
,
...
...
circle/storage/tasks/periodic_tasks.py
View file @
f6e1dcbe
from
storage.models
import
DataStore
from
storage.models
import
DataStore
import
os
from
manager.mancelery
import
celery
from
manager.mancelery
import
celery
import
logging
import
logging
from
storage.tasks
import
remote_tasks
from
storage.tasks
import
remote_tasks
...
@@ -16,13 +15,15 @@ def garbage_collector(timeout=15):
...
@@ -16,13 +15,15 @@ def garbage_collector(timeout=15):
deletes oldest images from trash.
deletes oldest images from trash.
:param timeout: Seconds before TimeOut exception
:param timeout: Seconds before TimeOut exception
:type timeo
i
t: int
:type timeo
u
t: int
"""
"""
for
ds
in
DataStore
.
objects
.
all
():
for
ds
in
DataStore
.
objects
.
all
():
file_list
=
os
.
listdir
(
ds
.
path
)
disk_list
=
ds
.
get_deletable_disks
()
queue_name
=
ds
.
get_remote_queue_name
(
'storage'
)
queue_name
=
ds
.
get_remote_queue_name
(
'storage'
)
for
i
in
set
(
file_list
)
.
intersection
(
disk_list
):
files
=
set
(
remote_tasks
.
list_files
.
apply_async
(
args
=
[
ds
.
path
],
queue
=
queue_name
)
.
get
(
timeout
=
timeout
))
disks
=
set
(
ds
.
get_deletable_disks
())
queue_name
=
ds
.
get_remote_queue_name
(
'storage'
)
for
i
in
disks
&
files
:
logger
.
info
(
"Image:
%
s at Datastore:
%
s moved to trash folder."
%
logger
.
info
(
"Image:
%
s at Datastore:
%
s moved to trash folder."
%
(
i
,
ds
.
path
))
(
i
,
ds
.
path
))
remote_tasks
.
move_to_trash
.
apply_async
(
remote_tasks
.
move_to_trash
.
apply_async
(
...
...
circle/vm/models/instance.py
View file @
f6e1dcbe
...
@@ -1128,20 +1128,23 @@ class Instance(AclBase, VirtualMachineDescModel, StatusModel,
...
@@ -1128,20 +1128,23 @@ class Instance(AclBase, VirtualMachineDescModel, StatusModel,
with
instance_activity
(
code_suffix
=
"save_as_template"
,
instance
=
self
,
with
instance_activity
(
code_suffix
=
"save_as_template"
,
instance
=
self
,
task_uuid
=
task_uuid
,
user
=
user
)
as
act
:
task_uuid
=
task_uuid
,
user
=
user
)
as
act
:
# prepare parameters
# prepare parameters
kwargs
.
setdefault
(
'name'
,
name
)
params
=
{
kwargs
.
setdefault
(
'description'
,
self
.
description
)
'access_method'
:
self
.
access_method
,
kwargs
.
setdefault
(
'parent'
,
self
.
template
)
'arch'
:
self
.
arch
,
kwargs
.
setdefault
(
'num_cores'
,
self
.
num_cores
)
'boot_menu'
:
self
.
boot_menu
,
kwargs
.
setdefault
(
'ram_size'
,
self
.
ram_size
)
'description'
:
self
.
description
,
kwargs
.
setdefault
(
'max_ram_size'
,
self
.
max_ram_size
)
'lease'
:
self
.
lease
,
# Can be problem in new VM
kwargs
.
setdefault
(
'arch'
,
self
.
arch
)
'max_ram_size'
:
self
.
max_ram_size
,
kwargs
.
setdefault
(
'priority'
,
self
.
priority
)
'name'
:
name
,
kwargs
.
setdefault
(
'boot_menu'
,
self
.
boot_menu
)
'num_cores'
:
self
.
num_cores
,
kwargs
.
setdefault
(
'raw_data'
,
self
.
raw_data
)
'owner'
:
user
,
kwargs
.
setdefault
(
'lease'
,
self
.
lease
)
'parent'
:
self
.
template
,
# Can be problem
kwargs
.
setdefault
(
'access_method'
,
self
.
access_method
)
'priority'
:
self
.
priority
,
kwargs
.
setdefault
(
'system'
,
self
.
template
.
system
'ram_size'
:
self
.
ram_size
,
if
self
.
template
else
None
)
'raw_data'
:
self
.
raw_data
,
'system'
:
self
.
template
.
system
if
self
.
template
else
""
,
}
params
.
update
(
kwargs
)
def
__try_save_disk
(
disk
):
def
__try_save_disk
(
disk
):
try
:
try
:
...
@@ -1150,7 +1153,7 @@ class Instance(AclBase, VirtualMachineDescModel, StatusModel,
...
@@ -1150,7 +1153,7 @@ class Instance(AclBase, VirtualMachineDescModel, StatusModel,
return
disk
return
disk
# create template and do additional setup
# create template and do additional setup
tmpl
=
InstanceTemplate
(
**
kwarg
s
)
tmpl
=
InstanceTemplate
(
**
param
s
)
tmpl
.
full_clean
()
# Avoiding database errors.
tmpl
.
full_clean
()
# Avoiding database errors.
tmpl
.
save
()
tmpl
.
save
()
with
act
.
sub_activity
(
'saving_disks'
):
with
act
.
sub_activity
(
'saving_disks'
):
...
...
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