main #2
@ -339,6 +339,14 @@ export default {
|
||||
changePage(page) {
|
||||
if (page >= 1 && page <= this.pagination.pagecount) {
|
||||
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();
|
||||
}
|
||||
},
|
||||
|
||||
@ -453,17 +453,68 @@ class AliyunLightServerManager:
|
||||
jingrow.log_error("创建防火墙规则失败", f"为实例 {instance_id} 创建防火墙规则时发生错误: {str(e)}")
|
||||
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)
|
||||
try:
|
||||
request = swas__open20200601_models.ListFirewallRulesRequest(
|
||||
region_id=region_id,
|
||||
instance_id=instance_id
|
||||
)
|
||||
runtime = util_models.RuntimeOptions()
|
||||
response = client.list_firewall_rules_with_options(request, runtime)
|
||||
return {'success': True, 'data': self._convert_response_to_dict(response.body), 'message': '获取防火墙规则列表成功'}
|
||||
if page_size == -1:
|
||||
# 获取全部数据
|
||||
all_rules = []
|
||||
current_page = 1
|
||||
request_page_size = 50 # 每次请求50条记录,减少API调用次数
|
||||
|
||||
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:
|
||||
jingrow.log_error("获取防火墙规则列表失败", f"获取实例 {instance_id} 防火墙规则列表时发生错误: {str(e)}")
|
||||
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": "创建防火墙规则失败"}
|
||||
|
||||
@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:
|
||||
# 调用管理器获取防火墙规则列表
|
||||
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
|
||||
|
||||
@ -1742,8 +1799,8 @@ def sync_firewall_rules(instance_id):
|
||||
if not region_id:
|
||||
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'):
|
||||
error_msg = f"获取阿里云防火墙规则失败: {firewall_result.get('message', '未知错误')}"
|
||||
jingrow.log_error("同步防火墙规则失败", error_msg)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user