959b7f7921
We need this to be stop-start as haproxy and proxysql need to be reconfigured simultaneously when switching between them. This change also introduces checks for service enablement. Co-Authored-By: Radosław Piliszek <radoslaw.piliszek@gmail.com> Change-Id: I2e10f490305f3d8b1b7abbc66ddb40df65c37fe7
215 lines
6.8 KiB
YAML
215 lines
6.8 KiB
YAML
---
|
|
# NOTE(yoctozepto): this handler dance is to ensure we delay restarting master
|
|
# keepalived and haproxy which control VIP address until we have working backups.
|
|
# This could be improved by checking if backup keepalived do not report FAULT state.
|
|
# Master node is handled specially to let it close down connections and only then
|
|
# drop the VIP address by stopping keepalived service.
|
|
|
|
# NOTE(yoctozepto): we need fresh VIP address placement info (facts may be old)
|
|
- name: Check IP addresses on the API interface
|
|
vars:
|
|
version: "{{ '6' if api_address_family == 'ipv6' else '4' }}"
|
|
become: true
|
|
command: ip -{{ version }} -o addr show dev {{ api_interface }}
|
|
register: ip_addr_output
|
|
changed_when: false
|
|
when:
|
|
- kolla_action != "config"
|
|
listen:
|
|
- Restart haproxy container
|
|
- Restart keepalived container
|
|
|
|
- name: Group HA nodes by status
|
|
vars:
|
|
re_safe_address: "{{ kolla_internal_vip_address | regex_escape }}"
|
|
group_by:
|
|
key: kolla_ha_is_master_{{ ip_addr_output.stdout is regex('\b' + re_safe_address + '\b') }}
|
|
changed_when: false
|
|
when:
|
|
- kolla_action != "config"
|
|
listen:
|
|
- Restart haproxy container
|
|
- Restart keepalived container
|
|
|
|
- name: Stop backup keepalived container
|
|
become: true
|
|
kolla_docker:
|
|
action: "stop_container"
|
|
# NOTE(yoctozepto): backup node might not have keepalived yet - ignore
|
|
ignore_missing: true
|
|
common_options: "{{ docker_common_options }}"
|
|
name: "keepalived"
|
|
when:
|
|
- kolla_action != "config"
|
|
- groups.kolla_ha_is_master_False is defined
|
|
- inventory_hostname in groups.kolla_ha_is_master_False
|
|
listen:
|
|
- Restart keepalived container
|
|
|
|
# NOTE(yoctozepto): We need the following to be stop-start as haproxy and
|
|
# proxysql need to be reconfigured simultaneously when switching between them.
|
|
|
|
- name: Stop backup haproxy container
|
|
become: true
|
|
kolla_docker:
|
|
action: "stop_container"
|
|
# NOTE(kevko): backup node might not have haproxy yet - ignore
|
|
ignore_missing: true
|
|
common_options: "{{ docker_common_options }}"
|
|
name: "haproxy"
|
|
when:
|
|
- kolla_action != "config"
|
|
- groups.kolla_ha_is_master_False is defined
|
|
- inventory_hostname in groups.kolla_ha_is_master_False
|
|
listen:
|
|
- Restart haproxy container
|
|
- Restart keepalived container
|
|
|
|
- name: Start backup haproxy container
|
|
vars:
|
|
service_name: "haproxy"
|
|
service: "{{ loadbalancer_services[service_name] }}"
|
|
become: true
|
|
kolla_docker:
|
|
action: "recreate_or_restart_container"
|
|
common_options: "{{ docker_common_options }}"
|
|
name: "{{ service.container_name }}"
|
|
image: "{{ service.image }}"
|
|
privileged: "{{ service.privileged | default(False) }}"
|
|
volumes: "{{ service.volumes }}"
|
|
dimensions: "{{ service.dimensions }}"
|
|
healthcheck: "{{ service.healthcheck | default(omit) }}"
|
|
when:
|
|
- kolla_action != "config"
|
|
- groups.kolla_ha_is_master_False is defined
|
|
- inventory_hostname in groups.kolla_ha_is_master_False
|
|
- service.enabled | bool
|
|
listen:
|
|
- Restart haproxy container
|
|
- Restart keepalived container
|
|
notify:
|
|
- Wait for backup haproxy to start
|
|
|
|
- name: Wait for backup haproxy to start
|
|
wait_for:
|
|
host: "{{ api_interface_address }}"
|
|
port: "{{ haproxy_monitor_port }}"
|
|
|
|
- name: Start backup keepalived container
|
|
vars:
|
|
service_name: "keepalived"
|
|
service: "{{ loadbalancer_services[service_name] }}"
|
|
become: true
|
|
kolla_docker:
|
|
action: "recreate_or_restart_container"
|
|
common_options: "{{ docker_common_options }}"
|
|
name: "{{ service.container_name }}"
|
|
image: "{{ service.image }}"
|
|
privileged: "{{ service.privileged | default(False) }}"
|
|
volumes: "{{ service.volumes }}"
|
|
dimensions: "{{ service.dimensions }}"
|
|
when:
|
|
- kolla_action != "config"
|
|
- groups.kolla_ha_is_master_False is defined
|
|
- inventory_hostname in groups.kolla_ha_is_master_False
|
|
- service.enabled | bool
|
|
listen:
|
|
- Restart keepalived container
|
|
notify:
|
|
- Wait for virtual IP to appear
|
|
|
|
# NOTE(yoctozepto): This is to ensure haproxy can close any open connections
|
|
# to the VIP address.
|
|
- name: Stop master haproxy container
|
|
become: true
|
|
kolla_docker:
|
|
action: "stop_container"
|
|
# NOTE(yoctozepto): master node might not have haproxy yet - ignore
|
|
ignore_missing: true
|
|
common_options: "{{ docker_common_options }}"
|
|
name: "haproxy"
|
|
when:
|
|
- kolla_action != "config"
|
|
- groups.kolla_ha_is_master_True is defined
|
|
- inventory_hostname in groups.kolla_ha_is_master_True
|
|
listen:
|
|
- Restart keepalived container
|
|
|
|
- name: Stop master keepalived container
|
|
become: true
|
|
kolla_docker:
|
|
action: "stop_container"
|
|
common_options: "{{ docker_common_options }}"
|
|
name: "keepalived"
|
|
when:
|
|
- kolla_action != "config"
|
|
- groups.kolla_ha_is_master_True is defined
|
|
- inventory_hostname in groups.kolla_ha_is_master_True
|
|
listen:
|
|
- Restart keepalived container
|
|
|
|
- name: Start master haproxy container
|
|
vars:
|
|
service_name: "haproxy"
|
|
service: "{{ loadbalancer_services[service_name] }}"
|
|
become: true
|
|
kolla_docker:
|
|
action: "recreate_or_restart_container"
|
|
common_options: "{{ docker_common_options }}"
|
|
name: "{{ service.container_name }}"
|
|
image: "{{ service.image }}"
|
|
privileged: "{{ service.privileged | default(False) }}"
|
|
volumes: "{{ service.volumes }}"
|
|
dimensions: "{{ service.dimensions }}"
|
|
healthcheck: "{{ service.healthcheck | default(omit) }}"
|
|
when:
|
|
- kolla_action != "config"
|
|
- groups.kolla_ha_is_master_True is defined
|
|
- inventory_hostname in groups.kolla_ha_is_master_True
|
|
- service.enabled | bool
|
|
listen:
|
|
- Restart haproxy container
|
|
- Restart keepalived container
|
|
notify:
|
|
- Wait for master haproxy to start
|
|
|
|
- name: Wait for master haproxy to start
|
|
wait_for:
|
|
host: "{{ api_interface_address }}"
|
|
port: "{{ haproxy_monitor_port }}"
|
|
|
|
- name: Start master keepalived container
|
|
vars:
|
|
service_name: "keepalived"
|
|
service: "{{ loadbalancer_services[service_name] }}"
|
|
become: true
|
|
kolla_docker:
|
|
action: "recreate_or_restart_container"
|
|
common_options: "{{ docker_common_options }}"
|
|
name: "{{ service.container_name }}"
|
|
image: "{{ service.image }}"
|
|
privileged: "{{ service.privileged | default(False) }}"
|
|
volumes: "{{ service.volumes }}"
|
|
dimensions: "{{ service.dimensions }}"
|
|
when:
|
|
- kolla_action != "config"
|
|
- groups.kolla_ha_is_master_True is defined
|
|
- inventory_hostname in groups.kolla_ha_is_master_True
|
|
- service.enabled | bool
|
|
listen:
|
|
- Restart keepalived container
|
|
notify:
|
|
- Wait for virtual IP to appear
|
|
|
|
- name: Wait for haproxy to listen on VIP
|
|
vars:
|
|
service_name: "haproxy"
|
|
service: "{{ loadbalancer_services[service_name] }}"
|
|
wait_for:
|
|
host: "{{ kolla_internal_vip_address }}"
|
|
port: "{{ haproxy_monitor_port }}"
|
|
when:
|
|
- service.enabled | bool
|
|
listen:
|
|
- Wait for virtual IP to appear
|