Skip to content

Commit b6004e0

Browse files
committed
factor out opendkim deployer
1 parent 7b16f13 commit b6004e0

File tree

2 files changed

+8
-124
lines changed

2 files changed

+8
-124
lines changed

cmdeploy/src/cmdeploy/basedeploy.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1+
import importlib.resources
12
import os
23

34
from pyinfra.operations import server
45

56

7+
def get_resource(arg, pkg=__package__):
8+
return importlib.resources.files(pkg).joinpath(arg)
9+
10+
611
class Deployment:
712
def install(self, deployer):
813
# optional 'required_users' contains a list of (user, group, secondary-group-list) tuples.

cmdeploy/src/cmdeploy/deployers.py

Lines changed: 3 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
Chat Mail pyinfra deploy.
33
"""
44

5-
import importlib.resources
65
import io
76
import shutil
87
import subprocess
@@ -13,15 +12,16 @@
1312
from chatmaild.config import Config, read_config
1413
from pyinfra import facts, host, logger
1514
from pyinfra.api import FactBase
16-
from pyinfra.facts.files import File, Sha256File
15+
from pyinfra.facts.files import Sha256File
1716
from pyinfra.facts.server import Sysctl
1817
from pyinfra.facts.systemd import SystemdEnabled
1918
from pyinfra.operations import apt, files, pip, server, systemd
2019

2120
from cmdeploy.cmdeploy import Out
2221

2322
from .acmetool import AcmetoolDeployer
24-
from .basedeploy import Deployer, Deployment
23+
from .basedeploy import Deployer, Deployment, get_resource
24+
from .opendkim.deployer import OpendkimDeployer
2525
from .www import build_webpages, find_merge_conflict, get_paths
2626

2727

@@ -40,10 +40,6 @@ def process(self, output: [str]) -> str:
4040
return output[0]
4141

4242

43-
def get_resource(arg, pkg=__package__):
44-
return importlib.resources.files(pkg).joinpath(arg)
45-
46-
4743
def _build_chatmaild(dist_dir) -> None:
4844
dist_dir = Path(dist_dir).resolve()
4945
if dist_dir.exists():
@@ -184,122 +180,6 @@ def _activate_remote_units(units) -> None:
184180
)
185181

186182

187-
def _configure_opendkim(domain: str, dkim_selector: str = "dkim") -> bool:
188-
"""Configures OpenDKIM"""
189-
need_restart = False
190-
191-
main_config = files.template(
192-
src=get_resource("opendkim/opendkim.conf"),
193-
dest="/etc/opendkim.conf",
194-
user="root",
195-
group="root",
196-
mode="644",
197-
config={"domain_name": domain, "opendkim_selector": dkim_selector},
198-
)
199-
need_restart |= main_config.changed
200-
201-
screen_script = files.put(
202-
src=get_resource("opendkim/screen.lua"),
203-
dest="/etc/opendkim/screen.lua",
204-
user="root",
205-
group="root",
206-
mode="644",
207-
)
208-
need_restart |= screen_script.changed
209-
210-
final_script = files.put(
211-
src=get_resource("opendkim/final.lua"),
212-
dest="/etc/opendkim/final.lua",
213-
user="root",
214-
group="root",
215-
mode="644",
216-
)
217-
need_restart |= final_script.changed
218-
219-
files.directory(
220-
name="Add opendkim directory to /etc",
221-
path="/etc/opendkim",
222-
user="opendkim",
223-
group="opendkim",
224-
mode="750",
225-
present=True,
226-
)
227-
228-
keytable = files.template(
229-
src=get_resource("opendkim/KeyTable"),
230-
dest="/etc/dkimkeys/KeyTable",
231-
user="opendkim",
232-
group="opendkim",
233-
mode="644",
234-
config={"domain_name": domain, "opendkim_selector": dkim_selector},
235-
)
236-
need_restart |= keytable.changed
237-
238-
signing_table = files.template(
239-
src=get_resource("opendkim/SigningTable"),
240-
dest="/etc/dkimkeys/SigningTable",
241-
user="opendkim",
242-
group="opendkim",
243-
mode="644",
244-
config={"domain_name": domain, "opendkim_selector": dkim_selector},
245-
)
246-
need_restart |= signing_table.changed
247-
files.directory(
248-
name="Add opendkim socket directory to /var/spool/postfix",
249-
path="/var/spool/postfix/opendkim",
250-
user="opendkim",
251-
group="opendkim",
252-
mode="750",
253-
present=True,
254-
)
255-
256-
if not host.get_fact(File, f"/etc/dkimkeys/{dkim_selector}.private"):
257-
server.shell(
258-
name="Generate OpenDKIM domain keys",
259-
commands=[
260-
f"/usr/sbin/opendkim-genkey -D /etc/dkimkeys -d {domain} -s {dkim_selector}"
261-
],
262-
_use_su_login=True,
263-
_su_user="opendkim",
264-
)
265-
266-
service_file = files.put(
267-
name="Configure opendkim to restart once a day",
268-
src=get_resource("opendkim/systemd.conf"),
269-
dest="/etc/systemd/system/opendkim.service.d/10-prevent-memory-leak.conf",
270-
)
271-
need_restart |= service_file.changed
272-
273-
return need_restart
274-
275-
276-
class OpendkimDeployer(Deployer):
277-
required_users = [("opendkim", None, ["opendkim"])]
278-
279-
def __init__(self, mail_domain):
280-
self.mail_domain = mail_domain
281-
282-
def install(self):
283-
apt.packages(
284-
name="apt install opendkim opendkim-tools",
285-
packages=["opendkim", "opendkim-tools"],
286-
)
287-
288-
def configure(self):
289-
self.need_restart = _configure_opendkim(self.mail_domain, "opendkim")
290-
291-
def activate(self):
292-
systemd.service(
293-
name="Start and enable OpenDKIM",
294-
service="opendkim.service",
295-
running=True,
296-
enabled=True,
297-
daemon_reload=self.need_restart,
298-
restarted=self.need_restart,
299-
)
300-
self.need_restart = False
301-
302-
303183
class UnboundDeployer(Deployer):
304184
def install(self):
305185
# Run local DNS resolver `unbound`.
@@ -1132,4 +1012,3 @@ def deploy_chatmail(config_path: Path, disable_mail: bool) -> None:
11321012
]
11331013

11341014
Deployment().perform_stages(all_deployers)
1135-

0 commit comments

Comments
 (0)