From 334e468889c73c4ceb57d690cd07a4550fd03790 Mon Sep 17 00:00:00 2001 From: cliffmccarthy <16453869+cliffmccarthy@users.noreply.github.com> Date: Tue, 7 Oct 2025 23:12:14 -0500 Subject: [PATCH] refactor: Split _install_remote_venv_with_chatmaild into stages - Split _install_remote_venv_with_chatmaild() into three routines, to handle the install, configure, and activate stages. - This moves the upload of chatmail.ini later in the deployment process, because it is a configuration file specific to the instance, not software installation that would be uniform across all deployments. --- cmdeploy/src/cmdeploy/__init__.py | 47 ++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/cmdeploy/src/cmdeploy/__init__.py b/cmdeploy/src/cmdeploy/__init__.py index 2bb4d5d7..8a49c6e8 100644 --- a/cmdeploy/src/cmdeploy/__init__.py +++ b/cmdeploy/src/cmdeploy/__init__.py @@ -64,13 +64,12 @@ def remove_legacy_artifacts(): ) -def _install_remote_venv_with_chatmaild(config) -> None: +def _install_remote_venv_with_chatmaild() -> None: remove_legacy_artifacts() dist_file = _build_chatmaild(dist_dir=Path("chatmaild/dist")) remote_base_dir = "/usr/local/lib/chatmaild" remote_dist_file = f"{remote_base_dir}/dist/{dist_file.name}" remote_venv_dir = f"{remote_base_dir}/venv" - remote_chatmail_inipath = f"{remote_base_dir}/chatmail.ini" root_owned = dict(user="root", group="root", mode="644") apt.packages( @@ -86,13 +85,6 @@ def _install_remote_venv_with_chatmaild(config) -> None: **root_owned, ) - files.put( - name=f"Upload {remote_chatmail_inipath}", - src=config._getbytefile(), - dest=remote_chatmail_inipath, - **root_owned, - ) - pip.virtualenv( name=f"chatmaild virtualenv {remote_venv_dir}", path=remote_venv_dir, @@ -111,6 +103,20 @@ def _install_remote_venv_with_chatmaild(config) -> None: ], ) + +def _configure_remote_venv_with_chatmaild(config) -> None: + remote_base_dir = "/usr/local/lib/chatmaild" + remote_venv_dir = f"{remote_base_dir}/venv" + remote_chatmail_inipath = f"{remote_base_dir}/chatmail.ini" + root_owned = dict(user="root", group="root", mode="644") + + files.put( + name=f"Upload {remote_chatmail_inipath}", + src=config._getbytefile(), + dest=remote_chatmail_inipath, + **root_owned, + ) + files.template( src=importlib.resources.files(__package__).joinpath("metrics.cron.j2"), dest="/etc/cron.d/chatmail-metrics", @@ -156,6 +162,25 @@ def _install_remote_venv_with_chatmaild(config) -> None: dest=f"/etc/systemd/system/{basename}", **root_owned, ) + + +def _activate_remote_venv_with_chatmaild() -> None: + # activate systemd units + for fn in ( + "doveauth", + "filtermail", + "filtermail-incoming", + "echobot", + "chatmail-metadata", + "lastlogin", + "turnserver", + "chatmail-expire", + "chatmail-expire.timer", + "chatmail-fsreport", + "chatmail-fsreport.timer", + ): + basename = fn if "." in fn else f"{fn}.service" + if fn == "chatmail-expire" or fn == "chatmail-fsreport": # don't auto-start but let the corresponding timer trigger execution enabled = False @@ -1074,7 +1099,9 @@ def deploy_chatmail(config_path: Path, disable_mail: bool) -> None: # if it is not a hugo page, upload it as is files.rsync(f"{www_path}/", "/var/www/html", flags=["-avz", "--chown=www-data"]) - _install_remote_venv_with_chatmaild(config) + _install_remote_venv_with_chatmaild() + _configure_remote_venv_with_chatmaild(config) + _activate_remote_venv_with_chatmaild() dovecot_deployer.configure() postfix_deployer.configure() nginx_deployer.configure()