root / snf-cyclades-app / synnefo / db / migrations / 0066_add_iv.py @ 9ca32eaa
History | View | Annotate | Download (18.2 kB)
1 | 3dbd9457 | Christos Stavrakakis | # encoding: utf-8
|
---|---|---|---|
2 | 3dbd9457 | Christos Stavrakakis | import datetime |
3 | 3dbd9457 | Christos Stavrakakis | from south.db import db |
4 | 3dbd9457 | Christos Stavrakakis | from south.v2 import DataMigration |
5 | 3dbd9457 | Christos Stavrakakis | from django.db import models |
6 | 3dbd9457 | Christos Stavrakakis | from binascii import b2a_base64, a2b_base64 |
7 | 3dbd9457 | Christos Stavrakakis | from Crypto.Cipher import AES |
8 | 3dbd9457 | Christos Stavrakakis | from Crypto import Random |
9 | 3dbd9457 | Christos Stavrakakis | from random import choice |
10 | 3dbd9457 | Christos Stavrakakis | from string import letters, digits |
11 | 3dbd9457 | Christos Stavrakakis | from synnefo.settings import SECRET_ENCRYPTION_KEY |
12 | 3dbd9457 | Christos Stavrakakis | |
13 | 3dbd9457 | Christos Stavrakakis | DB_ENCRYPTED_FIELD_PREFIX = 'encrypted'
|
14 | 3dbd9457 | Christos Stavrakakis | SALT_LEN = 8
|
15 | 3dbd9457 | Christos Stavrakakis | |
16 | 3dbd9457 | Christos Stavrakakis | |
17 | 3dbd9457 | Christos Stavrakakis | def _pad_secret(secret, blocksize=32, padding='}'): |
18 | 3dbd9457 | Christos Stavrakakis | len_secret = len(secret)
|
19 | 3dbd9457 | Christos Stavrakakis | if len_secret > 32: |
20 | 3dbd9457 | Christos Stavrakakis | raise ValueError('Encryption key must be smaller than 32 bytes') |
21 | 3dbd9457 | Christos Stavrakakis | if not len_secret in (16, 24, 32): |
22 | 3dbd9457 | Christos Stavrakakis | return secret + (blocksize - len(secret)) * padding |
23 | 3dbd9457 | Christos Stavrakakis | return secret
|
24 | 3dbd9457 | Christos Stavrakakis | |
25 | 3dbd9457 | Christos Stavrakakis | |
26 | 3dbd9457 | Christos Stavrakakis | def encrypt(s, iv=None): |
27 | 3dbd9457 | Christos Stavrakakis | if iv is None: |
28 | 3dbd9457 | Christos Stavrakakis | obj = AES.new(_pad_secret(SECRET_ENCRYPTION_KEY), AES.MODE_CFB) |
29 | 3dbd9457 | Christos Stavrakakis | else:
|
30 | 3dbd9457 | Christos Stavrakakis | obj = AES.new(_pad_secret(SECRET_ENCRYPTION_KEY), AES.MODE_CFB, iv) |
31 | 3dbd9457 | Christos Stavrakakis | return obj.encrypt(s)
|
32 | 3dbd9457 | Christos Stavrakakis | |
33 | 3dbd9457 | Christos Stavrakakis | |
34 | 3dbd9457 | Christos Stavrakakis | def decrypt(s, iv=None): |
35 | 3dbd9457 | Christos Stavrakakis | if iv is None: |
36 | 3dbd9457 | Christos Stavrakakis | obj = AES.new(_pad_secret(SECRET_ENCRYPTION_KEY), AES.MODE_CFB) |
37 | 3dbd9457 | Christos Stavrakakis | else:
|
38 | 3dbd9457 | Christos Stavrakakis | obj = AES.new(_pad_secret(SECRET_ENCRYPTION_KEY), AES.MODE_CFB, iv) |
39 | 3dbd9457 | Christos Stavrakakis | return obj.decrypt(s)
|
40 | 3dbd9457 | Christos Stavrakakis | |
41 | 3dbd9457 | Christos Stavrakakis | |
42 | 3dbd9457 | Christos Stavrakakis | def encrypt_db_charfield_old(plaintext): |
43 | 3dbd9457 | Christos Stavrakakis | if not plaintext: |
44 | 3dbd9457 | Christos Stavrakakis | return plaintext
|
45 | 3dbd9457 | Christos Stavrakakis | salt = "".join([choice(letters + digits) for i in xrange(SALT_LEN)]) |
46 | 3dbd9457 | Christos Stavrakakis | |
47 | 3dbd9457 | Christos Stavrakakis | plaintext = "%s%s" % (salt, plaintext)
|
48 | 3dbd9457 | Christos Stavrakakis | # Encrypt and convert to binary
|
49 | 3dbd9457 | Christos Stavrakakis | ciphertext = b2a_base64(encrypt(plaintext)) |
50 | 3dbd9457 | Christos Stavrakakis | # Append prefix,salt and return encoded value
|
51 | 3dbd9457 | Christos Stavrakakis | final = '%s:%s$%s' % (DB_ENCRYPTED_FIELD_PREFIX, salt, ciphertext)
|
52 | 3dbd9457 | Christos Stavrakakis | return final.encode('utf8') |
53 | 3dbd9457 | Christos Stavrakakis | |
54 | 3dbd9457 | Christos Stavrakakis | |
55 | 3dbd9457 | Christos Stavrakakis | def decrypt_db_charfield_old(ciphertext): |
56 | 3dbd9457 | Christos Stavrakakis | if not ciphertext: |
57 | 3dbd9457 | Christos Stavrakakis | return ciphertext
|
58 | 3dbd9457 | Christos Stavrakakis | has_prefix = ciphertext.startswith(DB_ENCRYPTED_FIELD_PREFIX + ':')
|
59 | 3dbd9457 | Christos Stavrakakis | if not has_prefix: # Non-encoded value |
60 | 3dbd9457 | Christos Stavrakakis | return ciphertext
|
61 | 3dbd9457 | Christos Stavrakakis | else:
|
62 | 3dbd9457 | Christos Stavrakakis | _, ciphertext = ciphertext.split(':')
|
63 | 3dbd9457 | Christos Stavrakakis | |
64 | 3dbd9457 | Christos Stavrakakis | pure_salt, encrypted = ciphertext.split('$')
|
65 | 3dbd9457 | Christos Stavrakakis | |
66 | 3dbd9457 | Christos Stavrakakis | plaintext = decrypt(a2b_base64(encrypted)) |
67 | 3dbd9457 | Christos Stavrakakis | |
68 | 3dbd9457 | Christos Stavrakakis | salt = plaintext[:SALT_LEN] |
69 | 3dbd9457 | Christos Stavrakakis | plaintext = plaintext[SALT_LEN:] |
70 | 3dbd9457 | Christos Stavrakakis | |
71 | 3dbd9457 | Christos Stavrakakis | if salt != pure_salt:
|
72 | 3dbd9457 | Christos Stavrakakis | # Can not decrtypt password
|
73 | 3dbd9457 | Christos Stavrakakis | raise CorruptedPassword("Can not decrypt password. Check the key") |
74 | 3dbd9457 | Christos Stavrakakis | else:
|
75 | 3dbd9457 | Christos Stavrakakis | return plaintext
|
76 | 3dbd9457 | Christos Stavrakakis | |
77 | 3dbd9457 | Christos Stavrakakis | |
78 | 3dbd9457 | Christos Stavrakakis | def encrypt_db_charfield(plaintext): |
79 | 3dbd9457 | Christos Stavrakakis | if not plaintext: |
80 | 3dbd9457 | Christos Stavrakakis | return plaintext
|
81 | 3dbd9457 | Christos Stavrakakis | salt = "".join([choice(letters + digits) for i in xrange(SALT_LEN)]) |
82 | 3dbd9457 | Christos Stavrakakis | |
83 | 3dbd9457 | Christos Stavrakakis | iv = Random.get_random_bytes(16)
|
84 | 3dbd9457 | Christos Stavrakakis | plaintext = "%s%s" % (salt, plaintext)
|
85 | 3dbd9457 | Christos Stavrakakis | # Encrypt and convert to binary
|
86 | 3dbd9457 | Christos Stavrakakis | ciphertext = b2a_base64(encrypt(plaintext, iv)) |
87 | 3dbd9457 | Christos Stavrakakis | iv = b2a_base64(iv) |
88 | 3dbd9457 | Christos Stavrakakis | # Append prefix,salt and return encoded value
|
89 | 3dbd9457 | Christos Stavrakakis | final = '%s:%s:%s$%s' % (DB_ENCRYPTED_FIELD_PREFIX, iv, salt, ciphertext)
|
90 | 3dbd9457 | Christos Stavrakakis | return final.encode('utf8') |
91 | 3dbd9457 | Christos Stavrakakis | |
92 | 3dbd9457 | Christos Stavrakakis | |
93 | 3dbd9457 | Christos Stavrakakis | def decrypt_db_charfield(ciphertext): |
94 | 3dbd9457 | Christos Stavrakakis | if not ciphertext: |
95 | 3dbd9457 | Christos Stavrakakis | return ciphertext
|
96 | 3dbd9457 | Christos Stavrakakis | has_prefix = ciphertext.startswith(DB_ENCRYPTED_FIELD_PREFIX + ':')
|
97 | 3dbd9457 | Christos Stavrakakis | if not has_prefix: # Non-encoded value |
98 | 3dbd9457 | Christos Stavrakakis | return ciphertext
|
99 | 3dbd9457 | Christos Stavrakakis | else:
|
100 | 3dbd9457 | Christos Stavrakakis | _, iv, ciphertext = ciphertext.split(':')
|
101 | 3dbd9457 | Christos Stavrakakis | |
102 | 3dbd9457 | Christos Stavrakakis | pure_salt, encrypted = ciphertext.split('$')
|
103 | 3dbd9457 | Christos Stavrakakis | iv = a2b_base64(iv) |
104 | 3dbd9457 | Christos Stavrakakis | |
105 | 3dbd9457 | Christos Stavrakakis | plaintext = decrypt(a2b_base64(encrypted), iv) |
106 | 3dbd9457 | Christos Stavrakakis | |
107 | 3dbd9457 | Christos Stavrakakis | salt = plaintext[:SALT_LEN] |
108 | 3dbd9457 | Christos Stavrakakis | plaintext = plaintext[SALT_LEN:] |
109 | 3dbd9457 | Christos Stavrakakis | |
110 | 3dbd9457 | Christos Stavrakakis | if salt != pure_salt:
|
111 | 3dbd9457 | Christos Stavrakakis | # Can not decrtypt password
|
112 | 3dbd9457 | Christos Stavrakakis | raise CorruptedPassword("Can not decrypt password. Check the key") |
113 | 3dbd9457 | Christos Stavrakakis | else:
|
114 | 3dbd9457 | Christos Stavrakakis | return plaintext
|
115 | 3dbd9457 | Christos Stavrakakis | |
116 | 3dbd9457 | Christos Stavrakakis | |
117 | 3dbd9457 | Christos Stavrakakis | class CorruptedPassword(Exception): |
118 | 3dbd9457 | Christos Stavrakakis | pass
|
119 | 3dbd9457 | Christos Stavrakakis | |
120 | 3dbd9457 | Christos Stavrakakis | |
121 | 3dbd9457 | Christos Stavrakakis | class Migration(DataMigration): |
122 | 3dbd9457 | Christos Stavrakakis | |
123 | 3dbd9457 | Christos Stavrakakis | def forwards(self, orm): |
124 | 3dbd9457 | Christos Stavrakakis | "Write your forwards methods here."
|
125 | 3dbd9457 | Christos Stavrakakis | for backend in orm.Backend.objects.all(): |
126 | e4ce2d35 | Christos Stavrakakis | old_hash = backend.password_hash |
127 | e4ce2d35 | Christos Stavrakakis | if len(old_hash.split(":")) == 2: |
128 | e4ce2d35 | Christos Stavrakakis | old_pass = decrypt_db_charfield_old(old_hash) |
129 | e4ce2d35 | Christos Stavrakakis | new_hash = encrypt_db_charfield(old_pass) |
130 | e4ce2d35 | Christos Stavrakakis | # Bypass save method!
|
131 | e4ce2d35 | Christos Stavrakakis | orm.Backend.objects.filter(id=backend.id).update(password_hash=new_hash) |
132 | 3dbd9457 | Christos Stavrakakis | |
133 | 3dbd9457 | Christos Stavrakakis | def backwards(self, orm): |
134 | 3dbd9457 | Christos Stavrakakis | "Write your backwards methods here."
|
135 | e4ce2d35 | Christos Stavrakakis | try:
|
136 | e4ce2d35 | Christos Stavrakakis | for backend in orm.Backend.objects.all(): |
137 | e4ce2d35 | Christos Stavrakakis | old_pass = decrypt_db_charfield(backend.password_hash) |
138 | e4ce2d35 | Christos Stavrakakis | new_hash = encrypt_db_charfield_old(old_pass) |
139 | e4ce2d35 | Christos Stavrakakis | orm.Backend.objects.filter(id=backend.id).update(password_hash=new_hash) |
140 | e4ce2d35 | Christos Stavrakakis | except:
|
141 | e4ce2d35 | Christos Stavrakakis | pass
|
142 | 3dbd9457 | Christos Stavrakakis | |
143 | 3dbd9457 | Christos Stavrakakis | models = { |
144 | 3dbd9457 | Christos Stavrakakis | 'db.backend': {
|
145 | 3dbd9457 | Christos Stavrakakis | 'Meta': {'object_name': 'Backend'}, |
146 | 3dbd9457 | Christos Stavrakakis | 'clustername': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), |
147 | 3dbd9457 | Christos Stavrakakis | 'ctotal': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), |
148 | 3dbd9457 | Christos Stavrakakis | 'dfree': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), |
149 | 3dbd9457 | Christos Stavrakakis | 'drained': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), |
150 | 3dbd9457 | Christos Stavrakakis | 'dtotal': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), |
151 | 3dbd9457 | Christos Stavrakakis | 'hash': ('django.db.models.fields.CharField', [], {'max_length': '40'}), |
152 | 3dbd9457 | Christos Stavrakakis | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
153 | 3dbd9457 | Christos Stavrakakis | 'index': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'unique': 'True'}), |
154 | 3dbd9457 | Christos Stavrakakis | 'mfree': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), |
155 | 3dbd9457 | Christos Stavrakakis | 'mtotal': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), |
156 | 3dbd9457 | Christos Stavrakakis | 'offline': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), |
157 | 3dbd9457 | Christos Stavrakakis | 'password_hash': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), |
158 | 3dbd9457 | Christos Stavrakakis | 'pinst_cnt': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}), |
159 | 3dbd9457 | Christos Stavrakakis | 'port': ('django.db.models.fields.PositiveIntegerField', [], {'default': '5080'}), |
160 | 3dbd9457 | Christos Stavrakakis | 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
161 | 3dbd9457 | Christos Stavrakakis | 'username': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}) |
162 | 3dbd9457 | Christos Stavrakakis | }, |
163 | 3dbd9457 | Christos Stavrakakis | 'db.backendnetwork': {
|
164 | 3dbd9457 | Christos Stavrakakis | 'Meta': {'unique_together': "(('network', 'backend'),)", 'object_name': 'BackendNetwork'}, |
165 | 3dbd9457 | Christos Stavrakakis | 'backend': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'networks'", 'to': "orm['db.Backend']"}), |
166 | 3dbd9457 | Christos Stavrakakis | 'backendjobid': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}), |
167 | 3dbd9457 | Christos Stavrakakis | 'backendjobstatus': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True'}), |
168 | 3dbd9457 | Christos Stavrakakis | 'backendlogmsg': ('django.db.models.fields.TextField', [], {'null': 'True'}), |
169 | 3dbd9457 | Christos Stavrakakis | 'backendopcode': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True'}), |
170 | 3dbd9457 | Christos Stavrakakis | 'backendtime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(1, 1, 1, 0, 0)'}), |
171 | 3dbd9457 | Christos Stavrakakis | 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
172 | 3dbd9457 | Christos Stavrakakis | 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), |
173 | 3dbd9457 | Christos Stavrakakis | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
174 | 3dbd9457 | Christos Stavrakakis | 'mac_prefix': ('django.db.models.fields.CharField', [], {'max_length': '32'}), |
175 | 3dbd9457 | Christos Stavrakakis | 'network': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'backend_networks'", 'to': "orm['db.Network']"}), |
176 | 3dbd9457 | Christos Stavrakakis | 'operstate': ('django.db.models.fields.CharField', [], {'default': "'PENDING'", 'max_length': '30'}), |
177 | 3dbd9457 | Christos Stavrakakis | 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
178 | 3dbd9457 | Christos Stavrakakis | }, |
179 | 3dbd9457 | Christos Stavrakakis | 'db.bridgepooltable': {
|
180 | 3dbd9457 | Christos Stavrakakis | 'Meta': {'object_name': 'BridgePoolTable'}, |
181 | 3dbd9457 | Christos Stavrakakis | 'available_map': ('django.db.models.fields.TextField', [], {'default': "''"}), |
182 | 3dbd9457 | Christos Stavrakakis | 'base': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), |
183 | 3dbd9457 | Christos Stavrakakis | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
184 | 3dbd9457 | Christos Stavrakakis | 'offset': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
185 | 3dbd9457 | Christos Stavrakakis | 'reserved_map': ('django.db.models.fields.TextField', [], {'default': "''"}), |
186 | 3dbd9457 | Christos Stavrakakis | 'size': ('django.db.models.fields.IntegerField', [], {}) |
187 | 3dbd9457 | Christos Stavrakakis | }, |
188 | 3dbd9457 | Christos Stavrakakis | 'db.flavor': {
|
189 | 3dbd9457 | Christos Stavrakakis | 'Meta': {'unique_together': "(('cpu', 'ram', 'disk', 'disk_template'),)", 'object_name': 'Flavor'}, |
190 | 3dbd9457 | Christos Stavrakakis | 'cpu': ('django.db.models.fields.IntegerField', [], {'default': '0'}), |
191 | 3dbd9457 | Christos Stavrakakis | 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), |
192 | 3dbd9457 | Christos Stavrakakis | 'disk': ('django.db.models.fields.IntegerField', [], {'default': '0'}), |
193 | 3dbd9457 | Christos Stavrakakis | 'disk_template': ('django.db.models.fields.CharField', [], {'default': "'plain'", 'max_length': '32'}), |
194 | 3dbd9457 | Christos Stavrakakis | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
195 | 3dbd9457 | Christos Stavrakakis | 'ram': ('django.db.models.fields.IntegerField', [], {'default': '0'}) |
196 | 3dbd9457 | Christos Stavrakakis | }, |
197 | 3dbd9457 | Christos Stavrakakis | 'db.ippooltable': {
|
198 | 3dbd9457 | Christos Stavrakakis | 'Meta': {'object_name': 'IPPoolTable'}, |
199 | 3dbd9457 | Christos Stavrakakis | 'available_map': ('django.db.models.fields.TextField', [], {'default': "''"}), |
200 | 3dbd9457 | Christos Stavrakakis | 'base': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), |
201 | 3dbd9457 | Christos Stavrakakis | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
202 | 3dbd9457 | Christos Stavrakakis | 'offset': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
203 | 3dbd9457 | Christos Stavrakakis | 'reserved_map': ('django.db.models.fields.TextField', [], {'default': "''"}), |
204 | 3dbd9457 | Christos Stavrakakis | 'size': ('django.db.models.fields.IntegerField', [], {}) |
205 | 3dbd9457 | Christos Stavrakakis | }, |
206 | 3dbd9457 | Christos Stavrakakis | 'db.macprefixpooltable': {
|
207 | 3dbd9457 | Christos Stavrakakis | 'Meta': {'object_name': 'MacPrefixPoolTable'}, |
208 | 3dbd9457 | Christos Stavrakakis | 'available_map': ('django.db.models.fields.TextField', [], {'default': "''"}), |
209 | 3dbd9457 | Christos Stavrakakis | 'base': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), |
210 | 3dbd9457 | Christos Stavrakakis | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
211 | 3dbd9457 | Christos Stavrakakis | 'offset': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), |
212 | 3dbd9457 | Christos Stavrakakis | 'reserved_map': ('django.db.models.fields.TextField', [], {'default': "''"}), |
213 | 3dbd9457 | Christos Stavrakakis | 'size': ('django.db.models.fields.IntegerField', [], {}) |
214 | 3dbd9457 | Christos Stavrakakis | }, |
215 | 3dbd9457 | Christos Stavrakakis | 'db.network': {
|
216 | 3dbd9457 | Christos Stavrakakis | 'Meta': {'object_name': 'Network'}, |
217 | 3dbd9457 | Christos Stavrakakis | 'action': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '32', 'null': 'True'}), |
218 | 3dbd9457 | Christos Stavrakakis | 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
219 | 3dbd9457 | Christos Stavrakakis | 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True', 'blank': 'True'}), |
220 | 3dbd9457 | Christos Stavrakakis | 'dhcp': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), |
221 | 3dbd9457 | Christos Stavrakakis | 'flavor': ('django.db.models.fields.CharField', [], {'max_length': '32'}), |
222 | 3dbd9457 | Christos Stavrakakis | 'gateway': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), |
223 | 3dbd9457 | Christos Stavrakakis | 'gateway6': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), |
224 | 3dbd9457 | Christos Stavrakakis | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
225 | 3dbd9457 | Christos Stavrakakis | 'link': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), |
226 | 3dbd9457 | Christos Stavrakakis | 'mac_prefix': ('django.db.models.fields.CharField', [], {'max_length': '32'}), |
227 | 3dbd9457 | Christos Stavrakakis | 'machines': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['db.VirtualMachine']", 'through': "orm['db.NetworkInterface']", 'symmetrical': 'False'}), |
228 | 3dbd9457 | Christos Stavrakakis | 'mode': ('django.db.models.fields.CharField', [], {'max_length': '16', 'null': 'True'}), |
229 | 3dbd9457 | Christos Stavrakakis | 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), |
230 | 3dbd9457 | Christos Stavrakakis | 'pool': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'network'", 'unique': 'True', 'null': 'True', 'to': "orm['db.IPPoolTable']"}), |
231 | 3dbd9457 | Christos Stavrakakis | 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True', 'blank': 'True'}), |
232 | 3dbd9457 | Christos Stavrakakis | 'serial': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'network'", 'null': 'True', 'to': "orm['db.QuotaHolderSerial']"}), |
233 | 3dbd9457 | Christos Stavrakakis | 'state': ('django.db.models.fields.CharField', [], {'default': "'PENDING'", 'max_length': '32'}), |
234 | 3dbd9457 | Christos Stavrakakis | 'subnet': ('django.db.models.fields.CharField', [], {'default': "'10.0.0.0/24'", 'max_length': '32'}), |
235 | 3dbd9457 | Christos Stavrakakis | 'subnet6': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), |
236 | 3dbd9457 | Christos Stavrakakis | 'tags': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}), |
237 | 3dbd9457 | Christos Stavrakakis | 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
238 | 3dbd9457 | Christos Stavrakakis | 'userid': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'db_index': 'True'}) |
239 | 3dbd9457 | Christos Stavrakakis | }, |
240 | 3dbd9457 | Christos Stavrakakis | 'db.networkinterface': {
|
241 | 3dbd9457 | Christos Stavrakakis | 'Meta': {'object_name': 'NetworkInterface'}, |
242 | 3dbd9457 | Christos Stavrakakis | 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
243 | 3dbd9457 | Christos Stavrakakis | 'dirty': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), |
244 | 3dbd9457 | Christos Stavrakakis | 'firewall_profile': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True'}), |
245 | 3dbd9457 | Christos Stavrakakis | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
246 | 3dbd9457 | Christos Stavrakakis | 'index': ('django.db.models.fields.IntegerField', [], {}), |
247 | 3dbd9457 | Christos Stavrakakis | 'ipv4': ('django.db.models.fields.CharField', [], {'max_length': '15', 'null': 'True'}), |
248 | 3dbd9457 | Christos Stavrakakis | 'ipv6': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), |
249 | 3dbd9457 | Christos Stavrakakis | 'mac': ('django.db.models.fields.CharField', [], {'max_length': '32', 'unique': 'True', 'null': 'True'}), |
250 | 3dbd9457 | Christos Stavrakakis | 'machine': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'nics'", 'to': "orm['db.VirtualMachine']"}), |
251 | 3dbd9457 | Christos Stavrakakis | 'network': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'nics'", 'to': "orm['db.Network']"}), |
252 | 3dbd9457 | Christos Stavrakakis | 'state': ('django.db.models.fields.CharField', [], {'default': "'ACTIVE'", 'max_length': '32'}), |
253 | 3dbd9457 | Christos Stavrakakis | 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) |
254 | 3dbd9457 | Christos Stavrakakis | }, |
255 | 3dbd9457 | Christos Stavrakakis | 'db.quotaholderserial': {
|
256 | 3dbd9457 | Christos Stavrakakis | 'Meta': {'object_name': 'QuotaHolderSerial'}, |
257 | 3dbd9457 | Christos Stavrakakis | 'accept': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), |
258 | 3dbd9457 | Christos Stavrakakis | 'pending': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'db_index': 'True', 'blank': 'True'}), |
259 | 3dbd9457 | Christos Stavrakakis | 'resolved': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), |
260 | 3dbd9457 | Christos Stavrakakis | 'serial': ('django.db.models.fields.BigIntegerField', [], {'primary_key': 'True', 'db_index': 'True'}) |
261 | 3dbd9457 | Christos Stavrakakis | }, |
262 | 3dbd9457 | Christos Stavrakakis | 'db.virtualmachine': {
|
263 | 3dbd9457 | Christos Stavrakakis | 'Meta': {'object_name': 'VirtualMachine'}, |
264 | 3dbd9457 | Christos Stavrakakis | 'action': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True'}), |
265 | 3dbd9457 | Christos Stavrakakis | 'backend': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'virtual_machines'", 'null': 'True', 'to': "orm['db.Backend']"}), |
266 | 3dbd9457 | Christos Stavrakakis | 'backend_hash': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}), |
267 | 3dbd9457 | Christos Stavrakakis | 'backendjobid': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}), |
268 | 3dbd9457 | Christos Stavrakakis | 'backendjobstatus': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True'}), |
269 | 3dbd9457 | Christos Stavrakakis | 'backendlogmsg': ('django.db.models.fields.TextField', [], {'null': 'True'}), |
270 | 3dbd9457 | Christos Stavrakakis | 'backendopcode': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True'}), |
271 | 3dbd9457 | Christos Stavrakakis | 'backendtime': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(1, 1, 1, 0, 0)'}), |
272 | 3dbd9457 | Christos Stavrakakis | 'buildpercentage': ('django.db.models.fields.IntegerField', [], {'default': '0'}), |
273 | 3dbd9457 | Christos Stavrakakis | 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
274 | 3dbd9457 | Christos Stavrakakis | 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True', 'blank': 'True'}), |
275 | 3dbd9457 | Christos Stavrakakis | 'flavor': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['db.Flavor']"}), |
276 | 3dbd9457 | Christos Stavrakakis | 'hostid': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
277 | 3dbd9457 | Christos Stavrakakis | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
278 | 3dbd9457 | Christos Stavrakakis | 'imageid': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
279 | 3dbd9457 | Christos Stavrakakis | 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
280 | 3dbd9457 | Christos Stavrakakis | 'operstate': ('django.db.models.fields.CharField', [], {'max_length': '30', 'null': 'True'}), |
281 | 3dbd9457 | Christos Stavrakakis | 'serial': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'virtual_machine'", 'null': 'True', 'to': "orm['db.QuotaHolderSerial']"}), |
282 | 3dbd9457 | Christos Stavrakakis | 'suspended': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), |
283 | 3dbd9457 | Christos Stavrakakis | 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), |
284 | 3dbd9457 | Christos Stavrakakis | 'userid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'db_index': 'True'}) |
285 | 3dbd9457 | Christos Stavrakakis | }, |
286 | 3dbd9457 | Christos Stavrakakis | 'db.virtualmachinediagnostic': {
|
287 | 3dbd9457 | Christos Stavrakakis | 'Meta': {'object_name': 'VirtualMachineDiagnostic'}, |
288 | 3dbd9457 | Christos Stavrakakis | 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), |
289 | 3dbd9457 | Christos Stavrakakis | 'details': ('django.db.models.fields.TextField', [], {'null': 'True'}), |
290 | 3dbd9457 | Christos Stavrakakis | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
291 | 3dbd9457 | Christos Stavrakakis | 'level': ('django.db.models.fields.CharField', [], {'max_length': '20'}), |
292 | 3dbd9457 | Christos Stavrakakis | 'machine': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'diagnostics'", 'to': "orm['db.VirtualMachine']"}), |
293 | 3dbd9457 | Christos Stavrakakis | 'message': ('django.db.models.fields.CharField', [], {'max_length': '255'}), |
294 | 3dbd9457 | Christos Stavrakakis | 'source': ('django.db.models.fields.CharField', [], {'max_length': '100'}), |
295 | 3dbd9457 | Christos Stavrakakis | 'source_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}) |
296 | 3dbd9457 | Christos Stavrakakis | }, |
297 | 3dbd9457 | Christos Stavrakakis | 'db.virtualmachinemetadata': {
|
298 | 3dbd9457 | Christos Stavrakakis | 'Meta': {'unique_together': "(('meta_key', 'vm'),)", 'object_name': 'VirtualMachineMetadata'}, |
299 | 3dbd9457 | Christos Stavrakakis | 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), |
300 | 3dbd9457 | Christos Stavrakakis | 'meta_key': ('django.db.models.fields.CharField', [], {'max_length': '50'}), |
301 | 3dbd9457 | Christos Stavrakakis | 'meta_value': ('django.db.models.fields.CharField', [], {'max_length': '500'}), |
302 | 3dbd9457 | Christos Stavrakakis | 'vm': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'metadata'", 'to': "orm['db.VirtualMachine']"}) |
303 | 3dbd9457 | Christos Stavrakakis | } |
304 | 3dbd9457 | Christos Stavrakakis | } |
305 | 3dbd9457 | Christos Stavrakakis | |
306 | 3dbd9457 | Christos Stavrakakis | complete_apps = ['db'] |