mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Make more robust migration
This commit is contained in:
parent
678334eb28
commit
dc38d57baa
1 changed files with 55 additions and 2 deletions
|
@ -6,7 +6,7 @@ from yunohost.utils.error import YunohostError
|
||||||
from moulinette.utils.log import getActionLogger
|
from moulinette.utils.log import getActionLogger
|
||||||
|
|
||||||
from yunohost.tools import Migration
|
from yunohost.tools import Migration
|
||||||
from yunohost.app import app_setting
|
from yunohost.app import app_setting, app_ssowatconf
|
||||||
from yunohost.permission import user_permission_list, SYSTEM_PERMS
|
from yunohost.permission import user_permission_list, SYSTEM_PERMS
|
||||||
|
|
||||||
logger = getActionLogger('yunohost.migration')
|
logger = getActionLogger('yunohost.migration')
|
||||||
|
@ -18,7 +18,7 @@ class MyMigration(Migration):
|
||||||
|
|
||||||
required = True
|
required = True
|
||||||
|
|
||||||
def run(self):
|
def add_new_ldap_attributes(self):
|
||||||
|
|
||||||
from yunohost.utils.ldap import _get_ldap_interface
|
from yunohost.utils.ldap import _get_ldap_interface
|
||||||
from yunohost.regenconf import regen_conf, BACKUP_CONF_DIR
|
from yunohost.regenconf import regen_conf, BACKUP_CONF_DIR
|
||||||
|
@ -61,3 +61,56 @@ class MyMigration(Migration):
|
||||||
'isProtected': ["TRUE"]
|
'isProtected': ["TRUE"]
|
||||||
})
|
})
|
||||||
app_setting(permission.split('.')[0], 'label', delete=True)
|
app_setting(permission.split('.')[0], 'label', delete=True)
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
|
||||||
|
# FIXME : what do we really want to do here ...
|
||||||
|
# Imho we should just force-regen the conf in all case, and maybe
|
||||||
|
# just display a warning if we detect that the conf was manually modified
|
||||||
|
|
||||||
|
# Check if the migration can be processed
|
||||||
|
ldap_regen_conf_status = regen_conf(names=['slapd'], dry_run=True)
|
||||||
|
# By this we check if the have been customized
|
||||||
|
if ldap_regen_conf_status and ldap_regen_conf_status['slapd']['pending']:
|
||||||
|
logger.warning(m18n.n("migration_0011_slapd_config_will_be_overwritten", conf_backup_folder=BACKUP_CONF_DIR))
|
||||||
|
|
||||||
|
# Backup LDAP and the apps settings before to do the migration
|
||||||
|
logger.info(m18n.n("migration_0011_backup_before_migration"))
|
||||||
|
try:
|
||||||
|
backup_folder = "/home/yunohost.backup/premigration/" + time.strftime('%Y%m%d-%H%M%S', time.gmtime())
|
||||||
|
os.makedirs(backup_folder, 0o750)
|
||||||
|
os.system("systemctl stop slapd")
|
||||||
|
os.system("cp -r --preserve /etc/ldap %s/ldap_config" % backup_folder)
|
||||||
|
os.system("cp -r --preserve /var/lib/ldap %s/ldap_db" % backup_folder)
|
||||||
|
os.system("cp -r --preserve /etc/yunohost/apps %s/apps_settings" % backup_folder)
|
||||||
|
except Exception as e:
|
||||||
|
raise YunohostError("migration_0011_can_not_backup_before_migration", error=e)
|
||||||
|
finally:
|
||||||
|
os.system("systemctl start slapd")
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Update LDAP schema restart slapd
|
||||||
|
logger.info(m18n.n("migration_0011_update_LDAP_schema"))
|
||||||
|
regen_conf(names=['slapd'], force=True)
|
||||||
|
|
||||||
|
# Update LDAP database
|
||||||
|
self.add_new_ldap_attributes()
|
||||||
|
|
||||||
|
app_ssowatconf()
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.warn(m18n.n("migration_0011_migration_failed_trying_to_rollback"))
|
||||||
|
os.system("systemctl stop slapd")
|
||||||
|
os.system("rm -r /etc/ldap/slapd.d") # To be sure that we don't keep some part of the old config
|
||||||
|
os.system("cp -r --preserve %s/ldap_config/. /etc/ldap/" % backup_folder)
|
||||||
|
os.system("cp -r --preserve %s/ldap_db/. /var/lib/ldap/" % backup_folder)
|
||||||
|
os.system("cp -r --preserve %s/apps_settings/. /etc/yunohost/apps/" % backup_folder)
|
||||||
|
os.system("systemctl start slapd")
|
||||||
|
os.system("rm -r " + backup_folder)
|
||||||
|
logger.info(m18n.n("migration_0011_rollback_success"))
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
os.system("rm -r " + backup_folder)
|
||||||
|
|
||||||
|
logger.info(m18n.n("migration_0011_done"))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue