Jeroen T. Vermeulen has proposed merging
lp:~jtv/maas/ensure-master-nodegroup-but-not-through-south into lp:maas.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
For more details, see:
https://code.launchpad.net/~jtv/maas/ensure-master-nodegroup-but-not-through-south/+merge/117593
The schema migration was a dead end. We can't run model code in a database
migration, and there was too much to duplicate and move (as appropriate) into
the migration.
Instead, cover all entrances:
* “make syncdb“ sensibly initializes the master, and in time for the sample
data to use it.
* wsgi.py also calls ensure_master on webapp startup, to cover existing
installations.
* …and what about tests? Actually, never mind. They run fine without. We'll
burn that bridge when we get to it.
We'll probably want to encapsulate some kind of hook later for all kinds of
things that need to run on app startup. But first, this more basic fix should
unblock Raphaël.
Oh, and I made wsgi.py export its “application” variable in __all__. Exporting
that variable is the whole point of wsgi.py.
Jeroen
--
https://code.launchpad.net/~jtv/maas/ensure-master-nodegroup-but-not-through-south/+merge/117593
Your team Launchpad code reviewers is requested to review the proposed merge of
lp:~jtv/maas/ensure-master-nodegroup-but-not-through-south into lp:maas.
=== modified file 'Makefile'
--- Makefile 2012-07-30 15:55:03 +0000
+++ Makefile 2012-08-01 09:42:21 +0000
@@ -153,6 +153,7 @@
$(dbrun) bin/maas syncdb --noinput
$(dbrun) bin/maas migrate maasserver --noinput
$(dbrun) bin/maas migrate metadataserver --noinput
+ $(dbrun) bin/maas config_master_dhcp --ensure
define phony_targets
build
=== modified file 'contrib/wsgi.py'
--- contrib/wsgi.py 2012-06-25 13:52:54 +0000
+++ contrib/wsgi.py 2012-08-01 09:42:21 +0000
@@ -10,7 +10,9 @@
)
__metaclass__ = type
-__all__ = []
+__all__ = [
+ 'application',
+ ]
import os
import sys
@@ -26,3 +28,6 @@
from maasserver.maasavahi import setup_maas_avahi_service
setup_maas_avahi_service()
+
+from maasserver.models import NodeGroup
+NodeGroup.objects.ensure_master()
=== removed file 'src/maasserver/migrations/0015_create_master_nodegroup.py'
--- src/maasserver/migrations/0015_create_master_nodegroup.py 2012-07-30 11:52:21 +0000
+++ src/maasserver/migrations/0015_create_master_nodegroup.py 1970-01-01 00:00:00 +0000
@@ -1,167 +0,0 @@
-# encoding: utf-8
-
-# No unicode_literals. Unicode strings here irk South.
-from __future__ import (
- absolute_import,
- print_function,
- )
-
-__metaclass__ = type
-__all__ = ['Migration']
-
-import datetime
-
-from django.db import models
-from maasserver.models import NodeGroup
-from south.db import db
-from south.v2 import SchemaMigration
-
-
-class Migration(SchemaMigration):
-
- def forwards(self, orm):
- # Ensure that there is a master nodegroup.
- NodeGroup.objects.ensure_master()
-
- def backwards(self, orm):
- # Reversing this migration doesn't need to do anything: it's
- # fine to have a master nodegroup when you don't need one.
- pass
-
- models = {
- 'auth.group': {
- 'Meta': {'object_name': 'Group'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
- },
- 'auth.permission': {
- 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
- 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
- },
- 'auth.user': {
- 'Meta': {'object_name': 'User'},
- 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),
- 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
- 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
- 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
- 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
- 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
- },
- 'contenttypes.contenttype': {
- 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
- 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
- },
- u'maasserver.config': {
- 'Meta': {'object_name': 'Config'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'value': ('maasserver.fields.JSONObjectField', [], {'null': 'True'})
- },
- u'maasserver.dhcplease': {
- 'Meta': {'object_name': 'DHCPLease'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ip': ('django.db.models.fields.IPAddressField', [], {'unique': 'True', 'max_length': '15'}),
- 'mac': ('maasserver.fields.MACAddressField', [], {}),
- 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.NodeGroup']"})
- },
- u'maasserver.filestorage': {
- 'Meta': {'object_name': 'FileStorage'},
- 'data': ('django.db.models.fields.files.FileField', [], {'max_length': '255'}),
- 'filename': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '200'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
- },
- u'maasserver.macaddress': {
- 'Meta': {'object_name': 'MACAddress'},
- 'created': ('django.db.models.fields.DateTimeField', [], {}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'mac_address': ('maasserver.fields.MACAddressField', [], {'unique': 'True'}),
- 'node': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['maasserver.Node']"}),
- 'updated': ('django.db.models.fields.DateTimeField', [], {})
- },
- u'maasserver.node': {
- 'Meta': {'object_name': 'Node'},
- 'after_commissioning_action': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
- 'architecture': ('django.db.models.fields.CharField', [], {'default': "u'i386'", 'max_length': '10'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {}),
- 'error': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
- 'hostname': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '255', 'blank': 'True'}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'netboot': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
- 'nodegroup': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': u"orm['maasserver.NodeGroup']", 'null': 'True', 'blank': 'True'}),
- 'owner': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}),
- 'power_parameters': ('maasserver.fields.JSONObjectField', [], {'default': "u''", 'blank': 'True'}),
- 'power_type': ('django.db.models.fields.CharField', [], {'default': "u''", 'max_length': '10', 'blank': 'True'}),
- 'status': ('django.db.models.fields.IntegerField', [], {'default': '0', 'max_length': '10'}),
- 'system_id': ('django.db.models.fields.CharField', [], {'default': "u'node-07cd231a-cff4-11e1-bbd4-002608dc6120'", 'unique': 'True', 'max_length': '41'}),
- 'token': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['piston.Token']", 'null': 'True'}),
- 'updated': ('django.db.models.fields.DateTimeField', [], {})
- },
- u'maasserver.nodegroup': {
- 'Meta': {'object_name': 'NodeGroup'},
- 'api_key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '18'}),
- 'api_token': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['piston.Token']", 'unique': 'True'}),
- 'broadcast_ip': ('django.db.models.fields.IPAddressField', [], {'default': "u''", 'max_length': '15', 'null': 'True', 'blank': 'True'}),
- 'created': ('django.db.models.fields.DateTimeField', [], {}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'ip_range_high': ('django.db.models.fields.IPAddressField', [], {'default': "u''", 'max_length': '15', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
- 'ip_range_low': ('django.db.models.fields.IPAddressField', [], {'default': "u''", 'max_length': '15', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
- 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
- 'router_ip': ('django.db.models.fields.IPAddressField', [], {'default': "u''", 'max_length': '15', 'null': 'True', 'blank': 'True'}),
- 'subnet_mask': ('django.db.models.fields.IPAddressField', [], {'default': "u''", 'max_length': '15', 'null': 'True', 'blank': 'True'}),
- 'updated': ('django.db.models.fields.DateTimeField', [], {}),
- 'worker_ip': ('django.db.models.fields.IPAddressField', [], {'unique': 'True', 'max_length': '15'})
- },
- u'maasserver.sshkey': {
- 'Meta': {'unique_together': "((u'user', u'key'),)", 'object_name': 'SSHKey'},
- 'created': ('django.db.models.fields.DateTimeField', [], {}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'key': ('django.db.models.fields.TextField', [], {}),
- 'updated': ('django.db.models.fields.DateTimeField', [], {}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
- },
- u'maasserver.userprofile': {
- 'Meta': {'object_name': 'UserProfile'},
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'})
- },
- 'piston.consumer': {
- 'Meta': {'object_name': 'Consumer'},
- 'description': ('django.db.models.fields.TextField', [], {}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'key': ('django.db.models.fields.CharField', [], {'max_length': '18'}),
- 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
- 'secret': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'status': ('django.db.models.fields.CharField', [], {'default': "'pending'", 'max_length': '16'}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'consumers'", 'null': 'True', 'to': "orm['auth.User']"})
- },
- 'piston.token': {
- 'Meta': {'object_name': 'Token'},
- 'callback': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
- 'callback_confirmed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'consumer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['piston.Consumer']"}),
- 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
- 'is_approved': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
- 'key': ('django.db.models.fields.CharField', [], {'max_length': '18'}),
- 'secret': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
- 'timestamp': ('django.db.models.fields.IntegerField', [], {'default': '1342518254L'}),
- 'token_type': ('django.db.models.fields.IntegerField', [], {}),
- 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'tokens'", 'null': 'True', 'to': "orm['auth.User']"}),
- 'verifier': ('django.db.models.fields.CharField', [], {'max_length': '10'})
- }
- }
-
- complete_apps = ['maasserver']
_______________________________________________
Mailing list: https://launchpad.net/~launchpad-reviewers
Post to : [email protected]
Unsubscribe : https://launchpad.net/~launchpad-reviewers
More help : https://help.launchpad.net/ListHelp