Merge lp:~rvb/maas/add-network-node-rel2 into lp:~maas-committers/maas/trunk
- add-network-node-rel2
- Merge into trunk
Proposed by
Raphaël Badin
Status: | Merged |
---|---|
Approved by: | Raphaël Badin |
Approved revision: | no longer in the source branch. |
Merged at revision: | 1885 |
Proposed branch: | lp:~rvb/maas/add-network-node-rel2 |
Merge into: | lp:~maas-committers/maas/trunk |
Diff against target: |
574 lines (+282/-255) 4 files modified
src/maasserver/migrations/0066_rename_vlan_add_link_node_network.py (+268/-0) src/maasserver/migrations/0066_replace_vlan_with_network.py (+0/-255) src/maasserver/models/node.py (+3/-0) src/maasserver/models/tests/test_node.py (+11/-0) |
To merge this branch: | bzr merge lp:~rvb/maas/add-network-node-rel2 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Raphaël Badin (community) | Approve | ||
Review via email:
|
Commit message
Add a relation between nodes and networks.
Description of the change
(Fold 2 migrations into one.)
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === added file 'src/maasserver/migrations/0066_rename_vlan_add_link_node_network.py' | |||
2 | --- src/maasserver/migrations/0066_rename_vlan_add_link_node_network.py 1970-01-01 00:00:00 +0000 | |||
3 | +++ src/maasserver/migrations/0066_rename_vlan_add_link_node_network.py 2014-02-04 09:09:30 +0000 | |||
4 | @@ -0,0 +1,268 @@ | |||
5 | 1 | # -*- coding: utf-8 -*- | ||
6 | 2 | import datetime | ||
7 | 3 | |||
8 | 4 | from django.db import models | ||
9 | 5 | from south.db import db | ||
10 | 6 | from south.v2 import SchemaMigration | ||
11 | 7 | |||
12 | 8 | |||
13 | 9 | class Migration(SchemaMigration): | ||
14 | 10 | |||
15 | 11 | def forwards(self, orm): | ||
16 | 12 | # Deleting model 'Vlan' | ||
17 | 13 | db.delete_table(u'maasserver_vlan') | ||
18 | 14 | |||
19 | 15 | # Adding model 'Network' | ||
20 | 16 | db.create_table(u'maasserver_network', ( | ||
21 | 17 | (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
22 | 18 | ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), | ||
23 | 19 | ('ip', self.gf('django.db.models.fields.GenericIPAddressField')(unique=True, max_length=39)), | ||
24 | 20 | ('netmask', self.gf('django.db.models.fields.GenericIPAddressField')(max_length=39)), | ||
25 | 21 | ('vlan_tag', self.gf('django.db.models.fields.PositiveSmallIntegerField')(unique=True)), | ||
26 | 22 | ('description', self.gf('django.db.models.fields.CharField')(default=u'', max_length=255, blank=True)), | ||
27 | 23 | )) | ||
28 | 24 | db.send_create_signal(u'maasserver', ['Network']) | ||
29 | 25 | |||
30 | 26 | # Adding M2M table for field networks on 'Node' | ||
31 | 27 | db.create_table(u'maasserver_node_networks', ( | ||
32 | 28 | ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), | ||
33 | 29 | ('node', models.ForeignKey(orm[u'maasserver.node'], null=False)), | ||
34 | 30 | ('network', models.ForeignKey(orm[u'maasserver.network'], null=False)) | ||
35 | 31 | )) | ||
36 | 32 | db.create_unique(u'maasserver_node_networks', ['node_id', 'network_id']) | ||
37 | 33 | |||
38 | 34 | |||
39 | 35 | def backwards(self, orm): | ||
40 | 36 | # Adding model 'Vlan' | ||
41 | 37 | db.create_table(u'maasserver_vlan', ( | ||
42 | 38 | ('tag', self.gf('django.db.models.fields.PositiveSmallIntegerField')(unique=True)), | ||
43 | 39 | ('description', self.gf('django.db.models.fields.CharField')(default=u'', max_length=255, blank=True)), | ||
44 | 40 | (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
45 | 41 | )) | ||
46 | 42 | db.send_create_signal(u'maasserver', ['Vlan']) | ||
47 | 43 | |||
48 | 44 | # Deleting model 'Network' | ||
49 | 45 | db.delete_table(u'maasserver_network') | ||
50 | 46 | |||
51 | 47 | # Removing M2M table for field networks on 'Node' | ||
52 | 48 | db.delete_table('maasserver_node_networks') | ||
53 | 49 | |||
54 | 50 | |||
55 | 51 | models = { | ||
56 | 52 | u'auth.group': { | ||
57 | 53 | 'Meta': {'object_name': 'Group'}, | ||
58 | 54 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
59 | 55 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), | ||
60 | 56 | 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) | ||
61 | 57 | }, | ||
62 | 58 | u'auth.permission': { | ||
63 | 59 | 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, | ||
64 | 60 | 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
65 | 61 | 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), | ||
66 | 62 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
67 | 63 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) | ||
68 | 64 | }, | ||
69 | 65 | u'auth.user': { | ||
70 | 66 | 'Meta': {'object_name': 'User'}, | ||
71 | 67 | 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
72 | 68 | 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}), | ||
73 | 69 | 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
74 | 70 | 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), | ||
75 | 71 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
76 | 72 | 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), | ||
77 | 73 | 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
78 | 74 | 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
79 | 75 | 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
80 | 76 | 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
81 | 77 | 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), | ||
82 | 78 | 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), | ||
83 | 79 | 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) | ||
84 | 80 | }, | ||
85 | 81 | u'contenttypes.contenttype': { | ||
86 | 82 | 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, | ||
87 | 83 | 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
88 | 84 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
89 | 85 | 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
90 | 86 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) | ||
91 | 87 | }, | ||
92 | 88 | u'maasserver.bootimage': { | ||
93 | 89 | 'Meta': {'unique_together': "((u'nodegroup', u'architecture', u'subarchitecture', u'release', u'purpose'),)", 'object_name': 'BootImage'}, | ||
94 | 90 | 'architecture': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
95 | 91 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
96 | 92 | 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}), | ||
97 | 93 | 'purpose': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
98 | 94 | 'release': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
99 | 95 | 'subarchitecture': ('django.db.models.fields.CharField', [], {'max_length': '255'}) | ||
100 | 96 | }, | ||
101 | 97 | u'maasserver.componenterror': { | ||
102 | 98 | 'Meta': {'object_name': 'ComponentError'}, | ||
103 | 99 | 'component': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40'}), | ||
104 | 100 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
105 | 101 | 'error': ('django.db.models.fields.CharField', [], {'max_length': '1000'}), | ||
106 | 102 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
107 | 103 | 'updated': ('django.db.models.fields.DateTimeField', [], {}) | ||
108 | 104 | }, | ||
109 | 105 | u'maasserver.config': { | ||
110 | 106 | 'Meta': {'object_name': 'Config'}, | ||
111 | 107 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
112 | 108 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
113 | 109 | 'value': ('maasserver.fields.JSONObjectField', [], {'null': 'True'}) | ||
114 | 110 | }, | ||
115 | 111 | u'maasserver.dhcplease': { | ||
116 | 112 | 'Meta': {'object_name': 'DHCPLease'}, | ||
117 | 113 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
118 | 114 | 'ip': ('django.db.models.fields.IPAddressField', [], {'unique': 'True', 'max_length': '15'}), | ||
119 | 115 | 'mac': ('maasserver.fields.MACAddressField', [], {}), | ||
120 | 116 | 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}) | ||
121 | 117 | }, | ||
122 | 118 | u'maasserver.downloadprogress': { | ||
123 | 119 | 'Meta': {'object_name': 'DownloadProgress'}, | ||
124 | 120 | 'bytes_downloaded': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), | ||
125 | 121 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
126 | 122 | 'error': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'}), | ||
127 | 123 | 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
128 | 124 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
129 | 125 | 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}), | ||
130 | 126 | 'size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), | ||
131 | 127 | 'updated': ('django.db.models.fields.DateTimeField', [], {}) | ||
132 | 128 | }, | ||
133 | 129 | u'maasserver.filestorage': { | ||
134 | 130 | 'Meta': {'unique_together': "((u'filename', u'owner'),)", 'object_name': 'FileStorage'}, | ||
135 | 131 | 'content': ('metadataserver.fields.BinaryField', [], {'blank': 'True'}), | ||
136 | 132 | 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
137 | 133 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
138 | 134 | 'key': ('django.db.models.fields.CharField', [], {'default': "u'c9791474-8d7b-11e3-8453-9c4e363b1c94'", 'unique': 'True', 'max_length': '36'}), | ||
139 | 135 | 'owner': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'}) | ||
140 | 136 | }, | ||
141 | 137 | u'maasserver.macaddress': { | ||
142 | 138 | 'Meta': {'object_name': 'MACAddress'}, | ||
143 | 139 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
144 | 140 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
145 | 141 | 'mac_address': ('maasserver.fields.MACAddressField', [], {'unique': 'True'}), | ||
146 | 142 | 'node': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.Node']"}), | ||
147 | 143 | 'updated': ('django.db.models.fields.DateTimeField', [], {}) | ||
148 | 144 | }, | ||
149 | 145 | u'maasserver.network': { | ||
150 | 146 | 'Meta': {'object_name': 'Network'}, | ||
151 | 147 | 'description': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}), | ||
152 | 148 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
153 | 149 | 'ip': ('django.db.models.fields.GenericIPAddressField', [], {'unique': 'True', 'max_length': '39'}), | ||
154 | 150 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), | ||
155 | 151 | 'netmask': ('django.db.models.fields.GenericIPAddressField', [], {'max_length': '39'}), | ||
156 | 152 | 'vlan_tag': ('django.db.models.fields.PositiveSmallIntegerField', [], {'unique': 'True'}) | ||
157 | 153 | }, | ||
158 | 154 | u'maasserver.node': { | ||
159 | 155 | 'Meta': {'object_name': 'Node'}, | ||
160 | 156 | 'after_commissioning_action': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
161 | 157 | 'agent_name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'null': 'True', 'blank': 'True'}), | ||
162 | 158 | 'architecture': ('django.db.models.fields.CharField', [], {'default': "u'i386/generic'", 'max_length': '31'}), | ||
163 | 159 | 'cpu_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
164 | 160 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
165 | 161 | 'distro_series': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '20', 'null': 'True', 'blank': 'True'}), | ||
166 | 162 | 'error': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}), | ||
167 | 163 | 'hostname': ('django.db.models.fields.CharField', [], {'default': "u''", 'unique': 'True', 'max_length': '255', 'blank': 'True'}), | ||
168 | 164 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
169 | 165 | 'memory': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
170 | 166 | 'netboot': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), | ||
171 | 167 | 'networks': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.Network']", 'symmetrical': 'False', 'blank': 'True'}), | ||
172 | 168 | 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']", 'null': 'True'}), | ||
173 | 169 | 'owner': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'}), | ||
174 | 170 | 'power_parameters': ('maasserver.fields.JSONObjectField', [], {'default': "u''", 'blank': 'True'}), | ||
175 | 171 | 'power_type': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '10', 'blank': 'True'}), | ||
176 | 172 | 'routers': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'macaddr'", 'null': 'True', 'blank': 'True'}), | ||
177 | 173 | 'status': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '10'}), | ||
178 | 174 | 'storage': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
179 | 175 | 'system_id': ('django.db.models.fields.CharField', [], {'default': "u'node-c97b5392-8d7b-11e3-8453-9c4e363b1c94'", 'unique': 'True', 'max_length': '41'}), | ||
180 | 176 | 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.Tag']", 'symmetrical': 'False'}), | ||
181 | 177 | 'token': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Token']", 'null': 'True'}), | ||
182 | 178 | 'updated': ('django.db.models.fields.DateTimeField', [], {}), | ||
183 | 179 | 'zone': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.Zone']", 'on_delete': 'models.SET_DEFAULT'}) | ||
184 | 180 | }, | ||
185 | 181 | u'maasserver.nodegroup': { | ||
186 | 182 | 'Meta': {'object_name': 'NodeGroup'}, | ||
187 | 183 | 'api_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '18'}), | ||
188 | 184 | 'api_token': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Token']", 'unique': 'True'}), | ||
189 | 185 | 'cluster_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100', 'blank': 'True'}), | ||
190 | 186 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
191 | 187 | 'dhcp_key': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}), | ||
192 | 188 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
193 | 189 | 'maas_url': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}), | ||
194 | 190 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}), | ||
195 | 191 | 'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
196 | 192 | 'updated': ('django.db.models.fields.DateTimeField', [], {}), | ||
197 | 193 | 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}) | ||
198 | 194 | }, | ||
199 | 195 | u'maasserver.nodegroupinterface': { | ||
200 | 196 | 'Meta': {'unique_together': "((u'nodegroup', u'interface'),)", 'object_name': 'NodeGroupInterface'}, | ||
201 | 197 | 'broadcast_ip': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}), | ||
202 | 198 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
203 | 199 | 'foreign_dhcp_ip': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}), | ||
204 | 200 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
205 | 201 | 'interface': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}), | ||
206 | 202 | 'ip': ('django.db.models.fields.GenericIPAddressField', [], {'max_length': '39'}), | ||
207 | 203 | 'ip_range_high': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}), | ||
208 | 204 | 'ip_range_low': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}), | ||
209 | 205 | 'management': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
210 | 206 | 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}), | ||
211 | 207 | 'router_ip': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}), | ||
212 | 208 | 'subnet_mask': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}), | ||
213 | 209 | 'updated': ('django.db.models.fields.DateTimeField', [], {}) | ||
214 | 210 | }, | ||
215 | 211 | u'maasserver.sshkey': { | ||
216 | 212 | 'Meta': {'unique_together': "((u'user', u'key'),)", 'object_name': 'SSHKey'}, | ||
217 | 213 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
218 | 214 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
219 | 215 | 'key': ('django.db.models.fields.TextField', [], {}), | ||
220 | 216 | 'updated': ('django.db.models.fields.DateTimeField', [], {}), | ||
221 | 217 | 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) | ||
222 | 218 | }, | ||
223 | 219 | u'maasserver.tag': { | ||
224 | 220 | 'Meta': {'object_name': 'Tag'}, | ||
225 | 221 | 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}), | ||
226 | 222 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
227 | 223 | 'definition': ('django.db.models.fields.TextField', [], {'blank': 'True'}), | ||
228 | 224 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
229 | 225 | 'kernel_opts': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), | ||
230 | 226 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}), | ||
231 | 227 | 'updated': ('django.db.models.fields.DateTimeField', [], {}) | ||
232 | 228 | }, | ||
233 | 229 | u'maasserver.userprofile': { | ||
234 | 230 | 'Meta': {'object_name': 'UserProfile'}, | ||
235 | 231 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
236 | 232 | 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['auth.User']", 'unique': 'True'}) | ||
237 | 233 | }, | ||
238 | 234 | u'maasserver.zone': { | ||
239 | 235 | 'Meta': {'ordering': "[u'name']", 'object_name': 'Zone'}, | ||
240 | 236 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
241 | 237 | 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), | ||
242 | 238 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
243 | 239 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}), | ||
244 | 240 | 'updated': ('django.db.models.fields.DateTimeField', [], {}) | ||
245 | 241 | }, | ||
246 | 242 | u'piston.consumer': { | ||
247 | 243 | 'Meta': {'object_name': 'Consumer'}, | ||
248 | 244 | 'description': ('django.db.models.fields.TextField', [], {}), | ||
249 | 245 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
250 | 246 | 'key': ('django.db.models.fields.CharField', [], {'max_length': '18'}), | ||
251 | 247 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
252 | 248 | 'secret': ('django.db.models.fields.CharField', [], {'max_length': '32'}), | ||
253 | 249 | 'status': ('django.db.models.fields.CharField', [], {'default': "'pending'", 'max_length': '16'}), | ||
254 | 250 | 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'consumers'", 'null': 'True', 'to': u"orm['auth.User']"}) | ||
255 | 251 | }, | ||
256 | 252 | u'piston.token': { | ||
257 | 253 | 'Meta': {'object_name': 'Token'}, | ||
258 | 254 | 'callback': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), | ||
259 | 255 | 'callback_confirmed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
260 | 256 | 'consumer': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Consumer']"}), | ||
261 | 257 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
262 | 258 | 'is_approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
263 | 259 | 'key': ('django.db.models.fields.CharField', [], {'max_length': '18'}), | ||
264 | 260 | 'secret': ('django.db.models.fields.CharField', [], {'max_length': '32'}), | ||
265 | 261 | 'timestamp': ('django.db.models.fields.IntegerField', [], {'default': '1391504854L'}), | ||
266 | 262 | 'token_type': ('django.db.models.fields.IntegerField', [], {}), | ||
267 | 263 | 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'tokens'", 'null': 'True', 'to': u"orm['auth.User']"}), | ||
268 | 264 | 'verifier': ('django.db.models.fields.CharField', [], {'max_length': '10'}) | ||
269 | 265 | } | ||
270 | 266 | } | ||
271 | 267 | |||
272 | 268 | complete_apps = ['maasserver'] | ||
273 | 0 | \ No newline at end of file | 269 | \ No newline at end of file |
274 | 1 | 270 | ||
275 | === removed file 'src/maasserver/migrations/0066_replace_vlan_with_network.py' | |||
276 | --- src/maasserver/migrations/0066_replace_vlan_with_network.py 2014-02-04 02:53:33 +0000 | |||
277 | +++ src/maasserver/migrations/0066_replace_vlan_with_network.py 1970-01-01 00:00:00 +0000 | |||
278 | @@ -1,255 +0,0 @@ | |||
279 | 1 | # -*- coding: utf-8 -*- | ||
280 | 2 | from south.utils import datetime_utils as datetime | ||
281 | 3 | from south.db import db | ||
282 | 4 | from south.v2 import SchemaMigration | ||
283 | 5 | from django.db import models | ||
284 | 6 | |||
285 | 7 | |||
286 | 8 | class Migration(SchemaMigration): | ||
287 | 9 | |||
288 | 10 | def forwards(self, orm): | ||
289 | 11 | # Deleting model 'Vlan' | ||
290 | 12 | db.delete_table(u'maasserver_vlan') | ||
291 | 13 | |||
292 | 14 | # Adding model 'Network' | ||
293 | 15 | db.create_table(u'maasserver_network', ( | ||
294 | 16 | (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
295 | 17 | ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), | ||
296 | 18 | ('ip', self.gf('django.db.models.fields.GenericIPAddressField')(unique=True, max_length=39)), | ||
297 | 19 | ('netmask', self.gf('django.db.models.fields.GenericIPAddressField')(max_length=39)), | ||
298 | 20 | ('vlan_tag', self.gf('django.db.models.fields.PositiveSmallIntegerField')(unique=True)), | ||
299 | 21 | ('description', self.gf('django.db.models.fields.CharField')(default=u'', max_length=255, blank=True)), | ||
300 | 22 | )) | ||
301 | 23 | db.send_create_signal(u'maasserver', ['Network']) | ||
302 | 24 | |||
303 | 25 | |||
304 | 26 | def backwards(self, orm): | ||
305 | 27 | # Adding model 'Vlan' | ||
306 | 28 | db.create_table(u'maasserver_vlan', ( | ||
307 | 29 | ('tag', self.gf('django.db.models.fields.PositiveSmallIntegerField')(unique=True)), | ||
308 | 30 | ('description', self.gf('django.db.models.fields.CharField')(default=u'', max_length=255, blank=True)), | ||
309 | 31 | (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), | ||
310 | 32 | )) | ||
311 | 33 | db.send_create_signal(u'maasserver', ['Vlan']) | ||
312 | 34 | |||
313 | 35 | # Deleting model 'Network' | ||
314 | 36 | db.delete_table(u'maasserver_network') | ||
315 | 37 | |||
316 | 38 | |||
317 | 39 | models = { | ||
318 | 40 | u'auth.group': { | ||
319 | 41 | 'Meta': {'object_name': 'Group'}, | ||
320 | 42 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
321 | 43 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), | ||
322 | 44 | 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) | ||
323 | 45 | }, | ||
324 | 46 | u'auth.permission': { | ||
325 | 47 | 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, | ||
326 | 48 | 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
327 | 49 | 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), | ||
328 | 50 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
329 | 51 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) | ||
330 | 52 | }, | ||
331 | 53 | u'auth.user': { | ||
332 | 54 | 'Meta': {'object_name': 'User'}, | ||
333 | 55 | 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
334 | 56 | 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}), | ||
335 | 57 | 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
336 | 58 | 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), | ||
337 | 59 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
338 | 60 | 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), | ||
339 | 61 | 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
340 | 62 | 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
341 | 63 | 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), | ||
342 | 64 | 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), | ||
343 | 65 | 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), | ||
344 | 66 | 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), | ||
345 | 67 | 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) | ||
346 | 68 | }, | ||
347 | 69 | u'contenttypes.contenttype': { | ||
348 | 70 | 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, | ||
349 | 71 | 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
350 | 72 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
351 | 73 | 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), | ||
352 | 74 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) | ||
353 | 75 | }, | ||
354 | 76 | u'maasserver.bootimage': { | ||
355 | 77 | 'Meta': {'unique_together': "((u'nodegroup', u'architecture', u'subarchitecture', u'release', u'purpose'),)", 'object_name': 'BootImage'}, | ||
356 | 78 | 'architecture': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
357 | 79 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
358 | 80 | 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}), | ||
359 | 81 | 'purpose': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
360 | 82 | 'release': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
361 | 83 | 'subarchitecture': ('django.db.models.fields.CharField', [], {'max_length': '255'}) | ||
362 | 84 | }, | ||
363 | 85 | u'maasserver.componenterror': { | ||
364 | 86 | 'Meta': {'object_name': 'ComponentError'}, | ||
365 | 87 | 'component': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '40'}), | ||
366 | 88 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
367 | 89 | 'error': ('django.db.models.fields.CharField', [], {'max_length': '1000'}), | ||
368 | 90 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
369 | 91 | 'updated': ('django.db.models.fields.DateTimeField', [], {}) | ||
370 | 92 | }, | ||
371 | 93 | u'maasserver.config': { | ||
372 | 94 | 'Meta': {'object_name': 'Config'}, | ||
373 | 95 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
374 | 96 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
375 | 97 | 'value': ('maasserver.fields.JSONObjectField', [], {'null': 'True'}) | ||
376 | 98 | }, | ||
377 | 99 | u'maasserver.dhcplease': { | ||
378 | 100 | 'Meta': {'object_name': 'DHCPLease'}, | ||
379 | 101 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
380 | 102 | 'ip': ('django.db.models.fields.IPAddressField', [], {'unique': 'True', 'max_length': '15'}), | ||
381 | 103 | 'mac': ('maasserver.fields.MACAddressField', [], {}), | ||
382 | 104 | 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}) | ||
383 | 105 | }, | ||
384 | 106 | u'maasserver.downloadprogress': { | ||
385 | 107 | 'Meta': {'object_name': 'DownloadProgress'}, | ||
386 | 108 | 'bytes_downloaded': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), | ||
387 | 109 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
388 | 110 | 'error': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'blank': 'True'}), | ||
389 | 111 | 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
390 | 112 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
391 | 113 | 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}), | ||
392 | 114 | 'size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), | ||
393 | 115 | 'updated': ('django.db.models.fields.DateTimeField', [], {}) | ||
394 | 116 | }, | ||
395 | 117 | u'maasserver.filestorage': { | ||
396 | 118 | 'Meta': {'unique_together': "((u'filename', u'owner'),)", 'object_name': 'FileStorage'}, | ||
397 | 119 | 'content': ('metadataserver.fields.BinaryField', [], {'blank': 'True'}), | ||
398 | 120 | 'filename': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
399 | 121 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
400 | 122 | 'key': ('django.db.models.fields.CharField', [], {'default': "u'707616c6-8d47-11e3-b9fc-94de80b61466'", 'unique': 'True', 'max_length': '36'}), | ||
401 | 123 | 'owner': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'}) | ||
402 | 124 | }, | ||
403 | 125 | u'maasserver.macaddress': { | ||
404 | 126 | 'Meta': {'object_name': 'MACAddress'}, | ||
405 | 127 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
406 | 128 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
407 | 129 | 'mac_address': ('maasserver.fields.MACAddressField', [], {'unique': 'True'}), | ||
408 | 130 | 'node': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.Node']"}), | ||
409 | 131 | 'updated': ('django.db.models.fields.DateTimeField', [], {}) | ||
410 | 132 | }, | ||
411 | 133 | u'maasserver.network': { | ||
412 | 134 | 'Meta': {'object_name': 'Network'}, | ||
413 | 135 | 'description': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}), | ||
414 | 136 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
415 | 137 | 'ip': ('django.db.models.fields.GenericIPAddressField', [], {'unique': 'True', 'max_length': '39'}), | ||
416 | 138 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}), | ||
417 | 139 | 'netmask': ('django.db.models.fields.GenericIPAddressField', [], {'max_length': '39'}), | ||
418 | 140 | 'vlan_tag': ('django.db.models.fields.PositiveSmallIntegerField', [], {'unique': 'True'}) | ||
419 | 141 | }, | ||
420 | 142 | u'maasserver.node': { | ||
421 | 143 | 'Meta': {'object_name': 'Node'}, | ||
422 | 144 | 'after_commissioning_action': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
423 | 145 | 'agent_name': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'null': 'True', 'blank': 'True'}), | ||
424 | 146 | 'architecture': ('django.db.models.fields.CharField', [], {'default': "u'i386/generic'", 'max_length': '31'}), | ||
425 | 147 | 'cpu_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
426 | 148 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
427 | 149 | 'distro_series': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '20', 'null': 'True', 'blank': 'True'}), | ||
428 | 150 | 'error': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}), | ||
429 | 151 | 'hostname': ('django.db.models.fields.CharField', [], {'default': "u''", 'unique': 'True', 'max_length': '255', 'blank': 'True'}), | ||
430 | 152 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
431 | 153 | 'memory': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
432 | 154 | 'netboot': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), | ||
433 | 155 | 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']", 'null': 'True'}), | ||
434 | 156 | 'owner': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'}), | ||
435 | 157 | 'power_parameters': ('maasserver.fields.JSONObjectField', [], {'default': "u''", 'blank': 'True'}), | ||
436 | 158 | 'power_type': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '10', 'blank': 'True'}), | ||
437 | 159 | 'routers': ('djorm_pgarray.fields.ArrayField', [], {'default': 'None', 'dbtype': "u'macaddr'", 'null': 'True', 'blank': 'True'}), | ||
438 | 160 | 'status': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '10'}), | ||
439 | 161 | 'storage': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
440 | 162 | 'system_id': ('django.db.models.fields.CharField', [], {'default': "u'node-7074e24c-8d47-11e3-b9fc-94de80b61466'", 'unique': 'True', 'max_length': '41'}), | ||
441 | 163 | 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['maasserver.Tag']", 'symmetrical': 'False'}), | ||
442 | 164 | 'token': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Token']", 'null': 'True'}), | ||
443 | 165 | 'updated': ('django.db.models.fields.DateTimeField', [], {}), | ||
444 | 166 | 'zone': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.Zone']", 'on_delete': 'models.SET_DEFAULT'}) | ||
445 | 167 | }, | ||
446 | 168 | u'maasserver.nodegroup': { | ||
447 | 169 | 'Meta': {'object_name': 'NodeGroup'}, | ||
448 | 170 | 'api_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '18'}), | ||
449 | 171 | 'api_token': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Token']", 'unique': 'True'}), | ||
450 | 172 | 'cluster_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100', 'blank': 'True'}), | ||
451 | 173 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
452 | 174 | 'dhcp_key': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}), | ||
453 | 175 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
454 | 176 | 'maas_url': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}), | ||
455 | 177 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '80', 'blank': 'True'}), | ||
456 | 178 | 'status': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
457 | 179 | 'updated': ('django.db.models.fields.DateTimeField', [], {}), | ||
458 | 180 | 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}) | ||
459 | 181 | }, | ||
460 | 182 | u'maasserver.nodegroupinterface': { | ||
461 | 183 | 'Meta': {'unique_together': "((u'nodegroup', u'interface'),)", 'object_name': 'NodeGroupInterface'}, | ||
462 | 184 | 'broadcast_ip': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}), | ||
463 | 185 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
464 | 186 | 'foreign_dhcp_ip': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}), | ||
465 | 187 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
466 | 188 | 'interface': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}), | ||
467 | 189 | 'ip': ('django.db.models.fields.GenericIPAddressField', [], {'max_length': '39'}), | ||
468 | 190 | 'ip_range_high': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}), | ||
469 | 191 | 'ip_range_low': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}), | ||
470 | 192 | 'management': ('django.db.models.fields.IntegerField', [], {'default': '0'}), | ||
471 | 193 | 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"}), | ||
472 | 194 | 'router_ip': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}), | ||
473 | 195 | 'subnet_mask': ('django.db.models.fields.GenericIPAddressField', [], {'default': 'None', 'max_length': '39', 'null': 'True', 'blank': 'True'}), | ||
474 | 196 | 'updated': ('django.db.models.fields.DateTimeField', [], {}) | ||
475 | 197 | }, | ||
476 | 198 | u'maasserver.sshkey': { | ||
477 | 199 | 'Meta': {'unique_together': "((u'user', u'key'),)", 'object_name': 'SSHKey'}, | ||
478 | 200 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
479 | 201 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
480 | 202 | 'key': ('django.db.models.fields.TextField', [], {}), | ||
481 | 203 | 'updated': ('django.db.models.fields.DateTimeField', [], {}), | ||
482 | 204 | 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) | ||
483 | 205 | }, | ||
484 | 206 | u'maasserver.tag': { | ||
485 | 207 | 'Meta': {'object_name': 'Tag'}, | ||
486 | 208 | 'comment': ('django.db.models.fields.TextField', [], {'blank': 'True'}), | ||
487 | 209 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
488 | 210 | 'definition': ('django.db.models.fields.TextField', [], {'blank': 'True'}), | ||
489 | 211 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
490 | 212 | 'kernel_opts': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), | ||
491 | 213 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}), | ||
492 | 214 | 'updated': ('django.db.models.fields.DateTimeField', [], {}) | ||
493 | 215 | }, | ||
494 | 216 | u'maasserver.userprofile': { | ||
495 | 217 | 'Meta': {'object_name': 'UserProfile'}, | ||
496 | 218 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
497 | 219 | 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['auth.User']", 'unique': 'True'}) | ||
498 | 220 | }, | ||
499 | 221 | u'maasserver.zone': { | ||
500 | 222 | 'Meta': {'ordering': "[u'name']", 'object_name': 'Zone'}, | ||
501 | 223 | 'created': ('django.db.models.fields.DateTimeField', [], {}), | ||
502 | 224 | 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), | ||
503 | 225 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
504 | 226 | 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}), | ||
505 | 227 | 'updated': ('django.db.models.fields.DateTimeField', [], {}) | ||
506 | 228 | }, | ||
507 | 229 | u'piston.consumer': { | ||
508 | 230 | 'Meta': {'object_name': 'Consumer'}, | ||
509 | 231 | 'description': ('django.db.models.fields.TextField', [], {}), | ||
510 | 232 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
511 | 233 | 'key': ('django.db.models.fields.CharField', [], {'max_length': '18'}), | ||
512 | 234 | 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), | ||
513 | 235 | 'secret': ('django.db.models.fields.CharField', [], {'max_length': '32'}), | ||
514 | 236 | 'status': ('django.db.models.fields.CharField', [], {'default': "'pending'", 'max_length': '16'}), | ||
515 | 237 | 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'consumers'", 'null': 'True', 'to': u"orm['auth.User']"}) | ||
516 | 238 | }, | ||
517 | 239 | u'piston.token': { | ||
518 | 240 | 'Meta': {'object_name': 'Token'}, | ||
519 | 241 | 'callback': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), | ||
520 | 242 | 'callback_confirmed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
521 | 243 | 'consumer': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['piston.Consumer']"}), | ||
522 | 244 | u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), | ||
523 | 245 | 'is_approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), | ||
524 | 246 | 'key': ('django.db.models.fields.CharField', [], {'max_length': '18'}), | ||
525 | 247 | 'secret': ('django.db.models.fields.CharField', [], {'max_length': '32'}), | ||
526 | 248 | 'timestamp': ('django.db.models.fields.IntegerField', [], {'default': '1391482371L'}), | ||
527 | 249 | 'token_type': ('django.db.models.fields.IntegerField', [], {}), | ||
528 | 250 | 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'tokens'", 'null': 'True', 'to': u"orm['auth.User']"}), | ||
529 | 251 | 'verifier': ('django.db.models.fields.CharField', [], {'max_length': '10'}) | ||
530 | 252 | } | ||
531 | 253 | } | ||
532 | 254 | |||
533 | 255 | complete_apps = ['maasserver'] | ||
534 | 256 | \ No newline at end of file | 0 | \ No newline at end of file |
535 | 257 | 1 | ||
536 | === modified file 'src/maasserver/models/node.py' | |||
537 | --- src/maasserver/models/node.py 2014-01-31 15:12:20 +0000 | |||
538 | +++ src/maasserver/models/node.py 2014-02-04 09:09:30 +0000 | |||
539 | @@ -64,6 +64,7 @@ | |||
540 | 64 | JSONObjectField, | 64 | JSONObjectField, |
541 | 65 | MAC, | 65 | MAC, |
542 | 66 | ) | 66 | ) |
543 | 67 | from maasserver.models import Network | ||
544 | 67 | from maasserver.models.cleansave import CleanSave | 68 | from maasserver.models.cleansave import CleanSave |
545 | 68 | from maasserver.models.config import Config | 69 | from maasserver.models.config import Config |
546 | 69 | from maasserver.models.dhcplease import DHCPLease | 70 | from maasserver.models.dhcplease import DHCPLease |
547 | @@ -488,6 +489,8 @@ | |||
548 | 488 | 489 | ||
549 | 489 | netboot = BooleanField(default=True) | 490 | netboot = BooleanField(default=True) |
550 | 490 | 491 | ||
551 | 492 | networks = ManyToManyField(Network, blank=True) | ||
552 | 493 | |||
553 | 491 | # This field can't be null, but we can't enforce that in the | 494 | # This field can't be null, but we can't enforce that in the |
554 | 492 | # database schema because we can only create the default value from | 495 | # database schema because we can only create the default value from |
555 | 493 | # a complete schema, after schema migration. We can't use custom | 496 | # a complete schema, after schema migration. We can't use custom |
556 | 494 | 497 | ||
557 | === modified file 'src/maasserver/models/tests/test_node.py' | |||
558 | --- src/maasserver/models/tests/test_node.py 2014-02-01 05:54:22 +0000 | |||
559 | +++ src/maasserver/models/tests/test_node.py 2014-02-04 09:09:30 +0000 | |||
560 | @@ -1166,3 +1166,14 @@ | |||
561 | 1166 | node = factory.make_node(netboot=True) | 1166 | node = factory.make_node(netboot=True) |
562 | 1167 | node.set_netboot(False) | 1167 | node.set_netboot(False) |
563 | 1168 | self.assertFalse(node.netboot) | 1168 | self.assertFalse(node.netboot) |
564 | 1169 | |||
565 | 1170 | def test_node_not_in_any_network_by_default(self): | ||
566 | 1171 | node = factory.make_node() | ||
567 | 1172 | self.assertItemsEqual([], node.networks.all()) | ||
568 | 1173 | |||
569 | 1174 | def test_node_can_be_multiple_networks(self): | ||
570 | 1175 | node = factory.make_node() | ||
571 | 1176 | networks = [ | ||
572 | 1177 | factory.make_network() for i in range(3)] | ||
573 | 1178 | node.networks.add(*networks) | ||
574 | 1179 | self.assertItemsEqual(networks, reload_object(node).networks.all()) |
Self-approving because this change has been approved by Julian in https:/ /code.launchpad .net/~rvb/ maas/add- network- node-rel/ +merge/ 204506.