source: branches/exodus-admin/models.py@ 6390

Last change on this file since 6390 was 6382, checked in by roland, 17 years ago

Added new branch, for admin interface

  • Property svn:mergeinfo set to
File size: 4.7 KB
Line 
1# (c) Roland van Laar 2006
2# vi:et:ts=4
3from django.db import models
4from django.contrib import admin
5
6# Create your models here.
7
8#No need to formalize it; CHOICES don't change much
9
10STATUS_CHOICES = (
11 ('up', 'up'),
12 ('dw', 'down'),
13 ('pl', 'planned'),
14 )
15
16POLAR_CHOICES = (
17 ('hr', 'horizontal'),
18 ('vr', 'vertical'),
19 )
20
21INTERFACE_TYPE_CHOICES = (
22 ('eth', 'eth'),
23 ('11a', '11a'),
24 ('11b', '11b'),
25 ('11g', '11g'),
26 )
27WIFI_MODE_CHOICES = (
28 ('ms', 'master'),
29 ('mn', 'managed'),
30 )
31
32class ExtendedModel(models.Model):
33 class Meta:
34 abstract = True
35 verbose_name = 'ExtendedModel'
36
37 def as_list(self):
38 meta = self._meta
39 values = [(f.verbose_name, getattr(self, f.attname)) \
40 for f in meta.local_fields if f.verbose_name not in ( 'ID')]
41 return values
42
43class Antenna(ExtendedModel):
44 type = models.CharField(max_length=20, unique=True)
45 gain = models.IntegerField(max_length=3)
46
47 def __str__(self):
48 return self.type
49
50class Location(ExtendedModel):
51 description = models.CharField(max_length=200, unique=True)
52 longitude = models.DecimalField(max_digits=8,decimal_places=6)
53 latitude = models.DecimalField(max_digits=8,decimal_places=6)
54
55 class Meta:
56 verbose_name = 'Location'
57
58 def __str__(self):
59 return self.description
60
61
62#XXX: Name Domain perhaps?
63class DnsServer(ExtendedModel):
64 ipaddress = models.IPAddressField()
65 domainname = models.CharField(max_length=50, unique=True)
66
67 class Meta:
68 verbose_name = 'Dns Server'
69
70 def __str__(self):
71 return self.ipaddress
72
73class Network(ExtendedModel):
74 name = models.CharField(max_length=50, unique=True)
75 ipspacestart = models.IPAddressField()
76 netmask = models.IntegerField()
77
78 class Meta:
79 verbose_name = 'Network'
80
81 def __str__(self):
82 return self.name
83
84
85class Node(ExtendedModel):
86 name = models.CharField(max_length=30, unique=True)
87 location = models.ForeignKey(Location)
88 status = models.CharField(max_length=10, choices=STATUS_CHOICES, default=1)
89 masterip = models.IPAddressField(unique=True)
90 network = models.ForeignKey(Network,default=1)
91
92 class Meta:
93 ordering = ['name']
94 verbose_name = 'Node'
95
96 def __str__(self):
97 return self.name
98
99class Interface(ExtendedModel):
100 node = models.ForeignKey(Node)
101 type = models.CharField(max_length=10, choices=INTERFACE_TYPE_CHOICES, \
102 default=1)
103 iface = models.CharField(max_length=10, verbose_name="interface", \
104 default='eth0')
105 ip = models.IPAddressField(unique=True)
106 netmask = models.IntegerField(default=30)
107 polar = models.CharField(blank=True, max_length=10, choices=POLAR_CHOICES)
108 ssid = models.CharField(max_length=30, blank=True, null=True)
109 mode = models.CharField(max_length=10, choices=WIFI_MODE_CHOICES)
110 channel = models.IntegerField(blank=True, null=True)
111 antenna = models.ForeignKey(Antenna, blank=True, null=True)
112 shortdesc = models.CharField(blank=True, max_length=10)
113 desc = models.CharField(blank=True, max_length=100)
114 link = models.ForeignKey('self', blank=True, null=True)
115
116 class Meta:
117 unique_together = ('node', 'iface')
118 verbose_name = 'Interface'
119
120 def __str__(self):
121 return "%s/%s" % (self.node, self.iface)
122
123class InterfaceAlias(ExtendedModel):
124 iface = models.ForeignKey(Interface,related_name='child')
125 ip = models.IPAddressField(unique=True)
126 netmask = models.IntegerField(default=30)
127 shortdesc = models.CharField(blank=True, max_length=10)
128 desc = models.CharField(blank=True, max_length=100)
129 linkAlias = models.ForeignKey('self', blank=True, null=True)
130 link = models.ForeignKey(Interface, blank=True, null=True)
131
132 def __str__(self):
133 return "Alias %s" % (self.iface)
134
135#
136# XXX: Needs rethinking, dhcp[start|stop] could be removed if whole publicAP is
137# going to be activated as DHCP range, or only number of fixed clients needs to
138# be defined, all other could be calculated on the fly if needed
139
140class PublicAP(ExtendedModel):
141 iface = models.ForeignKey(Interface,related_name='ap', verbose_name="interface")
142 ip = models.IPAddressField(unique=True)
143 netmask = models.IntegerField(default=28)
144 dhcpstart = models.IPAddressField()
145 dhcpstop = models.IPAddressField()
146 shortdesc = models.CharField(max_length=10)
147 desc = models.CharField(max_length=100)
148
149 class Meta:
150 verbose_name = "Public Access Point"
151
152 def __str__(self):
153 return "%s:%s" % (self.iface,self.pk)
154
155class DhcpStatic(ExtendedModel):
156 hostname = models.CharField(max_length=10,unique=True)
157 macaddress = models.CharField(max_length=17)
158 address = models.IPAddressField()
159 PublicAP = models.ForeignKey(PublicAP)
160
161 class Meta:
162 verbose_name = "Static host"
163
164 def __str__(self):
165 return self.hostname
Note: See TracBrowser for help on using the repository browser.