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

254 lines
11 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'],
dict(help='Upgrade PHP stack', action='store_true')),
(['--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 upgrade_php56(self):
if WOVariables.wo_distro == "ubuntu":
2018-11-13 21:55:59 +01:00
if os.path.isfile("/etc/apt/sources.list.d/ondrej-php5-5_6-{0}."
"list".format(WOVariables.wo_platform_codename)):
Log.error(self, "Unable to find PHP 5.5")
else:
if not(os.path.isfile(WOVariables.wo_repo_file_path) and
WOFileUtils.grep(self, WOVariables.wo_repo_file_path,
"php55")):
Log.error(self, "Unable to find PHP 5.5")
Log.info(self, "During PHP update process non nginx-cached"
" parts of your site may remain down.")
# Check prompt
if (not self.app.pargs.no_prompt):
start_upgrade = input("Do you want to continue:[y/N]")
if start_upgrade != "Y" and start_upgrade != "y":
Log.error(self, "Not starting PHP package update")
if WOVariables.wo_distro == "ubuntu":
2018-11-13 21:55:59 +01:00
WORepo.remove(self, ppa="ppa:ondrej/php5")
WORepo.add(self, ppa=WOVariables.wo_php_repo)
Log.info(self, "Updating apt-cache, please wait...")
WOAptGet.update(self)
Log.info(self, "Installing packages, please wait ...")
2019-03-25 11:47:56 +01:00
WOAptGet.install(self, WOVariables.wo_php +
2019-03-27 12:49:17 +01:00
WOVariables.wo_php_extra)
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 = []
2018-11-30 17:04:15 +01:00
if ((not self.app.pargs.web) and (not self.app.pargs.nginx) and
2019-03-19 16:58:35 +01:00
(not self.app.pargs.php) and (not self.app.pargs.mysql) and
(not self.app.pargs.all) and (not self.app.pargs.wpcli) and
2019-07-17 03:08:03 +02:00
(not self.app.pargs.netdata) and (not self.app.pargs.composer) and
2019-07-14 22:50:34 +02:00
(not self.app.pargs.phpmyadmin) and
(not self.app.pargs.redis)):
2018-11-30 17:04:15 +01:00
self.app.pargs.web = True
if self.app.pargs.all:
self.app.pargs.web = True
if self.app.pargs.web:
if WOAptGet.is_installed(self, 'nginx-custom'):
self.app.pargs.nginx = True
else:
Log.info(self, "Nginx is not already installed")
self.app.pargs.php = True
self.app.pargs.mysql = True
self.app.pargs.wpcli = True
2019-07-13 15:53:38 +02:00
self.app.pargs.netdata = True
2018-11-30 17:04:15 +01:00
2019-03-04 07:12:57 +01:00
if self.app.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")
if self.app.pargs.php:
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")
if self.app.pargs.mysql:
if WOAptGet.is_installed(self, 'mariadb-server'):
apt_packages = apt_packages + WOVariables.wo_mysql
else:
Log.info(self, "MariaDB is not installed")
if self.app.pargs.redis:
if WOAptGet.is_installed(self, 'redis-server'):
apt_packages = apt_packages + WOVariables.wo_redis
else:
Log.info(self, "Redis is not installed")
if self.app.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-07-13 15:15:52 +02:00
if self.app.pargs.netdata:
if os.path.isdir('/opt/netdata'):
packages = packages + [['https://my-netdata.io/'
'kickstart-static64.sh',
'/var/lib/wo/tmp/kickstart.sh',
'Netdata']]
2019-07-14 22:50:34 +02:00
if self.app.pargs.phpmyadmin:
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-07-16 17:15:17 +02:00
if self.app.pargs.composer:
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
if (not self.app.pargs.no_prompt):
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)
# 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')
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):
if self.app.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-07-13 15:15:52 +02:00
if self.app.pargs.netdata:
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)
if self.app.pargs.wpcli:
WOFileUtils.chmod(self, "/usr/local/bin/wp", 0o775)
2018-11-30 17:04:15 +01:00
2019-07-13 15:15:52 +02:00
if self.app.pargs.netdata:
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
if self.app.pargs.composer:
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-07-14 22:50:34 +02:00
if self.app.pargs.phpmyadmin:
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()