root / db / models.py @ be7b8d37
History | View | Annotate | Download (3 kB)
1 |
# vim: ts=4 sts=4 et ai sw=4 fileencoding=utf-8
|
---|---|
2 |
|
3 |
from django.db import models |
4 |
from django.contrib.auth.models import User |
5 |
import vocabs |
6 |
|
7 |
class Limit(models.Model): |
8 |
description = models.CharField(max_length=45)
|
9 |
|
10 |
class Meta: |
11 |
verbose_name = u'Available limits for users'
|
12 |
|
13 |
def __unicode__(self): |
14 |
return self.description |
15 |
|
16 |
|
17 |
class OceanUser(models.Model): |
18 |
name = models.CharField(max_length=255)
|
19 |
credit = models.IntegerField() |
20 |
quota = models.IntegerField() |
21 |
created = models.DateField() |
22 |
monthly_rate = models.IntegerField() |
23 |
user = models.ForeignKey(User, unique=True)
|
24 |
limits = models.ManyToManyField(Limit, through='UserLimit')
|
25 |
|
26 |
class Meta: |
27 |
verbose_name = u'Ocean User'
|
28 |
|
29 |
def __unicode__(self): |
30 |
return self.name |
31 |
|
32 |
|
33 |
class UserLimit(models.Model): |
34 |
user = models.ForeignKey(OceanUser) |
35 |
limit = models.ForeignKey(Limit) |
36 |
value = models.IntegerField() |
37 |
|
38 |
class Meta: |
39 |
unique_together = ('user', 'limit') |
40 |
verbose_name = u'Enforced limits for each user'
|
41 |
|
42 |
def __unicode__(self): |
43 |
return u'Limit %s for user %s: %d' % (self.limit, self.user, self.value) |
44 |
|
45 |
|
46 |
class Flavor(models.Model): |
47 |
cpu = models.IntegerField(default=0)
|
48 |
ram = models.IntegerField(default=0)
|
49 |
disk = models.IntegerField(default=0)
|
50 |
cost_active = models.PositiveIntegerField() |
51 |
cost_inactive = models.PositiveIntegerField() |
52 |
|
53 |
class Meta: |
54 |
verbose_name = u'Virtual Machine flavors'
|
55 |
|
56 |
def _get_name(self): |
57 |
return u'c%dr%dd%d' % ( self.cpu, self.ram, self.disk ) |
58 |
|
59 |
name = property(_get_name)
|
60 |
|
61 |
def __unicode__(self): |
62 |
return self.name |
63 |
|
64 |
|
65 |
class VirtualMachine(models.Model): |
66 |
name = models.CharField(max_length=255)
|
67 |
created = models.DateTimeField() |
68 |
state = models.CharField(choices=vocabs.STATES, max_length=30)
|
69 |
charged = models.DateTimeField() |
70 |
imageid = models.IntegerField() |
71 |
hostid = models.CharField(max_length=100)
|
72 |
server_label = models.CharField(max_length=100)
|
73 |
image_version = models.CharField(max_length=100)
|
74 |
ipfour = models.IPAddressField() |
75 |
ipsix = models.CharField(max_length=100)
|
76 |
owner = models.ForeignKey(OceanUser) |
77 |
flavor = models.ForeignKey(Flavor) |
78 |
|
79 |
class Meta: |
80 |
verbose_name = u'Virtual machine instances'
|
81 |
get_latest_by = 'created'
|
82 |
|
83 |
def __unicode__(self): |
84 |
return self.name |
85 |
|
86 |
|
87 |
class VirtualMachineMetadata(models.Model): |
88 |
meta_key = models.CharField(max_length=50)
|
89 |
meta_value = models.CharField(max_length=500)
|
90 |
vm = models.ForeignKey(VirtualMachine) |
91 |
|
92 |
class Meta: |
93 |
verbose_name = u'Metadata for virtual machine instances'
|
94 |
|
95 |
def __unicode__(self): |
96 |
return u'%s, %s for %s' % ( self.key, self.value, self.vm.name ) |
97 |
|
98 |
|
99 |
class AccountingLog(models.Model): |
100 |
vm = models.ForeignKey(VirtualMachine) |
101 |
date = models.DateTimeField() |
102 |
state = models.CharField(choices=vocabs.STATES, max_length=30)
|
103 |
|
104 |
class Meta: |
105 |
verbose_name = u'Charging log'
|
106 |
|
107 |
def __unicode__(self): |
108 |
return u'%s %s %s' % ( self.vm.name, self.date, self.state ) |