92
modoboa_installer/scripts/automx.py
Normal file
92
modoboa_installer/scripts/automx.py
Normal file
@@ -0,0 +1,92 @@
|
||||
"""Automx related tasks."""
|
||||
|
||||
import os
|
||||
import pwd
|
||||
import shutil
|
||||
import stat
|
||||
|
||||
from .. import python
|
||||
from .. import utils
|
||||
|
||||
from . import base
|
||||
|
||||
|
||||
class Automx(base.Installer):
|
||||
"""Automx installation."""
|
||||
|
||||
appname = "automx"
|
||||
config_files = ["automx.conf"]
|
||||
no_daemon = True
|
||||
packages = {
|
||||
"deb": ["memcached", "unzip"],
|
||||
"rpm": []
|
||||
}
|
||||
with_user = True
|
||||
|
||||
def __init__(self, config):
|
||||
"""Get configuration."""
|
||||
super(Automx, self).__init__(config)
|
||||
self.venv_path = config.get("automx", "venv_path")
|
||||
self.instance_path = config.get("automx", "instance_path")
|
||||
|
||||
def get_template_context(self):
|
||||
"""Additional variables."""
|
||||
context = super(Automx, self).get_template_context()
|
||||
sql_dsn = "{}://{}:{}@{}/{}".format(
|
||||
self.dbengine,
|
||||
self.config.get("modoboa", "dbuser"),
|
||||
self.config.get("modoboa", "dbpassword"),
|
||||
self.dbhost,
|
||||
self.config.get("modoboa", "dbname"))
|
||||
if self.db_driver == "pgsql":
|
||||
sql_query = (
|
||||
"SELECT first_name || ' ' || last_name AS display_name, email "
|
||||
"FROM core_user WHERE email='%s' AND is_active")
|
||||
else:
|
||||
sql_query = (
|
||||
"SELECT concat(first_name, ' ', last_name) AS display_name, "
|
||||
"email FROM core_user WHERE email='%s' AND is_active=1"
|
||||
)
|
||||
context.update({"sql_dsn": sql_dsn, "sql_query": sql_query})
|
||||
return context
|
||||
|
||||
def _setup_venv(self):
|
||||
"""Prepare a python virtualenv."""
|
||||
python.setup_virtualenv(self.venv_path, sudo_user=self.user)
|
||||
packages = [
|
||||
"future", "lxml", "ipaddress", "sqlalchemy", "python-memcached",
|
||||
"python-dateutil", "configparser"
|
||||
]
|
||||
python.install_packages(packages, self.venv_path, sudo_user=self.user)
|
||||
target = "{}/master.zip".format(self.home_dir)
|
||||
if os.path.exists(target):
|
||||
os.unlink(target)
|
||||
utils.exec_cmd(
|
||||
"wget https://github.com/sys4/automx/archive/master.zip",
|
||||
sudo_user=self.user, cwd=self.home_dir)
|
||||
self.repo_dir = "{}/automx-master".format(self.home_dir)
|
||||
if os.path.exists(self.repo_dir):
|
||||
shutil.rmtree(self.repo_dir)
|
||||
utils.exec_cmd(
|
||||
"unzip master.zip", sudo_user=self.user, cwd=self.home_dir)
|
||||
utils.exec_cmd(
|
||||
"{} setup.py install".format(
|
||||
python.get_path("python", self.venv_path)),
|
||||
cwd=self.repo_dir)
|
||||
|
||||
def _deploy_instance(self):
|
||||
"""Copy files to instance dir."""
|
||||
if not os.path.exists(self.instance_path):
|
||||
pw = pwd.getpwnam(self.user)
|
||||
mode = (
|
||||
stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP |
|
||||
stat.S_IROTH | stat.S_IXOTH)
|
||||
utils.mkdir(self.instance_path, mode, pw[2], pw[3])
|
||||
path = "{}/src/automx_wsgi.py".format(self.repo_dir)
|
||||
utils.exec_cmd("cp {} {}".format(path, self.instance_path),
|
||||
sudo_user=self.user, cwd=self.home_dir)
|
||||
|
||||
def post_run(self):
|
||||
"""Additional tasks."""
|
||||
self._setup_venv()
|
||||
self._deploy_instance()
|
||||
Reference in New Issue
Block a user