From 4b0a9448d6fb4e37909e8b780926b98aed7b999a Mon Sep 17 00:00:00 2001 From: missytake Date: Thu, 12 Oct 2023 17:00:20 +0200 Subject: [PATCH] run pyinfra command with environment variables, without inventory.py --- README.md | 6 ++++++ deploy.py | 11 ++++++++++- pyproject.toml | 3 +++ src/chatmail/__init__.py | 22 +++++++++++++--------- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 4c39c07a..e5c93e78 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,9 @@ Dovecot listens on ports 143(imap) and 993 (imaps). ## DNS For DKIM you must add a DNS entry as in /etc/opendkim/selector.txt (where selector is the opendkim_selector configured in the chatmail inventory). + +## Run with pyinfra + +``` +CHATMAIL_DOMAIN=c1.testrun.org pyinfra c1.testrun.org deploy.py +``` diff --git a/deploy.py b/deploy.py index 99b2026d..76b8cdf6 100644 --- a/deploy.py +++ b/deploy.py @@ -2,4 +2,13 @@ import os from pyinfra import host, facts from chatmail import deploy_chatmail -deploy_chatmail() + +def main(): + mail_domain = os.getenv("CHATMAIL_DOMAIN") + mail_server = os.getenv("CHATMAIL_SERVER", mail_domain) + dkim_selector = os.getenv("CHATMAIL_DKIM_SELECTOR", "2023") + + deploy_chatmail(mail_domain, mail_server, dkim_selector) + + +main() \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 05512356..6273c6c7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,3 +5,6 @@ build-backend = "setuptools.build_meta" [project] name = "chatmail" version = "0.1" +dependencies = [ + "pyinfra", +] diff --git a/src/chatmail/__init__.py b/src/chatmail/__init__.py index 58a7d251..c902bc08 100644 --- a/src/chatmail/__init__.py +++ b/src/chatmail/__init__.py @@ -88,7 +88,7 @@ def _configure_postfix(domain: str) -> bool: return need_restart -def _configure_dovecot(domain: str) -> bool: +def _configure_dovecot(mail_server: str) -> bool: """Configures Dovecot IMAP server.""" need_restart = False @@ -98,7 +98,7 @@ def _configure_dovecot(domain: str) -> bool: user="root", group="root", mode="644", - config={"hostname": domain}, + config={"hostname": mail_server}, ) need_restart |= main_config.changed @@ -115,9 +115,13 @@ def _configure_dovecot(domain: str) -> bool: return need_restart -def deploy_chatmail() -> None: - domain = host.data.domain - dkim_selector = host.data.dkim_selector +def deploy_chatmail(mail_domain: str, mail_server: str, dkim_selector: str) -> None: + """Deploy a chat-mail instance. + + :param mail_domain: the domain part of your future email addresses, so "example.org" in user@example.org + :param mail_server: the DNS name under which your mail server is reachable + :param dkim_selector: + """ apt.update(name="apt update") server.group(name="Create vmail group", group="vmail", system=True) @@ -132,7 +136,7 @@ def deploy_chatmail() -> None: ) # Deploy acmetool to have TLS certificates. - deploy_acmetool(domains=[domain]) + deploy_acmetool(domains=[mail_server]) apt.packages( name="Install Postfix", @@ -157,9 +161,9 @@ def deploy_chatmail() -> None: ) _install_chatctl() - dovecot_need_restart = _configure_dovecot(domain) - postfix_need_restart = _configure_postfix(domain) - opendkim_need_restart = _configure_opendkim(domain, dkim_selector) + dovecot_need_restart = _configure_dovecot(mail_server) + postfix_need_restart = _configure_postfix(mail_domain) + opendkim_need_restart = _configure_opendkim(mail_domain, dkim_selector) systemd.service( name="Start and enable OpenDKIM",