added an automatic bash option (no path provided) or a path provided bash (for cron job)

This commit is contained in:
Spitap
2022-07-21 19:00:32 +02:00
parent 5318fa279b
commit 579faccfa5
3 changed files with 45 additions and 10 deletions

View File

@@ -24,7 +24,7 @@ def install(appname, config, upgrade):
utils.printcolor(u"{}".format(inst), utils.RED) utils.printcolor(u"{}".format(inst), utils.RED)
sys.exit(1) sys.exit(1)
def backup(config, isBash): def backup(config, bashArg):
"""Backup instance""" """Backup instance"""
try: try:
script = importlib.import_module( script = importlib.import_module(
@@ -32,7 +32,7 @@ def backup(config, isBash):
except ImportError: except ImportError:
print("Error importing backup") print("Error importing backup")
try: try:
getattr(script, "Backup")(config, isBash).run() getattr(script, "Backup")(config, bashArg).run()
except utils.FatalError as inst: except utils.FatalError as inst:
utils.printcolor(u"{}".format(inst), utils.RED) utils.printcolor(u"{}".format(inst), utils.RED)
sys.exit(1) sys.exit(1)

View File

@@ -5,6 +5,7 @@ import pwd
import shutil import shutil
import stat import stat
import datetime import datetime
import sys
from .. import database from .. import database
from .. import utils from .. import utils
@@ -27,12 +28,17 @@ class Backup():
#||--> mails #||--> mails
# |--> vmails # |--> vmails
def __init__(self, config, isBash): def __init__(self, config, bashArg):
self.config = config self.config = config
self.isBash = isBash
self.destinationPath = "" self.destinationPath = ""
self.BACKUPDIRECTORY = ["mails/", "custom/", "databases/"] self.BACKUPDIRECTORY = ["mails/", "custom/", "databases/"]
self.isBash = False
self.bash = ""
if bashArg != "NOBASH":
self.isBash = True
self.bash = bashArg
def preparePath(self): def preparePath(self):
pw = pwd.getpwnam("root") pw = pwd.getpwnam("root")
@@ -80,9 +86,16 @@ class Backup():
def setPath(self): def setPath(self):
"""Setup backup directory""" """Setup backup directory"""
if self.isBash: if self.isBash:
if self.bash == "TRUE":
date = datetime.datetime.now().strftime("%m_%d_%Y_%H_%M") date = datetime.datetime.now().strftime("%m_%d_%Y_%H_%M")
path = f"/modoboa_backup/backup_{date}/" path = f"/modoboa_backup/backup_{date}/"
self.validatePath(path) self.validatePath(path)
else :
validate = self.validatePath(self.bash)
if not validate:
print("provided bash is not right, exiting...")
print(f"Path provided : {self.bash}")
sys.exit(1)
else: else:
user_value = None user_value = None
while (user_value == '' or user_value == None or not self.validatePath(user_value)): while (user_value == '' or user_value == None or not self.validatePath(user_value)):

28
run.py
View File

@@ -81,18 +81,35 @@ def main(input_args):
"--beta", action="store_true", default=False, "--beta", action="store_true", default=False,
help="Install latest beta release of Modoboa instead of the stable one") help="Install latest beta release of Modoboa instead of the stable one")
parser.add_argument( parser.add_argument(
"--bash", action="store_true", default=False, "--bash", type=str, nargs=1, metavar="path",
help="(backup only) - For script usage, No interaction will be required") help="(backup only) - For script usage, No interaction will be required, you must provide a path")
parser.add_argument(
"--sbash", action="store_true", default=False,
help="same as --bash but backup will be at /modoboa_backup/Backup_M_Y_d_H_M")
parser.add_argument("domain", type=str, parser.add_argument("domain", type=str,
help="The main domain of your future mail server") help="The main domain of your future mail server")
args = parser.parse_args(input_args) args = parser.parse_args(input_args)
if args.debug: if args.debug:
utils.ENV["debug"] = True utils.ENV["debug"] = True
if not args.backup and (args.bash != None or args.sbash):
utils.printcolor("You provided --bash or --sbash without --backup, "
"if you want to do a backup, please provide --backup!", utils.RED)
return
elif args.bash != None and args.sbash :
utils.printcolor("You provided --bash PATH and --sbash at the same time. "
"Please provided only one!", utils.RED)
return
elif args.bash == "TRUE":
utils.printcolor("You can't pick *TRUE* as backup directory !", utils.RED)
utils.printcolor("Welcome to Modoboa installer!\n", utils.GREEN) utils.printcolor("Welcome to Modoboa installer!\n", utils.GREEN)
wasConfigFileAlreadyThere = utils.check_config_file(args.configfile, args.interactive, args.upgrade, args.backup) wasConfigFileAlreadyThere = utils.check_config_file(args.configfile, args.interactive, args.upgrade, args.backup)
if args.stop_after_configfile_check or (not wasConfigFileAlreadyThere and args.backup): if args.stop_after_configfile_check or (not wasConfigFileAlreadyThere and args.backup):
return return
config = configparser.ConfigParser() config = configparser.ConfigParser()
with open(args.configfile) as fp: with open(args.configfile) as fp:
config.read_file(fp) config.read_file(fp)
@@ -107,7 +124,12 @@ def main(input_args):
upgrade_disclaimer(config) upgrade_disclaimer(config)
elif args.backup: elif args.backup:
backup_disclamer() backup_disclamer()
scripts.backup(config, args.bash) bashArg = "NOBASH"
if args.bash != None:
bashArg = args.bash
elif args.sbash:
bashArg = "TRUE"
scripts.backup(config, bashArg)
return return
else: else:
installation_disclaimer(args, config) installation_disclaimer(args, config)