mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
[enh] Use new filesystem utils in backup_create
This commit is contained in:
parent
20c4937f81
commit
007dfed607
2 changed files with 24 additions and 23 deletions
|
@ -35,6 +35,7 @@ import subprocess
|
|||
from collections import OrderedDict
|
||||
|
||||
from moulinette.core import MoulinetteError
|
||||
from moulinette.utils import filesystem
|
||||
from moulinette.utils.log import getActionLogger
|
||||
|
||||
backup_path = '/home/yunohost.backup'
|
||||
|
@ -115,15 +116,11 @@ def backup_create(name=None, description=None, output_directory=None,
|
|||
if os.path.isdir(tmp_dir):
|
||||
logger.warning("temporary directory for backup '%s' already exists",
|
||||
tmp_dir)
|
||||
os.system('rm -rf %s' % tmp_dir)
|
||||
try:
|
||||
os.mkdir(tmp_dir, 0750)
|
||||
except OSError:
|
||||
# Create temporary directory recursively
|
||||
os.makedirs(tmp_dir, 0750)
|
||||
os.system('chown -hR admin: %s' % backup_path)
|
||||
else:
|
||||
os.system('chown -hR admin: %s' % tmp_dir)
|
||||
filesystem.rm(tmp_dir, recursive=True)
|
||||
filesystem.mkdir(tmp_dir, 0750, parents=True, uid='admin')
|
||||
|
||||
def _clean_tmp_dir():
|
||||
filesystem.rm(tmp_dir, True, True)
|
||||
|
||||
# Initialize backup info
|
||||
info = {
|
||||
|
@ -169,17 +166,17 @@ def backup_create(name=None, description=None, output_directory=None,
|
|||
'warning')
|
||||
continue
|
||||
|
||||
tmp_app_dir = '{:s}/{:s}'.format(tmp_dir, app_id)
|
||||
tmp_app_dir = '{:s}/apps/{:s}'.format(tmp_dir, app_id)
|
||||
tmp_app_bkp_dir = tmp_app_dir + '/backup'
|
||||
msignals.display(m18n.n('backup_running_app_script', app_id))
|
||||
try:
|
||||
# Prepare backup directory for the app
|
||||
os.mkdir(tmp_app_dir, 0750)
|
||||
os.mkdir(tmp_app_dir + '/backup', 0750)
|
||||
filesystem.mkdir(tmp_app_bkp_dir, 0750, True, uid='admin')
|
||||
shutil.copytree(app_setting_path, tmp_app_dir + '/settings')
|
||||
|
||||
# Copy app backup script in a temporary folder and execute it
|
||||
subprocess.call(['install', '-Dm555', app_script, tmp_script])
|
||||
hook_exec(tmp_script, args=[tmp_app_dir + '/backup', app_id])
|
||||
hook_exec(tmp_script, args=[tmp_app_bkp_dir, app_id])
|
||||
except:
|
||||
logger.exception("error while executing backup of '%s'", app_id)
|
||||
msignals.display(m18n.n('backup_app_failed', app=app_id),
|
||||
|
@ -193,10 +190,12 @@ def backup_create(name=None, description=None, output_directory=None,
|
|||
'version': i['version'],
|
||||
}
|
||||
finally:
|
||||
try:
|
||||
os.unlink(tmp_script)
|
||||
except OSError:
|
||||
pass
|
||||
filesystem.rm(tmp_script, force=True)
|
||||
|
||||
# Check if something has been saved
|
||||
if ignore_hooks and not info['apps']:
|
||||
_clean_tmp_dir()
|
||||
raise MoulinetteError(errno.EINVAL, m18n.n('backup_nothings_done'))
|
||||
|
||||
# Create backup info file
|
||||
with open("%s/info.json" % tmp_dir, 'w') as f:
|
||||
|
@ -217,7 +216,7 @@ def backup_create(name=None, description=None, output_directory=None,
|
|||
try:
|
||||
tar = tarfile.open(archive_file, "w:gz")
|
||||
except:
|
||||
logger.exception("unable to open the archive '%s' for writing "
|
||||
logger.exception("unable to open '%s' for writing "
|
||||
"after creating directory '%s'",
|
||||
archive_file, archives_path)
|
||||
tar = None
|
||||
|
@ -225,18 +224,19 @@ def backup_create(name=None, description=None, output_directory=None,
|
|||
logger.exception("unable to open the archive '%s' for writing",
|
||||
archive_file)
|
||||
if tar is None:
|
||||
_clean_tmp_dir()
|
||||
raise MoulinetteError(errno.EIO,
|
||||
m18n.n('backup_archive_open_failed'))
|
||||
tar.add(tmp_dir, arcname='')
|
||||
tar.close()
|
||||
|
||||
# Copy info file
|
||||
os.system('mv %s/info.json %s/%s.info.json' %
|
||||
(tmp_dir, archives_path, name))
|
||||
# Move info file
|
||||
os.rename(tmp_dir + '/info.json',
|
||||
'{:s}/{:s}.info.json'.format(archives_path, name))
|
||||
|
||||
# Clean temporary directory
|
||||
if tmp_dir != output_directory:
|
||||
os.system('rm -rf %s' % tmp_dir)
|
||||
_clean_tmp_dir()
|
||||
|
||||
msignals.display(m18n.n('backup_complete'), 'success')
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@
|
|||
"packages_upgrade_failed" : "Unable to upgrade all packages",
|
||||
"system_upgraded" : "System successfully upgraded",
|
||||
|
||||
"backup_action_required" : "You must specify something to backup",
|
||||
"backup_action_required" : "You must specify something to save",
|
||||
"backup_output_directory_required" : "You must provide an output directory for the backup",
|
||||
"backup_output_directory_forbidden" : "Forbidden output directory",
|
||||
"backup_output_directory_not_empty" : "Output directory is not empty",
|
||||
|
@ -151,6 +151,7 @@
|
|||
"backup_archive_name_unknown" : "Unknown local backup archive named '{:s}'",
|
||||
"backup_archive_name_exists" : "Backup archive name already exists",
|
||||
"backup_app_failed" : "Unable to back up the app '{app:s}'",
|
||||
"backup_nothings_done" : "There is nothing to save",
|
||||
"backup_complete" : "Backup complete",
|
||||
"backup_invalid_archive" : "Invalid backup archive",
|
||||
"restore_confirm_yunohost_installed" : "Do you really want to restore an already installed system? [{answers:s}]",
|
||||
|
|
Loading…
Add table
Reference in a new issue