root / db / models.py @ fcbc5bb3
History | View | Annotate | Download (4.5 kB)
1 | 46547e14 | Faidon Liambotis | # vim: ts=4 sts=4 et ai sw=4 fileencoding=utf-8
|
---|---|---|---|
2 | 46547e14 | Faidon Liambotis | |
3 | 9dbe70f8 | Markos Gogoulos | from django.conf import settings |
4 | 17935f41 | Vassilios Karakoidas | from django.db import models |
5 | 78dec216 | Vassilios Karakoidas | from django.contrib.auth.models import User |
6 | 38684389 | Markos Gogoulos | from django.utils.translation import gettext_lazy as _ |
7 | 9dbe70f8 | Markos Gogoulos | |
8 | 38684389 | Markos Gogoulos | import datetime |
9 | 38684389 | Markos Gogoulos | |
10 | be7b8d37 | Vassilios Karakoidas | import vocabs |
11 | 17935f41 | Vassilios Karakoidas | |
12 | 9dbe70f8 | Markos Gogoulos | ganeti_prefix_id = settings.GANETI_PREFIX_ID |
13 | 9dbe70f8 | Markos Gogoulos | |
14 | 9dbe70f8 | Markos Gogoulos | |
15 | 9dbe70f8 | Markos Gogoulos | def id_from_instance_name(name): |
16 | 9dbe70f8 | Markos Gogoulos | "Returns VirtualMachine's Django id, given a ganeti machine name"
|
17 | 9dbe70f8 | Markos Gogoulos | "Strips the ganeti prefix atm. Needs a better name!"
|
18 | 9dbe70f8 | Markos Gogoulos | return '%s' % (str(name).strip(ganeti_prefix_id)) |
19 | 9dbe70f8 | Markos Gogoulos | |
20 | 9dbe70f8 | Markos Gogoulos | |
21 | 46547e14 | Faidon Liambotis | class Limit(models.Model): |
22 | 46547e14 | Faidon Liambotis | description = models.CharField(max_length=45)
|
23 | be7b8d37 | Vassilios Karakoidas | |
24 | be7b8d37 | Vassilios Karakoidas | class Meta: |
25 | be7b8d37 | Vassilios Karakoidas | verbose_name = u'Available limits for users'
|
26 | be7b8d37 | Vassilios Karakoidas | |
27 | 46547e14 | Faidon Liambotis | def __unicode__(self): |
28 | 46547e14 | Faidon Liambotis | return self.description |
29 | 46547e14 | Faidon Liambotis | |
30 | 07f3219d | Vassilios Karakoidas | |
31 | f0e91699 | Vassilios Karakoidas | class OceanUser(models.Model): |
32 | 46547e14 | Faidon Liambotis | name = models.CharField(max_length=255)
|
33 | 46547e14 | Faidon Liambotis | credit = models.IntegerField() |
34 | 46547e14 | Faidon Liambotis | quota = models.IntegerField() |
35 | 46547e14 | Faidon Liambotis | created = models.DateField() |
36 | 3f04688d | Vassilios Karakoidas | monthly_rate = models.IntegerField() |
37 | be7b8d37 | Vassilios Karakoidas | user = models.ForeignKey(User, unique=True)
|
38 | 46547e14 | Faidon Liambotis | limits = models.ManyToManyField(Limit, through='UserLimit')
|
39 | be7b8d37 | Vassilios Karakoidas | |
40 | be7b8d37 | Vassilios Karakoidas | class Meta: |
41 | be7b8d37 | Vassilios Karakoidas | verbose_name = u'Ocean User'
|
42 | be7b8d37 | Vassilios Karakoidas | |
43 | 46547e14 | Faidon Liambotis | def __unicode__(self): |
44 | 46547e14 | Faidon Liambotis | return self.name |
45 | fa672379 | Vassilios Karakoidas | |
46 | fa672379 | Vassilios Karakoidas | def allocateCredit(self): |
47 | fa672379 | Vassilios Karakoidas | """
|
48 | fa672379 | Vassilios Karakoidas | Allocate credits. Add monthly rate to user credit reserve
|
49 | fa672379 | Vassilios Karakoidas | """
|
50 | fa672379 | Vassilios Karakoidas | self.credit = self.credit + self.monthly_rate |
51 | fa672379 | Vassilios Karakoidas | |
52 | fcbc5bb3 | Vassilios Karakoidas | # ensure that the user has not more credits than his quota
|
53 | fa672379 | Vassilios Karakoidas | if self.credit > self.quota: |
54 | fa672379 | Vassilios Karakoidas | self.credit = self.quota |
55 | 07f3219d | Vassilios Karakoidas | |
56 | e7164ebc | Vassilios Karakoidas | class UserLimit(models.Model): |
57 | 78dec216 | Vassilios Karakoidas | user = models.ForeignKey(OceanUser) |
58 | 46547e14 | Faidon Liambotis | limit = models.ForeignKey(Limit) |
59 | 46547e14 | Faidon Liambotis | value = models.IntegerField() |
60 | be7b8d37 | Vassilios Karakoidas | |
61 | 46547e14 | Faidon Liambotis | class Meta: |
62 | 46547e14 | Faidon Liambotis | unique_together = ('user', 'limit') |
63 | be7b8d37 | Vassilios Karakoidas | verbose_name = u'Enforced limits for each user'
|
64 | be7b8d37 | Vassilios Karakoidas | |
65 | 46547e14 | Faidon Liambotis | def __unicode__(self): |
66 | 46547e14 | Faidon Liambotis | return u'Limit %s for user %s: %d' % (self.limit, self.user, self.value) |
67 | 46547e14 | Faidon Liambotis | |
68 | e7164ebc | Vassilios Karakoidas | |
69 | e7164ebc | Vassilios Karakoidas | class Flavor(models.Model): |
70 | be7b8d37 | Vassilios Karakoidas | cpu = models.IntegerField(default=0)
|
71 | be7b8d37 | Vassilios Karakoidas | ram = models.IntegerField(default=0)
|
72 | be7b8d37 | Vassilios Karakoidas | disk = models.IntegerField(default=0)
|
73 | 46547e14 | Faidon Liambotis | cost_active = models.PositiveIntegerField() |
74 | 46547e14 | Faidon Liambotis | cost_inactive = models.PositiveIntegerField() |
75 | be7b8d37 | Vassilios Karakoidas | |
76 | be7b8d37 | Vassilios Karakoidas | class Meta: |
77 | be7b8d37 | Vassilios Karakoidas | verbose_name = u'Virtual Machine flavors'
|
78 | be7b8d37 | Vassilios Karakoidas | |
79 | be7b8d37 | Vassilios Karakoidas | def _get_name(self): |
80 | be7b8d37 | Vassilios Karakoidas | return u'c%dr%dd%d' % ( self.cpu, self.ram, self.disk ) |
81 | 46547e14 | Faidon Liambotis | |
82 | be7b8d37 | Vassilios Karakoidas | name = property(_get_name)
|
83 | 00318048 | Vassilios Karakoidas | |
84 | 46547e14 | Faidon Liambotis | def __unicode__(self): |
85 | 46547e14 | Faidon Liambotis | return self.name |
86 | 46547e14 | Faidon Liambotis | |
87 | 46547e14 | Faidon Liambotis | |
88 | 07f3219d | Vassilios Karakoidas | class VirtualMachine(models.Model): |
89 | 46547e14 | Faidon Liambotis | name = models.CharField(max_length=255)
|
90 | 46547e14 | Faidon Liambotis | created = models.DateTimeField() |
91 | be7b8d37 | Vassilios Karakoidas | state = models.CharField(choices=vocabs.STATES, max_length=30)
|
92 | be7b8d37 | Vassilios Karakoidas | charged = models.DateTimeField() |
93 | 22571df6 | Vassilios Karakoidas | imageid = models.IntegerField() |
94 | 22571df6 | Vassilios Karakoidas | hostid = models.CharField(max_length=100)
|
95 | 22571df6 | Vassilios Karakoidas | server_label = models.CharField(max_length=100)
|
96 | 22571df6 | Vassilios Karakoidas | image_version = models.CharField(max_length=100)
|
97 | be7b8d37 | Vassilios Karakoidas | ipfour = models.IPAddressField() |
98 | be7b8d37 | Vassilios Karakoidas | ipsix = models.CharField(max_length=100)
|
99 | 78dec216 | Vassilios Karakoidas | owner = models.ForeignKey(OceanUser) |
100 | 46547e14 | Faidon Liambotis | flavor = models.ForeignKey(Flavor) |
101 | be7b8d37 | Vassilios Karakoidas | |
102 | 46547e14 | Faidon Liambotis | class Meta: |
103 | 07f3219d | Vassilios Karakoidas | verbose_name = u'Virtual machine instances'
|
104 | 46547e14 | Faidon Liambotis | get_latest_by = 'created'
|
105 | be7b8d37 | Vassilios Karakoidas | |
106 | 46547e14 | Faidon Liambotis | def __unicode__(self): |
107 | 46547e14 | Faidon Liambotis | return self.name |
108 | 7cfb3877 | Vassilios Karakoidas | |
109 | 9dbe70f8 | Markos Gogoulos | def _get_ganeti_id(self): |
110 | 9dbe70f8 | Markos Gogoulos | "Returns the ganeti-prefix + id of the VM, for ganeti"
|
111 | 9dbe70f8 | Markos Gogoulos | return '%s%s' % (ganeti_prefix_id, str(self.id)) |
112 | 5b32775a | Vassilios Karakoidas | |
113 | 9dbe70f8 | Markos Gogoulos | ganeti_id = property(_get_ganeti_id)
|
114 | 22571df6 | Vassilios Karakoidas | |
115 | be7b8d37 | Vassilios Karakoidas | class VirtualMachineMetadata(models.Model): |
116 | be7b8d37 | Vassilios Karakoidas | meta_key = models.CharField(max_length=50)
|
117 | be7b8d37 | Vassilios Karakoidas | meta_value = models.CharField(max_length=500)
|
118 | be7b8d37 | Vassilios Karakoidas | vm = models.ForeignKey(VirtualMachine) |
119 | be7b8d37 | Vassilios Karakoidas | |
120 | be7b8d37 | Vassilios Karakoidas | class Meta: |
121 | be7b8d37 | Vassilios Karakoidas | verbose_name = u'Metadata for virtual machine instances'
|
122 | be7b8d37 | Vassilios Karakoidas | |
123 | be7b8d37 | Vassilios Karakoidas | def __unicode__(self): |
124 | be7b8d37 | Vassilios Karakoidas | return u'%s, %s for %s' % ( self.key, self.value, self.vm.name ) |
125 | be7b8d37 | Vassilios Karakoidas | |
126 | be7b8d37 | Vassilios Karakoidas | |
127 | a09c1220 | Vassilios Karakoidas | class AccountingLog(models.Model): |
128 | 46547e14 | Faidon Liambotis | vm = models.ForeignKey(VirtualMachine) |
129 | 46547e14 | Faidon Liambotis | date = models.DateTimeField() |
130 | be7b8d37 | Vassilios Karakoidas | state = models.CharField(choices=vocabs.STATES, max_length=30)
|
131 | be7b8d37 | Vassilios Karakoidas | |
132 | 46547e14 | Faidon Liambotis | class Meta: |
133 | 46547e14 | Faidon Liambotis | verbose_name = u'Charging log'
|
134 | be7b8d37 | Vassilios Karakoidas | |
135 | 5b32775a | Vassilios Karakoidas | def __unicode__(self): |
136 | 5b32775a | Vassilios Karakoidas | return u'%s %s %s' % ( self.vm.name, self.date, self.state ) |
137 | 38684389 | Markos Gogoulos | |
138 | 38684389 | Markos Gogoulos | |
139 | 38684389 | Markos Gogoulos | class Image(models.Model): |
140 | 38684389 | Markos Gogoulos | name = models.CharField(max_length=255, help_text=_('description')) |
141 | 38684389 | Markos Gogoulos | updated = models.DateTimeField(help_text=_("Image update date"))
|
142 | 38684389 | Markos Gogoulos | created = models.DateTimeField(help_text=_("Image creation date"), default=datetime.datetime.now)
|
143 | 38684389 | Markos Gogoulos | state = models.CharField(choices=vocabs.STATES, max_length=30)
|
144 | 38684389 | Markos Gogoulos | description = models.TextField(help_text=_('description'))
|
145 | 38684389 | Markos Gogoulos | serverid = models.IntegerField(help_text=_('description'))
|
146 | 5b32775a | Vassilios Karakoidas | vm = models.ForeignKey(VirtualMachine) |
147 | 38684389 | Markos Gogoulos | |
148 | 38684389 | Markos Gogoulos | class Meta: |
149 | 38684389 | Markos Gogoulos | verbose_name = u'Image'
|
150 | 38684389 | Markos Gogoulos | |
151 | 5b32775a | Vassilios Karakoidas | def __unicode__(self): |
152 | 5b32775a | Vassilios Karakoidas | return u'%s' % ( self.name ) |