diff --git a/app/modules/db/sql.py b/app/modules/db/sql.py index 4eac9ccf..cf1f5d1f 100755 --- a/app/modules/db/sql.py +++ b/app/modules/db/sql.py @@ -4368,13 +4368,10 @@ def insert_cluster_services(cluster_id: int, service_id: int): 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() - sql = f"select * from servers left join ha_clusters on (servers.id = ha_clusters.master_id) " \ - f"left join ha_cluster_slaves on (servers.id = ha_cluster_slaves.server_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}));" + sql = f"select * from servers 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};" try: cursor.execute(sql) 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): cursor = conn.cursor() - sql = f"select * from servers " \ - f"left join ha_cluster_slaves on (servers.id = ha_cluster_slaves.server_id) " \ + sql = f"select * from servers 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};" try: cursor.execute(sql) diff --git a/app/modules/service/installation.py b/app/modules/service/installation.py index 9457f7ad..d39b69d4 100644 --- a/app/modules/service/installation.py +++ b/app/modules/service/installation.py @@ -198,13 +198,15 @@ def generate_kp_inv(json_data: json, install_service) -> object: for vip in vips: router_id = str(vip.router_id) - routers[router_id] = {vip.vip: {}} - routers[router_id][vip.vip].setdefault('return_master', vip.return_master) - routers[router_id][vip.vip].setdefault('vip', vip.vip) + routers[router_id] = {} + routers[router_id].setdefault('return_master', vip.return_master) + routers[router_id].setdefault('vip', vip.vip) slaves = sql.select_cluster_slaves_for_inv(router_id) for slave in slaves: - routers[router_id][vip.vip].setdefault('master', slave.master) - routers[router_id][vip.vip].setdefault('eth', slave.eth) + slave_ip = sql.select_server_ip_by_id(str(slave.server_id)) + 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(): server_ip = v['ip'] @@ -372,7 +374,10 @@ def run_ansible(inv: object, server_ips: str, ansible_role: str) -> object: except Exception as 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 os.remove(inventory) diff --git a/app/routes/ha/routes.py b/app/routes/ha/routes.py index f4d577ee..c5b2be06 100644 --- a/app/routes/ha/routes.py +++ b/app/routes/ha/routes.py @@ -124,7 +124,8 @@ def show_ha_cluster(service, cluster_id): services = [] service = 'keepalived' 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 = '' cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l" keep_alive, stderr = server_mod.subprocess_execute(cmd) diff --git a/app/scripts/ansible/roles/keepalived/templates/keepalived.conf.j2 b/app/scripts/ansible/roles/keepalived/templates/keepalived.conf.j2 index 5b7934ef..e93ca020 100644 --- a/app/scripts/ansible/roles/keepalived/templates/keepalived.conf.j2 +++ b/app/scripts/ansible/roles/keepalived/templates/keepalived.conf.j2 @@ -24,13 +24,18 @@ vrrp_script chk_haproxy { {% for router, vip in routers.items() %} -{% for vrrp, s in vip.items() %} vrrp_instance VI_{{router}} { - state {{s.master}} - interface {{s.eth}} + {% for k, slave in vip.items() %} + {% 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}} - 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 track_script { @@ -50,9 +55,8 @@ vrrp_instance VI_{{router}} { auth_pass VerySecretPass } virtual_ipaddress { - {{vrrp}} + {{vip.vip}} } } {% endfor %} -{% endfor %} # Managed by Roxy-WI do not edit this file. Use HA cluster configuration instead diff --git a/app/scripts/ansible/roles/service_common/tasks/main.yml b/app/scripts/ansible/roles/service_common/tasks/main.yml index 2599836e..0fbe2a41 100644 --- a/app/scripts/ansible/roles/service_common/tasks/main.yml +++ b/app/scripts/ansible/roles/service_common/tasks/main.yml @@ -19,7 +19,6 @@ - name: populate service facts service_facts: - - name: Creates directorys file: path: "{{ item.path }}" @@ -46,14 +45,12 @@ - service not in ansible_facts.packages - service == "apache" - - name: Set passlib version set_fact: passlib_ver: "python3-passlib" when: ansible_facts['distribution_major_version'] == '8' or (ansible_facts['os_family'] == 'Debian' or ansible_facts['os_family'] == 'Ubuntu') ignore_errors: True - - name: Set passlib version set_fact: passlib_ver: "python-passlib" @@ -66,9 +63,8 @@ when: ansible_facts['distribution_major_version'] == '9' ignore_errors: True - - name: Install passlib - package: + ansible.builtin.package: name: "{{passlib_ver}}" state: present when: