Browse Source

feat: 修改 receptor 启动参数

pull/12966/head
Aaron3S 8 months ago committed by Bryan
parent
commit
bc76ce50e1
  1. 8
      apps/common/management/commands/services/command.py
  2. 1
      apps/common/management/commands/services/services/__init__.py
  3. 32
      apps/common/management/commands/services/services/receptor.py
  4. 4
      entrypoint.sh
  5. 108
      receptor

8
apps/common/management/commands/services/command.py

@ -17,7 +17,6 @@ class Services(TextChoices):
web = 'web', 'web'
celery = 'celery', 'celery'
task = 'task', 'task'
receptor = 'receptor', 'receptor'
all = 'all', 'all'
@classmethod
@ -29,7 +28,6 @@ class Services(TextChoices):
cls.celery_default: services.CeleryDefaultService,
cls.celery_ansible: services.CeleryAnsibleService,
cls.beat: services.BeatService,
cls.receptor: services.ReceptorService
}
return services_map.get(name)
@ -45,13 +43,9 @@ class Services(TextChoices):
def task_services(cls):
return cls.celery_services() + [cls.beat]
@classmethod
def receptor_services(cls):
return [cls.receptor]
@classmethod
def all_services(cls):
return cls.web_services() + cls.task_services() + cls.receptor_services()
return cls.web_services() + cls.task_services()
@classmethod
def export_services_values(cls):

1
apps/common/management/commands/services/services/__init__.py

@ -3,4 +3,3 @@ from .celery_ansible import *
from .celery_default import *
from .flower import *
from .gunicorn import *
from .receptor import *

32
apps/common/management/commands/services/services/receptor.py

@ -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

4
entrypoint.sh

@ -19,6 +19,8 @@ if [[ "$action" == "bash" || "$action" == "sh" ]];then
elif [[ "$action" == "sleep" ]];then
echo "Sleep 365 days"
sleep 365d
elif [[ "$service" == "receptor" ]];then
python receptor "$action"
else
python jms "${action}" "${service}"
python jms "$action" "$service"
fi

108
receptor

@ -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…
Cancel
Save