mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
We need to have YNH_MANIFEST_VERSION also defined during backup/restore (#1088)
* We need to have YNH_MANIFEST_VERSION also defined during backup/restore Co-authored-by: Kayou <pierre@kayou.io>
This commit is contained in:
parent
199cc50f66
commit
74272de52c
2 changed files with 43 additions and 78 deletions
|
@ -360,13 +360,7 @@ def app_change_url(operation_logger, app, domain, path):
|
||||||
args_list.append(app)
|
args_list.append(app)
|
||||||
|
|
||||||
# Prepare env. var. to pass to script
|
# Prepare env. var. to pass to script
|
||||||
env_dict = _make_environment_dict(args_odict)
|
env_dict = _make_environment_for_app_script(app, args=args_odict)
|
||||||
app_id, app_instance_nb = _parse_app_instance_name(app)
|
|
||||||
env_dict["YNH_APP_ID"] = app_id
|
|
||||||
env_dict["YNH_APP_INSTANCE_NAME"] = app
|
|
||||||
env_dict["YNH_APP_INSTANCE_NUMBER"] = str(app_instance_nb)
|
|
||||||
env_dict["YNH_APP_MANIFEST_VERSION"] = manifest.get("version", "?")
|
|
||||||
|
|
||||||
env_dict["YNH_APP_OLD_DOMAIN"] = old_domain
|
env_dict["YNH_APP_OLD_DOMAIN"] = old_domain
|
||||||
env_dict["YNH_APP_OLD_PATH"] = old_path
|
env_dict["YNH_APP_OLD_PATH"] = old_path
|
||||||
env_dict["YNH_APP_NEW_DOMAIN"] = domain
|
env_dict["YNH_APP_NEW_DOMAIN"] = domain
|
||||||
|
@ -528,11 +522,7 @@ def app_upgrade(app=[], url=None, file=None, force=False):
|
||||||
args_list.append(app_instance_name)
|
args_list.append(app_instance_name)
|
||||||
|
|
||||||
# Prepare env. var. to pass to script
|
# Prepare env. var. to pass to script
|
||||||
env_dict = _make_environment_dict(args_odict)
|
env_dict = _make_environment_for_app_script(app_instance_name, args=args_odict)
|
||||||
app_id, app_instance_nb = _parse_app_instance_name(app_instance_name)
|
|
||||||
env_dict["YNH_APP_ID"] = app_id
|
|
||||||
env_dict["YNH_APP_INSTANCE_NAME"] = app_instance_name
|
|
||||||
env_dict["YNH_APP_INSTANCE_NUMBER"] = str(app_instance_nb)
|
|
||||||
env_dict["YNH_APP_UPGRADE_TYPE"] = upgrade_type
|
env_dict["YNH_APP_UPGRADE_TYPE"] = upgrade_type
|
||||||
env_dict["YNH_APP_MANIFEST_VERSION"] = str(app_new_version)
|
env_dict["YNH_APP_MANIFEST_VERSION"] = str(app_new_version)
|
||||||
env_dict["YNH_APP_CURRENT_VERSION"] = str(app_current_version)
|
env_dict["YNH_APP_CURRENT_VERSION"] = str(app_current_version)
|
||||||
|
@ -762,20 +752,6 @@ def app_install(operation_logger, app, label=None, args=None, no_remove_on_failu
|
||||||
# Apply dirty patch to make php5 apps compatible with php7
|
# Apply dirty patch to make php5 apps compatible with php7
|
||||||
_patch_legacy_php_versions(extracted_app_folder)
|
_patch_legacy_php_versions(extracted_app_folder)
|
||||||
|
|
||||||
# Prepare env. var. to pass to script
|
|
||||||
env_dict = _make_environment_dict(args_odict)
|
|
||||||
env_dict["YNH_APP_ID"] = app_id
|
|
||||||
env_dict["YNH_APP_INSTANCE_NAME"] = app_instance_name
|
|
||||||
env_dict["YNH_APP_INSTANCE_NUMBER"] = str(instance_number)
|
|
||||||
env_dict["YNH_APP_MANIFEST_VERSION"] = manifest.get("version", "?")
|
|
||||||
|
|
||||||
env_dict_for_logging = env_dict.copy()
|
|
||||||
for arg_name, arg_value_and_type in args_odict.items():
|
|
||||||
if arg_value_and_type[1] == "password":
|
|
||||||
del env_dict_for_logging["YNH_APP_ARG_%s" % arg_name.upper()]
|
|
||||||
|
|
||||||
operation_logger.extra.update({'env': env_dict_for_logging})
|
|
||||||
|
|
||||||
# We'll check that the app didn't brutally edit some system configuration
|
# We'll check that the app didn't brutally edit some system configuration
|
||||||
manually_modified_files_before_install = manually_modified_files()
|
manually_modified_files_before_install = manually_modified_files()
|
||||||
|
|
||||||
|
@ -827,6 +803,16 @@ def app_install(operation_logger, app, label=None, args=None, no_remove_on_failu
|
||||||
# will be enabled during the app install. C.f. 'app_register_url()' below.
|
# will be enabled during the app install. C.f. 'app_register_url()' below.
|
||||||
permission_create(app_instance_name + ".main", allowed=["all_users"], label=label, show_tile=False, protected=False)
|
permission_create(app_instance_name + ".main", allowed=["all_users"], label=label, show_tile=False, protected=False)
|
||||||
|
|
||||||
|
# Prepare env. var. to pass to script
|
||||||
|
env_dict = _make_environment_for_app_script(app_instance_name, args=args_odict)
|
||||||
|
|
||||||
|
env_dict_for_logging = env_dict.copy()
|
||||||
|
for arg_name, arg_value_and_type in args_odict.items():
|
||||||
|
if arg_value_and_type[1] == "password":
|
||||||
|
del env_dict_for_logging["YNH_APP_ARG_%s" % arg_name.upper()]
|
||||||
|
|
||||||
|
operation_logger.extra.update({'env': env_dict_for_logging})
|
||||||
|
|
||||||
# Execute the app install script
|
# Execute the app install script
|
||||||
install_failed = True
|
install_failed = True
|
||||||
try:
|
try:
|
||||||
|
@ -1476,12 +1462,7 @@ def app_action_run(operation_logger, app, action, args=None):
|
||||||
args_odict = _parse_args_for_action(actions[action], args=args_dict)
|
args_odict = _parse_args_for_action(actions[action], args=args_dict)
|
||||||
args_list = [value[0] for value in args_odict.values()]
|
args_list = [value[0] for value in args_odict.values()]
|
||||||
|
|
||||||
app_id, app_instance_nb = _parse_app_instance_name(app)
|
env_dict = _make_environment_for_app_script(app, args=args_odict, args_prefix="ACTION_")
|
||||||
|
|
||||||
env_dict = _make_environment_dict(args_odict, prefix="ACTION_")
|
|
||||||
env_dict["YNH_APP_ID"] = app_id
|
|
||||||
env_dict["YNH_APP_INSTANCE_NAME"] = app
|
|
||||||
env_dict["YNH_APP_INSTANCE_NUMBER"] = str(app_instance_nb)
|
|
||||||
env_dict["YNH_ACTION"] = action
|
env_dict["YNH_ACTION"] = action
|
||||||
|
|
||||||
_, path = tempfile.mkstemp()
|
_, path = tempfile.mkstemp()
|
||||||
|
@ -1492,7 +1473,7 @@ def app_action_run(operation_logger, app, action, args=None):
|
||||||
os.chmod(path, 700)
|
os.chmod(path, 700)
|
||||||
|
|
||||||
if action_declaration.get("cwd"):
|
if action_declaration.get("cwd"):
|
||||||
cwd = action_declaration["cwd"].replace("$app", app_id)
|
cwd = action_declaration["cwd"].replace("$app", app)
|
||||||
else:
|
else:
|
||||||
cwd = "/etc/yunohost/apps/" + app
|
cwd = "/etc/yunohost/apps/" + app
|
||||||
|
|
||||||
|
@ -2778,18 +2759,23 @@ def _assert_no_conflicting_apps(domain, path, ignore_app=None, full_domain=False
|
||||||
raise YunohostError('app_location_unavailable', apps="\n".join(apps))
|
raise YunohostError('app_location_unavailable', apps="\n".join(apps))
|
||||||
|
|
||||||
|
|
||||||
def _make_environment_dict(args_dict, prefix="APP_ARG_"):
|
def _make_environment_for_app_script(app, args={}, args_prefix="APP_ARG_"):
|
||||||
"""
|
|
||||||
Convert a dictionnary containing manifest arguments
|
|
||||||
to a dictionnary of env. var. to be passed to scripts
|
|
||||||
|
|
||||||
Keyword arguments:
|
app_setting_path = os.path.join(APPS_SETTING_PATH, app)
|
||||||
arg -- A key/value dictionnary of manifest arguments
|
|
||||||
|
manifest = _get_manifest_of_app(app_setting_path)
|
||||||
|
app_id, app_instance_nb = _parse_app_instance_name(app)
|
||||||
|
|
||||||
|
env_dict = {
|
||||||
|
"YNH_APP_ID": app_id,
|
||||||
|
"YNH_APP_INSTANCE_NAME": app,
|
||||||
|
"YNH_APP_INSTANCE_NUMBER": str(app_instance_nb),
|
||||||
|
"YNH_APP_MANIFEST_VERSION": manifest.get("version", "?")
|
||||||
|
}
|
||||||
|
|
||||||
|
for arg_name, arg_value_and_type in args.items():
|
||||||
|
env_dict["YNH_%s%s" % (args_prefix, arg_name.upper())] = arg_value_and_type[0]
|
||||||
|
|
||||||
"""
|
|
||||||
env_dict = {}
|
|
||||||
for arg_name, arg_value_and_type in args_dict.items():
|
|
||||||
env_dict["YNH_%s%s" % (prefix, arg_name.upper())] = arg_value_and_type[0]
|
|
||||||
return env_dict
|
return env_dict
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ from moulinette.utils.filesystem import read_file, mkdir, write_to_yaml, read_ya
|
||||||
|
|
||||||
from yunohost.app import (
|
from yunohost.app import (
|
||||||
app_info, _is_installed,
|
app_info, _is_installed,
|
||||||
_parse_app_instance_name,
|
_make_environment_for_app_script,
|
||||||
dump_app_log_extract_for_debugging,
|
dump_app_log_extract_for_debugging,
|
||||||
_patch_legacy_helpers,
|
_patch_legacy_helpers,
|
||||||
_patch_legacy_php_versions,
|
_patch_legacy_php_versions,
|
||||||
|
@ -553,13 +553,8 @@ class BackupManager():
|
||||||
env_var['YNH_BACKUP_CSV'] = tmp_csv
|
env_var['YNH_BACKUP_CSV'] = tmp_csv
|
||||||
|
|
||||||
if app is not None:
|
if app is not None:
|
||||||
app_id, app_instance_nb = _parse_app_instance_name(app)
|
env_var.update(_make_environment_for_app_script(app))
|
||||||
env_var["YNH_APP_ID"] = app_id
|
env_var["YNH_APP_BACKUP_DIR"] = os.path.join(self.work_dir, 'apps', app, 'backup')
|
||||||
env_var["YNH_APP_INSTANCE_NAME"] = app
|
|
||||||
env_var["YNH_APP_INSTANCE_NUMBER"] = str(app_instance_nb)
|
|
||||||
tmp_app_dir = os.path.join('apps/', app)
|
|
||||||
tmp_app_bkp_dir = os.path.join(self.work_dir, tmp_app_dir, 'backup')
|
|
||||||
env_var["YNH_APP_BACKUP_DIR"] = tmp_app_bkp_dir
|
|
||||||
|
|
||||||
return env_var
|
return env_var
|
||||||
|
|
||||||
|
@ -1165,7 +1160,10 @@ class RestoreManager():
|
||||||
|
|
||||||
logger.debug(m18n.n('restore_running_hooks'))
|
logger.debug(m18n.n('restore_running_hooks'))
|
||||||
|
|
||||||
env_dict = self._get_env_var()
|
env_dict = {
|
||||||
|
'YNH_BACKUP_DIR': self.work_dir,
|
||||||
|
'YNH_BACKUP_CSV': os.path.join(self.work_dir, "backup.csv")
|
||||||
|
}
|
||||||
operation_logger.extra['env'] = env_dict
|
operation_logger.extra['env'] = env_dict
|
||||||
operation_logger.flush()
|
operation_logger.flush()
|
||||||
ret = hook_callback('restore',
|
ret = hook_callback('restore',
|
||||||
|
@ -1372,7 +1370,12 @@ class RestoreManager():
|
||||||
migrate_legacy_permission_settings(app=app_instance_name)
|
migrate_legacy_permission_settings(app=app_instance_name)
|
||||||
|
|
||||||
# Prepare env. var. to pass to script
|
# Prepare env. var. to pass to script
|
||||||
env_dict = self._get_env_var(app_instance_name)
|
env_dict = _make_environment_for_app_script(app_instance_name)
|
||||||
|
env_dict.update({
|
||||||
|
'YNH_BACKUP_DIR': self.work_dir,
|
||||||
|
'YNH_BACKUP_CSV': os.path.join(self.work_dir, "backup.csv"),
|
||||||
|
'YNH_APP_BACKUP_DIR': os.path.join(self.work_dir, 'apps', app_instance_name, 'backup')
|
||||||
|
})
|
||||||
|
|
||||||
operation_logger.extra['env'] = env_dict
|
operation_logger.extra['env'] = env_dict
|
||||||
operation_logger.flush()
|
operation_logger.flush()
|
||||||
|
@ -1396,11 +1399,7 @@ class RestoreManager():
|
||||||
remove_script = os.path.join(app_scripts_in_archive, 'remove')
|
remove_script = os.path.join(app_scripts_in_archive, 'remove')
|
||||||
|
|
||||||
# Setup environment for remove script
|
# Setup environment for remove script
|
||||||
app_id, app_instance_nb = _parse_app_instance_name(app_instance_name)
|
env_dict_remove = _make_environment_for_app_script(app_instance_name)
|
||||||
env_dict_remove = {}
|
|
||||||
env_dict_remove["YNH_APP_ID"] = app_id
|
|
||||||
env_dict_remove["YNH_APP_INSTANCE_NAME"] = app_instance_name
|
|
||||||
env_dict_remove["YNH_APP_INSTANCE_NUMBER"] = str(app_instance_nb)
|
|
||||||
|
|
||||||
operation_logger = OperationLogger('remove_on_failed_restore',
|
operation_logger = OperationLogger('remove_on_failed_restore',
|
||||||
[('app', app_instance_name)],
|
[('app', app_instance_name)],
|
||||||
|
@ -1432,26 +1431,6 @@ class RestoreManager():
|
||||||
# Cleaning temporary scripts directory
|
# Cleaning temporary scripts directory
|
||||||
shutil.rmtree(tmp_folder_for_app_restore, ignore_errors=True)
|
shutil.rmtree(tmp_folder_for_app_restore, ignore_errors=True)
|
||||||
|
|
||||||
def _get_env_var(self, app=None):
|
|
||||||
""" Define environment variable for hooks call """
|
|
||||||
env_var = {}
|
|
||||||
env_var['YNH_BACKUP_DIR'] = self.work_dir
|
|
||||||
env_var['YNH_BACKUP_CSV'] = os.path.join(self.work_dir, "backup.csv")
|
|
||||||
|
|
||||||
if app is not None:
|
|
||||||
app_dir_in_archive = os.path.join(self.work_dir, 'apps', app)
|
|
||||||
app_backup_in_archive = os.path.join(app_dir_in_archive, 'backup')
|
|
||||||
|
|
||||||
# Parse app instance name and id
|
|
||||||
app_id, app_instance_nb = _parse_app_instance_name(app)
|
|
||||||
|
|
||||||
env_var["YNH_APP_ID"] = app_id
|
|
||||||
env_var["YNH_APP_INSTANCE_NAME"] = app
|
|
||||||
env_var["YNH_APP_INSTANCE_NUMBER"] = str(app_instance_nb)
|
|
||||||
env_var["YNH_APP_BACKUP_DIR"] = app_backup_in_archive
|
|
||||||
|
|
||||||
return env_var
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Backup methods #
|
# Backup methods #
|
||||||
#
|
#
|
||||||
|
|
Loading…
Add table
Reference in a new issue