Add platform template environment support

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2019-05-14 20:14:46 -04:00
parent febc7cf4f7
commit e68928901e
2 changed files with 106 additions and 25 deletions

View File

@@ -1,5 +1,7 @@
from __future__ import absolute_import, unicode_literals
import os
import yaml
try:
from yaml import CSafeLoader as SafeLoader
@@ -13,12 +15,25 @@ from django.utils.translation import ugettext_lazy as _
from mayan.apps.task_manager.classes import Worker
class Variable(object):
def __init__(self, name, default, environment_name):
self.name = name
self.default = default
self.environment_name = environment_name
def get_value(self):
return os.environ.get(self.environment_name, self.default)
@python_2_unicode_compatible
class PlatformTemplate(object):
_registry = {}
context = {}
context_defaults = {}
label = None
settings = None
template_name = None
variables = None
@classmethod
def all(cls):
@@ -38,14 +53,42 @@ class PlatformTemplate(object):
def get_context(self):
return self.context
def get_context_defaults(self):
return self.context_defaults
def get_label(self):
return self.label or self.name
def get_settings_context(self):
result = {}
for setting in self.settings or ():
if setting.value:
result[setting.global_name] = setting.value
return result
def get_template_name(self):
return self.template_name or 'platform/{}.tmpl'.format(self.name)
def get_variables_context(self):
result = {}
for variable in self.variables or ():
result[variable.name] = variable.get_value()
return result
def render(self, context_string=None):
context = self.get_context()
"""
context_string allows the management command to pass context to this
method as a JSON string
"""
context = {}
context.update(self.get_context_defaults())
context.update(self.get_settings_context())
context.update(self.get_variables_context())
# get_context goes last to server as the override
context.update(self.get_context())
if context_string:
context.update(
@@ -59,23 +102,61 @@ class PlatformTemplate(object):
)
from mayan.apps.common.settings import (
setting_celery_broker_url, setting_celery_result_backend
)
class PlatformTemplateSupervisord(PlatformTemplate):
context_defaults = {
'BROKER_URL': 'redis://127.0.0.1:6379/0',
'CELERY_RESULT_BACKEND': 'redis://127.0.0.1:6379/0',
}
label = _('Template for Supervisord.')
name = 'supervisord'
settings = (
setting_celery_broker_url, setting_celery_result_backend
)
variables = (
Variable(
name='GUNICORN_WORKERS', default=2,
environment_name='MAYAN_GUNICORN_WORKERS'
),
Variable(
name='DATABASE_CONN_MAX_AGE', default=60,
environment_name='MAYAN_DATABASE_CONN_MAX_AGE'
),
Variable(
name='DATABASE_ENGINE', default='django.db.backends.postgresql',
environment_name='MAYAN_DATABASE_ENGINE'
),
Variable(
name='DATABASE_HOST', default='127.0.0.1',
environment_name='MAYAN_DATABASE_HOST'
),
Variable(
name='DATABASE_NAME', default='mayan',
environment_name='MAYAN_DATABASE_NAME'
),
Variable(
name='DATABASE_PASSWORD', default='mayanuserpass',
environment_name='MAYAN_DATABASE_PASSWORD'
),
Variable(
name='DATABASE_USER', default='mayan',
environment_name='MAYAN_DATABASE_USER'
),
Variable(
name='INSTALLATION_PATH', default='/opt/mayan-edms',
environment_name='MAYAN_INSTALLATION_PATH'
),
Variable(
name='MEDIA_ROOT', default='/opt/mayan-edms/media',
environment_name='MAYAN_MEDIA_ROOT'
),
)
def get_context(self):
return {
'gunicorn_workers': 2,
'result_backend': 'redis://127.0.0.1:6379/0',
'broker_url': 'redis://127.0.0.1:6379/0',
'database_conn_max_age': 60,
'database_engine': 'django.db.backends.postgresql',
'database_host': '127.0.0.1',
'database_name': 'mayan',
'database_password': 'mayanuserpass',
'database_user': 'mayan',
'installation_path': '/opt/mayan-edms',
'media_root': '/opt/mayan-edms/media',
'workers': Worker.all()
}

View File

@@ -1,29 +1,29 @@
[supervisord]
environment=
MAYAN_ALLOWED_HOSTS='["*"]', # Allow access to other network hosts other than localhost
MAYAN_CELERY_RESULT_BACKEND="{{ result_backend }}",
MAYAN_BROKER_URL="{{ broker_url }}",
PYTHONPATH={{ installation_path }}/lib/python2.7/site-packages:{{ media_root }}/mayan_settings,
MAYAN_MEDIA_ROOT={{ media_root }},
MAYAN_DATABASE_ENGINE={{ database_engine }},
MAYAN_DATABASE_HOST={{ database_host }},
MAYAN_DATABASE_NAME={{ database_name }},
MAYAN_DATABASE_PASSWORD={{ database_password }},
MAYAN_DATABASE_USER={{ database_user }},
MAYAN_DATABASE_CONN_MAX_AGE={{ database_conn_max_age }},
MAYAN_CELERY_RESULT_BACKEND="{{ CELERY_RESULT_BACKEND }}",
MAYAN_BROKER_URL="{{ BROKER_URL }}",
PYTHONPATH={{ INSTALLATION_PATH }}/lib/python2.7/site-packages:{{ MEDIA_ROOT }}/mayan_settings,
MAYAN_MEDIA_ROOT={{ MEDIA_ROOT }},
MAYAN_DATABASE_ENGINE={{ DATABASE_ENGINE }},
MAYAN_DATABASE_HOST={{ DATABASE_HOST }},
MAYAN_DATABASE_NAME={{ DATABASE_NAME }},
MAYAN_DATABASE_PASSWORD={{ DATABASE_PASSWORD }},
MAYAN_DATABASE_USER={{ DATABASE_USER }},
MAYAN_DATABASE_CONN_MAX_AGE={{ DATABASE_CONN_MAX_AGE }},
DJANGO_SETTINGS_MODULE=mayan.settings.production
[program:mayan-gunicorn]
autorestart = true
autostart = true
command = {{ installation_path }}/bin/gunicorn -w {{ gunicorn_workers }} mayan.wsgi --max-requests 500 --max-requests-jitter 50 --worker-class gevent --bind 0.0.0.0:8000 --timeout 120
command = {{ INSTALLATION_PATH }}/bin/gunicorn -w {{ GUNICORN_WORKERS }} mayan.wsgi --max-requests 500 --max-requests-jitter 50 --worker-class gevent --bind 0.0.0.0:8000 --timeout 120
user = mayan
{% for worker in workers %}
[program:mayan-worker-{{ worker.name }}]
autorestart = true
autostart = true
command = nice -n {{ worker.nice_level }} {{ installation_path }}/bin/mayan-edms.py celery worker -Ofair -l ERROR -Q {% for queue in worker.queues %}{{ queue.name }}{% if not forloop.last %},{% endif %}{% endfor %} -n mayan-worker-{{ worker.name }}.%%h --concurrency=1
command = nice -n {{ worker.nice_level }} {{ INSTALLATION_PATH }}/bin/mayan-edms.py celery worker -Ofair -l ERROR -Q {% for queue in worker.queues %}{{ queue.name }}{% if not forloop.last %},{% endif %}{% endfor %} -n mayan-worker-{{ worker.name }}.%%h --concurrency=1
killasgroup = true
numprocs = 1
priority = 998
@@ -35,7 +35,7 @@ user = mayan
[program:mayan-celery-beat]
autorestart = true
autostart = true
command = nice -n 1 {{ installation_path }}/bin/mayan-edms.py celery beat --pidfile= -l ERROR
command = nice -n 1 {{ INSTALLATION_PATH }}/bin/mayan-edms.py celery beat --pidfile= -l ERROR
killasgroup = true
numprocs = 1
priority = 998