Fix install HA cluster
pull/375/head
Aidaho 2023-12-27 10:59:43 +03:00
parent b27a160a6a
commit dbcb5558dc
5 changed files with 28 additions and 26 deletions

View File

@ -4368,13 +4368,10 @@ def insert_cluster_services(cluster_id: int, service_id: int):
out_error(e) out_error(e)
def select_cluster_master_slaves(cluster_id: int, group_id: int): def select_cluster_master_slaves(cluster_id: int, group_id: int, router_id: int):
cursor = conn.cursor() cursor = conn.cursor()
sql = f"select * from servers left join ha_clusters on (servers.id = ha_clusters.master_id) " \ sql = f"select * from servers left join ha_cluster_slaves on (servers.id = ha_cluster_slaves.server_id) " \
f"left join ha_cluster_slaves on (servers.id = ha_cluster_slaves.server_id) " \ f"where servers.groups = {group_id} and ha_cluster_slaves.cluster_id = {cluster_id} and ha_cluster_slaves.router_id = {router_id};"
f"left join ha_cluster_virts on (servers.id = ha_cluster_virts.virt_id)" \
f"where (servers.groups = {group_id} and " \
f"(ha_cluster_slaves.cluster_id = {cluster_id} or ha_clusters.id = {cluster_id} or ha_cluster_virts.cluster_id = {cluster_id}));"
try: try:
cursor.execute(sql) cursor.execute(sql)
except Exception as e: except Exception as e:
@ -4385,8 +4382,7 @@ def select_cluster_master_slaves(cluster_id: int, group_id: int):
def select_cluster_slaves(cluster_id: int, router_id: int): def select_cluster_slaves(cluster_id: int, router_id: int):
cursor = conn.cursor() cursor = conn.cursor()
sql = f"select * from servers " \ sql = f"select * from servers left join ha_cluster_slaves on (servers.id = ha_cluster_slaves.server_id) " \
f"left join ha_cluster_slaves on (servers.id = ha_cluster_slaves.server_id) " \
f"where ha_cluster_slaves.cluster_id = {cluster_id} and ha_cluster_slaves.router_id = {router_id};" f"where ha_cluster_slaves.cluster_id = {cluster_id} and ha_cluster_slaves.router_id = {router_id};"
try: try:
cursor.execute(sql) cursor.execute(sql)

View File

@ -198,13 +198,15 @@ def generate_kp_inv(json_data: json, install_service) -> object:
for vip in vips: for vip in vips:
router_id = str(vip.router_id) router_id = str(vip.router_id)
routers[router_id] = {vip.vip: {}} routers[router_id] = {}
routers[router_id][vip.vip].setdefault('return_master', vip.return_master) routers[router_id].setdefault('return_master', vip.return_master)
routers[router_id][vip.vip].setdefault('vip', vip.vip) routers[router_id].setdefault('vip', vip.vip)
slaves = sql.select_cluster_slaves_for_inv(router_id) slaves = sql.select_cluster_slaves_for_inv(router_id)
for slave in slaves: for slave in slaves:
routers[router_id][vip.vip].setdefault('master', slave.master) slave_ip = sql.select_server_ip_by_id(str(slave.server_id))
routers[router_id][vip.vip].setdefault('eth', slave.eth) routers[router_id].setdefault(slave_ip, dict())
routers[router_id][slave_ip].setdefault('master', slave.master)
routers[router_id][slave_ip].setdefault('eth', slave.eth)
for k, v in json_data['servers'].items(): for k, v in json_data['servers'].items():
server_ip = v['ip'] server_ip = v['ip']
@ -372,7 +374,10 @@ def run_ansible(inv: object, server_ips: str, ansible_role: str) -> object:
except Exception as e: except Exception as e:
raise Exception(f'error: Cannot save inventory file: {e}') raise Exception(f'error: Cannot save inventory file: {e}')
result = ansible_runner.run(**kwargs) try:
result = ansible_runner.run(**kwargs)
except Exception as e:
raise Exception(f'error: Cannot install {ansible_role}: {e}')
stats = result.stats stats = result.stats
os.remove(inventory) os.remove(inventory)

View File

@ -124,7 +124,8 @@ def show_ha_cluster(service, cluster_id):
services = [] services = []
service = 'keepalived' service = 'keepalived'
service_desc = sql.select_service(service) service_desc = sql.select_service(service)
servers = sql.select_cluster_master_slaves(cluster_id, user_params['group_id']) router_id = sql.get_router_id(cluster_id, default_router=1)
servers = sql.select_cluster_master_slaves(cluster_id, user_params['group_id'], router_id)
waf_server = '' waf_server = ''
cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l" cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l"
keep_alive, stderr = server_mod.subprocess_execute(cmd) keep_alive, stderr = server_mod.subprocess_execute(cmd)

View File

@ -24,13 +24,18 @@ vrrp_script chk_haproxy {
{% for router, vip in routers.items() %} {% for router, vip in routers.items() %}
{% for vrrp, s in vip.items() %}
vrrp_instance VI_{{router}} { vrrp_instance VI_{{router}} {
state {{s.master}} {% for k, slave in vip.items() %}
interface {{s.eth}} {% if k == ansible_host and slave is mapping %}
state {% if slave.master %}MASTER{% else %}BACKUP{%endif%}
interface {{slave.eth}}
priority {% if vip.return_master and slave.master %}152{% elif slave.master and not vip.return_master %}102{% else %}101{%endif%}
{% endif %}
{% endfor %}
virtual_router_id {{router}} virtual_router_id {{router}}
priority {% if s.return_master and s.master %}152{% elif s.master and not s.return_master %}102{% else %}101{%endif%}
#check if we are still running #check if we are still running
track_script { track_script {
@ -50,9 +55,8 @@ vrrp_instance VI_{{router}} {
auth_pass VerySecretPass auth_pass VerySecretPass
} }
virtual_ipaddress { virtual_ipaddress {
{{vrrp}} {{vip.vip}}
} }
} }
{% endfor %} {% endfor %}
{% endfor %}
# Managed by Roxy-WI do not edit this file. Use HA cluster configuration instead # Managed by Roxy-WI do not edit this file. Use HA cluster configuration instead

View File

@ -19,7 +19,6 @@
- name: populate service facts - name: populate service facts
service_facts: service_facts:
- name: Creates directorys - name: Creates directorys
file: file:
path: "{{ item.path }}" path: "{{ item.path }}"
@ -46,14 +45,12 @@
- service not in ansible_facts.packages - service not in ansible_facts.packages
- service == "apache" - service == "apache"
- name: Set passlib version - name: Set passlib version
set_fact: set_fact:
passlib_ver: "python3-passlib" passlib_ver: "python3-passlib"
when: ansible_facts['distribution_major_version'] == '8' or (ansible_facts['os_family'] == 'Debian' or ansible_facts['os_family'] == 'Ubuntu') when: ansible_facts['distribution_major_version'] == '8' or (ansible_facts['os_family'] == 'Debian' or ansible_facts['os_family'] == 'Ubuntu')
ignore_errors: True ignore_errors: True
- name: Set passlib version - name: Set passlib version
set_fact: set_fact:
passlib_ver: "python-passlib" passlib_ver: "python-passlib"
@ -66,9 +63,8 @@
when: ansible_facts['distribution_major_version'] == '9' when: ansible_facts['distribution_major_version'] == '9'
ignore_errors: True ignore_errors: True
- name: Install passlib - name: Install passlib
package: ansible.builtin.package:
name: "{{passlib_ver}}" name: "{{passlib_ver}}"
state: present state: present
when: when: