harshadyeola
10 years ago
1 changed files with 371 additions and 0 deletions
@ -0,0 +1,371 @@ |
|||||
|
import os |
||||
|
import sys |
||||
|
import random |
||||
|
import shutil |
||||
|
import string |
||||
|
from ee.core.variables import EEVariables |
||||
|
from ee.core.aptget import EEAptGet |
||||
|
from ee.cli.plugins.eestack import EEStack |
||||
|
from ee.core.shellexec import EEShellExec |
||||
|
from ee.core.shellexec import CommandExecutionError |
||||
|
from ee.core.fileutils import EEFileUtils |
||||
|
from ee.core.git import EEGit |
||||
|
from ee.core.services import EEService |
||||
|
from ee.core.extract import EEExtract |
||||
|
from ee.cli.plugins.mysqlstack import EEMysqlStack |
||||
|
from ee.cli.plugins.nginxstack import EENginxStack |
||||
|
from ee.cli.plugins.phpstack import EEPhpStack |
||||
|
from ee.core.download import EEDownload |
||||
|
from ee.core.mysql import EEMysql |
||||
|
from ee.cli.main import app |
||||
|
|
||||
|
|
||||
|
class EEAdminStack(EEStack): |
||||
|
""" |
||||
|
EasyEngine Admin Tools stack |
||||
|
""" |
||||
|
packages_name = EEVariables.ee_admin |
||||
|
app = app |
||||
|
log = app.log |
||||
|
|
||||
|
def __init__(self, package_dict=None, apt_packages=None): |
||||
|
""" |
||||
|
Initialize packages list in stack |
||||
|
pkgs_name : list of packages to be intialized for operations |
||||
|
in stack |
||||
|
package_url : list of urls from where packages to be fetched |
||||
|
""" |
||||
|
self.apt_packages = apt_packages |
||||
|
self.manual_packages = package_dict |
||||
|
self.packages_name = self._get_stack() |
||||
|
super(EEAdminStack, self).__init__(self.apt_packages) |
||||
|
|
||||
|
def _get_stack(self): |
||||
|
""" |
||||
|
""" |
||||
|
if self.apt_packages or self.manual_packages: |
||||
|
if not self.apt_packages: |
||||
|
return (self.manual_packages) |
||||
|
elif not self.manual_packages: |
||||
|
return (self.apt_packages) |
||||
|
else: |
||||
|
return (self.apt_packages, self.manual_packages) |
||||
|
|
||||
|
return EEAdminStack.packages_name |
||||
|
|
||||
|
def _set_stack(self): |
||||
|
""" |
||||
|
""" |
||||
|
|
||||
|
if type(self.packages_name) is tuple: |
||||
|
for packages in self.packages_name: |
||||
|
if type(packages) is list: |
||||
|
self.apt_packages = packages |
||||
|
if type(packages) is dict: |
||||
|
self.manual_packages = packages |
||||
|
elif type(self.packages_name) is dict: |
||||
|
self.manual_packages = self.packages_name |
||||
|
|
||||
|
def _requirement_check(self): |
||||
|
""" |
||||
|
Check if requirements for this EEAdminStack stack are fullfilled. |
||||
|
""" |
||||
|
# Install NGINX stack if not installed |
||||
|
if not EENginxStack(self).is_installed(): |
||||
|
self.log.info("Installing nginxstack") |
||||
|
EENginxStack(self).install_stack() |
||||
|
|
||||
|
# Install PHP stack if not installed |
||||
|
if not EEPhpStack(self).is_installed(): |
||||
|
self.log.info("Installing phpstack") |
||||
|
EEPhpStack(self).install_stack() |
||||
|
|
||||
|
# Install MySQL stack if not installed |
||||
|
if not EEMysqlStack(self).is_installed(): |
||||
|
self.log.info("Installing mysqlstack") |
||||
|
EEMysqlStack(self).install_stack() |
||||
|
|
||||
|
def _install_phpmyadmin(self, file_path): |
||||
|
""" |
||||
|
""" |
||||
|
print("Installing phpmyadmin, please wait...") |
||||
|
# Extract phpmyadmin compressed file |
||||
|
EEExtract.extract(self, file_path, EEVariables.ee_downloads) |
||||
|
if not os.path.exists('{0}22222/htdocs/db' |
||||
|
.format(EEVariables.ee_webroot)): |
||||
|
self.log.debug("Creating new directory " |
||||
|
"{0}22222/htdocs/db" |
||||
|
.format(EEVariables.ee_webroot)) |
||||
|
os.makedirs('{0}22222/htdocs/db' |
||||
|
.format(EEVariables.ee_webroot)) |
||||
|
shutil.move('{0}phpmyadmin-STABLE/'.format(EEVariables.ee_downloads), |
||||
|
'{0}22222/htdocs/db/pma/'.format(EEVariables.ee_webroot)) |
||||
|
self.log.debug('Setting Privileges of webroot permission to ' |
||||
|
'{0}22222/htdocs/db/pma file '.format(EEVariables.ee_webroot)) |
||||
|
EEFileUtils.chown(self, '{0}22222' |
||||
|
.format(EEVariables.ee_webroot), |
||||
|
EEVariables.ee_php_user, |
||||
|
EEVariables.ee_php_user, |
||||
|
recursive=True) |
||||
|
|
||||
|
def _install_adminer(self, file_path): |
||||
|
print("Installing adminer, please wait...") |
||||
|
shutil.move(file_path, |
||||
|
'{0}22222/htdocs/db/'.format(EEVariables.ee_webroot)) |
||||
|
pass |
||||
|
|
||||
|
def _install_wpcli(self, file_path): |
||||
|
print("Installing wpcli, please wait...") |
||||
|
shutil.move(file_path, '/usr/bin/wp') |
||||
|
|
||||
|
def _install_phpmemcacheadmin(self, file_path): |
||||
|
print("Installing phpmemcacheadmin, please wait...") |
||||
|
if not os.path.exists('{0}22222/htdocs/cache/' |
||||
|
.format(EEVariables.ee_webroot)): |
||||
|
os.makedirs('{0}22222/htdocs/cache/' |
||||
|
.format(EEVariables.ee_webroot)) |
||||
|
EEExtract.extract(self, file_path, |
||||
|
'{0}22222/htdocs/cache/memcache' |
||||
|
.format(EEVariables.ee_webroot)) |
||||
|
self.log.debug("Setting Privileges to {0}22222/htdocs/cache/memcache file" |
||||
|
.format(EEVariables.ee_webroot)) |
||||
|
EEFileUtils.chown(self, '{0}22222' |
||||
|
.format(EEVariables.ee_webroot), |
||||
|
EEVariables.ee_php_user, |
||||
|
EEVariables.ee_php_user, |
||||
|
recursive=True) |
||||
|
|
||||
|
def _install_cleancache(self, file_path): |
||||
|
""" |
||||
|
""" |
||||
|
print("Installing clean php, please wait...") |
||||
|
shutil.move(file_path, "{0}22222/htdocs/cache/nginx/clean.php" |
||||
|
.format(EEVariables.ee_webroot)) |
||||
|
|
||||
|
|
||||
|
def _install_opcache(self, file_path): |
||||
|
""" |
||||
|
""" |
||||
|
print("Installing opcache, please wait...") |
||||
|
pass |
||||
|
|
||||
|
def _install_webgrind(self, file_path): |
||||
|
print("Installing webgring, please wait...") |
||||
|
self.log.debug("Extracting file webgrind.tar.gz to " |
||||
|
"location /tmp/ ") |
||||
|
EEExtract.extract(self, file_path, EEVariables.ee_downloads) |
||||
|
if not os.path.exists('{0}22222/htdocs/php' |
||||
|
.format(EEVariables.ee_webroot)): |
||||
|
self.log.debug("Creating directroy{0}22222/htdocs/php" |
||||
|
.format(EEVariables.ee_webroot)) |
||||
|
os.makedirs('{0}22222/htdocs/php' |
||||
|
.format(EEVariables.ee_webroot)) |
||||
|
shutil.move('{0}webgrind-master/'.format(EEVariables.ee_downloads), |
||||
|
'{0}22222/htdocs/php/webgrind' |
||||
|
.format(EEVariables.ee_webroot)) |
||||
|
|
||||
|
EEFileUtils.searchreplace(self, "{0}22222/htdocs/php/webgrind/" |
||||
|
"config.php" |
||||
|
.format(EEVariables.ee_webroot), |
||||
|
"/usr/local/bin/dot", "/usr/bin/dot") |
||||
|
EEFileUtils.searchreplace(self, "{0}22222/htdocs/php/webgrind/" |
||||
|
"config.php" |
||||
|
.format(EEVariables.ee_webroot), |
||||
|
"Europe/Copenhagen", |
||||
|
EEVariables.ee_timezone) |
||||
|
|
||||
|
EEFileUtils.searchreplace(self, "{0}22222/htdocs/php/webgrind/" |
||||
|
"config.php" |
||||
|
.format(EEVariables.ee_webroot), |
||||
|
"90", "100") |
||||
|
|
||||
|
self.log.debug("Setting Privileges of webroot permission to " |
||||
|
"{0}22222/htdocs/php/webgrind/ file " |
||||
|
.format(EEVariables.ee_webroot)) |
||||
|
EEFileUtils.chown(self, '{0}22222' |
||||
|
.format(EEVariables.ee_webroot), |
||||
|
EEVariables.ee_php_user, |
||||
|
EEVariables.ee_php_user, |
||||
|
recursive=True) |
||||
|
|
||||
|
def _install_ptqueryadvisor(self, file_path): |
||||
|
print("Installing ptqueryadvisor, please wait...") |
||||
|
shutil.move(file_path, '/usr/bin/pt-query-advisor') |
||||
|
EEFileUtils.chmod(self, "/usr/bin/pt-query-advisor", 0o775) |
||||
|
|
||||
|
|
||||
|
def _install_anemometer(self, file_path): |
||||
|
print("Installing anemometer, please wait...") |
||||
|
self.log.debug("Extracting file anemometer.tar.gz to " |
||||
|
"location /tmp/ ") |
||||
|
EEExtract.extract(self, file_path, EEVariables.ee_downloads) |
||||
|
if not os.path.exists('{0}22222/htdocs/db/' |
||||
|
.format(EEVariables.ee_webroot)): |
||||
|
self.log.debug("Creating directory") |
||||
|
os.makedirs('{0}22222/htdocs/db/' |
||||
|
.format(EEVariables.ee_webroot)) |
||||
|
shutil.move('{0}Anemometer-master'.format(EEVariables.ee_downloads), |
||||
|
'{0}22222/htdocs/db/anemometer' |
||||
|
.format(EEVariables.ee_webroot)) |
||||
|
chars = ''.join(random.sample(string.ascii_letters, 8)) |
||||
|
try: |
||||
|
EEShellExec.cmd_exec(self, 'mysql < {0}22222/htdocs/db' |
||||
|
'/anemometer/install.sql' |
||||
|
.format(EEVariables.ee_webroot)) |
||||
|
except CommandExecutionError as e: |
||||
|
raise SiteError("Unable to import Anemometer database") |
||||
|
|
||||
|
EEMysql.execute(self, 'grant select on *.* to \'anemometer\'' |
||||
|
'@\'{0}\''.format(self.app.config.get('mysql', |
||||
|
'grant-host'))) |
||||
|
self.log.debug("grant all on slow-query-log.*" |
||||
|
" to anemometer@root_user IDENTIFIED BY password ") |
||||
|
EEMysql.execute(self, 'grant all on slow_query_log.* to' |
||||
|
'\'anemometer\'@\'{0}\' IDENTIFIED' |
||||
|
' BY \'{1}\''.format(self.app.config.get( |
||||
|
'mysql', 'grant-host'), |
||||
|
chars), |
||||
|
errormsg="cannot grant privillages", log=False) |
||||
|
|
||||
|
# Custom Anemometer configuration |
||||
|
self.log.debug("configration Anemometer") |
||||
|
data = dict(host=EEVariables.ee_mysql_host, port='3306', |
||||
|
user='anemometer', password=chars) |
||||
|
ee_anemometer = open('{0}22222/htdocs/db/anemometer' |
||||
|
'/conf/config.inc.php' |
||||
|
.format(EEVariables.ee_webroot), |
||||
|
encoding='utf-8', mode='w') |
||||
|
self.app.render((data), 'anemometer.mustache', |
||||
|
out=ee_anemometer) |
||||
|
ee_anemometer.close() |
||||
|
pass |
||||
|
|
||||
|
def _remove_phpmyadmin(self): |
||||
|
""" |
||||
|
""" |
||||
|
EEFileUtils.remove(self, |
||||
|
['{0}22222/htdocs/db/pma/' |
||||
|
.format(EEVariables.ee_webroot)]) |
||||
|
pass |
||||
|
|
||||
|
def _remove_adminer(self): |
||||
|
""" |
||||
|
""" |
||||
|
EEFileUtils.remove(self, |
||||
|
['{0}22222/htdocs/db/adminer' |
||||
|
.format(EEVariables.ee_webroot)]) |
||||
|
pass |
||||
|
|
||||
|
def _remove_wpcli(self): |
||||
|
""" |
||||
|
""" |
||||
|
EEFileUtils.remove(self, ['/usr/bin/wp']) |
||||
|
pass |
||||
|
|
||||
|
def _remove_phpmemcacheadmin(self): |
||||
|
""" |
||||
|
""" |
||||
|
EEFileUtils.remove(self, |
||||
|
['{0}22222/htdocs/cache/memcache' |
||||
|
.format(EEVariables.ee_webroot)]) |
||||
|
pass |
||||
|
|
||||
|
def _remove_cleancache(self): |
||||
|
""" |
||||
|
""" |
||||
|
EEFileUtils.remove(self, |
||||
|
["{0}22222/htdocs/cache/nginx/clean.php" |
||||
|
.format(EEVariables.ee_webroot)]) |
||||
|
pass |
||||
|
|
||||
|
def _remove_opcache(self): |
||||
|
""" |
||||
|
""" |
||||
|
|
||||
|
pass |
||||
|
|
||||
|
def _remove_webgrind(self): |
||||
|
""" |
||||
|
""" |
||||
|
EEFileUtils.remove(self, |
||||
|
['{0}22222/htdocs/php/webgrind/' |
||||
|
.format(EEVariables.ee_webroot)]) |
||||
|
pass |
||||
|
|
||||
|
def _remove_ptqueryadvisor(self): |
||||
|
""" |
||||
|
""" |
||||
|
EEFileUtils.remove(self, ['/usr/bin/pt-query-advisor']) |
||||
|
pass |
||||
|
|
||||
|
def _remove_anemometer(self): |
||||
|
""" |
||||
|
""" |
||||
|
EEFileUtils.remove(self, |
||||
|
['{0}22222/htdocs/db/anemometer' |
||||
|
.format(EEVariables.ee_webroot)]) |
||||
|
pass |
||||
|
|
||||
|
|
||||
|
def install_stack(self): |
||||
|
""" |
||||
|
""" |
||||
|
self._set_stack() |
||||
|
self._requirement_check() |
||||
|
self.log.info("Inside Admin Stack") |
||||
|
#print("Printing final packages %s " %self.packages_name) |
||||
|
print(".....................Manusl Packages.......................") |
||||
|
print(self.manual_packages) |
||||
|
|
||||
|
print() |
||||
|
print("------------------APT Packages-----------------------") |
||||
|
print(self.apt_packages) |
||||
|
print("--------------------------------------------------------") |
||||
|
|
||||
|
if self.apt_packages: |
||||
|
super(EEAdminStack, self).install_stack() |
||||
|
if self.manual_packages: |
||||
|
for key in self.manual_packages.keys(): |
||||
|
path = EEDownload(('%s' %key), self.manual_packages[key]).download() |
||||
|
print("Evaluating function %s..." %key) |
||||
|
print("self._install_{0}(self, '{1}')".format(key, path)) |
||||
|
eval("self._install_{0}('{1}')".format(key, path)) |
||||
|
|
||||
|
def remove_stack(self): |
||||
|
""" |
||||
|
""" |
||||
|
self._set_stack() |
||||
|
print("Inside Admin Stack") |
||||
|
print("Printing final packages %s " %self.packages_name) |
||||
|
print() |
||||
|
|
||||
|
|
||||
|
print(self.manual_packages) |
||||
|
|
||||
|
if self.apt_packages: |
||||
|
super(EEAdminStack, self).remove_stack() |
||||
|
if self.manual_packages: |
||||
|
for key in self.manual_packages.keys(): |
||||
|
print("Evaluating function %s..." %key) |
||||
|
print("self._remove_{0}(self)".format(key)) |
||||
|
eval("self._remove_{0}()".format(key)) |
||||
|
|
||||
|
|
||||
|
def purge_stack(self): |
||||
|
""" |
||||
|
""" |
||||
|
self._set_stack() |
||||
|
print("Inside Admin Stack") |
||||
|
# print("Printing final packages %s " %self.packages_name) |
||||
|
#print() |
||||
|
|
||||
|
|
||||
|
#print(self.manual_packages) |
||||
|
|
||||
|
if self.apt_packages: |
||||
|
super(EEAdminStack, self).purge_stack() |
||||
|
if self.manual_packages: |
||||
|
for key in self.manual_packages.keys(): |
||||
|
print("Evaluating function %s..." %key) |
||||
|
print("self._remove_{0}(self)".format(key)) |
||||
|
eval("self._remove_{0}()".format(key)) |
Loading…
Reference in new issue