Revision 52194743

b/db/fixtures/db_test_data.json
1
[
2
    {
3
        "model": "db.SynnefoUser",
4
        "pk": 1,
5
        "fields": {
6
            "name": "admin user",
7
            "created": "2011-02-06 00:00:00",
8
            "updated": "2011-02-06 00:00:00",
9
            "credit": 1,
10
            "monthly_rate": 1,
11
            "user" : 1,
12
            "violations" : 0
13
   	    }
14
    },
15
    {
16
        "model": "db.Flavor",
17
        "pk": 1,
18
        "fields": {
19
            "cpu": 1,
20
            "ram": 1024,
21
            "disk": 10
22
        }
23
    },
24
    {
25
        "model": "db.Flavor",
26
        "pk": 2,
27
        "fields": {
28
            "cpu": 1,
29
            "ram": 1024,
30
            "disk": 10
31
        }
32
    },
33
    {
34
        "model": "db.VirtualMachine",
35
        "pk": 1001,
36
        "fields": {
37
            "name": "snf-1001",
38
            "created": "2011-02-06 00:00:00",
39
            "updated": "2011-02-06 00:00:00",
40
            "charged": "2011-02-06 00:00:00",
41
            "sourceimage": 1,
42
            "hostid": "HAL-9000",
43
            "description": "database server",
44
            "ipfour": "192.168.2.1",
45
            "ipsix": "::1",
46
            "flavor": 1,
47
            "_operstate": "STOPPED"
48
        }
49
    },
50
    {
51
        "model": "db.VirtualMachine",
52
        "pk": 1002,
53
        "fields": {
54
            "name": "snf-1002",
55
            "created": "2011-02-10 00:00:00",
56
            "updated": "2011-02-10 00:00:00",
57
            "charged": "2011-02-10 00:00:00",
58
            "sourceimage": 1,
59
            "hostid": "HAL-9000",
60
            "description": "mail server",
61
            "ipfour": "192.168.2.2",
62
            "ipsix": "::2",
63
            "flavor": 1,
64
            "_operstate": "BUILD"
65
        }
66
    },
67
    {
68
        "model": "db.VirtualMachine",
69
        "pk": 1003,
70
        "fields": {
71
            "name": "snf-1003",
72
            "created": "2011-02-10 00:00:00",
73
            "updated": "2011-02-10 00:00:00",
74
            "charged": "2011-02-10 00:00:00",
75
            "sourceimage": 1,
76
            "hostid": "HAL-9000",
77
            "description": "my server",
78
            "ipfour": "192.168.2.3",
79
            "ipsix": "::3",
80
            "flavor": 1,
81
            "_operstate": "STARTED"
82
        }
83
    },
84
    {
85
        "model": "db.VirtualMachine",
86
        "pk": 1004,
87
        "fields": {
88
            "name": "snf-1004",
89
            "created": "2011-02-10 00:00:00",
90
            "updated": "2011-02-10 00:00:00",
91
            "charged": "2011-02-10 00:00:00",
92
            "sourceimage": 1,
93
            "hostid": "HAL-9000",
94
            "description": "my 2nd server",
95
            "ipfour": "192.168.2.4",
96
            "ipsix": "::4",
97
            "flavor": 1,
98
            "_operstate": "STARTED"
99
        }
100
    },
101
    {
102
        "model": "db.Image",
103
        "pk": 1,
104
        "fields": {
105
            "name": "Debian Squeeze",
106
            "created": "2011-02-06 00:00:00",
107
            "updated": "2011-02-06 00:00:00",
108
            "state": "ACTIVE",
109
            "description": "Full Debian Squeeze Installation"
110
        }
111
    },
112
    {
113
        "model": "db.Image",
114
        "pk": 2,
115
        "fields": {
116
            "name": "Slackware 13.1",
117
            "created": "2011-02-10 00:00:00",
118
            "updated": "2011-02-10 00:00:00",
119
            "state": "ACTIVE",
120
            "description": "Full Slackware 13.1 Installation",
121
            "owner" : 1
122
        }
123
    },   
124
    {
125
        "model": "db.Disk",
126
        "pk": 1,
127
        "fields": {
128
            "name": "My_Music",
129
            "created": "2011-02-10 00:00:00",
130
            "updated": "2011-02-10 00:00:00",
131
            "size" : "20",
132
            "vm" : "1001",
133
            "owner" : "1"
134
        }
135
    }, 
136
    {
137
        "model": "db.Disk",
138
        "pk": 2,
139
        "fields": {
140
            "name": "My_Videos",
141
            "created": "2011-02-10 00:00:00",
142
            "updated": "2011-02-10 00:00:00",
143
            "size" : "300",
144
            "vm" : "1001",
145
            "owner" : "1"
146
        }
147
    } 
148
] 
b/db/fixtures/initial_data.json
4 4
        "pk": 1,
5 5
        "fields": {
6 6
            "name": "admin user",
7
            "credit": 0,
8
            "created": "2011-02-06",
9
            "monthly_rate": 10,
7
            "created": "2011-02-06 00:00:00",
8
            "updated": "2011-02-06 00:00:00",
9
            "credit": 1,
10
            "monthly_rate": 1,
10 11
            "user" : 1,
11 12
            "violations" : 0
12 13
   	    }
13 14
    },
14 15
    {
15
        "model" : "db.Limit",
16
        "pk" : 1,
17
        "fields" : {
18
            "name" : "QUOTA_CREDIT",
19
            "user" : 1,
20
            "value" : 100
21
        }
22
    }
23
    ,
24
    {
25 16
        "model": "db.Flavor",
26 17
        "pk": 1,
27 18
        "fields": {
......
40 31
        }
41 32
    },
42 33
    {
43
        "model" : "db.FlavorCostHistory",
44
        "pk" : 1,
45
        "fields" : {
46
            "cost_active" : 10,
47
            "cost_inactive" : 5,
48
            "effective_from" : "2011-01-01",
49
            "flavor" : 1
50
        }
51
    },
52
    {
53
        "model" : "db.FlavorCostHistory",
54
        "pk" : 2,
55
        "fields" : {
56
            "cost_active" : 2,
57
            "cost_inactive" : 1,
58
            "effective_from" : "2010-01-01",
59
            "flavor" : 1
60
        }
61
    },
62
    {
63 34
        "model": "db.VirtualMachine",
64 35
        "pk": 1001,
65 36
        "fields": {
66 37
            "name": "snf-1001",
67 38
            "created": "2011-02-06 00:00:00",
39
            "updated": "2011-02-06 00:00:00",
68 40
            "charged": "2011-02-06 00:00:00",
69 41
            "sourceimage": 1,
70 42
            "hostid": "HAL-9000",
......
81 53
        "fields": {
82 54
            "name": "snf-1002",
83 55
            "created": "2011-02-10 00:00:00",
56
            "updated": "2011-02-10 00:00:00",
84 57
            "charged": "2011-02-10 00:00:00",
85 58
            "sourceimage": 1,
86 59
            "hostid": "HAL-9000",
......
96 69
        "pk": 1003,
97 70
        "fields": {
98 71
            "name": "snf-1003",
99
            "created": "2009-02-10 00:00:00",
100
            "charged": "2010-01-01 00:00:00",
72
            "created": "2011-02-10 00:00:00",
73
            "updated": "2011-02-10 00:00:00",
74
            "charged": "2011-02-10 00:00:00",
101 75
            "sourceimage": 1,
102 76
            "hostid": "HAL-9000",
103 77
            "description": "my server",
......
113 87
        "fields": {
114 88
            "name": "snf-1004",
115 89
            "created": "2011-02-10 00:00:00",
90
            "updated": "2011-02-10 00:00:00",
116 91
            "charged": "2011-02-10 00:00:00",
117 92
            "sourceimage": 1,
118 93
            "hostid": "HAL-9000",
......
124 99
        }
125 100
    },
126 101
    {
127
        "model" : "db.AccountingLog",
128
        "pk" : 1,
129
        "fields" : {
130
            "vm" : 1001,
131
            "date" : "2010-01-01",
132
            "state" : "STARTED"
133
        }
134
    },
135
    {
136
        "model" : "db.AccountingLog",
137
        "pk" : 2,
138
        "fields" : {
139
            "vm" : 1001,
140
            "date" : "2011-02-01",
141
            "state" : "STARTED"
142
        }
143
    },
144
    {
145
        "model" : "db.AccountingLog",
146
        "pk" : 3,
147
        "fields" : {
148
            "vm" : 1003,
149
            "date" : "2010-01-01",
150
            "state" : "STARTED"
151
        }
152
    },
153
    {
154
        "model" : "db.AccountingLog",
155
        "pk" : 4,
156
        "fields" : {
157
            "vm" : 1003,
158
            "date" : "2010-03-01",
159
            "state" : "STOPPED"
160
        }
161
    },
162
    {
163
        "model" : "db.AccountingLog",
164
        "pk" : 5,
165
        "fields" : {
166
            "vm" : 1003,
167
            "date" : "2011-01-01",
168
            "state" : "STARTED"
169
        }
170
    },
171
    {
172 102
        "model": "db.Image",
173 103
        "pk": 1,
174 104
        "fields": {
175 105
            "name": "Debian Squeeze",
176
            "updated": "2011-02-06 00:00:00",
177 106
            "created": "2011-02-06 00:00:00",
107
            "updated": "2011-02-06 00:00:00",
178 108
            "state": "ACTIVE",
179 109
            "description": "Full Debian Squeeze Installation"
180 110
        }
......
184 114
        "pk": 2,
185 115
        "fields": {
186 116
            "name": "Slackware 13.1",
187
            "updated": "2011-02-10 00:00:00",
188 117
            "created": "2011-02-10 00:00:00",
118
            "updated": "2011-02-10 00:00:00",
189 119
            "state": "ACTIVE",
190 120
            "description": "Full Slackware 13.1 Installation",
191 121
            "owner" : 1
......
197 127
        "fields": {
198 128
            "name": "My_Music",
199 129
            "created": "2011-02-10 00:00:00",
130
            "updated": "2011-02-10 00:00:00",
200 131
            "size" : "20",
201
            "vm" : 1001,
132
            "vm" : "1001",
202 133
            "owner" : "1"
203 134
        }
204 135
    }, 
......
208 139
        "fields": {
209 140
            "name": "My_Videos",
210 141
            "created": "2011-02-10 00:00:00",
142
            "updated": "2011-02-10 00:00:00",
211 143
            "size" : "300",
212
            "vm" : 1001,
144
            "vm" : "1001",
213 145
            "owner" : "1"
214 146
        }
215 147
    } 
216
]
148
] 
b/db/models.py
12 12
class SynnefoUser(models.Model):
13 13
    name = models.CharField(max_length=255)
14 14
    credit = models.IntegerField()
15
    created = models.DateField()
15
    created = models.DateTimeField('Time of creation', auto_now_add=True)
16
    updated = models.DateTimeField('Time of last update', auto_now=True)
16 17
    monthly_rate = models.IntegerField()
17 18
    user = models.ForeignKey(User)
18 19
    violations = models.IntegerField()
......
73 74
    )
74 75

  
75 76
    name = models.CharField(max_length=255, help_text=_('description'))
76
    updated = models.DateTimeField(help_text=_("Image update date"))
77
    created = models.DateTimeField(help_text=_("Image creation date"), default=datetime.datetime.now())
78 77
    state = models.CharField(choices=IMAGE_STATES, max_length=30)
79 78
    description = models.TextField(help_text=_('description'))
80 79
    owner = models.ForeignKey(SynnefoUser,blank=True, null=True)
81
    #FIXME: ImageMetadata, as in VirtualMachineMetadata
82
    #       "os" contained in metadata. Newly created Server inherits value of "os" metadata key from Image.
83
    #       The Web UI uses the value of "os" to determine the icon to use.
80
    created = models.DateTimeField('Time of creation', auto_now_add=True)
81
    updated = models.DateTimeField('Time of last update', auto_now=True)
84 82

  
85 83
    class Meta:
86 84
        verbose_name = u'Image'
......
258 256
    }
259 257

  
260 258
    name = models.CharField(max_length=255)
261
    created = models.DateTimeField(help_text=_('VM creation date'), default=datetime.datetime.now())
262
    charged = models.DateTimeField()
259
    owner = models.ForeignKey(SynnefoUser,blank=True, null=True)
260
    created = models.DateTimeField('Time of creation', auto_now_add=True)
261
    updated = models.DateTimeField('Time of last update', auto_now=True)
262
    charged = models.DateTimeField('Time of last charge', default=datetime.datetime.now())
263 263
    # Use string reference to avoid circular ForeignKey def.
264 264
    # FIXME: "sourceimage" works, "image" causes validation errors. See "related_name" in the Django docs.
265 265
    sourceimage = models.ForeignKey(Image, null=False) 
......
270 270
    flavor = models.ForeignKey(Flavor)
271 271
    suspended = models.BooleanField('Administratively Suspended')
272 272

  
273
    # VM State [volatile data]
274
    updated = models.DateTimeField(null=True)
273
    # VM State 
274
    # The following fields are volatile data, in the sense
275
    # that they need not be persistent in the DB, but rather
276
    # get generated at runtime by quering Ganeti and applying
277
    # updates received from Ganeti.
278
    #
279
    # They belong to a separate caching layer, in the long run.
280
    # [vkoukis] after discussion with [faidon].
275 281
    action = models.CharField(choices=ACTIONS, max_length=30, null=True)
276 282
    _operstate = models.CharField(choices=OPER_STATES, max_length=30, null=True)
277 283
    _backendjobid = models.PositiveIntegerField(null=True)
......
320 326
        if not self.pk: 
321 327
            self._action = None
322 328
            self._operstate = "BUILD"
323
            self.updated = datetime.datetime.now()
324 329
            self._backendjobid = None
325 330
            self._backendjobstatus = None
326 331
            self._backendopcode = None
......
351 356
            self._operstate = 'ERROR'
352 357
        # Any other notification of failure leaves the operating state unchanged
353 358

  
354
        # FIXME: Should be implemented in a pre-save signal handler.
355
        self.updated = datetime.datetime.now()
356 359
        self.save()
357 360

  
358 361
    def start_action(self, action):
......
364 367
        self._backendjobid = None
365 368
        self._backendopcode = None
366 369
        self._backendlogmsg = None
367
        self.updated = datetime.datetime.now()
370
        
368 371
        self.save()
369 372

  
370 373
    # FIXME: Perhaps move somewhere else, outside the model?
......
399 402

  
400 403

  
401 404
class VirtualMachineGroup(models.Model):
402
    "Groups of VM's for SynnefoUsers"
405
    """Groups of VMs for SynnefoUsers"""
403 406
    name = models.CharField(max_length=255)
407
    created = models.DateTimeField('Time of creation', auto_now_add=True)
408
    updated = models.DateTimeField('Time of last update', auto_now=True)
404 409
    owner = models.ForeignKey(SynnefoUser)
405 410
    machines = models.ManyToManyField(VirtualMachine)
406
    created = models.DateTimeField(help_text=_("Group creation date"), default=datetime.datetime.now())
407 411

  
408 412
    class Meta:
409 413
        verbose_name = u'Virtual Machine Group'
......
447 451

  
448 452
class Disk(models.Model):
449 453
    name = models.CharField(max_length=255)
450
    created = models.DateTimeField('Disk creation date', default=datetime.datetime.now())
454
    created = models.DateTimeField('Time of creation', auto_now_add=True)
455
    updated = models.DateTimeField('Time of last update', auto_now=True)
451 456
    size = models.PositiveIntegerField('Disk size in GBs')
452 457
    vm = models.ForeignKey(VirtualMachine, blank=True, null=True)
453 458
    owner = models.ForeignKey(SynnefoUser, blank=True, null=True)  
454
    
459

  
455 460
    class Meta:
456 461
        verbose_name = u'Disk instance'
457 462

  

Also available in: Unified diff