add visibility, bind slivers to network
[plstackapi.git] / planetstack / core / models / network.py
1 import os
2 from django.db import models
3 from core.models import PlCoreBase, Site, Slice, Sliver
4 from django.contrib.contenttypes.models import ContentType
5 from django.contrib.contenttypes import generic
6
7 # Create your models here.
8
9 class Network(PlCoreBase):
10     VISIBILITY_CHOICES = (('public', 'public'), ('private', 'private'))
11
12     name = models.CharField(max_length=32)
13     subnet = models.CharField(max_length=32)
14     ports = models.CharField(max_length=1024)
15     labels = models.CharField(max_length=1024)
16     slice = models.ForeignKey(Slice, related_name="networks")
17     visibility = models.CharField(max_length=30, choices=VISIBILITY_CHOICES, default="private")
18     guaranteedBandwidth = models.IntegerField(default=0)
19     permittedSlices = models.ManyToManyField(Slice, blank=True, related_name="permittedNetworks")
20     boundSlivers = models.ManyToManyField(Sliver, blank=True, related_name="boundNetworks", through="NetworkBoundSliver")
21
22     def __unicode__(self):  return u'%s' % (self.name)
23
24 class NetworkBoundSliver(PlCoreBase):
25     network = models.ForeignKey(Network)
26     sliver = models.ForeignKey(Sliver)
27     ip = models.GenericIPAddressField(help_text="Sliver ip address", blank=True, null=True)
28
29     def __unicode__(self):  return u'foo!'
30
31 class Router(PlCoreBase):
32     name = models.CharField(max_length=32)
33     owner = models.ForeignKey(Slice, related_name="routers")
34     networks = models.ManyToManyField(Network, blank=True, related_name="routers")
35
36     def __unicode__(self):  return u'%s' % (self.name)
37
38 class NetworkParameterType(PlCoreBase):
39     name = models.SlugField(help_text="The name of this tag", max_length=128)
40
41     def __unicode__(self):  return u'%s' % (self.name)
42
43 class NetworkParameter(PlCoreBase):
44     networkParameterType = models.ForeignKey(NetworkParameterType, related_name="parameters", help_text="The name of the parameter")
45     value = models.CharField(help_text="The value of this parameter", max_length=1024)
46
47     # The required fields to do a ObjectType lookup, and object_id assignment
48     content_type = models.ForeignKey(ContentType)
49     object_id = models.PositiveIntegerField()
50     content_object = generic.GenericForeignKey('content_type', 'object_id')
51
52     def __unicode__(self):
53         return self.networkParameterType.name
54
55