bitbake: toaster: read database settings from the environment
authorAlexandru DAMIAN <alexandru.damian@intel.com>
Tue, 3 Jun 2014 15:26:13 +0000 (16:26 +0100)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 6 Jun 2014 09:32:54 +0000 (10:32 +0100)
We add the capability to read the database settings for
Toaster from the environment. The DATABASE_URL is intepreted
and used to override the default settings.

This capability is essential for easy deployment of Toaster
in a managed hosted environment, and for creating
build environments with custom database settings.

(Bitbake rev: d16d19dafb83448fc214fce4fbdc2bcbf4bf9ce3)

Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
bitbake/lib/toaster/toastermain/settings.py

index 645f327..adaa56c 100644 (file)
@@ -41,6 +41,39 @@ DATABASES = {
     }
 }
 
+# Reinterpret database settings if we have DATABASE_URL environment variable defined
+import os, re
+
+if 'DATABASE_URL' in os.environ:
+    dburl = os.environ['DATABASE_URL']
+    if dburl.startswith('sqlite3://'):
+        result = re.match('sqlite3://(.*)', dburl)
+        if result is None:
+            raise Exception("ERROR: Could not read sqlite database url: %s" % dburl)
+        DATABASES['default'] = {
+            'ENGINE': 'django.db.backends.sqlite3',
+            'NAME': result.group(1),
+            'USER': '',
+            'PASSWORD': '',
+            'HOST': '',
+            'PORT': '',
+        }
+    elif dburl.startswith('mysql://'):
+        # URL must be in this form: mysql://user:pass@host:port/name
+        result = re.match(r"mysql://([^:]*):([^@]*)@([^:]*):(\d+)/([^/]*)", dburl)
+        if result is None:
+            raise Exception("ERROR: Could not read mysql database url: %s" % dburl)
+        DATABASES['default'] = {
+            'ENGINE': 'django.db.backends.mysql',
+            'NAME': result.group(5),
+            'USER': result.group(1),
+            'PASSWORD': result.group(2),
+            'HOST': result.group(3),
+            'PORT': result.group(4),
+        }
+    else:
+        raise Exception("FIXME: Please implement missing database url schema for url: %s" % dburl)
+
 # Hosts/domain names that are valid for this site; required if DEBUG is False
 # See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
 ALLOWED_HOSTS = []
@@ -51,7 +84,7 @@ ALLOWED_HOSTS = []
 # In a Windows environment this must be set to your system time zone.
 
 # Always use local computer's time zone, find
-import os, hashlib
+import hashlib
 if 'TZ' in os.environ:
     TIME_ZONE = os.environ['TZ']
 else: