|
- # imports - standard imports
- import getpass
- import os
- import subprocess
-
- # imports - module imports
- from bench.cli import change_uid_msg
- from bench.config.production_setup import get_supervisor_confdir, is_centos7, service
- from bench.config.common_site_config import get_config
- from bench.utils import exec_cmd, get_bench_name, get_cmd_output
-
-
- def is_sudoers_set():
- """Check if bench sudoers is set"""
- cmd = ["sudo", "-n", "bench"]
- bench_warn = False
-
- with open(os.devnull, "wb") as f:
- return_code_check = not subprocess.call(cmd, stdout=f)
-
- if return_code_check:
- try:
- bench_warn = change_uid_msg in get_cmd_output(cmd, _raise=False)
- except subprocess.CalledProcessError:
- bench_warn = False
- finally:
- return_code_check = return_code_check and bench_warn
-
- return return_code_check
-
-
- def is_production_set(bench_path):
- """Check if production is set for current bench"""
- production_setup = False
- bench_name = get_bench_name(bench_path)
-
- supervisor_conf_extn = "ini" if is_centos7() else "conf"
- supervisor_conf_file_name = f"{bench_name}.{supervisor_conf_extn}"
- supervisor_conf = os.path.join(get_supervisor_confdir(), supervisor_conf_file_name)
-
- if os.path.exists(supervisor_conf):
- production_setup = production_setup or True
-
- nginx_conf = f"/etc/nginx/conf.d/{bench_name}.conf"
-
- if os.path.exists(nginx_conf):
- production_setup = production_setup or True
-
- return production_setup
-
-
- def execute(bench_path):
- """This patch checks if bench sudoers is set and regenerate supervisor and sudoers files"""
- user = get_config(".").get("xhiveframework_user") or getpass.getuser()
-
- if is_sudoers_set():
- if is_production_set(bench_path):
- exec_cmd(f"sudo bench setup supervisor --yes --user {user}")
- service("supervisord", "restart")
-
- exec_cmd(f"sudo bench setup sudoers {user}")
|