bitbake: toaster: create models for bldcontrol and enable it

We create the model classes that store information
about triggering builds, and the available build
environments.

We add a fixture with a default build environment
for build control, using a "build/" directory under
the poky checkout directory.

We enable the bldcontrol in toaster starting script
and in the toaster settings as to allow the actual database
to be kept in sync with the source code.

(Bitbake rev: d4bfe9059f765f11244b97e324c0131f32f8e400)

Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Alexandru DAMIAN 2014-06-09 12:55:53 +01:00 committed by Richard Purdie
parent e09cb4017a
commit 3bd8e9adc8
6 changed files with 236 additions and 2 deletions

View File

@ -63,7 +63,7 @@ function webserverStartAll()
retval=0
python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=1
fi
# python $BBBASEDIR/lib/toaster/manage.py migrate bldcontrol || retval=1
python $BBBASEDIR/lib/toaster/manage.py migrate bldcontrol || retval=1
if [ $retval -eq 0 ]; then
python $BBBASEDIR/lib/toaster/manage.py runserver 0.0.0.0:8000 </dev/null >${BUILDDIR}/toaster_web.log 2>&1 & echo $! >${BUILDDIR}/.toastermain.pid

View File

@ -0,0 +1 @@
[{"pk": 1, "model": "bldcontrol.buildenvironment", "fields": {"updated": "2014-05-20T12:17:30Z", "created": "2014-05-20T12:17:30Z", "lock": 0, "bbstate": 0, "bbaddress": "", "betype": 0, "bbtoken": "", "address": "localhost", "bbport": -1}}]

View File

@ -0,0 +1,154 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'BuildEnvironment'
db.create_table(u'bldcontrol_buildenvironment', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('address', self.gf('django.db.models.fields.CharField')(max_length=254)),
('betype', self.gf('django.db.models.fields.IntegerField')()),
('bbaddress', self.gf('django.db.models.fields.CharField')(max_length=254, blank=True)),
('bbport', self.gf('django.db.models.fields.IntegerField')(default=-1)),
('bbtoken', self.gf('django.db.models.fields.CharField')(max_length=126, blank=True)),
('bbstate', self.gf('django.db.models.fields.IntegerField')(default=0)),
('lock', self.gf('django.db.models.fields.IntegerField')(default=0)),
('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
('updated', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
))
db.send_create_signal(u'bldcontrol', ['BuildEnvironment'])
# Adding model 'BuildRequest'
db.create_table(u'bldcontrol_buildrequest', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('project', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Project'])),
('build', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['orm.Build'], null=True)),
('state', self.gf('django.db.models.fields.IntegerField')(default=0)),
('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
('updated', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
))
db.send_create_signal(u'bldcontrol', ['BuildRequest'])
# Adding model 'BRLayer'
db.create_table(u'bldcontrol_brlayer', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('req', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['bldcontrol.BuildRequest'])),
('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
('giturl', self.gf('django.db.models.fields.CharField')(max_length=254)),
('commit', self.gf('django.db.models.fields.CharField')(max_length=254)),
))
db.send_create_signal(u'bldcontrol', ['BRLayer'])
# Adding model 'BRVariable'
db.create_table(u'bldcontrol_brvariable', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('req', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['bldcontrol.BuildRequest'])),
('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
('value', self.gf('django.db.models.fields.TextField')(blank=True)),
))
db.send_create_signal(u'bldcontrol', ['BRVariable'])
# Adding model 'BRTarget'
db.create_table(u'bldcontrol_brtarget', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('req', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['bldcontrol.BuildRequest'])),
('target', self.gf('django.db.models.fields.CharField')(max_length=100)),
('task', self.gf('django.db.models.fields.CharField')(max_length=100, null=True)),
))
db.send_create_signal(u'bldcontrol', ['BRTarget'])
def backwards(self, orm):
# Deleting model 'BuildEnvironment'
db.delete_table(u'bldcontrol_buildenvironment')
# Deleting model 'BuildRequest'
db.delete_table(u'bldcontrol_buildrequest')
# Deleting model 'BRLayer'
db.delete_table(u'bldcontrol_brlayer')
# Deleting model 'BRVariable'
db.delete_table(u'bldcontrol_brvariable')
# Deleting model 'BRTarget'
db.delete_table(u'bldcontrol_brtarget')
models = {
u'bldcontrol.brlayer': {
'Meta': {'object_name': 'BRLayer'},
'commit': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
'giturl': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'req': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['bldcontrol.BuildRequest']"})
},
u'bldcontrol.brtarget': {
'Meta': {'object_name': 'BRTarget'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'req': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['bldcontrol.BuildRequest']"}),
'target': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'task': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
},
u'bldcontrol.brvariable': {
'Meta': {'object_name': 'BRVariable'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'req': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['bldcontrol.BuildRequest']"}),
'value': ('django.db.models.fields.TextField', [], {'blank': 'True'})
},
u'bldcontrol.buildenvironment': {
'Meta': {'object_name': 'BuildEnvironment'},
'address': ('django.db.models.fields.CharField', [], {'max_length': '254'}),
'bbaddress': ('django.db.models.fields.CharField', [], {'max_length': '254', 'blank': 'True'}),
'bbport': ('django.db.models.fields.IntegerField', [], {'default': '-1'}),
'bbstate': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'bbtoken': ('django.db.models.fields.CharField', [], {'max_length': '126', 'blank': 'True'}),
'betype': ('django.db.models.fields.IntegerField', [], {}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'lock': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
},
u'bldcontrol.buildrequest': {
'Meta': {'object_name': 'BuildRequest'},
'build': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Build']", 'null': 'True'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']"}),
'state': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
},
u'orm.build': {
'Meta': {'object_name': 'Build'},
'bitbake_version': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
'build_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'completed_on': ('django.db.models.fields.DateTimeField', [], {}),
'cooker_log_path': ('django.db.models.fields.CharField', [], {'max_length': '500'}),
'distro': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'distro_version': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'errors_no': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'machine': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'outcome': ('django.db.models.fields.IntegerField', [], {'default': '2'}),
'project': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['orm.Project']", 'null': 'True'}),
'started_on': ('django.db.models.fields.DateTimeField', [], {}),
'timespent': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'warnings_no': ('django.db.models.fields.IntegerField', [], {'default': '0'})
},
u'orm.project': {
'Meta': {'object_name': 'Project'},
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
}
}
complete_apps = ['bldcontrol']

View File

@ -1,3 +1,81 @@
from django.db import models
from django.core.validators import MaxValueValidator, MinValueValidator
from orm.models import Project, ProjectLayer, ProjectVariable, ProjectTarget, Build
# a BuildEnvironment is the equivalent of the "build/" directory on the localhost
class BuildEnvironment(models.Model):
SERVER_STOPPED = 0
SERVER_STARTED = 1
SERVER_STATE = (
(SERVER_STOPPED, "stopped"),
(SERVER_STARTED, "started"),
)
TYPE_LOCAL = 0
TYPE_SSH = 1
TYPE = (
(TYPE_LOCAL, "local"),
(TYPE_SSH, "ssh"),
)
LOCK_FREE = 0
LOCK_LOCK = 1
LOCK_STATE = (
(LOCK_FREE, "free"),
(LOCK_LOCK, "lock"),
)
address = models.CharField(max_length = 254)
betype = models.IntegerField(choices = TYPE)
bbaddress = models.CharField(max_length = 254, blank = True)
bbport = models.IntegerField(default = -1)
bbtoken = models.CharField(max_length = 126, blank = True)
bbstate = models.IntegerField(choices = SERVER_STATE, default = SERVER_STOPPED)
lock = models.IntegerField(choices = LOCK_STATE, default = LOCK_FREE)
created = models.DateTimeField(auto_now_add = True)
updated = models.DateTimeField(auto_now = True)
# a BuildRequest is a request that the scheduler will build using a BuildEnvironment
# the build request queue is the table itself, ordered by state
class BuildRequest(models.Model):
REQ_CREATED = 0
REQ_QUEUED = 1
REQ_INPROGRESS = 2
REQ_COMPLETED = 3
REQUEST_STATE = (
(REQ_CREATED, "created"),
(REQ_QUEUED, "queued"),
(REQ_INPROGRESS, "in progress"),
(REQ_COMPLETED, "completed"),
)
project = models.ForeignKey(Project)
build = models.ForeignKey(Build, null = True) # TODO: toasterui should set this when Build is created
state = models.IntegerField(choices = REQUEST_STATE, default = REQ_CREATED)
created = models.DateTimeField(auto_now_add = True)
updated = models.DateTimeField(auto_now = True)
# These tables specify the settings for running an actual build.
# They MUST be kept in sync with the tables in orm.models.Project*
class BRLayer(models.Model):
req = models.ForeignKey(BuildRequest)
name = models.CharField(max_length = 100)
giturl = models.CharField(max_length = 254)
commit = models.CharField(max_length = 254)
class BRVariable(models.Model):
req = models.ForeignKey(BuildRequest)
name = models.CharField(max_length=100)
value = models.TextField(blank = True)
class BRTarget(models.Model):
req = models.ForeignKey(BuildRequest)
target = models.CharField(max_length=100)
task = models.CharField(max_length=100, null=True)
# Create your models here.

View File

@ -221,6 +221,7 @@ INSTALLED_APPS = (
'toastergui',
'bldviewer',
'south',
'bldcontrol',
)
# A sample logging configuration. The only tangible logging