22Chat Mail pyinfra deploy.
33"""
44
5- import importlib .resources
65import io
76import shutil
87import subprocess
1312from chatmaild .config import Config , read_config
1413from pyinfra import facts , host , logger
1514from pyinfra .api import FactBase
16- from pyinfra .facts .files import File , Sha256File
15+ from pyinfra .facts .files import Sha256File
1716from pyinfra .facts .server import Sysctl
1817from pyinfra .facts .systemd import SystemdEnabled
1918from pyinfra .operations import apt , files , pip , server , systemd
2019
2120from cmdeploy .cmdeploy import Out
2221
2322from .acmetool import AcmetoolDeployer
24- from .basedeploy import Deployer , Deployment
23+ from .basedeploy import Deployer , Deployment , get_resource
24+ from .opendkim .deployer import OpendkimDeployer
2525from .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-
4743def _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-
303183class 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