mirror of https://github.com/jumpserver/jumpserver
feat: 修改 receptor 启动参数
parent
be90bf6b28
commit
bc76ce50e1
|
@ -17,7 +17,6 @@ class Services(TextChoices):
|
||||||
web = 'web', 'web'
|
web = 'web', 'web'
|
||||||
celery = 'celery', 'celery'
|
celery = 'celery', 'celery'
|
||||||
task = 'task', 'task'
|
task = 'task', 'task'
|
||||||
receptor = 'receptor', 'receptor'
|
|
||||||
all = 'all', 'all'
|
all = 'all', 'all'
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -29,7 +28,6 @@ class Services(TextChoices):
|
||||||
cls.celery_default: services.CeleryDefaultService,
|
cls.celery_default: services.CeleryDefaultService,
|
||||||
cls.celery_ansible: services.CeleryAnsibleService,
|
cls.celery_ansible: services.CeleryAnsibleService,
|
||||||
cls.beat: services.BeatService,
|
cls.beat: services.BeatService,
|
||||||
cls.receptor: services.ReceptorService
|
|
||||||
}
|
}
|
||||||
return services_map.get(name)
|
return services_map.get(name)
|
||||||
|
|
||||||
|
@ -45,13 +43,9 @@ class Services(TextChoices):
|
||||||
def task_services(cls):
|
def task_services(cls):
|
||||||
return cls.celery_services() + [cls.beat]
|
return cls.celery_services() + [cls.beat]
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def receptor_services(cls):
|
|
||||||
return [cls.receptor]
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def all_services(cls):
|
def all_services(cls):
|
||||||
return cls.web_services() + cls.task_services() + cls.receptor_services()
|
return cls.web_services() + cls.task_services()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def export_services_values(cls):
|
def export_services_values(cls):
|
||||||
|
|
|
@ -3,4 +3,3 @@ from .celery_ansible import *
|
||||||
from .celery_default import *
|
from .celery_default import *
|
||||||
from .flower import *
|
from .flower import *
|
||||||
from .gunicorn import *
|
from .gunicorn import *
|
||||||
from .receptor import *
|
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
from .base import BaseService
|
|
||||||
from ..hands import *
|
|
||||||
|
|
||||||
__all__ = ['ReceptorService']
|
|
||||||
|
|
||||||
ANSIBLE_RUNNER_COMMAND = "ansible-runner"
|
|
||||||
|
|
||||||
|
|
||||||
class ReceptorService(BaseService):
|
|
||||||
@property
|
|
||||||
def cmd(self):
|
|
||||||
print("\n- Start Receptor as Ansible Runner Sandbox")
|
|
||||||
|
|
||||||
cmd = [
|
|
||||||
'receptor',
|
|
||||||
'--local-only',
|
|
||||||
'--node', 'id=primary',
|
|
||||||
'--control-service',
|
|
||||||
'service=control',
|
|
||||||
'filename=/opt/jumpserver/data/share/control.sock',
|
|
||||||
'--work-command',
|
|
||||||
'worktype={}'.format(ANSIBLE_RUNNER_COMMAND),
|
|
||||||
'command={}'.format(ANSIBLE_RUNNER_COMMAND),
|
|
||||||
'params=worker',
|
|
||||||
'allowruntimeparams=true'
|
|
||||||
]
|
|
||||||
|
|
||||||
return cmd
|
|
||||||
|
|
||||||
@property
|
|
||||||
def cwd(self):
|
|
||||||
return APPS_DIR
|
|
|
@ -19,6 +19,8 @@ if [[ "$action" == "bash" || "$action" == "sh" ]];then
|
||||||
elif [[ "$action" == "sleep" ]];then
|
elif [[ "$action" == "sleep" ]];then
|
||||||
echo "Sleep 365 days"
|
echo "Sleep 365 days"
|
||||||
sleep 365d
|
sleep 365d
|
||||||
|
elif [[ "$service" == "receptor" ]];then
|
||||||
|
python receptor "$action"
|
||||||
else
|
else
|
||||||
python jms "${action}" "${service}"
|
python jms "$action" "$service"
|
||||||
fi
|
fi
|
|
@ -0,0 +1,108 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import subprocess
|
||||||
|
import os
|
||||||
|
import signal
|
||||||
|
|
||||||
|
ANSIBLE_RUNNER_COMMAND = "ansible-runner"
|
||||||
|
DEFAULT_CONTROL_SOCK_PATH = "/opt/jumpserver/data/share/control.sock"
|
||||||
|
|
||||||
|
|
||||||
|
class ReceptorService:
|
||||||
|
def __init__(self):
|
||||||
|
self.pid_file = "tmp/receptor.pid"
|
||||||
|
self.receptor_command = [
|
||||||
|
'receptor',
|
||||||
|
'--local-only',
|
||||||
|
'--node', 'id=primary',
|
||||||
|
'--control-service',
|
||||||
|
'service=control',
|
||||||
|
'filename={}'.format(DEFAULT_CONTROL_SOCK_PATH),
|
||||||
|
'--work-command',
|
||||||
|
'worktype={}'.format(ANSIBLE_RUNNER_COMMAND),
|
||||||
|
'command={}'.format(ANSIBLE_RUNNER_COMMAND),
|
||||||
|
'params=worker',
|
||||||
|
'allowruntimeparams=true'
|
||||||
|
]
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
if os.path.exists(self.pid_file):
|
||||||
|
with open(self.pid_file, 'r') as f:
|
||||||
|
pid_str = f.read()
|
||||||
|
try:
|
||||||
|
pid = int(pid_str)
|
||||||
|
os.kill(pid, 0)
|
||||||
|
print("\n- Receptor service is already running.")
|
||||||
|
return
|
||||||
|
except ProcessLookupError:
|
||||||
|
print("\n- PID file exists but process does not, starting Receptor...")
|
||||||
|
except ValueError:
|
||||||
|
print("\n- PID file is corrupted, starting Receptor...")
|
||||||
|
os.remove(self.pid_file)
|
||||||
|
|
||||||
|
process = subprocess.Popen(self.receptor_command)
|
||||||
|
with open(self.pid_file, 'w') as f:
|
||||||
|
f.write(str(process.pid))
|
||||||
|
print("\n- Receptor service started successfully.")
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
if not os.path.exists(self.pid_file):
|
||||||
|
print("\n- Receptor service is not running.")
|
||||||
|
return
|
||||||
|
with open(self.pid_file, 'r') as f:
|
||||||
|
pid = int(f.read())
|
||||||
|
try:
|
||||||
|
os.kill(pid, signal.SIGTERM)
|
||||||
|
os.remove(self.pid_file)
|
||||||
|
print("\n- Receptor service stopped successfully.")
|
||||||
|
except ProcessLookupError:
|
||||||
|
print("\n- Failed to stop Receptor service: Process does not exist.")
|
||||||
|
os.remove(self.pid_file)
|
||||||
|
|
||||||
|
def restart(self):
|
||||||
|
self.stop()
|
||||||
|
self.start()
|
||||||
|
|
||||||
|
def status(self):
|
||||||
|
if os.path.exists(self.pid_file):
|
||||||
|
with open(self.pid_file, 'r') as f:
|
||||||
|
pid_str = f.read()
|
||||||
|
try:
|
||||||
|
pid = int(pid_str)
|
||||||
|
os.kill(pid, 0)
|
||||||
|
print("\n- Receptor service is running.")
|
||||||
|
return
|
||||||
|
except ProcessLookupError:
|
||||||
|
print("\n- Receptor service is not running.")
|
||||||
|
else:
|
||||||
|
print("\n- Receptor service is not running.")
|
||||||
|
|
||||||
|
|
||||||
|
def handle_receptor_action(action):
|
||||||
|
srv = ReceptorService()
|
||||||
|
if action == "start":
|
||||||
|
srv.start()
|
||||||
|
elif action == 'stop':
|
||||||
|
srv.stop()
|
||||||
|
elif action == "restart":
|
||||||
|
srv.restart()
|
||||||
|
elif action == "status":
|
||||||
|
srv.status()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="""
|
||||||
|
Jumpserver receptor service control tools;
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'action', type=str,
|
||||||
|
choices=("start", "stop", "restart", "status"),
|
||||||
|
help="Action to run"
|
||||||
|
)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
handle_receptor_action(args.action)
|
Loading…
Reference in New Issue