2
0
mirror of https://github.com/frappe/frappe_docker.git synced 2024-11-12 16:26:35 +00:00

fix: use subprocess instead of os to run commands

* add a wrapper method run_command
* remove os.system calls
* use f-strings for commands

Signed-off-by: Chinmay D. Pai <chinmaydpai@gmail.com>
This commit is contained in:
Chinmay D. Pai 2020-07-09 17:01:50 +05:30
parent f97c276871
commit 2b2a57a85d
No known key found for this signature in database
GPG Key ID: 75507BE256F40CED
2 changed files with 43 additions and 77 deletions

View File

@ -5,6 +5,7 @@ import semantic_version
from frappe.commands.site import _new_site
from frappe.installer import update_site_config
from check_connection import get_config, get_site_config, COMMON_SITE_CONFIG_FILE
from restore_backup import run_command
def get_password(env_var, default=None):
@ -91,31 +92,22 @@ def main():
if db_type == "mariadb":
site_config = get_site_config(site_name)
db_name = site_config.get('db_name')
db_password = site_config.get('db_password')
mysql_command = 'mysql -h{db_host} -u{mariadb_root_username} -p{mariadb_root_password} -e '.format(
db_host=config.get('db_host'),
mariadb_root_username=mariadb_root_username,
mariadb_root_password=mariadb_root_password
)
mysql_command = ["mysql", f"-h{db_host}", f"-u{mariadb_root_username}", f"-p{mariadb_root_password}", "-e"]
# update User's host to '%' required to connect from any container
command = mysql_command + "\"UPDATE mysql.user SET Host = '%' where User = '{db_name}'; FLUSH PRIVILEGES;\"".format(
db_name=site_config.get('db_name')
)
os.system(command)
command = mysql_command + [f"\"UPDATE mysql.user SET Host = '%' where User = '{db_name}'; FLUSH PRIVILEGES;\""]
run_command(command)
# Set db password
command = mysql_command + "\"ALTER USER '{db_name}'@'%' IDENTIFIED BY '{db_password}'; FLUSH PRIVILEGES;\"".format(
db_name=site_config.get('db_name'),
db_password=site_config.get('db_password')
)
os.system(command)
command = mysql_command + [f"\"ALTER USER '{db_name}'@'%' IDENTIFIED BY '{db_password}'; FLUSH PRIVILEGES;\""]
run_command(command)
# Grant permission to database
command = mysql_command + "\"GRANT ALL PRIVILEGES ON \`{db_name}\`.* TO '{db_name}'@'%'; FLUSH PRIVILEGES;\"".format(
db_name=site_config.get('db_name')
)
os.system(command)
command = mysql_command + [f"\"GRANT ALL PRIVILEGES ON \`{db_name}\`.* TO '{db_name}'@'%'; FLUSH PRIVILEGES;\""]
run_command(command)
if frappe.redis_server:
frappe.redis_server.connection_pool.disconnect()

View File

@ -1,6 +1,7 @@
import os
import datetime
import json
import subprocess
import tarfile
import hashlib
import frappe
@ -13,6 +14,16 @@ from frappe.installer import make_conf, get_conf_params, make_site_dirs, update_
from check_connection import get_site_config, get_config, COMMON_SITE_CONFIG_FILE
def run_command(command):
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, error = process.communicate()
if process.returncode:
print("Something went wrong:")
print(f"error code: {process.returncode}")
print(f"stdout:\n{out}")
print(f"\nstderr:\n{error}")
def list_directories(path):
directories = []
for name in os.listdir(path):
@ -30,13 +41,10 @@ def get_backup_dir():
def decompress_db(files_base, site):
database_file = files_base + '-database.sql.gz'
command = 'gunzip -c {database_file} > {database_extract}'.format(
database_file=database_file,
database_extract=database_file.replace('.gz', '')
)
command = ["gunzip", "-c", database_file, ">", database_file.replace(".gz", "")]
print('Extract Database GZip for site {}'.format(site))
os.system(command)
run_command(command)
def restore_database(files_base, site_config_path, site):
@ -203,28 +211,15 @@ def restore_postgres(config, site_config, database_file):
db_name = site_config.get('db_name')
db_password = site_config.get('db_password')
psql_command = "psql postgres://{root_login}:{root_password}@{db_host}:{db_port}".format(
root_login=db_root_user,
root_password=db_root_password,
db_host=db_host,
db_port=db_port
)
psql_command = ["psql", f"postgres://{db_root_user}:{db_root_password}@{db_host}:{db_port}"]
print('Restoring PostgreSQL')
os.system(psql_command + ' -c "DROP DATABASE IF EXISTS \"{db_name}\""'.format(db_name=db_name))
os.system(psql_command + ' -c "DROP USER IF EXISTS {db_name}"'.format(db_name=db_name))
os.system(psql_command + ' -c "CREATE DATABASE \"{db_name}\""'.format(db_name=db_name))
os.system(psql_command + ' -c "CREATE user {db_name} password \'{db_password}\'"'.format(
db_name=db_name,
db_password=db_password))
os.system(psql_command + ' -c "GRANT ALL PRIVILEGES ON DATABASE \"{db_name}\" TO {db_name}"'.format(
db_name=db_name))
os.system("{psql_command}/{db_name} < {database_file}".format(
psql_command=psql_command,
database_file=database_file.replace('.gz', ''),
db_name=db_name,
))
run_command(psql_command + ["-c", f"\"DROP DATABASE IF EXISTS \"{db_name}\"\""])
run_command(psql_command + ["-c", f"\"DROP USER IF EXISTS {db_name}\""])
run_command(psql_command + ["-c ", f"\"CREATE DATABASE \"{db_name}\"\""])
run_command(psql_command + ["-c", f"\"CREATE user {db_name} password '{db_password}'\""])
run_command(psql_command + ["-c", f"\"GRANT ALL PRIVILEGES ON DATABASE \"{db_name}\" TO {db_name}\""])
run_command([f"{psql_command}/{db_name}", "<", database_file.replace('.gz', '')])
def restore_mariadb(config, site_config, database_file):
@ -237,53 +232,32 @@ def restore_mariadb(config, site_config, database_file):
db_host = site_config.get('db_host', config.get('db_host'))
db_port = site_config.get('db_port', config.get('db_port'))
db_name = site_config.get('db_name')
db_password = site_config.get('db_password')
# mysql command prefix
mysql_command = 'mysql -u{db_root_user} -h{db_host} -p{db_password}'.format(
db_root_user=db_root_user,
db_host=db_host,
db_port=db_port,
db_password=db_root_password
)
mysql_command = ["mysql", f"-u{db_root_user}", f"-h{db_host}", f"-p{db_root_password}", f"-P{db_port}"]
# drop db if exists for clean restore
drop_database = "{mysql_command} -e \"DROP DATABASE IF EXISTS \`{db_name}\`;\"".format(
mysql_command=mysql_command,
db_name=site_config.get('db_name'),
)
os.system(drop_database)
drop_database = mysql_command + ["-e", f"\"DROP DATABASE IF EXISTS \`{db_name}\`;\""]
run_command(drop_database)
# create db
create_database = "{mysql_command} -e \"CREATE DATABASE IF NOT EXISTS \`{db_name}\`;\"".format(
mysql_command=mysql_command,
db_name=site_config.get('db_name'),
)
os.system(create_database)
create_database = mysql_command + ["-e", f"\"CREATE DATABASE IF NOT EXISTS \`{db_name}\`;\""]
run_command(create_database)
# create user
create_user = "{mysql_command} -e \"CREATE USER IF NOT EXISTS \'{db_name}\'@\'%\' IDENTIFIED BY \'{db_password}\'; FLUSH PRIVILEGES;\"".format(
mysql_command=mysql_command,
db_name=site_config.get('db_name'),
db_password=site_config.get('db_password'),
)
os.system(create_user)
create_user = mysql_command + ["-e", f"\"CREATE USER IF NOT EXISTS \'{db_name}\'@\'%\' IDENTIFIED BY \'{db_password}\'; FLUSH PRIVILEGES;\""]
run_command(create_user)
# grant db privileges to user
grant_privileges = "{mysql_command} -e \"GRANT ALL PRIVILEGES ON \`{db_name}\`.* TO '{db_name}'@'%' IDENTIFIED BY '{db_password}'; FLUSH PRIVILEGES;\"".format(
mysql_command=mysql_command,
db_name=site_config.get('db_name'),
db_password=site_config.get('db_password'),
)
os.system(grant_privileges)
grant_privileges = mysql_command + ["-e", f"\"GRANT ALL PRIVILEGES ON \`{db_name}\`.* TO '{db_name}'@'%' IDENTIFIED BY '{db_password}'; FLUSH PRIVILEGES;\""]
run_command(grant_privileges)
command = "{mysql_command} '{db_name}' < {database_file}".format(
mysql_command=mysql_command,
db_name=site_config.get('db_name'),
database_file=database_file.replace('.gz', ''),
)
command = mysql_command + [f"'{db_name}'", "<", database_file.replace(".gz", "")]
print('Restoring MariaDB')
os.system(command)
run_command(command)
def main():