Revision 58194535
b/snf-cyclades-app/synnefo/api/util.py | ||
---|---|---|
211 | 211 |
raise faults.ItemNotFound('Flavor not found.') |
212 | 212 |
|
213 | 213 |
|
214 |
def get_flavor_provider(flavor): |
|
215 |
"""Extract provider from disk template. |
|
216 |
|
|
217 |
Provider for `ext` disk_template is encoded in the disk template |
|
218 |
name, which is formed `ext_<provider_name>`. Provider is None |
|
219 |
for all other disk templates. |
|
220 |
|
|
221 |
""" |
|
222 |
disk_template = flavor.disk_template |
|
223 |
provider = None |
|
224 |
if disk_template.startswith("ext"): |
|
225 |
disk_template, provider = disk_template.split("_", 1) |
|
226 |
return disk_template, provider |
|
227 |
|
|
228 |
|
|
229 | 214 |
def get_network(network_id, user_id, for_update=False, non_deleted=False): |
230 | 215 |
"""Return a Network instance or raise ItemNotFound.""" |
231 | 216 |
|
b/snf-cyclades-app/synnefo/db/models.py | ||
---|---|---|
1011 | 1011 |
userid = models.CharField("Owner's UUID", max_length=100, null=False, |
1012 | 1012 |
db_index=True) |
1013 | 1013 |
size = models.IntegerField("Volume size in GB", null=False) |
1014 |
disk_template = models.CharField('Disk template', max_length=32, |
|
1015 |
null=False) |
|
1016 |
|
|
1014 | 1017 |
delete_on_termination = models.BooleanField("Delete on Server Termination", |
1015 | 1018 |
default=True, null=False) |
1016 | 1019 |
|
... | ... | |
1068 | 1071 |
return None |
1069 | 1072 |
|
1070 | 1073 |
@property |
1071 |
def disk_template(self): |
|
1072 |
if self.machine is None: |
|
1073 |
return None |
|
1074 |
else: |
|
1075 |
disk_template = self.machine.flavor.disk_template |
|
1076 |
return disk_template.split("_")[0] |
|
1074 |
def template(self): |
|
1075 |
return self.disk_template.split("_")[0] |
|
1077 | 1076 |
|
1078 | 1077 |
@property |
1079 |
def disk_provider(self):
|
|
1080 |
if self.machine is None:
|
|
1081 |
return None
|
|
1078 |
def provider(self): |
|
1079 |
if "_" in self.disk_template:
|
|
1080 |
return self.disk_template.split("_")[1]
|
|
1082 | 1081 |
else: |
1083 |
disk_template = self.machine.flavor.disk_template |
|
1084 |
if "_" in disk_template: |
|
1085 |
return disk_template.split("_")[1] |
|
1086 |
else: |
|
1087 |
return None |
|
1082 |
return None |
|
1088 | 1083 |
|
1089 | 1084 |
@staticmethod |
1090 | 1085 |
def prefix_source(source_id, source_type): |
b/snf-cyclades-app/synnefo/logic/backend.py | ||
---|---|---|
716 | 716 |
for volume in volumes: |
717 | 717 |
disk = {"name": volume.backend_volume_uuid, |
718 | 718 |
"size": volume.size * 1024} |
719 |
provider = flavor.disk_provider
|
|
719 |
provider = volume.provider
|
|
720 | 720 |
if provider is not None: |
721 | 721 |
disk["provider"] = provider |
722 | 722 |
disk["origin"] = volume.origin |
b/snf-cyclades-app/synnefo/volume/util.py | ||
---|---|---|
57 | 57 |
def snapshot_to_links(snapshot_id): |
58 | 58 |
href = join_urls(SNAPSHOTS_URL, str(snapshot_id)) |
59 | 59 |
return [{"rel": rel, "href": href} for rel in ("self", "bookmark")] |
60 |
|
|
61 |
|
|
62 |
def get_disk_template_provider(disk_template): |
|
63 |
"""Extract provider from disk template. |
|
64 |
|
|
65 |
Provider for `ext` disk_template is encoded in the disk template |
|
66 |
name, which is formed `ext_<provider_name>`. Provider is None |
|
67 |
for all other disk templates. |
|
68 |
|
|
69 |
""" |
|
70 |
provider = None |
|
71 |
if disk_template.startswith("ext") and "_" in disk_template: |
|
72 |
disk_template, provider = disk_template.split("_", 1) |
|
73 |
return disk_template, provider |
b/snf-cyclades-app/synnefo/volume/volumes.py | ||
---|---|---|
1 | 1 |
import logging |
2 | 2 |
|
3 | 3 |
from django.db import transaction |
4 |
from django.conf import settings |
|
4 | 5 |
from snf_django.lib.api import faults |
5 | 6 |
from synnefo.db.models import Volume |
6 | 7 |
from synnefo.volume import util |
... | ... | |
57 | 58 |
# Only ext_ disk template supports cloning from another source. Otherwise |
58 | 59 |
# is must be the root volume so that 'snf-image' fill the volume |
59 | 60 |
disk_template = server.flavor.disk_template |
60 |
can_have_source = (index == 0 or disk_template.startswith("ext_")) |
|
61 |
teplate, provider = util.get_disk_template_provider(disk_template) |
|
62 |
can_have_source = (index == 0 or |
|
63 |
provider in settings.GANETI_CLONE_PROVIDERS) |
|
61 | 64 |
if not can_have_source and source_type != "blank": |
62 | 65 |
msg = ("Volumes of '%s' disk template cannot have a source" % |
63 | 66 |
disk_template) |
... | ... | |
111 | 114 |
|
112 | 115 |
volume = Volume.objects.create(userid=user_id, |
113 | 116 |
size=size, |
117 |
disk_template=disk_template, |
|
114 | 118 |
name=name, |
115 | 119 |
machine=server, |
116 | 120 |
description=description, |
Also available in: Unified diff