powerdns-admin/create_db.py

95 lines
2.6 KiB
Python
Raw Normal View History

2015-12-13 09:34:12 +00:00
#!flask/bin/python
2016-07-07 07:10:19 +00:00
2015-12-13 09:34:12 +00:00
from migrate.versioning import api
from config import SQLALCHEMY_DATABASE_URI
from config import SQLALCHEMY_MIGRATE_REPO
from app import db
from app.models import Role, Setting
2015-12-13 09:34:12 +00:00
import os.path
import time
import sys
2016-07-05 13:04:13 +00:00
def start():
wait_time = get_waittime_from_env()
if not connect_db(wait_time):
print("ERROR: Couldn't connect to database server")
exit(1)
init_records()
def get_waittime_from_env():
return int(os.environ.get('WAITFOR_DB', 1))
def connect_db(wait_time):
for i in xrange(0, wait_time):
print("INFO: Wait for database server")
sys.stdout.flush()
try:
db.create_all()
2016-07-05 13:04:13 +00:00
return True
except:
time.sleep(1)
2016-07-05 13:04:13 +00:00
return False
def init_roles(db, role_names):
2016-07-07 04:09:18 +00:00
# Get key name of data
2016-07-05 13:04:13 +00:00
name_of_roles = map(lambda r: r.name, role_names)
2016-07-07 04:09:18 +00:00
# Query to get current data
2016-07-05 13:04:13 +00:00
rows = db.session.query(Role).filter(Role.name.in_(name_of_roles)).all()
name_of_rows = map(lambda r: r.name, rows)
2016-07-07 04:09:18 +00:00
# Check which data that need to insert
roles = filter(lambda r: r.name not in name_of_rows, role_names)
# Insert data
2016-07-05 13:04:13 +00:00
for role in roles:
db.session.add(role)
def init_settings(db, setting_names):
2016-07-07 04:09:18 +00:00
# Get key name of data
2016-07-05 13:04:13 +00:00
name_of_settings = map(lambda r: r.name, setting_names)
2016-07-07 04:09:18 +00:00
# Query to get current data
2016-07-05 13:04:13 +00:00
rows = db.session.query(Setting).filter(Setting.name.in_(name_of_settings)).all()
2016-07-07 04:09:18 +00:00
# Check which data that need to insert
name_of_rows = map(lambda r: r.name, rows)
settings = filter(lambda r: r.name not in name_of_rows, setting_names)
2016-07-05 13:04:13 +00:00
2016-07-07 04:09:18 +00:00
# Insert data
2016-07-05 13:04:13 +00:00
for setting in settings:
db.session.add(setting)
def init_records():
2016-07-07 04:09:18 +00:00
# Create initial user roles and turn off maintenance mode
2016-07-07 06:55:32 +00:00
init_roles(db, [
Role('Administrator', 'Administrator'),
Role('User', 'User')
])
init_settings(db, [
Setting('maintenance', 'False'),
Setting('fullscreen_layout', 'True'),
Setting('record_helper', 'True'),
Setting('login_ldap_first', 'True'),
Setting('default_record_table_size', '15'),
Setting('default_domain_table_size', '10')
])
2016-07-05 13:04:13 +00:00
db_commit = db.session.commit()
commit_version_control(db_commit)
def commit_version_control(db_commit):
if not os.path.exists(SQLALCHEMY_MIGRATE_REPO):
api.create(SQLALCHEMY_MIGRATE_REPO, 'database repository')
api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)
elif db_commit is not None:
api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, api.version(SQLALCHEMY_MIGRATE_REPO))
if __name__ == '__main__':
start()