v8.0: Handle exceptions and update data structure

Added try-except blocks for better exception handling and updated VIP retrieval logic. Changed the structure from using server names and IPs to using IDs in both backend and frontend code. Updated template selections and introduced new expected version options.
pull/399/head
Aidaho 2024-08-28 11:30:05 +03:00
parent c54f42f65b
commit 975a49d818
7 changed files with 20 additions and 15 deletions

View File

@ -65,6 +65,8 @@ def select_cluster_vip(cluster_id: int, router_id: int) -> HaClusterVip:
def select_cluster_vip_by_vip_id(cluster_id: int, vip_id: int) -> HaClusterVip: def select_cluster_vip_by_vip_id(cluster_id: int, vip_id: int) -> HaClusterVip:
try: try:
return HaClusterVip.get((HaClusterVip.cluster_id == cluster_id) & (HaClusterVip.id == vip_id)) return HaClusterVip.get((HaClusterVip.cluster_id == cluster_id) & (HaClusterVip.id == vip_id))
except HaClusterVip.DoesNotExist:
raise RoxywiResourceNotFound
except Exception as e: except Exception as e:
out_error(e) out_error(e)

View File

@ -207,9 +207,8 @@ class ChannelRequest(BaseModel):
class ServerInstall(BaseModel): class ServerInstall(BaseModel):
ip: Union[IPvAnyAddress, DomainName] id: int
master: Optional[bool] = 0 master: Optional[bool] = 0
name: EscapedString
class ServiceInstall(BaseModel): class ServiceInstall(BaseModel):

View File

@ -284,7 +284,7 @@ def _create_or_update_master_slaves_servers(cluster_id: int, servers: dict, rout
roxywi_common.logging(cluster_id, f'New server {s.hostname} has been added to the cluster', keep_history=1, roxywi_common.logging(cluster_id, f'New server {s.hostname} has been added to the cluster', keep_history=1,
roxywi=1, service='HA cluster') roxywi=1, service='HA cluster')
except Exception as e: except Exception as e:
raise Exception(f'error: Cannot update slave server {server["ip"]}: {e}') raise Exception(f'error: Cannot update slave server {s.hostname}: {e}')
if server['master']: if server['master']:
continue continue

View File

@ -151,9 +151,10 @@ function installService(service) {
} }
let jsonData = {}; let jsonData = {};
let server = { let server = {
"ip": $(select_id).val(), // "ip": $(select_id).val(),
"master": '0', "master": '0',
"name": $(select_id + ' option:selected').text(), "id": $(select_id + ' option:selected').attr('data-id'),
// "name": $(select_id + ' option:selected').text(),
} }
if (service === 'haproxy') { if (service === 'haproxy') {
server['version'] = $('#hapver option:selected').val(); server['version'] = $('#hapver option:selected').val();

View File

@ -46,7 +46,7 @@
<select autofocus required name="haproxyaddserv" id="haproxyaddserv"> <select autofocus required name="haproxyaddserv" id="haproxyaddserv">
<option disabled selected>------</option> <option disabled selected>------</option>
{% for select in g.user_params['servers'] %} {% for select in g.user_params['servers'] %}
<option value="{{ select.2 }}">{{ select.1 }}</option> <option value="{{ select.2 }}" data-id="{{ select.0 }}">{{ select.1 }}</option>
{% endfor %} {% endfor %}
</select> </select>
</td> </td>
@ -81,7 +81,7 @@
<select autofocus required name="nginxaddserv" id="nginxaddserv"> <select autofocus required name="nginxaddserv" id="nginxaddserv">
<option disabled selected>------</option> <option disabled selected>------</option>
{% for select in g.user_params['servers'] %} {% for select in g.user_params['servers'] %}
<option value="{{ select.2 }}">{{ select.1 }}</option> <option value="{{ select.2 }}" data-id="{{ select.0 }}">{{ select.1 }}</option>
{% endfor %} {% endfor %}
</select> </select>
</td> </td>
@ -116,7 +116,7 @@
<select autofocus required name="apacheaddserv" id="apacheaddserv"> <select autofocus required name="apacheaddserv" id="apacheaddserv">
<option disabled selected>------</option> <option disabled selected>------</option>
{% for select in g.user_params['servers'] %} {% for select in g.user_params['servers'] %}
<option value="{{ select.2 }}">{{ select.1 }}</option> <option value="{{ select.2 }}" data-id="{{ select.0 }}">{{ select.1 }}</option>
{% endfor %} {% endfor %}
</select> </select>
</td> </td>
@ -223,8 +223,8 @@
<td id="cur_nginx_exp_ver" class="padding10 first-collumn"></td> <td id="cur_nginx_exp_ver" class="padding10 first-collumn"></td>
<td class="padding10 first-collumn" style="width: 20%;"> <td class="padding10 first-collumn" style="width: 20%;">
{% set values = dict() %} {% set values = dict() %}
{% set values = {'0.7.0':'0.7.0', '0.9.0':'0.9.0', '0.10.0':'0.10.0', '0.11.0':'0.11.0', '1.0.0':'1.0.0', '1.1.0':'1.1.0'} %} {% set values = {'0.11.0':'0.11.0', '1.0.0':'1.0.0', '1.1.0':'1.1.0', '1.2.0':'1.2.0', '1.3.0':'1.3.0'} %}
{{ select('nginxexpver', values=values, selected='1.1.0') }} {{ select('nginxexpver', values=values, selected='1.3.0') }}
</td> </td>
<td class="padding10 first-collumn"> <td class="padding10 first-collumn">
<select autofocus required name="nginx_exp_addserv" id="nginx_exp_addserv"> <select autofocus required name="nginx_exp_addserv" id="nginx_exp_addserv">
@ -316,8 +316,8 @@
<td id="cur_node_exp_ver" class="padding10 first-collumn"></td> <td id="cur_node_exp_ver" class="padding10 first-collumn"></td>
<td class="padding10 first-collumn" style="width: 20%;"> <td class="padding10 first-collumn" style="width: 20%;">
{% set values = dict() %} {% set values = dict() %}
{% set values = {'1.2.0':'1.2.0', '1.2.2':'1.2.2', '1.3.0':'1.3.0', '1.3.1':'1.3.1', '1.5.0':'1.5.0', '1.6.1':'1.6.1', '1.7.0':'1.7.0'} %} {% set values = {'1.3.0':'1.3.0', '1.3.1':'1.3.1', '1.5.0':'1.5.0', '1.6.1':'1.6.1', '1.7.0':'1.7.0', '1.8.0':'1.8.0', '1.8.2':'1.8.2'} %}
{{ select('nodeexpver', values=values, selected='1.7.0') }} {{ select('nodeexpver', values=values, selected='1.8.2') }}
</td> </td>
<td class="padding10 first-collumn"> <td class="padding10 first-collumn">
<select autofocus required name="node_exp_addserv" id="node_exp_addserv"> <select autofocus required name="node_exp_addserv" id="node_exp_addserv">

View File

@ -475,7 +475,10 @@ class HAVIPView(MethodView):
default: default:
description: Unexpected error description: Unexpected error
""" """
vip = ha_sql.select_cluster_vip_by_vip_id(cluster_id, vip_id) try:
vip = ha_sql.select_cluster_vip_by_vip_id(cluster_id, vip_id)
except Exception as e:
return roxywi_common.handler_exceptions_for_json_data(e, 'Cannot find VIP')
try: try:
ha_cluster.update_vip(cluster_id, vip.router_id, body, self.group_id) ha_cluster.update_vip(cluster_id, vip.router_id, body, self.group_id)
return BaseResponse().model_dump(mode='json'), 201 return BaseResponse().model_dump(mode='json'), 201

View File

@ -46,8 +46,8 @@ class InstallView(MethodView):
items: items:
type: 'object' type: 'object'
properties: properties:
ip: id:
type: 'string' type: 'integer'
name: name:
type: 'string' type: 'string'
services: services: