2014-05-08 16:59:35 +00:00
|
|
|
import pkgutil
|
2014-10-10 14:39:46 +00:00
|
|
|
import textwrap
|
2023-08-01 14:41:03 +00:00
|
|
|
from django.template import Template, Context
|
2015-03-10 16:57:23 +00:00
|
|
|
from .. import settings
|
2023-08-01 14:41:03 +00:00
|
|
|
from orchestra.settings import NEW_SERVERS
|
2014-10-14 13:50:19 +00:00
|
|
|
|
2014-05-08 16:59:35 +00:00
|
|
|
class WebAppServiceMixin(object):
|
|
|
|
model = 'webapps.WebApp'
|
2015-04-23 14:34:04 +00:00
|
|
|
related_models = (
|
|
|
|
('webapps.WebAppOption', 'webapp'),
|
|
|
|
)
|
2014-10-24 12:12:20 +00:00
|
|
|
directive = None
|
2015-04-24 11:39:20 +00:00
|
|
|
doc_settings = (settings,
|
|
|
|
('WEBAPPS_UNDER_CONSTRUCTION_PATH', 'WEBAPPS_MOVE_ON_DELETE_PATH',)
|
|
|
|
)
|
2023-07-25 20:16:38 +00:00
|
|
|
def check_webapp_dir(self, context):
|
|
|
|
self.append(textwrap.dedent("""
|
|
|
|
# Create webapp dir
|
|
|
|
CREATED=0
|
|
|
|
if [[ ! -e %(app_path)s ]]; then
|
|
|
|
mkdir -p %(app_path)s
|
2023-08-03 17:16:27 +00:00
|
|
|
#chown %(sftpuser)s:%(sftpuser)s %(app_path)s
|
2023-07-25 20:16:38 +00:00
|
|
|
CREATED=1
|
|
|
|
elif [[ -z $( ls -A %(app_path)s ) ]]; then
|
|
|
|
CREATED=1
|
|
|
|
fi""") % context
|
|
|
|
)
|
|
|
|
|
2014-05-08 16:59:35 +00:00
|
|
|
def create_webapp_dir(self, context):
|
2015-05-21 17:53:59 +00:00
|
|
|
self.append(textwrap.dedent("""
|
|
|
|
# Create webapp dir
|
2015-03-11 16:32:33 +00:00
|
|
|
CREATED=0
|
2015-10-15 22:31:54 +00:00
|
|
|
if [[ ! -e %(app_path)s ]]; then
|
|
|
|
CREATED=1
|
|
|
|
mkdir -p %(app_path)s
|
|
|
|
chown %(user)s:%(group)s %(app_path)s
|
|
|
|
fi""") % context
|
2015-03-11 16:32:33 +00:00
|
|
|
)
|
2014-05-08 16:59:35 +00:00
|
|
|
|
2015-03-10 16:57:23 +00:00
|
|
|
def set_under_construction(self, context):
|
|
|
|
if context['under_construction_path']:
|
2023-08-01 14:41:03 +00:00
|
|
|
# cambios de permisos en servidores nuevos
|
|
|
|
perms = Template(textwrap.dedent("""\
|
|
|
|
{% if sftpuser %}
|
2024-05-02 19:21:33 +00:00
|
|
|
chown -R {{ sftpuser }}:{{ sftpuser }} {{ app_path }} {% else %}
|
|
|
|
chown -R {{ user }}:{{ group }} {{ app_path }}
|
2023-08-01 14:41:03 +00:00
|
|
|
{% endif %}
|
|
|
|
"""
|
|
|
|
))
|
|
|
|
context.update({'perms' : perms.render(Context(context))})
|
2015-05-21 17:53:59 +00:00
|
|
|
self.append(textwrap.dedent("""
|
|
|
|
# Set under construction if needed
|
2015-10-07 11:44:30 +00:00
|
|
|
if [[ $CREATED == 1 && ! $(ls -A %(app_path)s | head -n1) ]]; then
|
|
|
|
# Async wait some seconds for other backends to lock app_path or cp under construction
|
2015-05-12 12:38:40 +00:00
|
|
|
nohup bash -c '
|
2015-05-14 13:28:54 +00:00
|
|
|
sleep 2
|
2015-10-07 11:44:30 +00:00
|
|
|
if [[ ! $(ls -A %(app_path)s | head -n1) ]]; then
|
2015-05-06 14:39:25 +00:00
|
|
|
cp -r %(under_construction_path)s %(app_path)s
|
2023-08-01 14:41:03 +00:00
|
|
|
%(perms)s
|
2015-05-12 12:38:40 +00:00
|
|
|
fi' &> /dev/null &
|
2015-03-11 16:32:33 +00:00
|
|
|
fi""") % context
|
|
|
|
)
|
2023-08-01 14:41:03 +00:00
|
|
|
|
2014-05-08 16:59:35 +00:00
|
|
|
def delete_webapp_dir(self, context):
|
2015-04-09 14:32:10 +00:00
|
|
|
if context['deleted_app_path']:
|
2016-02-16 12:04:52 +00:00
|
|
|
self.append(textwrap.dedent("""\
|
|
|
|
# Move app into WEBAPPS_MOVE_ON_DELETE_PATH, nesting if exists.
|
|
|
|
deleted_app_path="%(deleted_app_path)s"
|
|
|
|
while [[ -e $deleted_app_path ]]; do
|
|
|
|
deleted_app_path="${deleted_app_path}/$(basename ${deleted_app_path})"
|
|
|
|
done
|
|
|
|
mv %(app_path)s $deleted_app_path || exit_code=$?
|
|
|
|
""") % context
|
|
|
|
)
|
2015-04-09 14:32:10 +00:00
|
|
|
else:
|
|
|
|
self.append("rm -fr %(app_path)s" % context)
|
2014-05-08 16:59:35 +00:00
|
|
|
|
|
|
|
def get_context(self, webapp):
|
2016-02-17 12:32:30 +00:00
|
|
|
context = webapp.type_instance.get_directive_context()
|
|
|
|
context.update({
|
2023-08-01 14:41:03 +00:00
|
|
|
'user': webapp.get_username(),
|
|
|
|
'group': webapp.get_groupname(),
|
2015-03-04 21:06:16 +00:00
|
|
|
'app_name': webapp.name,
|
2015-04-27 14:54:17 +00:00
|
|
|
'app_type': webapp.type,
|
2015-04-09 14:32:10 +00:00
|
|
|
'app_path': webapp.get_path(),
|
2014-05-08 16:59:35 +00:00
|
|
|
'banner': self.get_banner(),
|
2015-04-24 11:39:20 +00:00
|
|
|
'under_construction_path': settings.WEBAPPS_UNDER_CONSTRUCTION_PATH,
|
2015-03-27 19:50:54 +00:00
|
|
|
'is_mounted': webapp.content_set.exists(),
|
2023-07-25 20:16:38 +00:00
|
|
|
'target_server': webapp.target_server,
|
2023-08-01 14:41:03 +00:00
|
|
|
'sftpuser' : webapp.sftpuser.username if webapp.target_server.name in NEW_SERVERS else None
|
2016-02-17 12:32:30 +00:00
|
|
|
})
|
2015-04-09 14:32:10 +00:00
|
|
|
context['deleted_app_path'] = settings.WEBAPPS_MOVE_ON_DELETE_PATH % context
|
2015-05-21 13:34:12 +00:00
|
|
|
return context
|
2014-05-08 16:59:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
for __, module_name, __ in pkgutil.walk_packages(__path__):
|
2014-10-14 13:50:19 +00:00
|
|
|
# sorry for the exec(), but Import module function fails :(
|
2014-05-08 16:59:35 +00:00
|
|
|
exec('from . import %s' % module_name)
|