Files
WPIQ/wo/cli/plugins/stack_upgrade.py

244 lines
10 KiB
Python
Raw Normal View History

import os
import shutil
from cement.core.controller import CementBaseController, expose
2019-08-05 04:56:33 +02:00
from cement.core import handler, hook
2018-11-13 21:55:59 +01:00
from wo.core.apt_repo import WORepo
from wo.core.aptget import WOAptGet
from wo.core.download import WODownload
from wo.core.extract import WOExtract
2018-11-13 21:55:59 +01:00
from wo.core.fileutils import WOFileUtils
from wo.core.logging import Log
from wo.core.services import WOService
2018-11-13 21:55:59 +01:00
from wo.core.shellexec import WOShellExec
from wo.core.variables import WOVariables
2019-08-05 04:56:33 +02:00
from wo.cli.plugins.stack_pref import post_pref
2018-11-13 21:55:59 +01:00
class WOStackUpgradeController(CementBaseController):
class Meta:
label = 'upgrade'
stacked_on = 'stack'
stacked_type = 'nested'
description = ('Upgrade stack safely')
arguments = [
(['--all'],
dict(help='Upgrade all stack', action='store_true')),
(['--web'],
dict(help='Upgrade web stack', action='store_true')),
(['--admin'],
dict(help='Upgrade admin tools stack', action='store_true')),
(['--nginx'],
dict(help='Upgrade Nginx stack', action='store_true')),
(['--php'],
2019-08-05 12:38:50 +02:00
dict(help='Upgrade PHP 7.2 stack', action='store_true')),
(['--php73'],
dict(help='Upgrade PHP 7.3 stack', action='store_true')),
2018-11-13 21:55:59 +01:00
(['--mysql'],
dict(help='Upgrade MySQL stack', action='store_true')),
(['--wpcli'],
dict(help='Upgrade WPCLI', action='store_true')),
(['--redis'],
dict(help='Upgrade Redis', action='store_true')),
2019-07-13 15:15:52 +02:00
(['--netdata'],
dict(help='Upgrade Netdata', action='store_true')),
2019-07-17 03:08:03 +02:00
(['--composer'],
dict(help='Upgrade Composer', action='store_true')),
2019-07-14 22:50:34 +02:00
(['--phpmyadmin'],
dict(help='Upgrade phpMyAdmin', action='store_true')),
2018-11-13 21:55:59 +01:00
(['--no-prompt'],
dict(help="Upgrade Packages without any prompt",
action='store_true')),
2019-03-19 16:58:35 +01:00
]
2018-11-13 21:55:59 +01:00
@expose(hide=True)
def default(self):
# All package update
2018-11-30 17:04:15 +01:00
apt_packages = []
packages = []
empty_packages = []
2019-08-07 02:45:26 +02:00
pargs = pargs = self.app.pargs
2018-11-30 17:04:15 +01:00
2019-08-07 02:45:26 +02:00
if ((not pargs.web) and (not pargs.nginx) and
(not pargs.php) and (not pargs.php73) and
(not pargs.mysql) and
(not pargs.all) and (not pargs.wpcli) and
(not pargs.netdata) and (not pargs.composer) and
(not pargs.phpmyadmin) and
(not pargs.redis)):
pargs.web = True
2018-11-30 17:04:15 +01:00
2019-08-07 02:45:26 +02:00
if pargs.all:
pargs.web = True
2018-11-30 17:04:15 +01:00
2019-08-07 02:45:26 +02:00
if pargs.web:
2018-11-30 17:04:15 +01:00
if WOAptGet.is_installed(self, 'nginx-custom'):
2019-08-07 02:45:26 +02:00
pargs.nginx = True
2018-11-30 17:04:15 +01:00
else:
Log.info(self, "Nginx is not already installed")
2019-08-07 02:45:26 +02:00
pargs.php = True
pargs.mysql = True
pargs.wpcli = True
2018-11-30 17:04:15 +01:00
2019-08-07 02:45:26 +02:00
if pargs.nginx:
2018-11-30 17:04:15 +01:00
if WOAptGet.is_installed(self, 'nginx-custom'):
apt_packages = apt_packages + WOVariables.wo_nginx
else:
Log.info(self, "Nginx Stable is not already installed")
2019-08-07 02:45:26 +02:00
if pargs.php:
2018-11-30 17:04:15 +01:00
if WOAptGet.is_installed(self, 'php7.2-fpm'):
2019-03-27 12:49:17 +01:00
if not WOAptGet.is_installed(self, 'php7.3-fpm'):
2019-04-29 02:06:32 +02:00
apt_packages = apt_packages + WOVariables.wo_php + \
WOVariables.wo_php_extra
2019-03-27 12:49:17 +01:00
else:
apt_packages = apt_packages + WOVariables.wo_php
2018-11-30 17:04:15 +01:00
else:
Log.info(self, "PHP 7.2 is not installed")
2019-08-07 02:45:26 +02:00
if pargs.php73:
2019-08-05 12:38:50 +02:00
if WOAptGet.is_installed(self, 'php7.3-fpm'):
if not WOAptGet.is_installed(self, 'php7.2-fpm'):
apt_packages = apt_packages + WOVariables.wo_php73 + \
WOVariables.wo_php_extra
else:
apt_packages = apt_packages + WOVariables.wo_php73
else:
Log.info(self, "PHP 7.3 is not installed")
2019-08-07 02:45:26 +02:00
if pargs.mysql:
2018-11-30 17:04:15 +01:00
if WOAptGet.is_installed(self, 'mariadb-server'):
apt_packages = apt_packages + WOVariables.wo_mysql
else:
Log.info(self, "MariaDB is not installed")
2019-08-07 02:45:26 +02:00
if pargs.redis:
2018-11-30 17:04:15 +01:00
if WOAptGet.is_installed(self, 'redis-server'):
apt_packages = apt_packages + WOVariables.wo_redis
else:
Log.info(self, "Redis is not installed")
2019-08-07 02:45:26 +02:00
if pargs.wpcli:
2019-03-04 07:12:57 +01:00
if os.path.isfile('/usr/local/bin/wp'):
2018-11-30 17:04:15 +01:00
packages = packages + [["https://github.com/wp-cli/wp-cli/"
"releases/download/v{0}/"
"wp-cli-{0}.phar"
"".format(WOVariables.wo_wp_cli),
2019-03-04 07:12:57 +01:00
"/usr/local/bin/wp",
2018-11-30 17:04:15 +01:00
"WP-CLI"]]
else:
Log.info(self, "WPCLI is not installed with WordOps")
2019-08-07 02:45:26 +02:00
if pargs.netdata:
2019-07-13 15:15:52 +02:00
if os.path.isdir('/opt/netdata'):
packages = packages + [['https://my-netdata.io/'
'kickstart-static64.sh',
'/var/lib/wo/tmp/kickstart.sh',
'Netdata']]
2019-08-07 02:45:26 +02:00
if pargs.phpmyadmin:
2019-07-14 22:50:34 +02:00
if os.path.isdir('/var/www/22222/htdocs/db/pma'):
packages = packages + \
[["https://files.phpmyadmin.net"
"/phpMyAdmin/{0}/"
"phpMyAdmin-{0}-"
"all-languages"
2019-07-24 11:03:50 +02:00
".tar.gz".format(WOVariables.wo_phpmyadmin),
2019-07-14 22:50:34 +02:00
"/var/lib/wo/tmp/pma.tar.gz",
"PHPMyAdmin"]]
else:
Log.error(self, "phpMyAdmin isn't installed")
2019-07-13 15:15:52 +02:00
2019-08-07 02:45:26 +02:00
if pargs.composer:
2019-07-16 17:15:17 +02:00
if os.path.isfile('/usr/local/bin/composer'):
packages = packages + [["https://getcomposer.org/installer",
"/var/lib/wo/tmp/composer-install",
"Composer"]]
else:
Log.error(self, "Composer isn't installed")
2018-11-30 17:04:15 +01:00
if len(packages) or len(apt_packages):
Log.info(self, "During package update process non nginx-cached"
" parts of your site may remain down")
# Check prompt
2019-08-07 02:45:26 +02:00
if (not pargs.no_prompt):
2018-11-30 17:04:15 +01:00
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")
Log.info(self, "Updating packages, please wait...")
if len(apt_packages):
# apt-get update
WOAptGet.update(self)
2019-08-05 12:32:07 +02:00
if set(WOVariables.wo_php).issubset(set(apt_packages)):
2019-08-05 13:11:24 +02:00
WOAptGet.remove(self, ['php7.2-fpm'],
auto=False, purge=True)
2019-08-05 12:38:50 +02:00
if set(WOVariables.wo_php73).issubset(set(apt_packages)):
2019-08-05 13:11:24 +02:00
WOAptGet.remove(self, ['php7.3-fpm'],
auto=False, purge=True)
2019-08-05 12:50:12 +02:00
# Update packages
WOAptGet.install(self, apt_packages)
2019-08-05 04:56:33 +02:00
post_pref(self, apt_packages, empty_packages)
2018-11-30 17:04:15 +01:00
# Post Actions after package updates
if (set(WOVariables.wo_nginx).issubset(set(apt_packages))):
WOService.restart_service(self, 'nginx')
if set(WOVariables.wo_php).issubset(set(apt_packages)):
WOService.restart_service(self, 'php7.2-fpm')
2019-08-05 12:38:50 +02:00
if set(WOVariables.wo_php73).issubset(set(apt_packages)):
WOService.restart_service(self, 'php7.3-fpm')
2018-11-30 17:04:15 +01:00
if set(WOVariables.wo_mysql).issubset(set(apt_packages)):
WOService.restart_service(self, 'mysql')
if set(WOVariables.wo_redis).issubset(set(apt_packages)):
WOService.restart_service(self, 'redis-server')
if len(packages):
2019-08-07 02:45:26 +02:00
if pargs.wpcli:
2019-03-04 07:12:57 +01:00
WOFileUtils.remove(self, ['/usr/local/bin/wp'])
2018-11-30 17:04:15 +01:00
2019-08-07 02:45:26 +02:00
if pargs.netdata:
2019-07-13 15:15:52 +02:00
WOFileUtils.remove(self, ['/var/lib/wo/tmp/kickstart.sh'])
2018-11-30 17:04:15 +01:00
Log.debug(self, "Downloading following: {0}".format(packages))
WODownload.download(self, packages)
2019-08-07 02:45:26 +02:00
if pargs.wpcli:
WOFileUtils.chmod(self, "/usr/local/bin/wp", 0o775)
2018-11-30 17:04:15 +01:00
2019-08-07 02:45:26 +02:00
if pargs.netdata:
2019-07-13 15:15:52 +02:00
Log.info(self, "Upgrading Netdata, please wait...")
WOShellExec.cmd_exec(self, "/bin/bash /var/lib/wo/tmp/"
"kickstart.sh "
"--dont-wait")
2019-07-16 17:15:17 +02:00
2019-08-07 02:45:26 +02:00
if pargs.composer:
2019-07-16 17:15:17 +02:00
Log.info(self, "Upgrading Composer, please wait...")
WOShellExec.cmd_exec(self, "php -q /var/lib/wo"
"/tmp/composer-install "
"--install-dir=/var/lib/wo/tmp/")
shutil.copyfile('/var/lib/wo/tmp/composer.phar',
'/usr/local/bin/composer')
WOFileUtils.chmod(self, "/usr/local/bin/composer", 0o775)
2019-08-07 02:45:26 +02:00
if pargs.phpmyadmin:
2019-07-14 22:50:34 +02:00
Log.info(self, "Upgrading phpMyAdmin, please wait...")
WOExtract.extract(self, '/var/lib/wo/tmp/pma.tar.gz',
'/var/lib/wo/tmp/')
shutil.copyfile(('{0}22222/htdocs/db/pma'
'/config.inc.php'
.format(WOVariables.wo_webroot)),
('/var/lib/wo/tmp/phpMyAdmin-{0}'
'-all-languages/config.inc.php'
.format(WOVariables.wo_phpmyadmin))
2019-07-14 22:50:34 +02:00
)
2019-07-24 13:31:13 +02:00
WOFileUtils.rm(self, '{0}22222/htdocs/db/pma'
.format(WOVariables.wo_webroot))
2019-07-14 22:50:34 +02:00
shutil.move('/var/lib/wo/tmp/phpMyAdmin-{0}'
'-all-languages/'
.format(WOVariables.wo_phpmyadmin),
'{0}22222/htdocs/db/pma/'
.format(WOVariables.wo_webroot))
2019-07-13 15:15:52 +02:00
2018-11-30 17:04:15 +01:00
Log.info(self, "Successfully updated packages")
2018-11-13 21:55:59 +01:00
else:
self.app.args.print_help()