diff --git a/gvaweb/gvaweb/__init__.py b/gvaweb/gvaweb/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gvaweb/gvaweb/celery.py b/gvaweb/gvaweb/celery.py new file mode 100644 index 0000000..be72e8c --- /dev/null +++ b/gvaweb/gvaweb/celery.py @@ -0,0 +1,15 @@ +""" +This module defines the Celery_ app for gvaweb. + +.. _Celery: http://www.celeryproject.org/ + +""" +from __future__ import absolute_import + +from celery import Celery + +#: The Celery application +app = Celery('gvaweb') + +app.config_from_object('gvaweb.settings') +app.autodiscover_tasks(['webtasks'], force=True) diff --git a/gvaweb/gvaweb/settings.py b/gvaweb/gvaweb/settings.py new file mode 100644 index 0000000..48db56a --- /dev/null +++ b/gvaweb/gvaweb/settings.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +# pymode:lint_ignore=E501 +""" +Common settings and globals. + +""" + +from os import environ + + +def get_env_setting(setting): + """ + Get the environment setting or return exception. + + :param str setting: name of an environment setting + :raises ImproperlyConfigured: if the environment setting is not defined + :return: environment setting value + :rtype: str + """ + try: + return environ[setting] + except KeyError: + error_msg = "Set the %s env variable" % setting + raise AssertionError(error_msg) + + +########## CELERY CONFIGURATION +CELERY_TIMEZONE = 'Europe/Berlin' +CELERY_ENABLE_UTC = True +CELERY_RESULT_BACKEND = 'amqp' +CELERY_RESULT_PERSISTENT = True +CELERY_TASK_RESULT_EXPIRES = None +CELERY_ROUTES = ( + 'gvacommon.celeryrouters.GvaRouter', +) +CELERY_ACCEPT_CONTENT = ['json'] +CELERY_TASK_SERIALIZER = 'json' +CELERY_RESULT_SERIALIZER = 'json' +BROKER_URL = get_env_setting('GVAWEB_BROKER_URL') +########## END CELERY CONFIGURATION + +########## GVAWEB CONFIGURATION +GVAWEB_NGINX_SITES_AVAILABLE = get_env_setting('GVAWEB_NGINX_SITES_AVAILABLE') +GVAWEB_NGINX_SITES_ENABLED = get_env_setting('GVAWEB_NGINX_SITES_ENABLED') +GVAWEB_PHPFPM_POOL = get_env_setting('GVAWEB_PHPFPM_POOL') +GVAWEB_WWWUSER_MOUNT = get_env_setting('GVAWEB_WWWUSER_MOUNT') +########## END GVAWEB CONFIGURATION diff --git a/gvaweb/webtasks/__init__.py b/gvaweb/webtasks/__init__.py new file mode 100644 index 0000000..9e02bbf --- /dev/null +++ b/gvaweb/webtasks/__init__.py @@ -0,0 +1,4 @@ +""" +This module contains :py:mod:`webtasks.tasks`. + +""" diff --git a/gvaweb/webtasks/tasks.py b/gvaweb/webtasks/tasks.py new file mode 100644 index 0000000..6d71aa8 --- /dev/null +++ b/gvaweb/webtasks/tasks.py @@ -0,0 +1,112 @@ +""" +This module defines Celery_ tasks to manage website configurations. + +""" +from __future__ import absolute_import + +import os + +from celery import shared_task +from celery.utils.log import get_task_logger + +from gvaweb import settings + + +_LOGGER = get_task_logger(__name__) + +SUDO_CMD = '/usr/bin/sudo' +RM_CMD = '/bin/rm' +LN_CMD = '/bin/ln' +SERVICE_CMD = '/usr/sbin/service' +INSTALL_CMD = '/usr/bin/install' + + +def _build_vhost_config_path(sitename): + return os.path.join(settings.GVAWEB_NGINX_SITES_AVAILABLE, sitename) + + +def _build_enabled_vhost_path(sitename): + return os.path.join(settings.GVAWEB_NGINX_SITES_ENABLED, sitename) + + +def _build_php_fpm_pool_file(username): + return os.path.join(settings.GVAWEB_PHPFPM_POOL, "{username}.conf".format( + username=username)) + + +def _build_document_root_path(sitename, username): + return os.path.join( + settings.GVAWEB_WWWUSER_MOUNT, username, sitename, 'html') + + +@shared_task +def create_web_vhost_config(username, sitename): + """ + This task creates a virtual host configuration on an nginx web + server. + + :param str username: user who owns the site + :param str sitename: site name + :return: :py:const:`True` if the creation finished successfully + :rtype: boolean + + """ + + +@shared_task +def disable_web_vhost(sitename): + """ + This task disables a virtual host configuration on an nginx web server. + + :param str sitename: site name + :return: :py:const:`True` if the virtual host has been disabled + :rtype: boolean + + """ + + +@shared_task +def enable_web_vhost(sitename): + """ + This task enables an existing virtual host configuration on an nginx web + server. + + :param str sitename: site name + :return: :py:const:`True` if the virtual host has been enabled + :rtype: boolean + + """ + +@shared_task +def delete_web_vhost_config(sitename): + """ + This task removes a virtual host configuration on an nginx web server. + + :param str sitename: site name + :return: :py:const:`True` if the configuration has been deleted + :rtype: boolean + + """ + + +@shared_task +def create_web_php_fpm_pool_config(username): + """ + This task creates a PHP FPM pool configuration. + + :param str username: user name + :return: :py:const:`True` if the creation finished successfully + :rtype: boolean + + """ + +@shared_task +def delete_web_php_fpm_pool_config(username): + """ + This task deletes a PHP FPM pool configuration. + + :param str username: user name + :return: :py:const:`True` if the pool has been deleted + :rtype: boolean + + """