2019-09-02 04:37:13 +02:00
|
|
|
from cement.core.controller import CementBaseController, expose
|
2019-09-05 11:47:04 +02:00
|
|
|
|
2020-10-23 12:50:31 +02:00
|
|
|
from wo.cli.plugins.stack_pref import post_pref, pre_pref
|
2018-11-13 21:55:59 +01:00
|
|
|
from wo.core.aptget import WOAptGet
|
2020-10-23 12:50:31 +02:00
|
|
|
from wo.core.fileutils import WOFileUtils
|
2019-09-02 04:37:13 +02:00
|
|
|
from wo.core.logging import Log
|
|
|
|
|
from wo.core.mysql import WOMysql
|
2018-11-13 21:55:59 +01:00
|
|
|
from wo.core.shellexec import WOShellExec
|
2019-10-02 13:13:32 +02:00
|
|
|
from wo.core.variables import WOVar
|
2020-10-23 13:32:39 +02:00
|
|
|
from wo.core.fileutils import WOFileUtils
|
|
|
|
|
from wo.core.apt_repo import WORepo
|
2018-11-13 21:55:59 +01:00
|
|
|
|
|
|
|
|
class WOStackMigrateController(CementBaseController):
|
|
|
|
|
class Meta:
|
|
|
|
|
label = 'migrate'
|
|
|
|
|
stacked_on = 'stack'
|
|
|
|
|
stacked_type = 'nested'
|
|
|
|
|
description = ('Migrate stack safely')
|
|
|
|
|
arguments = [
|
|
|
|
|
(['--mariadb'],
|
2020-10-23 12:50:31 +02:00
|
|
|
dict(help="Migrate/Upgrade database to MariaDB",
|
|
|
|
|
action='store_true')),
|
|
|
|
|
(['--force'],
|
|
|
|
|
dict(help="Force Packages upgrade without any prompt",
|
2018-11-13 21:55:59 +01:00
|
|
|
action='store_true')),
|
2019-03-19 16:58:35 +01:00
|
|
|
]
|
2018-11-13 21:55:59 +01:00
|
|
|
|
|
|
|
|
@expose(hide=True)
|
|
|
|
|
def migrate_mariadb(self):
|
|
|
|
|
# Backup all database
|
2020-10-22 20:39:25 +02:00
|
|
|
WOMysql.backupAll(self, fulldump=True)
|
2018-11-13 21:55:59 +01:00
|
|
|
|
2020-10-23 13:32:39 +02:00
|
|
|
# Remove previous MariaDB repository
|
|
|
|
|
wo_mysql_old_repo = (
|
|
|
|
|
"deb [arch=amd64,ppc64el] "
|
|
|
|
|
"http://mariadb.mirrors.ovh.net/MariaDB/repo/"
|
|
|
|
|
"10.3/{distro} {codename} main"
|
|
|
|
|
.format(distro=WOVar.wo_distro,
|
|
|
|
|
codename=WOVar.wo_platform_codename))
|
|
|
|
|
if WOFileUtils.grepcheck(
|
|
|
|
|
self, '/etc/apt/sources.list.d/wo-repo.list',
|
|
|
|
|
wo_mysql_old_repo):
|
|
|
|
|
WORepo.remove(self, repo_url=wo_mysql_old_repo)
|
2018-11-13 21:55:59 +01:00
|
|
|
# Add MariaDB repo
|
|
|
|
|
Log.info(self, "Adding repository for MariaDB, please wait...")
|
2020-10-23 12:50:31 +02:00
|
|
|
pre_pref(self, WOVar.wo_mysql)
|
2018-11-13 21:55:59 +01:00
|
|
|
|
|
|
|
|
# Install MariaDB
|
|
|
|
|
|
|
|
|
|
Log.info(self, "Updating apt-cache, hang on...")
|
|
|
|
|
WOAptGet.update(self)
|
|
|
|
|
Log.info(self, "Installing MariaDB, hang on...")
|
2020-10-23 12:50:31 +02:00
|
|
|
WOAptGet.remove(self, ["mariadb-server"])
|
2018-11-13 21:55:59 +01:00
|
|
|
WOAptGet.auto_remove(self)
|
2020-10-23 12:50:31 +02:00
|
|
|
WOAptGet.install(self, WOVar.wo_mysql)
|
|
|
|
|
post_pref(self, WOVar.wo_mysql, [])
|
|
|
|
|
WOShellExec.cmd_exec(self, 'systemctl daemon-reload')
|
|
|
|
|
WOFileUtils.mvfile(
|
|
|
|
|
self, '/etc/mysql/my.cnf', '/etc/mysql/my.cnf.old')
|
|
|
|
|
WOFileUtils.create_symlink(
|
|
|
|
|
self, ['/etc/mysql/mariadb.cnf', '/etc/mysql/my.cnf'])
|
2018-11-13 21:55:59 +01:00
|
|
|
|
|
|
|
|
@expose(hide=True)
|
|
|
|
|
def default(self):
|
2020-10-23 12:50:31 +02:00
|
|
|
pargs = self.app.pargs
|
|
|
|
|
if ((not pargs.mariadb)):
|
2018-11-13 21:55:59 +01:00
|
|
|
self.app.args.print_help()
|
2020-10-23 12:50:31 +02:00
|
|
|
if pargs.mariadb:
|
2019-10-02 13:13:32 +02:00
|
|
|
if WOVar.wo_mysql_host != "localhost":
|
2019-03-19 16:58:35 +01:00
|
|
|
Log.error(
|
|
|
|
|
self, "Remote MySQL server in use, skipping local install")
|
2018-11-13 21:55:59 +01:00
|
|
|
|
2020-10-23 12:50:31 +02:00
|
|
|
if (WOShellExec.cmd_exec(self, "mysqladmin ping")):
|
2018-11-13 21:55:59 +01:00
|
|
|
|
|
|
|
|
Log.info(self, "If your database size is big, "
|
|
|
|
|
"migration may take some time.")
|
|
|
|
|
Log.info(self, "During migration non nginx-cached parts of "
|
|
|
|
|
"your site may remain down")
|
2020-10-23 12:50:31 +02:00
|
|
|
if not pargs.force:
|
|
|
|
|
start_upgrade = input("Do you want to continue:[y/N]")
|
|
|
|
|
if start_upgrade != "Y" and start_upgrade != "y":
|
|
|
|
|
Log.error(self, "Not starting package update")
|
2018-11-13 21:55:59 +01:00
|
|
|
self.migrate_mariadb()
|
|
|
|
|
else:
|
|
|
|
|
Log.error(self, "Your current MySQL is not alive or "
|
|
|
|
|
"you allready installed MariaDB")
|