diff --git a/wo/cli/plugins/info.py b/wo/cli/plugins/info.py index aec7701..5df6ef8 100644 --- a/wo/cli/plugins/info.py +++ b/wo/cli/plugins/info.py @@ -8,8 +8,8 @@ from pynginxconfig import NginxConfig from wo.core.aptget import WOAptGet from wo.core.logging import Log -from wo.core.shellexec import WOShellExec from wo.core.variables import WOVar +from wo.core.mysql import WOMysql def wo_info_hook(app): @@ -598,11 +598,7 @@ class WOInfoController(CementBaseController): self.info_php() if pargs.mysql: - if os.path.exists('/usr/bin/mariadb-admin'): - mariadb_admin = "/usr/bin/mariadb-admin" - else: - mariadb_admin = "/usr/bin/mysqladmin" - if WOShellExec.cmd_exec(self, f"{mariadb_admin} ping"): + if WOMysql.mariadb_ping(self): self.info_mysql() else: Log.info(self, "MySQL is not installed") diff --git a/wo/cli/plugins/site_functions.py b/wo/cli/plugins/site_functions.py index 33b7de5..18fe797 100644 --- a/wo/cli/plugins/site_functions.py +++ b/wo/cli/plugins/site_functions.py @@ -904,7 +904,7 @@ def site_package_check(self, stype): if stype in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']: Log.debug(self, "Setting apt_packages variable for MySQL") - if not WOShellExec.cmd_exec(self, "/usr/bin/mysqladmin ping"): + if not WOMysql.mariadb_ping(self): apt_packages = apt_packages + WOVar.wo_mysql if stype in ['wp', 'wpsubdir', 'wpsubdomain']: diff --git a/wo/cli/plugins/stack.py b/wo/cli/plugins/stack.py index 7d3ad7e..fb67ab2 100644 --- a/wo/cli/plugins/stack.py +++ b/wo/cli/plugins/stack.py @@ -208,7 +208,7 @@ class WOStackController(CementBaseController): if pargs.mysql: pargs.mysqltuner = True Log.debug(self, "Setting apt_packages variable for MySQL") - if not WOShellExec.cmd_exec(self, "mysqladmin ping"): + if not WOMysql.mariadb_ping(self): apt_packages = apt_packages + WOVar.wo_mysql else: Log.debug(self, "MySQL already installed and alive") @@ -218,7 +218,7 @@ class WOStackController(CementBaseController): if pargs.mysqlclient: Log.debug(self, "Setting apt_packages variable " "for MySQL Client") - if not WOShellExec.cmd_exec(self, "mysqladmin ping"): + if not WOMysql.mariadb_ping(self): apt_packages = apt_packages + WOVar.wo_mysql_client else: Log.debug(self, "MySQL already installed and alive") @@ -470,7 +470,7 @@ class WOStackController(CementBaseController): # UTILS if pargs.utils: - if not WOShellExec.cmd_exec(self, 'mysqladmin ping'): + if not WOMysql.mariadb_ping(self): pargs.mysql = True if not (WOAptGet.is_installed(self, 'php7.2-fpm') or WOAptGet.is_installed(self, 'php7.3-fpm') or @@ -655,7 +655,7 @@ class WOStackController(CementBaseController): if pargs.mysqlclient: Log.debug(self, "Removing apt_packages variable " "for MySQL Client") - if WOShellExec.cmd_exec(self, "mysqladmin ping"): + if WOMysql.mariadb_ping(self): apt_packages = apt_packages + WOVar.wo_mysql_client # fail2ban @@ -844,7 +844,7 @@ class WOStackController(CementBaseController): packages = packages + ["/opt/netdata"] else: Log.debug(self, "Netdata uninstaller not found") - if WOShellExec.cmd_exec(self, 'mysqladmin ping'): + if WOMysql.mariadb_ping(self): WOMysql.execute( self, "DELETE FROM mysql.user WHERE User = 'netdata';") @@ -972,7 +972,7 @@ class WOStackController(CementBaseController): # mysqlclient if pargs.mysqlclient: - if WOShellExec.cmd_exec(self, "mysqladmin ping"): + if WOMysql.mariadb_ping(self): Log.debug(self, "Add MySQL client to apt_packages list") apt_packages = apt_packages + WOVar.wo_mysql_client @@ -1145,7 +1145,7 @@ class WOStackController(CementBaseController): packages = packages + ["/opt/netdata"] else: Log.debug(self, "Netdata uninstaller not found") - if WOShellExec.cmd_exec(self, 'mysqladmin ping'): + if WOMysql.mariadb_ping(self): WOMysql.execute( self, "DELETE FROM mysql.user WHERE User = 'netdata';") diff --git a/wo/cli/plugins/stack_migrate.py b/wo/cli/plugins/stack_migrate.py index 038a86d..b514c75 100644 --- a/wo/cli/plugins/stack_migrate.py +++ b/wo/cli/plugins/stack_migrate.py @@ -34,7 +34,7 @@ class WOStackMigrateController(CementBaseController): @expose(hide=True) def migrate_mariadb(self, ci=False): - if WOShellExec.cmd_exec(self, 'mysqladmin ping'): + if WOMysql.mariadb_ping(self): # Backup all database WOMysql.backupAll(self, fulldump=True) else: @@ -111,7 +111,7 @@ class WOStackMigrateController(CementBaseController): Log.error( self, "Remote MySQL server in use, skipping local install") - if WOShellExec.cmd_exec(self, "mysqladmin ping"): + if WOMysql.mariadb_ping(self): Log.info(self, "If your database size is big, " "migration may take some time.") diff --git a/wo/cli/plugins/stack_pref.py b/wo/cli/plugins/stack_pref.py index 2c9944c..1d41192 100644 --- a/wo/cli/plugins/stack_pref.py +++ b/wo/cli/plugins/stack_pref.py @@ -1144,7 +1144,7 @@ def post_pref(self, apt_packages, packages, upgrade=False): else: wo_grant_host = 'localhost' # check if mysql credentials are available - if (WOShellExec.cmd_exec(self, "mysqladmin ping") + if (WOMysql.mariadb_ping(self) and wo_grant_host == 'localhost'): try: WOMysql.execute( diff --git a/wo/cli/plugins/stack_upgrade.py b/wo/cli/plugins/stack_upgrade.py index c65ee8e..8a633f3 100644 --- a/wo/cli/plugins/stack_upgrade.py +++ b/wo/cli/plugins/stack_upgrade.py @@ -12,6 +12,7 @@ from wo.core.logging import Log from wo.core.shellexec import WOShellExec from wo.core.variables import WOVar from wo.core.services import WOService +from wo.core.mysql import WOMysql class WOStackUpgradeController(CementBaseController): @@ -152,7 +153,7 @@ class WOStackUpgradeController(CementBaseController): # mysql if pargs.mysql: - if WOShellExec.cmd_exec(self, 'mysqladmin ping'): + if WOMysql.mariadb_ping(self): apt_packages = apt_packages + ['mariadb-server'] # redis diff --git a/wo/core/mysql.py b/wo/core/mysql.py index 1ad8d67..e202f9d 100644 --- a/wo/core/mysql.py +++ b/wo/core/mysql.py @@ -7,6 +7,7 @@ from pymysql import DatabaseError, Error, connections from wo.core.logging import Log from wo.core.variables import WOVar +from wo.core.shellexec import WOShellExec class MySQLConnectionError(Exception): @@ -161,3 +162,17 @@ class WOMysql(): except MySQLConnectionError as e: Log.debug(self, str(e)) return False + + def mariadb_ping(self): + if os.path.exists('/usr/bin/mariadb-admin'): + mariadb_admin = "/usr/bin/mariadb-admin" + elif os.path.exists('/usr/bin/mysqladmin'): + mariadb_admin = "/usr/bin/mysqladmin" + else: + Log.info(self, "MariaDB server isn't installed") + return False + if WOShellExec.cmd_exec(self, f"{mariadb_admin} ping"): + return True + else: + Log.info(self, "Unable to connect to MariaDB server") + return False