Files
relay/src/chatmail/acmetool/__init__.py
2023-10-12 17:45:57 +02:00

67 lines
1.7 KiB
Python

from pathlib import Path
from pyinfra.operations import apt, files, systemd, server
def openfile(basename):
# on newer python versions:
# importlib.resources.files(__package__).joinpath(basename).open("rb")
# but here we use a way supported on old pythons
dirpath = Path(__path__[0])
return dirpath.joinpath(basename).open("rb")
def deploy_acmetool(nginx_hook=False, email="", domains=[]):
"""Deploy acmetool."""
apt.packages(
name="Install acmetool",
packages=["acmetool"],
)
files.put(
src=openfile("acmetool.cron"),
dest="/etc/cron.d/acmetool",
user="root",
group="root",
mode="644",
)
if nginx_hook:
files.put(
src=openfile("acmetool.hook"),
dest="/usr/lib/acme/hooks/nginx",
user="root",
group="root",
mode="744",
)
files.template(
src=openfile("response-file.yaml.j2"),
dest="/var/lib/acme/conf/responses",
user="root",
group="root",
mode="644",
email=email,
)
service_file = files.put(
src=openfile("acmetool-redirector.service"),
dest="/etc/systemd/system/acmetool-redirector.service",
user="root",
group="root",
mode="644",
)
systemd.service(
name="Setup acmetool-redirector service",
service="acmetool-redirector.service",
running=True,
enabled=True,
restarted=service_file.changed,
)
for domain in domains:
server.shell(
name=f"Request certificate for {domain}",
commands=[f"acmetool want {domain}"],
)