修复前端防火墙列表页分页无效的问题
This commit is contained in:
parent
45036ff400
commit
538699d0f6
@ -339,6 +339,14 @@ export default {
|
|||||||
changePage(page) {
|
changePage(page) {
|
||||||
if (page >= 1 && page <= this.pagination.pagecount) {
|
if (page >= 1 && page <= this.pagination.pagecount) {
|
||||||
this.pagination.pageno = page;
|
this.pagination.pageno = page;
|
||||||
|
// 更新资源参数并立即重新加载
|
||||||
|
this.$resources.firewallRules.update({
|
||||||
|
params: {
|
||||||
|
instance_id: this.$jsiteServer.pg?.instance_id,
|
||||||
|
limit: this.pagination.limit,
|
||||||
|
pageno: this.pagination.pageno
|
||||||
|
}
|
||||||
|
});
|
||||||
this.$resources.firewallRules.reload();
|
this.$resources.firewallRules.reload();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@ -453,17 +453,68 @@ class AliyunLightServerManager:
|
|||||||
jingrow.log_error("创建防火墙规则失败", f"为实例 {instance_id} 创建防火墙规则时发生错误: {str(e)}")
|
jingrow.log_error("创建防火墙规则失败", f"为实例 {instance_id} 创建防火墙规则时发生错误: {str(e)}")
|
||||||
return {'success': False, 'error': str(e), 'message': '创建防火墙规则失败'}
|
return {'success': False, 'error': str(e), 'message': '创建防火墙规则失败'}
|
||||||
|
|
||||||
def list_firewall_rules(self, instance_id, region_id='cn-shanghai'):
|
def list_firewall_rules(self, instance_id, region_id='cn-shanghai', page_size=10, page_number=1):
|
||||||
"""获取实例的防火墙规则列表"""
|
"""获取实例的防火墙规则列表
|
||||||
|
Args:
|
||||||
|
instance_id: 实例ID
|
||||||
|
region_id: 地域ID
|
||||||
|
page_size: 每页记录数,默认10,如果设置为-1则获取全部数据
|
||||||
|
page_number: 页码,默认1
|
||||||
|
"""
|
||||||
client = self._get_client(region_id)
|
client = self._get_client(region_id)
|
||||||
try:
|
try:
|
||||||
request = swas__open20200601_models.ListFirewallRulesRequest(
|
if page_size == -1:
|
||||||
region_id=region_id,
|
# 获取全部数据
|
||||||
instance_id=instance_id
|
all_rules = []
|
||||||
)
|
current_page = 1
|
||||||
runtime = util_models.RuntimeOptions()
|
request_page_size = 50 # 每次请求50条记录,减少API调用次数
|
||||||
response = client.list_firewall_rules_with_options(request, runtime)
|
|
||||||
return {'success': True, 'data': self._convert_response_to_dict(response.body), 'message': '获取防火墙规则列表成功'}
|
while True:
|
||||||
|
request = swas__open20200601_models.ListFirewallRulesRequest(
|
||||||
|
region_id=region_id,
|
||||||
|
instance_id=instance_id,
|
||||||
|
page_size=request_page_size,
|
||||||
|
page_number=current_page
|
||||||
|
)
|
||||||
|
runtime = util_models.RuntimeOptions()
|
||||||
|
response = client.list_firewall_rules_with_options(request, runtime)
|
||||||
|
|
||||||
|
response_data = self._convert_response_to_dict(response.body)
|
||||||
|
current_rules = response_data.get('firewall_rules', [])
|
||||||
|
|
||||||
|
if not current_rules:
|
||||||
|
break
|
||||||
|
|
||||||
|
all_rules.extend(current_rules)
|
||||||
|
|
||||||
|
# 如果当前页记录数少于request_page_size,说明已经是最后一页
|
||||||
|
if len(current_rules) < request_page_size:
|
||||||
|
break
|
||||||
|
|
||||||
|
current_page += 1
|
||||||
|
|
||||||
|
# 构造返回结果
|
||||||
|
result_data = response_data.copy()
|
||||||
|
result_data['firewall_rules'] = all_rules
|
||||||
|
result_data['total_count'] = len(all_rules)
|
||||||
|
|
||||||
|
return {'success': True, 'data': result_data, 'message': f'获取防火墙规则列表成功,共{len(all_rules)}条记录'}
|
||||||
|
else:
|
||||||
|
# 分页获取数据
|
||||||
|
request = swas__open20200601_models.ListFirewallRulesRequest(
|
||||||
|
region_id=region_id,
|
||||||
|
instance_id=instance_id,
|
||||||
|
page_size=page_size,
|
||||||
|
page_number=page_number
|
||||||
|
)
|
||||||
|
runtime = util_models.RuntimeOptions()
|
||||||
|
response = client.list_firewall_rules_with_options(request, runtime)
|
||||||
|
|
||||||
|
response_data = self._convert_response_to_dict(response.body)
|
||||||
|
rules_count = len(response_data.get('firewall_rules', []))
|
||||||
|
|
||||||
|
return {'success': True, 'data': response_data, 'message': f'获取防火墙规则列表成功,第{page_number}页,共{rules_count}条记录'}
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
jingrow.log_error("获取防火墙规则列表失败", f"获取实例 {instance_id} 防火墙规则列表时发生错误: {str(e)}")
|
jingrow.log_error("获取防火墙规则列表失败", f"获取实例 {instance_id} 防火墙规则列表时发生错误: {str(e)}")
|
||||||
return {'success': False, 'error': str(e), 'message': '获取防火墙规则列表失败'}
|
return {'success': False, 'error': str(e), 'message': '获取防火墙规则列表失败'}
|
||||||
@ -1698,12 +1749,18 @@ def create_aliyun_firewall_rule(instance_id, rule_protocol, port, remark=None, r
|
|||||||
return {"success": False, "error": str(e), "message": "创建防火墙规则失败"}
|
return {"success": False, "error": str(e), "message": "创建防火墙规则失败"}
|
||||||
|
|
||||||
@jingrow.whitelist()
|
@jingrow.whitelist()
|
||||||
def get_aliyun_firewall_rules(instance_id, region_id='cn-shanghai'):
|
def get_aliyun_firewall_rules(instance_id, region_id='cn-shanghai', page_size=10, page_number=1):
|
||||||
"""获取阿里云轻量应用服务器防火墙规则列表"""
|
"""获取阿里云轻量应用服务器防火墙规则列表
|
||||||
|
Args:
|
||||||
|
instance_id: 实例ID
|
||||||
|
region_id: 地域ID,默认cn-shanghai
|
||||||
|
page_size: 每页记录数,默认10,如果设置为-1则获取全部数据
|
||||||
|
page_number: 页码,默认1
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
# 调用管理器获取防火墙规则列表
|
# 调用管理器获取防火墙规则列表
|
||||||
manager = _get_manager()
|
manager = _get_manager()
|
||||||
result = manager.list_firewall_rules(instance_id, region_id)
|
result = manager.list_firewall_rules(instance_id, region_id, page_size, page_number)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@ -1742,8 +1799,8 @@ def sync_firewall_rules(instance_id):
|
|||||||
if not region_id:
|
if not region_id:
|
||||||
return {"success": False, "message": "服务器记录缺少region信息"}
|
return {"success": False, "message": "服务器记录缺少region信息"}
|
||||||
|
|
||||||
# 获取阿里云防火墙规则
|
# 获取阿里云防火墙规则(获取全部数据)
|
||||||
firewall_result = get_aliyun_firewall_rules(instance_id, region_id)
|
firewall_result = get_aliyun_firewall_rules(instance_id, region_id, page_size=-1)
|
||||||
if not firewall_result or not firewall_result.get('success'):
|
if not firewall_result or not firewall_result.get('success'):
|
||||||
error_msg = f"获取阿里云防火墙规则失败: {firewall_result.get('message', '未知错误')}"
|
error_msg = f"获取阿里云防火墙规则失败: {firewall_result.get('message', '未知错误')}"
|
||||||
jingrow.log_error("同步防火墙规则失败", error_msg)
|
jingrow.log_error("同步防火墙规则失败", error_msg)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user