diff --git a/fabfile/__init__.py b/fabfile/__init__.py index b15d7515a6..671e93868d 100644 --- a/fabfile/__init__.py +++ b/fabfile/__init__.py @@ -1,12 +1,9 @@ -import sys -import os +from fabric.api import task -from fabric.api import run, sudo, cd, env, task -from fabric.main import load_settings - -import databases -import webservers -import platforms +import databases as database +import webservers as webserver +import platforms as platform +import django from conf import setup_environment setup_environment() @@ -14,22 +11,24 @@ setup_environment() @task(default=True) def install(): - platforms.install_dependencies() - platforms.install_mayan() + platform.install_dependencies() + platform.install_mayan() platform.install_database_manager() - databases.create_database() - platforms.fix_permissions() - platforms.install_webserver() - webservers.install_site() - webservers.restart() + database.create_database() + django.database_config() + django.syncdb() + platform.fix_permissions() + platform.install_webserver() + webserver.install_site() + webserver.restart() @task def uninstall(): - platforms.uninstall() - webservers.remove_site() + platform.uninstall() + webserver.remove_site() if env.drop_database: - databases.drop() + database.drop() diff --git a/fabfile/conf.py b/fabfile/conf.py index d257cb1f52..add8176fe8 100644 --- a/fabfile/conf.py +++ b/fabfile/conf.py @@ -5,7 +5,12 @@ from fabric.api import env from literals import (DEFAULT_INSTALL_PATH, DEFAULT_VIRTUALENV_NAME, DEFAULT_REPOSITORY_NAME, DEFAULT_OS, OS_CHOICES, DEFAULT_DATABASE_MANAGER, DB_CHOICES, DEFAULT_DATABASE_NAME, - DEFAULT_WEBSERVER, WEB_CHOICES) + DEFAULT_WEBSERVER, WEB_CHOICES, DEFAULT_DATABASE_USERNAME, + DJANGO_DB_DRIVERS, DEFAULT_DATABASE_HOST) + + +def password_generator(): + return 'password' def setup_environment(): @@ -20,6 +25,9 @@ def setup_environment(): env['database_manager'] = getattr(env, 'database_manager', DEFAULT_DATABASE_MANAGER) env['database_manager_name'] = DB_CHOICES[env.database_manager] + env['database_username'] = getattr(env, 'database_username', DEFAULT_DATABASE_USERNAME) + env['database_password'] = getattr(env, 'database_password', password_generator()) + env['database_host'] = getattr(env, 'database_host', DEFAULT_DATABASE_HOST) if not getattr(env, 'database_manager_admin_password', None): print('Must set the database_manager_admin_password entry in the fabric settings file (~/.fabricrc by default)') @@ -29,3 +37,5 @@ def setup_environment(): env['webserver'] = getattr(env, 'webserver', DEFAULT_WEBSERVER) env['webserver_name'] = WEB_CHOICES[env.webserver] + + env['django_database_driver'] = DJANGO_DB_DRIVERS[env.database_manager] diff --git a/fabfile/databases/__init__.py b/fabfile/databases/__init__.py index 17eeff711d..8af29c0ea8 100644 --- a/fabfile/databases/__init__.py +++ b/fabfile/databases/__init__.py @@ -1,4 +1,4 @@ -from fabric.api import run, sudo, cd, env, task +from fabric.api import env, task from ..literals import DB_MYSQL import mysql diff --git a/fabfile/databases/mysql.py b/fabfile/databases/mysql.py index 3f321d77f1..3338666da5 100644 --- a/fabfile/databases/mysql.py +++ b/fabfile/databases/mysql.py @@ -5,9 +5,9 @@ def create_database(): """ Create the MySQL Mayan EDMS database """ - run('echo "create database %(database_name)s;" | mysql -u root --password=%(database_manager_admin_password)s' % env) - #TODO: create DB and mayan user - #TODO: custom settings_local + run('echo "CREATE DATABASE %(database_name)s;" | mysql -u root --password=%(database_manager_admin_password)s' % env) + run('echo "CREATE USER \'%(database_username)s\'@\'localhost\' IDENTIFIED BY \'%(database_password)s\';" | mysql -u root --password=%(database_manager_admin_password)s' % env) + run('echo "GRANT ALL PRIVILEGES ON %(database_name)s.* TO \'%(database_username)s\'@\'localhost\' WITH GRANT OPTION; | mysql -u root --password=%(database_manager_admin_password)s' % env) def drop_database(): diff --git a/fabfile/django/__init__.py b/fabfile/django/__init__.py new file mode 100644 index 0000000000..4cda853034 --- /dev/null +++ b/fabfile/django/__init__.py @@ -0,0 +1,14 @@ +import os + +from fabric.api import env, task, cd, sudo +from fabric.contrib.files import upload_template + + +@task +def syncdb(): + with cd(env.virtualenv_path): + sudo('source bin/activate; %(repository_name)s/manage.py syncdb --noinput; %(repository_name)s/manage.py migrate' % (env)) + +@task +def database_config(): + upload_template(filename=os.path.join('fabfile', 'templates', 'settings_local.py'), destination=env.repository_path, context=env, use_sudo=True) diff --git a/fabfile/literals.py b/fabfile/literals.py index ed8060a0db..cc33060091 100644 --- a/fabfile/literals.py +++ b/fabfile/literals.py @@ -29,11 +29,20 @@ DEFAULT_REPOSITORY_NAME = { DB_MYSQL = 'mysql' DB_PGSQL = 'pgsql' DB_SQLITE = 'sqlite' +DB_ORACLE = 'oracle' DB_CHOICES = { DB_MYSQL: 'MySQL', DB_PGSQL: 'PostgreSQL', - DB_SQLITE: 'SQLite' + DB_SQLITE: 'SQLite', + DB_ORACLE: 'ORACLE' +} + +DJANGO_DB_DRIVERS = { + DB_MYSQL: 'mysql', + DB_PGSQL: 'postgresql_psycopg2', + DB_SQLITE: 'sqlite3', + DB_ORACLE: 'oracle', } WEB_APACHE = 'apache' @@ -48,3 +57,5 @@ DEFAULT_OS = OS_UBUNTU DEFAULT_DATABASE_MANAGER = DB_MYSQL DEFAULT_DATABASE_NAME = 'mayan' DEFAULT_WEBSERVER = WEB_APACHE +DEFAULT_DATABASE_USERNAME = 'mayan' +DEFAULT_DATABASE_HOST = '127.0.0.1' diff --git a/fabfile/platforms/ubuntu.py b/fabfile/platforms/ubuntu.py index bf3bc2db6d..a86601fbed 100644 --- a/fabfile/platforms/ubuntu.py +++ b/fabfile/platforms/ubuntu.py @@ -37,11 +37,6 @@ def install_mayan(): sudo('source bin/activate; pip install -r %s/requirements/production.txt' % env.repository_name) -def syncdb(): - with cd(env.virtualenv_path): - sudo('source bin/activate; %(repository_name)s/manage.py syncdb --noinput; %(repository_name)s/manage.py migrate' % (env)) - - def install_database_manager(): """ Install the database manager on an Ubuntu system diff --git a/fabfile/webservers/__init__.py b/fabfile/webservers/__init__.py index 1f6d60e495..41a8fc8580 100644 --- a/fabfile/webservers/__init__.py +++ b/fabfile/webservers/__init__.py @@ -10,9 +10,9 @@ def install_site(): Install Mayan EDMS site in the webserver configuration files """ - print('Adding Mayan EDMS\'s site files to: %s' % os.webserver_name) + print('Adding Mayan EDMS\'s site files to: %s' % env.webserver_name) - if os.webserver == WEB_APACHE: + if env.webserver == WEB_APACHE: apache.install_site() @@ -21,9 +21,9 @@ def remove_site(): """ Install Mayan EDMS's site file from the webserver's configuration """ - print('Removing Mayan EDMS\s site file from %s configuration' % os.webserver_name) + print('Removing Mayan EDMS\s site file from %s configuration' % env.webserver_name) - if os.webserver == WEB_APACHE: + if env.webserver == WEB_APACHE: apache.remove_site() @@ -32,9 +32,9 @@ def restart(): """ Restart the webserver """ - print('Restarting the web server: %s' % os.webserver_name) + print('Restarting the web server: %s' % env.webserver_name) - if os.webserver == WEB_APACHE: + if env.webserver == WEB_APACHE: apache.restart() @@ -45,5 +45,5 @@ def reload(): """ print('Reloading the web server configuration files') - if os.webserver == WEB_APACHE: + if env.webserver == WEB_APACHE: apache.reload() diff --git a/fabfile/webservers/apache.py b/fabfile/webservers/apache.py index 03f0e3acff..d760a8b94c 100644 --- a/fabfile/webservers/apache.py +++ b/fabfile/webservers/apache.py @@ -1,15 +1,15 @@ import os from fabric.api import run, sudo, cd, env, task +from fabric.contrib.files import upload_template def install_site(): """ Install Mayan EDMS's site file in Apache configuration """ - - #TODO: mod site with paths - sudo('cp %s /etc/apache2/sites-available/' % os.path.join(env.repository_path, 'contrib/apache/mayan')) + # TODO: configurable site name + upload_template(filename=os.path.join('fabfile', 'templates', 'apache_site'), destination='/etc/apache2/sites-available/mayan', context=env, use_sudo=True) sudo('a2ensite mayan')