diff --git a/jcloud/api/aliyun_server_light.py b/jcloud/api/aliyun_server_light.py index 983046f..605db08 100644 --- a/jcloud/api/aliyun_server_light.py +++ b/jcloud/api/aliyun_server_light.py @@ -414,6 +414,27 @@ class AliyunLightServerManager: jingrow.log_error("获取可升级套餐列表失败", f"获取实例 {instance_id} 可升级套餐时发生错误: {str(e)}") return {'success': False, 'error': str(e), 'message': '获取可升级套餐列表失败'} + def run_command(self, instance_id, command_content, parameters=None, command_name='CustomCommand', region_id='cn-shanghai', timeout=3600): + """在实例上执行命令""" + client = self._get_client(region_id) + try: + request = swas__open20200601_models.RunCommandRequest( + region_id=region_id, + command_content=command_content, + type='RunShellScript', + enable_parameter=True if parameters else False, + parameters=parameters or {}, + instance_id=instance_id, + name=command_name, + timeout=timeout + ) + runtime = util_models.RuntimeOptions() + response = client.run_command_with_options(request, runtime) + return {'success': True, 'data': self._convert_response_to_dict(response.body), 'message': '命令执行成功'} + except Exception as e: + jingrow.log_error("执行命令失败", f"在实例 {instance_id} 上执行命令时发生错误: {str(e)}") + return {'success': False, 'error': str(e), 'message': '命令执行失败'} + # 全局管理器实例 _aliyun_manager = None @@ -1535,4 +1556,40 @@ def get_server_plan_price(instance_id): @jingrow.whitelist() def get_password(pagetype, name, fieldname): - return jingrow.get_pg(pagetype, name).get_password(fieldname) \ No newline at end of file + return jingrow.get_pg(pagetype, name).get_password(fieldname) + +@jingrow.whitelist() +def install_jsite(instance_id, site_name, git_repo, site_url, revalidate_token, server_url, api_key, api_secret, region_id='cn-shanghai'): + """在实例上安装Jsite前端""" + try: + # 验证实例ID是否存在 + server = jingrow.get_pg("Jsite Server", {"instance_id": instance_id}) + if not server: + return {"success": False, "message": "找不到对应的服务器记录"} + + # 如果未指定region_id,从服务器记录中获取 + if not region_id: + region_id = server.region + + # 构建命令内容 + command_content = 'curl -s -o /tmp/install_jsite.sh https://cloud.jingrow.com//files/install_jsite.sh && chmod +x /tmp/install_jsite.sh && /tmp/install_jsite.sh --site-name {{site_name}} --git-repo {{git_repo}} --site-url {{site_url}} --revalidate-token {{revalidate_token}} --server-url {{server_url}} --api-key {{api_key}} --api-secret {{api_secret}}' + + # 构建参数 + parameters = { + 'site_name': site_name, + 'git_repo': git_repo, + 'site_url': site_url, + 'revalidate_token': revalidate_token, + 'server_url': server_url, + 'api_key': api_key, + 'api_secret': api_secret + } + + manager = _get_manager() + result = manager.run_command(instance_id, command_content, parameters, 'installJsite', region_id, 3600) + + return result + + except Exception as e: + jingrow.log_error("安装Jsite失败", f"在实例 {instance_id} 上安装Jsite时发生错误: {str(e)}") + return {"success": False, "error": str(e), "message": "安装Jsite失败"} \ No newline at end of file