| Siobhan Tully | 4bc09f2 | 2013-04-10 21:15:21 -0400 | [diff] [blame] | 1 | import os |
| 2 | from django.db import models |
| Siobhan Tully | 30fd429 | 2013-05-10 08:59:56 -0400 | [diff] [blame] | 3 | from core.models import PlCoreBase |
| Tony Mack | d84b1ff | 2015-03-09 13:03:56 -0400 | [diff] [blame] | 4 | from core.models.plcorebase import StrippedCharField |
| Tony Mack | 5ff90fc | 2015-02-08 21:38:41 -0500 | [diff] [blame] | 5 | from core.models import Deployment, DeploymentPrivilege, Controller,ControllerLinkManager,ControllerLinkDeletionManager |
| Siobhan Tully | 4bc09f2 | 2013-04-10 21:15:21 -0400 | [diff] [blame] | 6 | |
| 7 | # Create your models here. |
| 8 | |
| 9 | class Image(PlCoreBase): |
| Scott Baker | 0cefa53 | 2015-11-09 16:17:11 -0800 | [diff] [blame] | 10 | KIND_CHOICES = (('vm', 'Virtual Machine'), ('container', 'Container'), ) |
| 11 | |
| Tony Mack | d84b1ff | 2015-03-09 13:03:56 -0400 | [diff] [blame] | 12 | name = StrippedCharField(max_length=256, unique=True) |
| Scott Baker | 0cefa53 | 2015-11-09 16:17:11 -0800 | [diff] [blame] | 13 | kind = models.CharField(null=False, blank=False, max_length=30, choices=KIND_CHOICES, default="vm") |
| Tony Mack | d84b1ff | 2015-03-09 13:03:56 -0400 | [diff] [blame] | 14 | disk_format = StrippedCharField(max_length=256) |
| 15 | container_format = StrippedCharField(max_length=256) |
| 16 | path = StrippedCharField(max_length=256, null=True, blank=True, help_text="Path to image on local disk") |
| Scott Baker | 5308f0a | 2014-12-22 15:59:05 -0800 | [diff] [blame] | 17 | deployments = models.ManyToManyField('Deployment', through='ImageDeployments', blank=True, help_text="Select which images should be instantiated on this deployment", related_name='images') |
| Siobhan Tully | 4bc09f2 | 2013-04-10 21:15:21 -0400 | [diff] [blame] | 18 | |
| Scott Baker | ac69b6a | 2015-12-14 09:25:57 -0800 | [diff] [blame] | 19 | tag = StrippedCharField(max_length=256, null=True, blank=True, help_text="For Docker Images, tag of image") |
| 20 | |
| Siobhan Tully | 4bc09f2 | 2013-04-10 21:15:21 -0400 | [diff] [blame] | 21 | def __unicode__(self): return u'%s' % (self.name) |
| Tony Mack | bf39d9f | 2014-05-06 21:42:36 -0400 | [diff] [blame] | 22 | |
| Tony Mack | 336e0f9 | 2014-11-30 15:53:08 -0500 | [diff] [blame] | 23 | class ImageDeployments(PlCoreBase): |
| 24 | image = models.ForeignKey(Image,related_name='imagedeployments') |
| 25 | deployment = models.ForeignKey(Deployment,related_name='imagedeployments') |
| 26 | |
| Tony Mack | 549f7b1 | 2015-04-11 12:17:59 -0400 | [diff] [blame] | 27 | class Meta: |
| 28 | unique_together = ('image', 'deployment') |
| Tony Mack | a4736f5 | 2015-03-09 17:13:14 -0400 | [diff] [blame] | 29 | |
| Tony Mack | 336e0f9 | 2014-11-30 15:53:08 -0500 | [diff] [blame] | 30 | def __unicode__(self): return u'%s %s' % (self.image, self.deployment) |
| 31 | |
| Tony Mack | 5ff90fc | 2015-02-08 21:38:41 -0500 | [diff] [blame] | 32 | def can_update(self, user): |
| 33 | return user.can_update_deployment(self.deployment) |
| 34 | |
| Tony Mack | f3bbe47 | 2014-11-30 15:33:35 -0500 | [diff] [blame] | 35 | class ControllerImages(PlCoreBase): |
| 36 | objects = ControllerLinkManager() |
| 37 | deleted_objects = ControllerLinkDeletionManager() |
| 38 | image = models.ForeignKey(Image,related_name='controllerimages') |
| 39 | controller = models.ForeignKey(Controller,related_name='controllerimages') |
| Tony Mack | d84b1ff | 2015-03-09 13:03:56 -0400 | [diff] [blame] | 40 | glance_image_id = StrippedCharField(null=True, blank=True, max_length=200, help_text="Glance image id") |
| Tony Mack | 549f7b1 | 2015-04-11 12:17:59 -0400 | [diff] [blame] | 41 | |
| 42 | class Meta: |
| 43 | unique_together = ('image', 'controller') |
| Tony Mack | a4736f5 | 2015-03-09 17:13:14 -0400 | [diff] [blame] | 44 | |
| Tony Mack | f3bbe47 | 2014-11-30 15:33:35 -0500 | [diff] [blame] | 45 | def __unicode__(self): return u'%s %s' % (self.image, self.controller) |