Merge lp:~julian-edwards/maas/api-reserved-ip into lp:~maas-committers/maas/trunk

Proposed by Julian Edwards
Status: Merged
Approved by: Julian Edwards
Approved revision: no longer in the source branch.
Merged at revision: 2452
Proposed branch: lp:~julian-edwards/maas/api-reserved-ip
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 337 lines (+304/-0)
3 files modified
src/maasserver/enum.py (+3/-0)
src/maasserver/migrations/0085_add_user_to_staticipaddress.py (+296/-0)
src/maasserver/models/staticipaddress.py (+5/-0)
To merge this branch: bzr merge lp:~julian-edwards/maas/api-reserved-ip
Reviewer Review Type Date Requested Status
Jeroen T. Vermeulen (community) Approve
Review via email: mp+223857@code.launchpad.net

Commit message

Model changes: Add User FK to StaticIPAddress and add a new enum type for it, USER_RESERVED which is for reserved IPs in MAAS that do not require a DHCP map.

To post a comment you must log in.
Revision history for this message
Jeroen T. Vermeulen (jtv) wrote :

Is this really different from UNMANAGED, perhaps without a MAC?

review: Approve
Revision history for this message
Julian Edwards (julian-edwards) wrote :

On 21/06/14 00:31, Jeroen T. Vermeulen wrote:
> Review: Approve
>
> Is this really different from UNMANAGED, perhaps without a MAC?
>

Yes it's different. UNMANAGED requires a DHCP mapping, USER_RESERVED
does not. I was hoping I'd made that clear in the docstrings, is there
something I can change that would make it clearer?

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/maasserver/enum.py'
--- src/maasserver/enum.py 2014-06-12 15:48:32 +0000
+++ src/maasserver/enum.py 2014-06-20 06:14:25 +0000
@@ -166,3 +166,6 @@
166166
167 # Additional IP requested by a user for a node.167 # Additional IP requested by a user for a node.
168 EXTRA = 3168 EXTRA = 3
169
170 # Reserved by a user, no DHCP map required in MAAS.
171 USER_RESERVED = 4
169172
=== added file 'src/maasserver/migrations/0085_add_user_to_staticipaddress.py'
--- src/maasserver/migrations/0085_add_user_to_staticipaddress.py 1970-01-01 00:00:00 +0000
+++ src/maasserver/migrations/0085_add_user_to_staticipaddress.py 2014-06-20 06:14:25 +0000
@@ -0,0 +1,296 @@
1# -*- coding: utf-8 -*-
2from south.utils import datetime_utils as datetime
3from south.db import db
4from south.v2 import SchemaMigration
5from django.db import models
6
7
8class Migration(SchemaMigration):
9
10 def forwards(self, orm):
11 # Adding field 'StaticIPAddress.user'
12 db.add_column(u'maasserver_staticipaddress', 'user',
13 self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['auth.User'], null=True, blank=True),
14 keep_default=False)
15
16
17 def backwards(self, orm):
18 # Deleting field 'StaticIPAddress.user'
19 db.delete_column(u'maasserver_staticipaddress', 'user_id')
20
21
22 models = {
23 u'auth.group': {
24 'Meta': {'object_name': 'Group'},
25 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
26 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
27 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
28 },
29 u'auth.permission': {
30 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
31 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
32 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
33 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
34 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
35 },
36 u'auth.user': {
37 'Meta': {'object_name': 'User'},
38 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
39 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),
40 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
41 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
42 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
43 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
44 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
45 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
46 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
47 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
48 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
49 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
50 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
51 },
52 u'contenttypes.contenttype': {
53 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
54 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
55 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
56 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
57 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
58 },
59 u'maasserver.bootimage': {
60 'Meta': {'unique_together': "((u'nodegroup', u'osystem', u'architecture', u'subarchitecture', u'release', u'purpose', u'label'),)", 'object_name': 'BootImage'},
61 'architecture': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
62 'created': ('django.db.models.fields.DateTimeField', [], {}),
63 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
64 'label': ('django.db.models.fields.CharField', [], {'default': "u'release'", 'max_length': '255'}),
65 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}),
66 'osystem': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
67 'purpose': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
68 'release': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
69 'subarchitecture': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
70 'supported_subarches': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
71 'updated': ('django.db.models.fields.DateTimeField', [], {})
72 },
73 u'maasserver.bootsource': {
74 'Meta': {'object_name': 'BootSource'},
75 'cluster': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']", 'null': 'True'}),
76 'created': ('django.db.models.fields.DateTimeField', [], {}),
77 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
78 'keyring_data': ('maasserver.fields.EditableBinaryField', [], {'blank': 'True'}),
79 'keyring_filename': ('django.db.models.fields.FilePathField', [], {'max_length': '100', 'blank': 'True'}),
80 'updated': ('django.db.models.fields.DateTimeField', [], {}),
81 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
82 },
83 u'maasserver.bootsourceselection': {
84 'Meta': {'object_name': 'BootSourceSelection'},
85 'arches': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'text'", 'null': 'True', 'blank': 'True'}),
86 'boot_source': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.BootSource']"}),
87 'created': ('django.db.models.fields.DateTimeField', [], {}),
88 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
89 'labels': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'text'", 'null': 'True', 'blank': 'True'}),
90 'release': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '20', 'blank': 'True'}),
91 'subarches': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'text'", 'null': 'True', 'blank': 'True'}),
92 'updated': ('django.db.models.fields.DateTimeField', [], {})
93 },
94 u'maasserver.componenterror': {
95 'Meta': {'object_name': 'ComponentError'},
96 'component': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40'}),
97 'created': ('django.db.models.fields.DateTimeField', [], {}),
98 'error': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
99 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
100 'updated': ('django.db.models.fields.DateTimeField', [], {})
101 },
102 u'maasserver.config': {
103 'Meta': {'object_name': 'Config'},
104 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
105 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
106 'value': ('maasserver.fields.JSONObjectField', [], {'null': 'True'})
107 },
108 u'maasserver.dhcplease': {
109 'Meta': {'object_name': 'DHCPLease'},
110 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
111 'ip': ('django.db.models.fields.IPAddressField', [], {'unique': 'True', 'max_length': '15'}),
112 'mac': ('maasserver.fields.MACAddressField', [], {}),
113 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"})
114 },
115 u'maasserver.downloadprogress': {
116 'Meta': {'object_name': 'DownloadProgress'},
117 'bytes_downloaded': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
118 'created': ('django.db.models.fields.DateTimeField', [], {}),
119 'error': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'}),
120 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
121 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
122 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}),
123 'size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
124 'updated': ('django.db.models.fields.DateTimeField', [], {})
125 },
126 u'maasserver.filestorage': {
127 'Meta': {'unique_together': "((u'filename', u'owner'),)", 'object_name': 'FileStorage'},
128 'content': ('metadataserver.fields.BinaryField', [], {'blank': 'True'}),
129 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
130 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
131 'key': ('django.db.models.fields.CharField', [], {'default': "u'b7a33d80-f840-11e3-a08e-002215205ce8'", 'unique': 'True', 'max_length': '36'}),
132 'owner': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
133 },
134 u'maasserver.macaddress': {
135 'Meta': {'object_name': 'MACAddress'},
136 'cluster_interface': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['maasserver.NodeGroupInterface']", 'null': 'True', 'blank': 'True'}),
137 'created': ('django.db.models.fields.DateTimeField', [], {}),
138 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
139 'ip_addresses': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.StaticIPAddress']", 'symmetrical': 'False', 'through': u"orm['maasserver.MACStaticIPAddressLink']", 'blank': 'True'}),
140 'mac_address': ('maasserver.fields.MACAddressField', [], {'unique': 'True'}),
141 'networks': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.Network']", 'symmetrical': 'False', 'blank': 'True'}),
142 'node': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.Node']"}),
143 'updated': ('django.db.models.fields.DateTimeField', [], {})
144 },
145 u'maasserver.macstaticipaddresslink': {
146 'Meta': {'unique_together': "((u'ip_address', u'mac_address'),)", 'object_name': 'MACStaticIPAddressLink'},
147 'created': ('django.db.models.fields.DateTimeField', [], {}),
148 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
149 'ip_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.StaticIPAddress']", 'unique': 'True'}),
150 'mac_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.MACAddress']"}),
151 'nic_alias': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
152 'updated': ('django.db.models.fields.DateTimeField', [], {})
153 },
154 u'maasserver.network': {
155 'Meta': {'object_name': 'Network'},
156 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
157 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
158 'ip': ('django.db.models.fields.GenericIPAddressField', [], {'unique': 'True', 'max_length': '39'}),
159 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
160 'netmask': ('django.db.models.fields.GenericIPAddressField', [], {'max_length': '39'}),
161 'vlan_tag': ('django.db.models.fields.PositiveSmallIntegerField', [], {'unique': 'True', 'null': 'True', 'blank': 'True'})
162 },
163 u'maasserver.node': {
164 'Meta': {'object_name': 'Node'},
165 'agent_name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'null': 'True', 'blank': 'True'}),
166 'architecture': ('django.db.models.fields.CharField', [], {'max_length': '31'}),
167 'cpu_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
168 'created': ('django.db.models.fields.DateTimeField', [], {}),
169 'distro_series': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '20', 'blank': 'True'}),
170 'error': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
171 'hostname': ('django.db.models.fields.CharField', [], {'default': "u''", 'unique': 'True', 'max_length': '255', 'blank': 'True'}),
172 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
173 'license_key': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
174 'memory': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
175 'netboot': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
176 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']", 'null': 'True'}),
177 'osystem': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '20', 'blank': 'True'}),
178 'owner': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'}),
179 'power_parameters': ('maasserver.fields.JSONObjectField', [], {'default': "u''", 'blank': 'True'}),
180 'power_type': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '10', 'blank': 'True'}),
181 'routers': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'macaddr'", 'null': 'True', 'blank': 'True'}),
182 'status': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '10'}),
183 'storage': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
184 'system_id': ('django.db.models.fields.CharField', [], {'default': "u'node-b7a51786-f840-11e3-a08e-002215205ce8'", 'unique': 'True', 'max_length': '41'}),
185 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.Tag']", 'symmetrical': 'False'}),
186 'token': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Token']", 'null': 'True'}),
187 'updated': ('django.db.models.fields.DateTimeField', [], {}),
188 'zone': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.Zone']", 'on_delete': 'models.SET_DEFAULT'})
189 },
190 u'maasserver.nodegroup': {
191 'Meta': {'object_name': 'NodeGroup'},
192 'api_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '18'}),
193 'api_token': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Token']", 'unique': 'True'}),
194 'cluster_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100', 'blank': 'True'}),
195 'created': ('django.db.models.fields.DateTimeField', [], {}),
196 'dhcp_key': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
197 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
198 'maas_url': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
199 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
200 'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
201 'updated': ('django.db.models.fields.DateTimeField', [], {}),
202 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'})
203 },
204 u'maasserver.nodegroupinterface': {
205 'Meta': {'unique_together': "((u'nodegroup', u'interface'),)", 'object_name': 'NodeGroupInterface'},
206 'broadcast_ip': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
207 'created': ('django.db.models.fields.DateTimeField', [], {}),
208 'foreign_dhcp_ip': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
209 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
210 'interface': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
211 'ip': ('django.db.models.fields.GenericIPAddressField', [], {'max_length': '39'}),
212 'ip_range_high': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
213 'ip_range_low': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
214 'management': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
215 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}),
216 'router_ip': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
217 'static_ip_range_high': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
218 'static_ip_range_low': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
219 'subnet_mask': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
220 'updated': ('django.db.models.fields.DateTimeField', [], {})
221 },
222 u'maasserver.sshkey': {
223 'Meta': {'unique_together': "((u'user', u'key'),)", 'object_name': 'SSHKey'},
224 'created': ('django.db.models.fields.DateTimeField', [], {}),
225 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
226 'key': ('django.db.models.fields.TextField', [], {}),
227 'updated': ('django.db.models.fields.DateTimeField', [], {}),
228 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
229 },
230 u'maasserver.sslkey': {
231 'Meta': {'unique_together': "((u'user', u'key'),)", 'object_name': 'SSLKey'},
232 'created': ('django.db.models.fields.DateTimeField', [], {}),
233 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
234 'key': ('django.db.models.fields.TextField', [], {}),
235 'updated': ('django.db.models.fields.DateTimeField', [], {}),
236 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
237 },
238 u'maasserver.staticipaddress': {
239 'Meta': {'object_name': 'StaticIPAddress'},
240 'alloc_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
241 'created': ('django.db.models.fields.DateTimeField', [], {}),
242 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
243 'ip': ('django.db.models.fields.GenericIPAddressField', [], {'unique': 'True', 'max_length': '39'}),
244 'updated': ('django.db.models.fields.DateTimeField', [], {}),
245 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
246 },
247 u'maasserver.tag': {
248 'Meta': {'object_name': 'Tag'},
249 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
250 'created': ('django.db.models.fields.DateTimeField', [], {}),
251 'definition': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
252 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
253 'kernel_opts': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
254 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}),
255 'updated': ('django.db.models.fields.DateTimeField', [], {})
256 },
257 u'maasserver.userprofile': {
258 'Meta': {'object_name': 'UserProfile'},
259 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
260 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['auth.User']", 'unique': 'True'})
261 },
262 u'maasserver.zone': {
263 'Meta': {'ordering': "[u'name']", 'object_name': 'Zone'},
264 'created': ('django.db.models.fields.DateTimeField', [], {}),
265 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
266 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
267 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}),
268 'updated': ('django.db.models.fields.DateTimeField', [], {})
269 },
270 u'piston.consumer': {
271 'Meta': {'object_name': 'Consumer'},
272 'description': ('django.db.models.fields.TextField', [], {}),
273 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
274 'key': ('django.db.models.fields.CharField', [], {'max_length': '18'}),
275 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
276 'secret': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
277 'status': ('django.db.models.fields.CharField', [], {'default': "'pending'", 'max_length': '16'}),
278 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'consumers'", 'null': 'True', 'to': u"orm['auth.User']"})
279 },
280 u'piston.token': {
281 'Meta': {'object_name': 'Token'},
282 'callback': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
283 'callback_confirmed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
284 'consumer': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Consumer']"}),
285 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
286 'is_approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
287 'key': ('django.db.models.fields.CharField', [], {'max_length': '18'}),
288 'secret': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
289 'timestamp': ('django.db.models.fields.IntegerField', [], {'default': '1403244258L'}),
290 'token_type': ('django.db.models.fields.IntegerField', [], {}),
291 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'tokens'", 'null': 'True', 'to': u"orm['auth.User']"}),
292 'verifier': ('django.db.models.fields.CharField', [], {'max_length': '10'})
293 }
294 }
295
296 complete_apps = ['maasserver']
0\ No newline at end of file297\ No newline at end of file
1298
=== modified file 'src/maasserver/models/staticipaddress.py'
--- src/maasserver/models/staticipaddress.py 2014-06-12 10:08:51 +0000
+++ src/maasserver/models/staticipaddress.py 2014-06-20 06:14:25 +0000
@@ -24,8 +24,10 @@
24 ]24 ]
2525
2626
27from django.contrib.auth.models import User
27from django.db.models import (28from django.db.models import (
28 GenericIPAddressField,29 GenericIPAddressField,
30 ForeignKey,
29 IntegerField,31 IntegerField,
30 Manager,32 Manager,
31 )33 )
@@ -110,6 +112,9 @@
110 alloc_type = IntegerField(112 alloc_type = IntegerField(
111 editable=False, null=False, blank=False, default=IPADDRESS_TYPE.AUTO)113 editable=False, null=False, blank=False, default=IPADDRESS_TYPE.AUTO)
112114
115 user = ForeignKey(
116 User, default=None, blank=True, null=True, editable=False)
117
113 objects = StaticIPAddressManager()118 objects = StaticIPAddressManager()
114119
115 def __unicode__(self):120 def __unicode__(self):