Skip to content

Commit 36e8133

Browse files
committed
refactor: use put_file/put_template helpers across all deployers
1 parent 5f34179 commit 36e8133

6 files changed

Lines changed: 58 additions & 126 deletions

File tree

cmdeploy/src/cmdeploy/dovecot/deployer.py

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def install(self):
3333

3434
def configure(self):
3535
configure_remote_units(self.config.mail_domain, self.units)
36-
self.need_restart, self.daemon_reload = _configure_dovecot(self.config)
36+
self.need_restart, self.daemon_reload = _configure_dovecot(self, self.config)
3737

3838
def activate(self):
3939
activate_remote_units(self.units)
@@ -85,38 +85,30 @@ def _install_dovecot_package(package: str, arch: str):
8585
apt.deb(name=f"Install dovecot-{package}", src=deb_filename)
8686

8787

88-
def _configure_dovecot(config: Config, debug: bool = False) -> (bool, bool):
88+
89+
def _configure_dovecot(deployer, config: Config, debug: bool = False) -> (bool, bool):
8990
"""Configures Dovecot IMAP server."""
90-
need_restart = False
91+
deployer.need_restart = False
9192
daemon_reload = False
9293

93-
main_config = files.template(
94+
deployer.put_template(
95+
name="Upload dovecot.conf",
9496
src=get_resource("dovecot/dovecot.conf.j2"),
9597
dest="/etc/dovecot/dovecot.conf",
96-
user="root",
97-
group="root",
98-
mode="644",
9998
config=config,
10099
debug=debug,
101100
disable_ipv6=config.disable_ipv6,
102101
)
103-
need_restart |= main_config.changed
104-
auth_config = files.put(
102+
deployer.put_file(
103+
name="Upload auth.conf",
105104
src=get_resource("dovecot/auth.conf"),
106105
dest="/etc/dovecot/auth.conf",
107-
user="root",
108-
group="root",
109-
mode="644",
110106
)
111-
need_restart |= auth_config.changed
112-
lua_push_notification_script = files.put(
107+
deployer.put_file(
108+
name="Upload push_notification.lua",
113109
src=get_resource("dovecot/push_notification.lua"),
114110
dest="/etc/dovecot/push_notification.lua",
115-
user="root",
116-
group="root",
117-
mode="644",
118111
)
119-
need_restart |= lua_push_notification_script.changed
120112

121113
# as per https://doc.dovecot.org/2.3/configuration_manual/os/
122114
# it is recommended to set the following inotify limits
@@ -139,7 +131,7 @@ def _configure_dovecot(config: Config, debug: bool = False) -> (bool, bool):
139131
path="/etc/environment",
140132
line="TZ=:/etc/localtime",
141133
)
142-
need_restart |= timezone_env.changed
134+
deployer.need_restart |= timezone_env.changed
143135

144136
restart_conf = files.put(
145137
name="dovecot: restart automatically on failure",
@@ -149,10 +141,10 @@ def _configure_dovecot(config: Config, debug: bool = False) -> (bool, bool):
149141
daemon_reload |= restart_conf.changed
150142

151143
# Validate dovecot configuration before restart
152-
if need_restart:
144+
if deployer.need_restart:
153145
server.shell(
154146
name="Validate dovecot configuration",
155147
commands=["doveconf -n >/dev/null"],
156148
)
157149

158-
return need_restart, daemon_reload
150+
return deployer.need_restart, daemon_reload

cmdeploy/src/cmdeploy/filtermail/deployer.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,13 @@ def install(self):
2929

3030
def configure(self):
3131
for service in self.services:
32-
self.need_restart |= files.template(
32+
self.put_template(
33+
name=f"Upload {service}.service",
3334
src=get_resource(f"filtermail/{service}.service.j2"),
3435
dest=f"/etc/systemd/system/{service}.service",
35-
user="root",
36-
group="root",
37-
mode="644",
3836
bin_path=self.bin_path,
3937
config_path=self.config_path,
40-
).changed
38+
)
4139

4240
def activate(self):
4341
for service in self.services:

cmdeploy/src/cmdeploy/mtail/deployer.py

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from pyinfra import facts, host
2-
from pyinfra.operations import apt, files, server, systemd
2+
from pyinfra.operations import apt, server, systemd
33

44
from cmdeploy.basedeploy import (
55
Deployer,
@@ -37,25 +37,18 @@ def install(self):
3737
def configure(self):
3838
# Using our own systemd unit instead of `/usr/lib/systemd/system/mtail.service`.
3939
# This allows to read from journalctl instead of log files.
40-
files.template(
40+
self.put_template(
41+
name="Upload mtail.service",
4142
src=get_resource("mtail/mtail.service.j2"),
4243
dest="/etc/systemd/system/mtail.service",
43-
user="root",
44-
group="root",
45-
mode="644",
4644
address=self.mtail_address or "127.0.0.1",
4745
port=3903,
4846
)
49-
50-
mtail_conf = files.put(
47+
self.put_file(
5148
name="Mtail configuration",
5249
src=get_resource("mtail/delivered_mail.mtail"),
5350
dest="/etc/mtail/delivered_mail.mtail",
54-
user="root",
55-
group="root",
56-
mode="644",
5751
)
58-
self.need_restart = mtail_conf.changed
5952

6053
def activate(self):
6154
systemd.service(

cmdeploy/src/cmdeploy/nginx/deployer.py

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def install(self):
4747
files.file("/usr/sbin/policy-rc.d", present=False)
4848

4949
def configure(self):
50-
self.need_restart = _configure_nginx(self.config)
50+
_configure_nginx(self, self.config)
5151

5252
def activate(self):
5353
systemd.service(
@@ -60,40 +60,31 @@ def activate(self):
6060
self.need_restart = False
6161

6262

63-
def _configure_nginx(config: Config, debug: bool = False) -> bool:
63+
def _configure_nginx(deployer, config: Config, debug: bool = False):
6464
"""Configures nginx HTTP server."""
65-
need_restart = False
65+
deployer.need_restart = False
6666

67-
main_config = files.template(
67+
deployer.put_template(
68+
name="Upload nginx.conf",
6869
src=get_resource("nginx/nginx.conf.j2"),
6970
dest="/etc/nginx/nginx.conf",
70-
user="root",
71-
group="root",
72-
mode="644",
7371
config=config,
7472
disable_ipv6=config.disable_ipv6,
7573
)
76-
need_restart |= main_config.changed
7774

78-
autoconfig = files.template(
75+
deployer.put_template(
76+
name="Upload autoconfig.xml",
7977
src=get_resource("nginx/autoconfig.xml.j2"),
8078
dest="/var/www/html/.well-known/autoconfig/mail/config-v1.1.xml",
81-
user="root",
82-
group="root",
83-
mode="644",
8479
config=config,
8580
)
86-
need_restart |= autoconfig.changed
8781

88-
mta_sts_config = files.template(
82+
deployer.put_template(
83+
name="Upload mta-sts.txt",
8984
src=get_resource("nginx/mta-sts.txt.j2"),
9085
dest="/var/www/html/.well-known/mta-sts.txt",
91-
user="root",
92-
group="root",
93-
mode="644",
9486
config=config,
9587
)
96-
need_restart |= mta_sts_config.changed
9788

9889
# install CGI newemail script
9990
#
@@ -105,13 +96,9 @@ def _configure_nginx(config: Config, debug: bool = False) -> bool:
10596
group="root",
10697
)
10798

108-
files.put(
99+
deployer.put_file(
109100
name="Upload cgi newemail.py script",
110101
src=get_resource("newemail.py", pkg="chatmaild").open("rb"),
111102
dest=f"{cgi_dir}/newemail.py",
112-
user="root",
113-
group="root",
114-
mode="755",
103+
executable=True,
115104
)
116-
117-
return need_restart

cmdeploy/src/cmdeploy/opendkim/deployer.py

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -25,35 +25,25 @@ def configure(self):
2525
domain = self.mail_domain
2626
dkim_selector = "opendkim"
2727
"""Configures OpenDKIM"""
28-
need_restart = False
2928

30-
main_config = files.template(
29+
self.put_template(
30+
name="Upload opendkim.conf",
3131
src=get_resource("opendkim/opendkim.conf"),
3232
dest="/etc/opendkim.conf",
33-
user="root",
34-
group="root",
35-
mode="644",
3633
config={"domain_name": domain, "opendkim_selector": dkim_selector},
3734
)
38-
need_restart |= main_config.changed
3935

40-
screen_script = files.put(
36+
self.put_file(
37+
name="Upload screen.lua",
4138
src=get_resource("opendkim/screen.lua"),
4239
dest="/etc/opendkim/screen.lua",
43-
user="root",
44-
group="root",
45-
mode="644",
4640
)
47-
need_restart |= screen_script.changed
4841

49-
final_script = files.put(
42+
self.put_file(
43+
name="Upload final.lua",
5044
src=get_resource("opendkim/final.lua"),
5145
dest="/etc/opendkim/final.lua",
52-
user="root",
53-
group="root",
54-
mode="644",
5546
)
56-
need_restart |= final_script.changed
5747

5848
files.directory(
5949
name="Add opendkim directory to /etc",
@@ -64,25 +54,21 @@ def configure(self):
6454
present=True,
6555
)
6656

67-
keytable = files.template(
57+
self.put_template(
58+
name="Upload KeyTable",
6859
src=get_resource("opendkim/KeyTable"),
6960
dest="/etc/dkimkeys/KeyTable",
70-
user="opendkim",
71-
group="opendkim",
72-
mode="644",
61+
owner="opendkim",
7362
config={"domain_name": domain, "opendkim_selector": dkim_selector},
7463
)
75-
need_restart |= keytable.changed
7664

77-
signing_table = files.template(
65+
self.put_template(
66+
name="Upload SigningTable",
7867
src=get_resource("opendkim/SigningTable"),
7968
dest="/etc/dkimkeys/SigningTable",
80-
user="opendkim",
81-
group="opendkim",
82-
mode="644",
69+
owner="opendkim",
8370
config={"domain_name": domain, "opendkim_selector": dkim_selector},
8471
)
85-
need_restart |= signing_table.changed
8672
files.directory(
8773
name="Add opendkim socket directory to /var/spool/postfix",
8874
path="/var/spool/postfix/opendkim",
@@ -102,14 +88,11 @@ def configure(self):
10288
_su_user="opendkim",
10389
)
10490

105-
service_file = files.put(
91+
self.put_file(
10692
name="Configure opendkim to restart once a day",
10793
src=get_resource("opendkim/systemd.conf"),
10894
dest="/etc/systemd/system/opendkim.service.d/10-prevent-memory-leak.conf",
10995
)
110-
need_restart |= service_file.changed
111-
112-
self.need_restart = need_restart
11396

11497
def activate(self):
11598
systemd.service(

cmdeploy/src/cmdeploy/postfix/deployer.py

Lines changed: 14 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -19,71 +19,51 @@ def install(self):
1919

2020
def configure(self):
2121
config = self.config
22-
need_restart = False
2322

24-
main_config = files.template(
23+
self.put_template(
24+
name="Upload main.cf",
2525
src=get_resource("postfix/main.cf.j2"),
2626
dest="/etc/postfix/main.cf",
27-
user="root",
28-
group="root",
29-
mode="644",
3027
config=config,
3128
disable_ipv6=config.disable_ipv6,
3229
)
33-
need_restart |= main_config.changed
3430

35-
master_config = files.template(
31+
self.put_template(
32+
name="Upload master.cf",
3633
src=get_resource("postfix/master.cf.j2"),
3734
dest="/etc/postfix/master.cf",
38-
user="root",
39-
group="root",
40-
mode="644",
4135
debug=False,
4236
config=config,
4337
)
44-
need_restart |= master_config.changed
4538

46-
header_cleanup = files.put(
39+
self.put_file(
40+
name="Upload submission_header_cleanup",
4741
src=get_resource("postfix/submission_header_cleanup"),
4842
dest="/etc/postfix/submission_header_cleanup",
49-
user="root",
50-
group="root",
51-
mode="644",
5243
)
53-
need_restart |= header_cleanup.changed
5444

55-
lmtp_header_cleanup = files.put(
45+
self.put_file(
46+
name="Upload lmtp_header_cleanup",
5647
src=get_resource("postfix/lmtp_header_cleanup"),
5748
dest="/etc/postfix/lmtp_header_cleanup",
58-
user="root",
59-
group="root",
60-
mode="644",
6149
)
62-
need_restart |= lmtp_header_cleanup.changed
6350

64-
tls_policy_map = files.put(
51+
tls_policy_changed = self.put_file(
6552
name="Upload SMTP TLS Policy that accepts self-signed certificates for IP-only hosts",
6653
src=get_resource("postfix/smtp_tls_policy_map"),
6754
dest="/etc/postfix/smtp_tls_policy_map",
68-
user="root",
69-
group="root",
70-
mode="644",
71-
)
72-
need_restart |= tls_policy_map.changed
73-
if tls_policy_map.changed:
55+
).changed
56+
if tls_policy_changed:
7457
server.shell(
7558
commands=["postmap /etc/postfix/smtp_tls_policy_map"],
7659
)
7760

7861
# Login map that 1:1 maps email address to login.
79-
login_map = files.put(
62+
self.put_file(
63+
name="Upload login_map",
8064
src=get_resource("postfix/login_map"),
8165
dest="/etc/postfix/login_map",
82-
user="root",
83-
group="root",
84-
mode="644",
8566
)
86-
need_restart |= login_map.changed
8767

8868
restart_conf = files.put(
8969
name="postfix: restart automatically on failure",
@@ -93,13 +73,12 @@ def configure(self):
9373
self.daemon_reload = restart_conf.changed
9474

9575
# Validate postfix configuration before restart
96-
if need_restart:
76+
if self.need_restart:
9777
server.shell(
9878
name="Validate postfix configuration",
9979
# Extract stderr and quit with error if non-zero
10080
commands=["""bash -c 'w=$(postconf 2>&1 >/dev/null); [[ -z "$w" ]] || { echo "$w"; false; }'"""],
10181
)
102-
self.need_restart = need_restart
10382

10483
def activate(self):
10584
restart = False if self.disable_mail else self.need_restart

0 commit comments

Comments
 (0)