diff --git a/jcloud/api/aliyun_server_light.py b/jcloud/api/aliyun_server_light.py index 3f20458..dfa9a8d 100644 --- a/jcloud/api/aliyun_server_light.py +++ b/jcloud/api/aliyun_server_light.py @@ -1886,146 +1886,25 @@ def get_jingrow_firewall_rules(**data): return {"success": False, "message": f"防火墙规则查询失败: {str(e)}"} @jingrow.whitelist() -def execute_jsite_task(instance_id, region_id, mode='deploy', **kwargs): - """在实例上执行Jsite任务 - - Args: - instance_id: 实例ID - region_id: 地域ID - mode: 任务模式,默认为'deploy' - **kwargs: 包含以下参数: - 必需参数: - - site_name: 项目名称 - - 可选参数: - - git_repo: Git仓库地址 - - site_url: 网站URL - - revalidate_token: 重新验证令牌 - - backend_server_url: 后端服务器URL - - backend_api_key: 后端API密钥 - - backend_api_secret: 后端API密钥 - - node_version: Node.js版本 - - start_port: 起始端口 - - port_increment: 端口增量 - - skip_docker: 跳过Docker安装 - - skip_traefik: 跳过Traefik安装 - - skip_dependencies: 跳过依赖安装 - - skip_pm2: 跳过PM2安装 - - force_update: 强制更新所有文件 - - public_ip: 公网IP地址 - - 任务模式 (mode参数): - - deploy: 完整部署模式 (默认) - - create: 创建新网站 - - delete: 删除网站 - - build: 构建网站 - - start: 启动网站 - - stop: 停止网站 - - restart: 重启网站 - - status: 查看网站状态 - - list: 列出所有网站 - - logs: 查看网站日志 - """ - try: - # 验证实例ID是否存在 +def execute_jsite_task(instance_id, mode='deploy', command_content=None, **kwargs): + + try: + # 获取服务器信息并验证 server = jingrow.get_pg("Jsite Server", {"instance_id": instance_id}) if not server: return {"success": False, "message": "找不到对应的服务器记录"} + + region_id = server.region + # 验证command_content参数 + if not command_content: + return {"success": False, "message": "缺少command_content参数"} - # 如果未指定region_id,从服务器记录中获取 - if not region_id: - region_id = server.region - - # 构建基础命令内容 - command_content = 'curl -s -o /tmp/jsite.sh http://git.jingrow.com:3000/shell/jshells/raw/branch/main/jsite.sh && chmod +x /tmp/jsite.sh && /tmp/jsite.sh' - - # 从kwargs中获取参数 - site_name = kwargs.get('site_name') - git_repo = kwargs.get('git_repo') - site_url = kwargs.get('site_url') - revalidate_token = kwargs.get('revalidate_token') - backend_server_url = kwargs.get('backend_server_url') - backend_api_key = kwargs.get('backend_api_key') - backend_api_secret = kwargs.get('backend_api_secret') - - # 验证必要参数(只有site_name是必须的) - if not site_name: - return {"success": False, "message": "缺少必要的参数: site_name"} - - # 构建基础参数(只包含存在的参数) - parameters = {'site_name': site_name, 'mode': mode} - - # 只有当参数存在且不为空时才添加到parameters和命令中 - if git_repo: - parameters['git_repo'] = git_repo - command_content += ' --git-repo {{git_repo}}' - - if site_url: - parameters['site_url'] = site_url - command_content += ' --site-url {{site_url}}' - - if revalidate_token: - parameters['revalidate_token'] = revalidate_token - command_content += ' --revalidate-token {{revalidate_token}}' - - if backend_server_url: - parameters['backend_server_url'] = backend_server_url - command_content += ' --backend-server-url {{backend_server_url}}' - - if backend_api_key: - parameters['backend_api_key'] = backend_api_key - command_content += ' --backend-api-key {{backend_api_key}}' - - if backend_api_secret: - parameters['backend_api_secret'] = backend_api_secret - command_content += ' --backend-api-secret {{backend_api_secret}}' - - # 添加可选参数 - if 'node_version' in kwargs: - parameters['node_version'] = kwargs['node_version'] - command_content += ' --node-version {{node_version}}' - - if 'start_port' in kwargs: - parameters['start_port'] = kwargs['start_port'] - command_content += ' --start-port {{start_port}}' - - if 'port_increment' in kwargs: - parameters['port_increment'] = kwargs['port_increment'] - command_content += ' --port-increment {{port_increment}}' - - if kwargs.get('skip_docker', False): - command_content += ' --skip-docker' - - if kwargs.get('skip_traefik', False): - command_content += ' --skip-traefik' - - if kwargs.get('skip_dependencies', False): - command_content += ' --skip-dependencies' - - if kwargs.get('skip_pm2', False): - command_content += ' --skip-pm2' - - if kwargs.get('force_update', False): - command_content += ' --force-update' - - if 'public_ip' in kwargs: - parameters['public_ip'] = kwargs['public_ip'] - command_content += ' --public-ip {{public_ip}}' - - # 添加site-name和mode到命令(这些是基础参数) - command_content += ' --site-name {{site_name}} --mode {{mode}}' - - # 统一超时时间 - timeout = 3600 - - # 命令名称直接使用mode值 - command_name = mode - + # 执行命令,不传入参数字典 manager = _get_manager() - result = manager.run_command(instance_id, command_content, parameters, command_name, region_id, timeout) + result = manager.run_command(instance_id, command_content, parameters=None, command_name=mode, region_id=region_id, timeout=3600) return result except Exception as e: - jingrow.log_error("执行Jsite任务失败", f"在实例 {instance_id} 上执行Jsite任务 {mode} 时发生错误: {str(e)}") - return {"success": False, "error": str(e), "message": f"执行Jsite任务 {mode} 失败"} + jingrow.log_error("执行Jsite任务失败", f"实例 {instance_id}, 模式 {mode}, 错误: {str(e)}") + return {"success": False, "message": f"执行Jsite任务失败: {str(e)}"}