Merge lp:~jtv/maas/bug-1340896 into lp:~maas-committers/maas/trunk

Proposed by Jeroen T. Vermeulen
Status: Merged
Approved by: Jeroen T. Vermeulen
Approved revision: no longer in the source branch.
Merged at revision: 2557
Proposed branch: lp:~jtv/maas/bug-1340896
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 965 lines (+321/-325)
2 files modified
src/maasserver/migrations/0089_create_nodegroupinterface_name.py (+0/-325)
src/maasserver/migrations/0090_initialise_nodegroupinterface_name.py (+321/-0)
To merge this branch: bzr merge lp:~jtv/maas/bug-1340896
Reviewer Review Type Date Requested Status
Julian Edwards (community) Approve
Review via email: mp+226702@code.launchpad.net

Commit message

Split maasserver migration 0089 into two: one to add the new field, and one to initialise it and update its uniqueness constraint. Turns out you can't update a table's rows after updating its data in the same migration.

Description of the change

I didn't notice this problem before because we have no cluster interfaces in the sample data. I'll see about addressing that in a separate branch.

Jeroen

To post a comment you must log in.
Revision history for this message
Julian Edwards (julian-edwards) wrote :

I believe that is why we have separate schema and data migrations. I would think your 0090_initialise_nodegroupinterface_name should be a data migration, right?

review: Needs Information
Revision history for this message
Jeroen T. Vermeulen (jtv) wrote :

Part of it could be. But that means 3 migrations for one change.

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

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'src/maasserver/migrations/0089_create_nodegroupinterface_name.py'
2--- src/maasserver/migrations/0089_create_nodegroupinterface_name.py 1970-01-01 00:00:00 +0000
3+++ src/maasserver/migrations/0089_create_nodegroupinterface_name.py 2014-07-14 16:33:40 +0000
4@@ -0,0 +1,305 @@
5+from south.db import db
6+from south.v2 import SchemaMigration
7+
8+
9+class Migration(SchemaMigration):
10+
11+ def forwards(self, orm):
12+ # Adding field 'NodeGroupInterface.name'
13+ db.add_column(u'maasserver_nodegroupinterface', 'name',
14+ self.gf('django.db.models.fields.CharField')(default=u'', max_length=255, blank=True),
15+ keep_default=False)
16+
17+
18+ def backwards(self, orm):
19+ # Deleting field 'NodeGroupInterface.name'
20+ db.delete_column(u'maasserver_nodegroupinterface', 'name')
21+
22+
23+ models = {
24+ u'auth.group': {
25+ 'Meta': {'object_name': 'Group'},
26+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
27+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
28+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
29+ },
30+ u'auth.permission': {
31+ 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
32+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
33+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
34+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
35+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
36+ },
37+ u'auth.user': {
38+ 'Meta': {'object_name': 'User'},
39+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
40+ 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),
41+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
42+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
43+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
44+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
45+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
46+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
47+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
48+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
49+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
50+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
51+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
52+ },
53+ u'contenttypes.contenttype': {
54+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
55+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
56+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
57+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
58+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
59+ },
60+ u'maasserver.bootimage': {
61+ 'Meta': {'unique_together': "((u'nodegroup', u'osystem', u'architecture', u'subarchitecture', u'release', u'purpose', u'label'),)", 'object_name': 'BootImage'},
62+ 'architecture': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
63+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
64+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
65+ 'label': ('django.db.models.fields.CharField', [], {'default': "u'release'", 'max_length': '255'}),
66+ 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}),
67+ 'osystem': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
68+ 'purpose': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
69+ 'release': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
70+ 'subarchitecture': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
71+ 'supported_subarches': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
72+ 'updated': ('django.db.models.fields.DateTimeField', [], {}),
73+ 'xinstall_path': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'null': 'True', 'blank': 'True'}),
74+ 'xinstall_type': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '30', 'null': 'True', 'blank': 'True'})
75+ },
76+ u'maasserver.bootsource': {
77+ 'Meta': {'object_name': 'BootSource'},
78+ 'cluster': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']", 'null': 'True'}),
79+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
80+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
81+ 'keyring_data': ('maasserver.fields.EditableBinaryField', [], {'blank': 'True'}),
82+ 'keyring_filename': ('django.db.models.fields.FilePathField', [], {'max_length': '100', 'blank': 'True'}),
83+ 'updated': ('django.db.models.fields.DateTimeField', [], {}),
84+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
85+ },
86+ u'maasserver.bootsourceselection': {
87+ 'Meta': {'object_name': 'BootSourceSelection'},
88+ 'arches': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'text'", 'null': 'True', 'blank': 'True'}),
89+ 'boot_source': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.BootSource']"}),
90+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
91+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
92+ 'labels': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'text'", 'null': 'True', 'blank': 'True'}),
93+ 'release': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '20', 'blank': 'True'}),
94+ 'subarches': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'text'", 'null': 'True', 'blank': 'True'}),
95+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
96+ },
97+ u'maasserver.componenterror': {
98+ 'Meta': {'object_name': 'ComponentError'},
99+ 'component': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40'}),
100+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
101+ 'error': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
102+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
103+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
104+ },
105+ u'maasserver.config': {
106+ 'Meta': {'object_name': 'Config'},
107+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
108+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
109+ 'value': ('maasserver.fields.JSONObjectField', [], {'null': 'True'})
110+ },
111+ u'maasserver.dhcplease': {
112+ 'Meta': {'object_name': 'DHCPLease'},
113+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
114+ 'ip': ('maasserver.fields.MAASIPAddressField', [], {'unique': 'True', 'max_length': '39'}),
115+ 'mac': ('maasserver.fields.MACAddressField', [], {}),
116+ 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"})
117+ },
118+ u'maasserver.downloadprogress': {
119+ 'Meta': {'object_name': 'DownloadProgress'},
120+ 'bytes_downloaded': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
121+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
122+ 'error': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'}),
123+ 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
124+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
125+ 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}),
126+ 'size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
127+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
128+ },
129+ u'maasserver.filestorage': {
130+ 'Meta': {'unique_together': "((u'filename', u'owner'),)", 'object_name': 'FileStorage'},
131+ 'content': ('metadataserver.fields.BinaryField', [], {'blank': 'True'}),
132+ 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
133+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
134+ 'key': ('django.db.models.fields.CharField', [], {'default': "u'02ff744a-0b71-11e4-9e5b-bcaec594d3f6'", 'unique': 'True', 'max_length': '36'}),
135+ 'owner': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
136+ },
137+ u'maasserver.licensekey': {
138+ 'Meta': {'unique_together': "((u'osystem', u'distro_series'),)", 'object_name': 'LicenseKey'},
139+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
140+ 'distro_series': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
141+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
142+ 'license_key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
143+ 'osystem': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
144+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
145+ },
146+ u'maasserver.macaddress': {
147+ 'Meta': {'object_name': 'MACAddress'},
148+ 'cluster_interface': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['maasserver.NodeGroupInterface']", 'null': 'True', 'blank': 'True'}),
149+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
150+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
151+ 'ip_addresses': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.StaticIPAddress']", 'symmetrical': 'False', 'through': u"orm['maasserver.MACStaticIPAddressLink']", 'blank': 'True'}),
152+ 'mac_address': ('maasserver.fields.MACAddressField', [], {'unique': 'True'}),
153+ 'networks': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.Network']", 'symmetrical': 'False', 'blank': 'True'}),
154+ 'node': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.Node']"}),
155+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
156+ },
157+ u'maasserver.macstaticipaddresslink': {
158+ 'Meta': {'unique_together': "((u'ip_address', u'mac_address'),)", 'object_name': 'MACStaticIPAddressLink'},
159+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
160+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
161+ 'ip_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.StaticIPAddress']", 'unique': 'True'}),
162+ 'mac_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.MACAddress']"}),
163+ 'nic_alias': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
164+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
165+ },
166+ u'maasserver.network': {
167+ 'Meta': {'object_name': 'Network'},
168+ 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
169+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
170+ 'ip': ('maasserver.fields.MAASIPAddressField', [], {'unique': 'True', 'max_length': '39'}),
171+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
172+ 'netmask': ('maasserver.fields.MAASIPAddressField', [], {'max_length': '39'}),
173+ 'vlan_tag': ('django.db.models.fields.PositiveSmallIntegerField', [], {'unique': 'True', 'null': 'True', 'blank': 'True'})
174+ },
175+ u'maasserver.node': {
176+ 'Meta': {'object_name': 'Node'},
177+ 'agent_name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'null': 'True', 'blank': 'True'}),
178+ 'architecture': ('django.db.models.fields.CharField', [], {'max_length': '31'}),
179+ 'cpu_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
180+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
181+ 'distro_series': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '20', 'blank': 'True'}),
182+ 'error': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
183+ 'hostname': ('django.db.models.fields.CharField', [], {'default': "u''", 'unique': 'True', 'max_length': '255', 'blank': 'True'}),
184+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
185+ 'license_key': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
186+ 'memory': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
187+ 'netboot': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
188+ 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']", 'null': 'True'}),
189+ 'osystem': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '20', 'blank': 'True'}),
190+ 'owner': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'}),
191+ 'power_parameters': ('maasserver.fields.JSONObjectField', [], {'default': "u''", 'blank': 'True'}),
192+ 'power_type': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '10', 'blank': 'True'}),
193+ 'routers': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'macaddr'", 'null': 'True', 'blank': 'True'}),
194+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '10'}),
195+ 'storage': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
196+ 'system_id': ('django.db.models.fields.CharField', [], {'default': "u'node-02fd7c30-0b71-11e4-9e5b-bcaec594d3f6'", 'unique': 'True', 'max_length': '41'}),
197+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.Tag']", 'symmetrical': 'False'}),
198+ 'token': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Token']", 'null': 'True'}),
199+ 'updated': ('django.db.models.fields.DateTimeField', [], {}),
200+ 'zone': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.Zone']", 'on_delete': 'models.SET_DEFAULT'})
201+ },
202+ u'maasserver.nodegroup': {
203+ 'Meta': {'object_name': 'NodeGroup'},
204+ 'api_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '18'}),
205+ 'api_token': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Token']", 'unique': 'True'}),
206+ 'cluster_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100', 'blank': 'True'}),
207+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
208+ 'dhcp_key': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
209+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
210+ 'maas_url': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
211+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
212+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
213+ 'updated': ('django.db.models.fields.DateTimeField', [], {}),
214+ 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'})
215+ },
216+ u'maasserver.nodegroupinterface': {
217+ 'Meta': {'unique_together': "((u'nodegroup', u'interface'),)", 'object_name': 'NodeGroupInterface'},
218+ 'broadcast_ip': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
219+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
220+ 'foreign_dhcp_ip': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
221+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
222+ 'interface': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
223+ 'ip': ('maasserver.fields.MAASIPAddressField', [], {'max_length': '39'}),
224+ 'ip_range_high': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
225+ 'ip_range_low': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
226+ 'management': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
227+ 'name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
228+ 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}),
229+ 'router_ip': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
230+ 'static_ip_range_high': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
231+ 'static_ip_range_low': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
232+ 'subnet_mask': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
233+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
234+ },
235+ u'maasserver.sshkey': {
236+ 'Meta': {'unique_together': "((u'user', u'key'),)", 'object_name': 'SSHKey'},
237+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
238+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
239+ 'key': ('django.db.models.fields.TextField', [], {}),
240+ 'updated': ('django.db.models.fields.DateTimeField', [], {}),
241+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
242+ },
243+ u'maasserver.sslkey': {
244+ 'Meta': {'unique_together': "((u'user', u'key'),)", 'object_name': 'SSLKey'},
245+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
246+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
247+ 'key': ('django.db.models.fields.TextField', [], {}),
248+ 'updated': ('django.db.models.fields.DateTimeField', [], {}),
249+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
250+ },
251+ u'maasserver.staticipaddress': {
252+ 'Meta': {'object_name': 'StaticIPAddress'},
253+ 'alloc_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
254+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
255+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
256+ 'ip': ('maasserver.fields.MAASIPAddressField', [], {'unique': 'True', 'max_length': '39'}),
257+ 'updated': ('django.db.models.fields.DateTimeField', [], {}),
258+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
259+ },
260+ u'maasserver.tag': {
261+ 'Meta': {'object_name': 'Tag'},
262+ 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
263+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
264+ 'definition': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
265+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
266+ 'kernel_opts': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
267+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}),
268+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
269+ },
270+ u'maasserver.userprofile': {
271+ 'Meta': {'object_name': 'UserProfile'},
272+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
273+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['auth.User']", 'unique': 'True'})
274+ },
275+ u'maasserver.zone': {
276+ 'Meta': {'ordering': "[u'name']", 'object_name': 'Zone'},
277+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
278+ 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
279+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
280+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}),
281+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
282+ },
283+ u'piston.consumer': {
284+ 'Meta': {'object_name': 'Consumer'},
285+ 'description': ('django.db.models.fields.TextField', [], {}),
286+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
287+ 'key': ('django.db.models.fields.CharField', [], {'max_length': '18'}),
288+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
289+ 'secret': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
290+ 'status': ('django.db.models.fields.CharField', [], {'default': "'pending'", 'max_length': '16'}),
291+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'consumers'", 'null': 'True', 'to': u"orm['auth.User']"})
292+ },
293+ u'piston.token': {
294+ 'Meta': {'object_name': 'Token'},
295+ 'callback': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
296+ 'callback_confirmed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
297+ 'consumer': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Consumer']"}),
298+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
299+ 'is_approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
300+ 'key': ('django.db.models.fields.CharField', [], {'max_length': '18'}),
301+ 'secret': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
302+ 'timestamp': ('django.db.models.fields.IntegerField', [], {'default': '1405354073L'}),
303+ 'token_type': ('django.db.models.fields.IntegerField', [], {}),
304+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'tokens'", 'null': 'True', 'to': u"orm['auth.User']"}),
305+ 'verifier': ('django.db.models.fields.CharField', [], {'max_length': '10'})
306+ }
307+ }
308+
309+ complete_apps = ['maasserver']
310
311=== removed file 'src/maasserver/migrations/0089_create_nodegroupinterface_name.py'
312--- src/maasserver/migrations/0089_create_nodegroupinterface_name.py 2014-07-10 09:39:33 +0000
313+++ src/maasserver/migrations/0089_create_nodegroupinterface_name.py 1970-01-01 00:00:00 +0000
314@@ -1,325 +0,0 @@
315-# -*- coding: utf-8 -*-
316-from maasserver.utils.interfaces import make_name_from_interface
317-from south.db import db
318-from south.v2 import SchemaMigration
319-
320-
321-class Migration(SchemaMigration):
322-
323- def forwards(self, orm):
324- # Removing unique constraint on 'NodeGroupInterface', fields ['interface', 'nodegroup']
325- db.delete_unique(u'maasserver_nodegroupinterface', ['interface', 'nodegroup_id'])
326-
327- # Adding field 'NodeGroupInterface.name'
328- db.add_column(u'maasserver_nodegroupinterface', 'name',
329- self.gf('django.db.models.fields.CharField')(default=u'', max_length=255, blank=True),
330- keep_default=False)
331-
332- # For pre-existing NodeGroupInterface entries, the name defaults to
333- # a watered-down version of the network interface name.
334- for ngi in orm[u'maasserver.nodegroupinterface'].objects.all():
335- ngi.name = make_name_from_interface(ngi.interface)
336- ngi.save()
337-
338- # Adding unique constraint on 'NodeGroupInterface', fields ['nodegroup', 'name']
339- db.create_unique(u'maasserver_nodegroupinterface', ['nodegroup_id', 'name'])
340-
341-
342- def backwards(self, orm):
343- # Removing unique constraint on 'NodeGroupInterface', fields ['nodegroup', 'name']
344- db.delete_unique(u'maasserver_nodegroupinterface', ['nodegroup_id', 'name'])
345-
346- # Deleting field 'NodeGroupInterface.name'
347- db.delete_column(u'maasserver_nodegroupinterface', 'name')
348-
349- # Adding unique constraint on 'NodeGroupInterface', fields ['interface', 'nodegroup']
350- db.create_unique(u'maasserver_nodegroupinterface', ['interface', 'nodegroup_id'])
351-
352-
353- models = {
354- u'auth.group': {
355- 'Meta': {'object_name': 'Group'},
356- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
357- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
358- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
359- },
360- u'auth.permission': {
361- 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
362- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
363- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
364- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
365- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
366- },
367- u'auth.user': {
368- 'Meta': {'object_name': 'User'},
369- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
370- 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),
371- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
372- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
373- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
374- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
375- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
376- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
377- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
378- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
379- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
380- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
381- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
382- },
383- u'contenttypes.contenttype': {
384- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
385- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
386- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
387- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
388- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
389- },
390- u'maasserver.bootimage': {
391- 'Meta': {'unique_together': "((u'nodegroup', u'osystem', u'architecture', u'subarchitecture', u'release', u'purpose', u'label'),)", 'object_name': 'BootImage'},
392- 'architecture': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
393- 'created': ('django.db.models.fields.DateTimeField', [], {}),
394- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
395- 'label': ('django.db.models.fields.CharField', [], {'default': "u'release'", 'max_length': '255'}),
396- 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}),
397- 'osystem': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
398- 'purpose': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
399- 'release': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
400- 'subarchitecture': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
401- 'supported_subarches': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
402- 'updated': ('django.db.models.fields.DateTimeField', [], {}),
403- 'xinstall_path': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'null': 'True', 'blank': 'True'}),
404- 'xinstall_type': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '30', 'null': 'True', 'blank': 'True'})
405- },
406- u'maasserver.bootsource': {
407- 'Meta': {'object_name': 'BootSource'},
408- 'cluster': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']", 'null': 'True'}),
409- 'created': ('django.db.models.fields.DateTimeField', [], {}),
410- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
411- 'keyring_data': ('maasserver.fields.EditableBinaryField', [], {'blank': 'True'}),
412- 'keyring_filename': ('django.db.models.fields.FilePathField', [], {'max_length': '100', 'blank': 'True'}),
413- 'updated': ('django.db.models.fields.DateTimeField', [], {}),
414- 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
415- },
416- u'maasserver.bootsourceselection': {
417- 'Meta': {'object_name': 'BootSourceSelection'},
418- 'arches': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'text'", 'null': 'True', 'blank': 'True'}),
419- 'boot_source': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.BootSource']"}),
420- 'created': ('django.db.models.fields.DateTimeField', [], {}),
421- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
422- 'labels': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'text'", 'null': 'True', 'blank': 'True'}),
423- 'release': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '20', 'blank': 'True'}),
424- 'subarches': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'text'", 'null': 'True', 'blank': 'True'}),
425- 'updated': ('django.db.models.fields.DateTimeField', [], {})
426- },
427- u'maasserver.componenterror': {
428- 'Meta': {'object_name': 'ComponentError'},
429- 'component': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40'}),
430- 'created': ('django.db.models.fields.DateTimeField', [], {}),
431- 'error': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
432- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
433- 'updated': ('django.db.models.fields.DateTimeField', [], {})
434- },
435- u'maasserver.config': {
436- 'Meta': {'object_name': 'Config'},
437- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
438- 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
439- 'value': ('maasserver.fields.JSONObjectField', [], {'null': 'True'})
440- },
441- u'maasserver.dhcplease': {
442- 'Meta': {'object_name': 'DHCPLease'},
443- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
444- 'ip': ('maasserver.fields.MAASIPAddressField', [], {'unique': 'True', 'max_length': '39'}),
445- 'mac': ('maasserver.fields.MACAddressField', [], {}),
446- 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"})
447- },
448- u'maasserver.downloadprogress': {
449- 'Meta': {'object_name': 'DownloadProgress'},
450- 'bytes_downloaded': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
451- 'created': ('django.db.models.fields.DateTimeField', [], {}),
452- 'error': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'}),
453- 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
454- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
455- 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}),
456- 'size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
457- 'updated': ('django.db.models.fields.DateTimeField', [], {})
458- },
459- u'maasserver.filestorage': {
460- 'Meta': {'unique_together': "((u'filename', u'owner'),)", 'object_name': 'FileStorage'},
461- 'content': ('metadataserver.fields.BinaryField', [], {'blank': 'True'}),
462- 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
463- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
464- 'key': ('django.db.models.fields.CharField', [], {'default': "u'627994c8-0815-11e4-9dc0-446d57751515'", 'unique': 'True', 'max_length': '36'}),
465- 'owner': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
466- },
467- u'maasserver.licensekey': {
468- 'Meta': {'unique_together': "((u'osystem', u'distro_series'),)", 'object_name': 'LicenseKey'},
469- 'created': ('django.db.models.fields.DateTimeField', [], {}),
470- 'distro_series': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
471- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
472- 'license_key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
473- 'osystem': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
474- 'updated': ('django.db.models.fields.DateTimeField', [], {})
475- },
476- u'maasserver.macaddress': {
477- 'Meta': {'object_name': 'MACAddress'},
478- 'cluster_interface': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['maasserver.NodeGroupInterface']", 'null': 'True', 'blank': 'True'}),
479- 'created': ('django.db.models.fields.DateTimeField', [], {}),
480- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
481- 'ip_addresses': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.StaticIPAddress']", 'symmetrical': 'False', 'through': u"orm['maasserver.MACStaticIPAddressLink']", 'blank': 'True'}),
482- 'mac_address': ('maasserver.fields.MACAddressField', [], {'unique': 'True'}),
483- 'networks': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.Network']", 'symmetrical': 'False', 'blank': 'True'}),
484- 'node': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.Node']"}),
485- 'updated': ('django.db.models.fields.DateTimeField', [], {})
486- },
487- u'maasserver.macstaticipaddresslink': {
488- 'Meta': {'unique_together': "((u'ip_address', u'mac_address'),)", 'object_name': 'MACStaticIPAddressLink'},
489- 'created': ('django.db.models.fields.DateTimeField', [], {}),
490- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
491- 'ip_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.StaticIPAddress']", 'unique': 'True'}),
492- 'mac_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.MACAddress']"}),
493- 'nic_alias': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
494- 'updated': ('django.db.models.fields.DateTimeField', [], {})
495- },
496- u'maasserver.network': {
497- 'Meta': {'object_name': 'Network'},
498- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
499- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
500- 'ip': ('maasserver.fields.MAASIPAddressField', [], {'unique': 'True', 'max_length': '39'}),
501- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
502- 'netmask': ('maasserver.fields.MAASIPAddressField', [], {'max_length': '39'}),
503- 'vlan_tag': ('django.db.models.fields.PositiveSmallIntegerField', [], {'unique': 'True', 'null': 'True', 'blank': 'True'})
504- },
505- u'maasserver.node': {
506- 'Meta': {'object_name': 'Node'},
507- 'agent_name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'null': 'True', 'blank': 'True'}),
508- 'architecture': ('django.db.models.fields.CharField', [], {'max_length': '31'}),
509- 'cpu_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
510- 'created': ('django.db.models.fields.DateTimeField', [], {}),
511- 'distro_series': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '20', 'blank': 'True'}),
512- 'error': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
513- 'hostname': ('django.db.models.fields.CharField', [], {'default': "u''", 'unique': 'True', 'max_length': '255', 'blank': 'True'}),
514- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
515- 'license_key': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
516- 'memory': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
517- 'netboot': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
518- 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']", 'null': 'True'}),
519- 'osystem': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '20', 'blank': 'True'}),
520- 'owner': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'}),
521- 'power_parameters': ('maasserver.fields.JSONObjectField', [], {'default': "u''", 'blank': 'True'}),
522- 'power_type': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '10', 'blank': 'True'}),
523- 'routers': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'macaddr'", 'null': 'True', 'blank': 'True'}),
524- 'status': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '10'}),
525- 'storage': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
526- 'system_id': ('django.db.models.fields.CharField', [], {'default': "u'node-627ad16c-0815-11e4-9dc0-446d57751515'", 'unique': 'True', 'max_length': '41'}),
527- 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.Tag']", 'symmetrical': 'False'}),
528- 'token': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Token']", 'null': 'True'}),
529- 'updated': ('django.db.models.fields.DateTimeField', [], {}),
530- 'zone': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.Zone']", 'on_delete': 'models.SET_DEFAULT'})
531- },
532- u'maasserver.nodegroup': {
533- 'Meta': {'object_name': 'NodeGroup'},
534- 'api_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '18'}),
535- 'api_token': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Token']", 'unique': 'True'}),
536- 'cluster_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100', 'blank': 'True'}),
537- 'created': ('django.db.models.fields.DateTimeField', [], {}),
538- 'dhcp_key': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
539- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
540- 'maas_url': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
541- 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
542- 'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
543- 'updated': ('django.db.models.fields.DateTimeField', [], {}),
544- 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'})
545- },
546- u'maasserver.nodegroupinterface': {
547- 'Meta': {'unique_together': "((u'nodegroup', u'name'),)", 'object_name': 'NodeGroupInterface'},
548- 'broadcast_ip': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
549- 'created': ('django.db.models.fields.DateTimeField', [], {}),
550- 'foreign_dhcp_ip': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
551- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
552- 'interface': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
553- 'ip': ('maasserver.fields.MAASIPAddressField', [], {'max_length': '39'}),
554- 'ip_range_high': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
555- 'ip_range_low': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
556- 'management': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
557- 'name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
558- 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}),
559- 'router_ip': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
560- 'static_ip_range_high': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
561- 'static_ip_range_low': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
562- 'subnet_mask': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
563- 'updated': ('django.db.models.fields.DateTimeField', [], {})
564- },
565- u'maasserver.sshkey': {
566- 'Meta': {'unique_together': "((u'user', u'key'),)", 'object_name': 'SSHKey'},
567- 'created': ('django.db.models.fields.DateTimeField', [], {}),
568- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
569- 'key': ('django.db.models.fields.TextField', [], {}),
570- 'updated': ('django.db.models.fields.DateTimeField', [], {}),
571- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
572- },
573- u'maasserver.sslkey': {
574- 'Meta': {'unique_together': "((u'user', u'key'),)", 'object_name': 'SSLKey'},
575- 'created': ('django.db.models.fields.DateTimeField', [], {}),
576- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
577- 'key': ('django.db.models.fields.TextField', [], {}),
578- 'updated': ('django.db.models.fields.DateTimeField', [], {}),
579- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
580- },
581- u'maasserver.staticipaddress': {
582- 'Meta': {'object_name': 'StaticIPAddress'},
583- 'alloc_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
584- 'created': ('django.db.models.fields.DateTimeField', [], {}),
585- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
586- 'ip': ('maasserver.fields.MAASIPAddressField', [], {'unique': 'True', 'max_length': '39'}),
587- 'updated': ('django.db.models.fields.DateTimeField', [], {}),
588- 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
589- },
590- u'maasserver.tag': {
591- 'Meta': {'object_name': 'Tag'},
592- 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
593- 'created': ('django.db.models.fields.DateTimeField', [], {}),
594- 'definition': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
595- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
596- 'kernel_opts': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
597- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}),
598- 'updated': ('django.db.models.fields.DateTimeField', [], {})
599- },
600- u'maasserver.userprofile': {
601- 'Meta': {'object_name': 'UserProfile'},
602- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
603- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['auth.User']", 'unique': 'True'})
604- },
605- u'maasserver.zone': {
606- 'Meta': {'ordering': "[u'name']", 'object_name': 'Zone'},
607- 'created': ('django.db.models.fields.DateTimeField', [], {}),
608- 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
609- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
610- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}),
611- 'updated': ('django.db.models.fields.DateTimeField', [], {})
612- },
613- u'piston.consumer': {
614- 'Meta': {'object_name': 'Consumer'},
615- 'description': ('django.db.models.fields.TextField', [], {}),
616- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
617- 'key': ('django.db.models.fields.CharField', [], {'max_length': '18'}),
618- 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
619- 'secret': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
620- 'status': ('django.db.models.fields.CharField', [], {'default': "'pending'", 'max_length': '16'}),
621- 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'consumers'", 'null': 'True', 'to': u"orm['auth.User']"})
622- },
623- u'piston.token': {
624- 'Meta': {'object_name': 'Token'},
625- 'callback': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
626- 'callback_confirmed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
627- 'consumer': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Consumer']"}),
628- u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
629- 'is_approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
630- 'key': ('django.db.models.fields.CharField', [], {'max_length': '18'}),
631- 'secret': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
632- 'timestamp': ('django.db.models.fields.IntegerField', [], {'default': '1404984866L'}),
633- 'token_type': ('django.db.models.fields.IntegerField', [], {}),
634- 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'tokens'", 'null': 'True', 'to': u"orm['auth.User']"}),
635- 'verifier': ('django.db.models.fields.CharField', [], {'max_length': '10'})
636- }
637- }
638-
639- complete_apps = ['maasserver']
640
641=== added file 'src/maasserver/migrations/0090_initialise_nodegroupinterface_name.py'
642--- src/maasserver/migrations/0090_initialise_nodegroupinterface_name.py 1970-01-01 00:00:00 +0000
643+++ src/maasserver/migrations/0090_initialise_nodegroupinterface_name.py 2014-07-14 16:33:40 +0000
644@@ -0,0 +1,321 @@
645+from maasserver.utils.interfaces import make_name_from_interface
646+from south.db import db
647+from south.v2 import SchemaMigration
648+
649+
650+class Migration(SchemaMigration):
651+
652+ def forwards(self, orm):
653+ # Initialise new field 'NodeGroupInterface.name'. This becomes the
654+ # identifying name (within a cluster) of a cluster interface, instead
655+ # of the network interface name. A network interface may be on
656+ # multiple IPv6 networks, each has to be its own cluster interface.
657+ #
658+ # For pre-existing NodeGroupInterface entries, the name defaults to
659+ # a watered-down version of the network interface name.
660+ for ngi in orm[u'maasserver.nodegroupinterface'].objects.all():
661+ ngi.name = make_name_from_interface(ngi.interface)
662+ ngi.save()
663+
664+ # Removing unique constraint on 'NodeGroupInterface', fields ['interface', 'nodegroup']
665+ db.delete_unique(u'maasserver_nodegroupinterface', ['interface', 'nodegroup_id'])
666+
667+ # Adding unique constraint on 'NodeGroupInterface', fields ['nodegroup', 'name']
668+ db.create_unique(u'maasserver_nodegroupinterface', ['nodegroup_id', 'name'])
669+
670+
671+ def backwards(self, orm):
672+ # Removing unique constraint on 'NodeGroupInterface', fields ['nodegroup', 'name']
673+ db.delete_unique(u'maasserver_nodegroupinterface', ['nodegroup_id', 'name'])
674+
675+ # Adding unique constraint on 'NodeGroupInterface', fields ['interface', 'nodegroup']
676+ db.create_unique(u'maasserver_nodegroupinterface', ['interface', 'nodegroup_id'])
677+
678+
679+ models = {
680+ u'auth.group': {
681+ 'Meta': {'object_name': 'Group'},
682+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
683+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
684+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
685+ },
686+ u'auth.permission': {
687+ 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
688+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
689+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
690+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
691+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
692+ },
693+ u'auth.user': {
694+ 'Meta': {'object_name': 'User'},
695+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
696+ 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),
697+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
698+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
699+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
700+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
701+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
702+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
703+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
704+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
705+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
706+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
707+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
708+ },
709+ u'contenttypes.contenttype': {
710+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
711+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
712+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
713+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
714+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
715+ },
716+ u'maasserver.bootimage': {
717+ 'Meta': {'unique_together': "((u'nodegroup', u'osystem', u'architecture', u'subarchitecture', u'release', u'purpose', u'label'),)", 'object_name': 'BootImage'},
718+ 'architecture': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
719+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
720+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
721+ 'label': ('django.db.models.fields.CharField', [], {'default': "u'release'", 'max_length': '255'}),
722+ 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}),
723+ 'osystem': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
724+ 'purpose': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
725+ 'release': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
726+ 'subarchitecture': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
727+ 'supported_subarches': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
728+ 'updated': ('django.db.models.fields.DateTimeField', [], {}),
729+ 'xinstall_path': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'null': 'True', 'blank': 'True'}),
730+ 'xinstall_type': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '30', 'null': 'True', 'blank': 'True'})
731+ },
732+ u'maasserver.bootsource': {
733+ 'Meta': {'object_name': 'BootSource'},
734+ 'cluster': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']", 'null': 'True'}),
735+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
736+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
737+ 'keyring_data': ('maasserver.fields.EditableBinaryField', [], {'blank': 'True'}),
738+ 'keyring_filename': ('django.db.models.fields.FilePathField', [], {'max_length': '100', 'blank': 'True'}),
739+ 'updated': ('django.db.models.fields.DateTimeField', [], {}),
740+ 'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
741+ },
742+ u'maasserver.bootsourceselection': {
743+ 'Meta': {'object_name': 'BootSourceSelection'},
744+ 'arches': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'text'", 'null': 'True', 'blank': 'True'}),
745+ 'boot_source': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.BootSource']"}),
746+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
747+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
748+ 'labels': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'text'", 'null': 'True', 'blank': 'True'}),
749+ 'release': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '20', 'blank': 'True'}),
750+ 'subarches': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'text'", 'null': 'True', 'blank': 'True'}),
751+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
752+ },
753+ u'maasserver.componenterror': {
754+ 'Meta': {'object_name': 'ComponentError'},
755+ 'component': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40'}),
756+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
757+ 'error': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
758+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
759+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
760+ },
761+ u'maasserver.config': {
762+ 'Meta': {'object_name': 'Config'},
763+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
764+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
765+ 'value': ('maasserver.fields.JSONObjectField', [], {'null': 'True'})
766+ },
767+ u'maasserver.dhcplease': {
768+ 'Meta': {'object_name': 'DHCPLease'},
769+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
770+ 'ip': ('maasserver.fields.MAASIPAddressField', [], {'unique': 'True', 'max_length': '39'}),
771+ 'mac': ('maasserver.fields.MACAddressField', [], {}),
772+ 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"})
773+ },
774+ u'maasserver.downloadprogress': {
775+ 'Meta': {'object_name': 'DownloadProgress'},
776+ 'bytes_downloaded': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
777+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
778+ 'error': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'}),
779+ 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
780+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
781+ 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}),
782+ 'size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
783+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
784+ },
785+ u'maasserver.filestorage': {
786+ 'Meta': {'unique_together': "((u'filename', u'owner'),)", 'object_name': 'FileStorage'},
787+ 'content': ('metadataserver.fields.BinaryField', [], {'blank': 'True'}),
788+ 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
789+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
790+ 'key': ('django.db.models.fields.CharField', [], {'default': "u'182fe3d6-0b71-11e4-a58d-bcaec594d3f6'", 'unique': 'True', 'max_length': '36'}),
791+ 'owner': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
792+ },
793+ u'maasserver.licensekey': {
794+ 'Meta': {'unique_together': "((u'osystem', u'distro_series'),)", 'object_name': 'LicenseKey'},
795+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
796+ 'distro_series': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
797+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
798+ 'license_key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
799+ 'osystem': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
800+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
801+ },
802+ u'maasserver.macaddress': {
803+ 'Meta': {'object_name': 'MACAddress'},
804+ 'cluster_interface': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['maasserver.NodeGroupInterface']", 'null': 'True', 'blank': 'True'}),
805+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
806+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
807+ 'ip_addresses': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.StaticIPAddress']", 'symmetrical': 'False', 'through': u"orm['maasserver.MACStaticIPAddressLink']", 'blank': 'True'}),
808+ 'mac_address': ('maasserver.fields.MACAddressField', [], {'unique': 'True'}),
809+ 'networks': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.Network']", 'symmetrical': 'False', 'blank': 'True'}),
810+ 'node': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.Node']"}),
811+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
812+ },
813+ u'maasserver.macstaticipaddresslink': {
814+ 'Meta': {'unique_together': "((u'ip_address', u'mac_address'),)", 'object_name': 'MACStaticIPAddressLink'},
815+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
816+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
817+ 'ip_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.StaticIPAddress']", 'unique': 'True'}),
818+ 'mac_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.MACAddress']"}),
819+ 'nic_alias': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
820+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
821+ },
822+ u'maasserver.network': {
823+ 'Meta': {'object_name': 'Network'},
824+ 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
825+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
826+ 'ip': ('maasserver.fields.MAASIPAddressField', [], {'unique': 'True', 'max_length': '39'}),
827+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
828+ 'netmask': ('maasserver.fields.MAASIPAddressField', [], {'max_length': '39'}),
829+ 'vlan_tag': ('django.db.models.fields.PositiveSmallIntegerField', [], {'unique': 'True', 'null': 'True', 'blank': 'True'})
830+ },
831+ u'maasserver.node': {
832+ 'Meta': {'object_name': 'Node'},
833+ 'agent_name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'null': 'True', 'blank': 'True'}),
834+ 'architecture': ('django.db.models.fields.CharField', [], {'max_length': '31'}),
835+ 'cpu_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
836+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
837+ 'distro_series': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '20', 'blank': 'True'}),
838+ 'error': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
839+ 'hostname': ('django.db.models.fields.CharField', [], {'default': "u''", 'unique': 'True', 'max_length': '255', 'blank': 'True'}),
840+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
841+ 'license_key': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True', 'blank': 'True'}),
842+ 'memory': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
843+ 'netboot': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
844+ 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']", 'null': 'True'}),
845+ 'osystem': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '20', 'blank': 'True'}),
846+ 'owner': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'}),
847+ 'power_parameters': ('maasserver.fields.JSONObjectField', [], {'default': "u''", 'blank': 'True'}),
848+ 'power_type': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '10', 'blank': 'True'}),
849+ 'routers': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'macaddr'", 'null': 'True', 'blank': 'True'}),
850+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '10'}),
851+ 'storage': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
852+ 'system_id': ('django.db.models.fields.CharField', [], {'default': "u'node-182db44e-0b71-11e4-a58d-bcaec594d3f6'", 'unique': 'True', 'max_length': '41'}),
853+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.Tag']", 'symmetrical': 'False'}),
854+ 'token': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Token']", 'null': 'True'}),
855+ 'updated': ('django.db.models.fields.DateTimeField', [], {}),
856+ 'zone': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.Zone']", 'on_delete': 'models.SET_DEFAULT'})
857+ },
858+ u'maasserver.nodegroup': {
859+ 'Meta': {'object_name': 'NodeGroup'},
860+ 'api_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '18'}),
861+ 'api_token': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Token']", 'unique': 'True'}),
862+ 'cluster_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100', 'blank': 'True'}),
863+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
864+ 'dhcp_key': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
865+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
866+ 'maas_url': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
867+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}),
868+ 'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
869+ 'updated': ('django.db.models.fields.DateTimeField', [], {}),
870+ 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'})
871+ },
872+ u'maasserver.nodegroupinterface': {
873+ 'Meta': {'unique_together': "((u'nodegroup', u'name'),)", 'object_name': 'NodeGroupInterface'},
874+ 'broadcast_ip': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
875+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
876+ 'foreign_dhcp_ip': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
877+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
878+ 'interface': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
879+ 'ip': ('maasserver.fields.MAASIPAddressField', [], {'max_length': '39'}),
880+ 'ip_range_high': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
881+ 'ip_range_low': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
882+ 'management': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
883+ 'name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
884+ 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}),
885+ 'router_ip': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
886+ 'static_ip_range_high': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
887+ 'static_ip_range_low': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
888+ 'subnet_mask': ('maasserver.fields.MAASIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}),
889+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
890+ },
891+ u'maasserver.sshkey': {
892+ 'Meta': {'unique_together': "((u'user', u'key'),)", 'object_name': 'SSHKey'},
893+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
894+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
895+ 'key': ('django.db.models.fields.TextField', [], {}),
896+ 'updated': ('django.db.models.fields.DateTimeField', [], {}),
897+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
898+ },
899+ u'maasserver.sslkey': {
900+ 'Meta': {'unique_together': "((u'user', u'key'),)", 'object_name': 'SSLKey'},
901+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
902+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
903+ 'key': ('django.db.models.fields.TextField', [], {}),
904+ 'updated': ('django.db.models.fields.DateTimeField', [], {}),
905+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})
906+ },
907+ u'maasserver.staticipaddress': {
908+ 'Meta': {'object_name': 'StaticIPAddress'},
909+ 'alloc_type': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
910+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
911+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
912+ 'ip': ('maasserver.fields.MAASIPAddressField', [], {'unique': 'True', 'max_length': '39'}),
913+ 'updated': ('django.db.models.fields.DateTimeField', [], {}),
914+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
915+ },
916+ u'maasserver.tag': {
917+ 'Meta': {'object_name': 'Tag'},
918+ 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
919+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
920+ 'definition': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
921+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
922+ 'kernel_opts': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
923+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}),
924+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
925+ },
926+ u'maasserver.userprofile': {
927+ 'Meta': {'object_name': 'UserProfile'},
928+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
929+ 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['auth.User']", 'unique': 'True'})
930+ },
931+ u'maasserver.zone': {
932+ 'Meta': {'ordering': "[u'name']", 'object_name': 'Zone'},
933+ 'created': ('django.db.models.fields.DateTimeField', [], {}),
934+ 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
935+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
936+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}),
937+ 'updated': ('django.db.models.fields.DateTimeField', [], {})
938+ },
939+ u'piston.consumer': {
940+ 'Meta': {'object_name': 'Consumer'},
941+ 'description': ('django.db.models.fields.TextField', [], {}),
942+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
943+ 'key': ('django.db.models.fields.CharField', [], {'max_length': '18'}),
944+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
945+ 'secret': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
946+ 'status': ('django.db.models.fields.CharField', [], {'default': "'pending'", 'max_length': '16'}),
947+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'consumers'", 'null': 'True', 'to': u"orm['auth.User']"})
948+ },
949+ u'piston.token': {
950+ 'Meta': {'object_name': 'Token'},
951+ 'callback': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
952+ 'callback_confirmed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
953+ 'consumer': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Consumer']"}),
954+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
955+ 'is_approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
956+ 'key': ('django.db.models.fields.CharField', [], {'max_length': '18'}),
957+ 'secret': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
958+ 'timestamp': ('django.db.models.fields.IntegerField', [], {'default': '1405354108L'}),
959+ 'token_type': ('django.db.models.fields.IntegerField', [], {}),
960+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'tokens'", 'null': 'True', 'to': u"orm['auth.User']"}),
961+ 'verifier': ('django.db.models.fields.CharField', [], {'max_length': '10'})
962+ }
963+ }
964+
965+ complete_apps = ['maasserver']