Revision 52194743 db/models.py

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