Skip to content

Commit c35f186

Browse files
committed
cmdeploy: introduce LocalExec object
1 parent c090af6 commit c35f186

File tree

3 files changed

+25
-20
lines changed

3 files changed

+25
-20
lines changed

cmdeploy/src/cmdeploy/cmdeploy.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from termcolor import colored
2020

2121
from . import dns, remote
22-
from .sshexec import SSHExec
22+
from .sshexec import SSHExec, LocalExec
2323

2424
#
2525
# cmdeploy sub commands and options
@@ -365,9 +365,9 @@ def get_parser():
365365

366366
def get_sshexec(ssh_host: str, verbose=True):
367367
if ssh_host in ["localhost", "@local"]:
368-
return "localhost"
368+
return LocalExec(verbose, docker=False)
369369
elif ssh_host == "docker":
370-
return "docker"
370+
return LocalExec(verbose, docker=True)
371371
if verbose:
372372
print(f"[ssh] login to {ssh_host}")
373373
return SSHExec(ssh_host, verbose=verbose)

cmdeploy/src/cmdeploy/dns.py

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,9 @@
77

88

99
def get_initial_remote_data(sshexec, mail_domain):
10-
if sshexec == "localhost":
11-
result = remote.rdns.perform_initial_checks(mail_domain)
12-
elif sshexec == "docker":
13-
result = remote.rdns.perform_initial_checks(mail_domain, pre_command="docker exec chatmail ")
14-
else:
15-
result = sshexec.logged(
16-
call=remote.rdns.perform_initial_checks, kwargs=dict(mail_domain=mail_domain)
17-
)
18-
return result
10+
return sshexec.logged(
11+
call=remote.rdns.perform_initial_checks, kwargs=dict(mail_domain=mail_domain)
12+
)
1913

2014

2115
def check_initial_remote_data(remote_data, *, print=print):
@@ -50,14 +44,9 @@ def check_full_zone(sshexec, remote_data, out, zonefile) -> int:
5044
"""Check existing DNS records, optionally write them to zone file
5145
and return (exitcode, remote_data) tuple."""
5246

53-
if sshexec in ["localhost", "docker"]:
54-
required_diff, recommended_diff = remote.rdns.check_zonefile(
55-
zonefile=zonefile, verbose=False
56-
)
57-
else:
58-
required_diff, recommended_diff = sshexec.logged(
59-
remote.rdns.check_zonefile, kwargs=dict(zonefile=zonefile, verbose=False),
60-
)
47+
required_diff, recommended_diff = sshexec.logged(
48+
remote.rdns.check_zonefile, kwargs=dict(zonefile=zonefile, verbose=False),
49+
)
6150

6251
returncode = 0
6352
if required_diff:

cmdeploy/src/cmdeploy/sshexec.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,19 @@ def logged(self, call, kwargs):
8282
res = self(call, kwargs, log_callback=remote.rshell.log_progress)
8383
print_stderr()
8484
return res
85+
86+
87+
class LocalExec:
88+
def __init__(self, verbose=False, docker=False):
89+
self.verbose = verbose
90+
self.docker = docker
91+
92+
def logged(self, call, kwargs: dict):
93+
where = "locally"
94+
if self.docker:
95+
if call == remote.rdns.perform_initial_checks:
96+
kwargs['pre_command'] = "docker exec chatmail "
97+
where = "in docker"
98+
if self.verbose:
99+
print(f"Running {where}: {call.__name__}(**{kwargs})")
100+
return call(**kwargs)

0 commit comments

Comments
 (0)