aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ansible/roles/aodh/defaults/main.yml12
-rw-r--r--ansible/roles/barbican/defaults/main.yml8
-rw-r--r--ansible/roles/cinder/defaults/main.yml8
-rw-r--r--ansible/roles/cloudkitty/defaults/main.yml12
-rw-r--r--ansible/roles/cyborg/defaults/main.yml6
-rw-r--r--ansible/roles/designate/defaults/main.yml8
-rw-r--r--ansible/roles/etcd/defaults/main.yml17
-rw-r--r--ansible/roles/etcd/tasks/bootstrap_cluster.yml1
-rw-r--r--ansible/roles/etcd/tasks/bootstrap_services.yml1
-rw-r--r--ansible/roles/etcd/tasks/restart_services.yml1
-rw-r--r--ansible/roles/glance/defaults/main.yml25
-rw-r--r--ansible/roles/gnocchi/defaults/main.yml12
-rw-r--r--ansible/roles/grafana/defaults/main.yml24
-rw-r--r--ansible/roles/grafana/handlers/main.yml4
-rw-r--r--ansible/roles/heat/defaults/main.yml16
-rw-r--r--ansible/roles/keystone/defaults/main.yml8
-rw-r--r--ansible/roles/magnum/defaults/main.yml8
-rw-r--r--ansible/roles/manila/defaults/main.yml12
-rw-r--r--ansible/roles/masakari/defaults/main.yml24
-rw-r--r--ansible/roles/mistral/defaults/main.yml6
-rw-r--r--ansible/roles/neutron/defaults/main.yml8
-rw-r--r--ansible/roles/nova/defaults/main.yml12
-rw-r--r--ansible/roles/octavia/defaults/main.yml6
-rw-r--r--ansible/roles/placement/defaults/main.yml2
-rw-r--r--ansible/roles/rabbitmq/defaults/main.yml3
-rw-r--r--ansible/roles/tacker/defaults/main.yml6
-rw-r--r--ansible/roles/trove/defaults/main.yml8
-rw-r--r--ansible/roles/watcher/defaults/main.yml2
-rw-r--r--ansible/roles/zun/defaults/main.yml8
-rw-r--r--releasenotes/notes/add-healthcheck-a7b535c31bb72cfe.yaml14
30 files changed, 225 insertions, 57 deletions
diff --git a/ansible/roles/aodh/defaults/main.yml b/ansible/roles/aodh/defaults/main.yml
index 76d9360dd..0c6df039c 100644
--- a/ansible/roles/aodh/defaults/main.yml
+++ b/ansible/roles/aodh/defaults/main.yml
@@ -17,7 +17,8 @@ aodh_services:
port: "{{ aodh_api_port }}"
listen_port: "{{ aodh_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
aodh_api_external:
enabled: "{{ enable_aodh }}"
mode: "http"
@@ -26,7 +27,8 @@ aodh_services:
port: "{{ aodh_api_public_port }}"
listen_port: "{{ aodh_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
aodh-evaluator:
container_name: aodh_evaluator
group: aodh-evaluator
@@ -131,7 +133,11 @@ aodh_api_enable_healthchecks: "{{ enable_container_healthchecks }}"
aodh_api_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
aodh_api_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
aodh_api_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
-aodh_api_healthcheck_test: ["CMD-SHELL", "healthcheck_curl http://{{ api_interface_address | put_address_in_context('url') }}:{{ aodh_api_listen_port }}"]
+aodh_api_healthcheck_test:
+ - "CMD-SHELL"
+ - >-
+ healthcheck_curl http://{{
+ api_interface_address | put_address_in_context('url') }}:{{ aodh_api_listen_port }}/healthcheck
aodh_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
aodh_api_healthcheck:
interval: "{{ aodh_api_healthcheck_interval }}"
diff --git a/ansible/roles/barbican/defaults/main.yml b/ansible/roles/barbican/defaults/main.yml
index 86d12e558..211080579 100644
--- a/ansible/roles/barbican/defaults/main.yml
+++ b/ansible/roles/barbican/defaults/main.yml
@@ -18,7 +18,8 @@ barbican_services:
listen_port: "{{ barbican_api_listen_port }}"
tls_backend: "{{ barbican_enable_tls_backend }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
barbican_api_external:
enabled: "{{ enable_barbican }}"
mode: "http"
@@ -28,7 +29,8 @@ barbican_services:
listen_port: "{{ barbican_api_listen_port }}"
tls_backend: "{{ barbican_enable_tls_backend }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
barbican-keystone-listener:
container_name: barbican_keystone_listener
group: barbican-keystone-listener
@@ -107,7 +109,7 @@ barbican_api_healthcheck_test:
- >-
healthcheck_curl {{
'https' if barbican_enable_tls_backend | bool else 'http' }}://{{
- api_interface_address | put_address_in_context('url') }}:{{ barbican_api_listen_port }}
+ api_interface_address | put_address_in_context('url') }}:{{ barbican_api_listen_port }}/healthcheck"
barbican_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
barbican_api_healthcheck:
interval: "{{ barbican_api_healthcheck_interval }}"
diff --git a/ansible/roles/cinder/defaults/main.yml b/ansible/roles/cinder/defaults/main.yml
index e2a2d2dd6..4258d863e 100644
--- a/ansible/roles/cinder/defaults/main.yml
+++ b/ansible/roles/cinder/defaults/main.yml
@@ -18,7 +18,8 @@ cinder_services:
listen_port: "{{ cinder_api_listen_port }}"
tls_backend: "{{ cinder_enable_tls_backend }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
cinder_api_external:
enabled: "{{ enable_cinder }}"
mode: "http"
@@ -28,7 +29,8 @@ cinder_services:
listen_port: "{{ cinder_api_listen_port }}"
tls_backend: "{{ cinder_enable_tls_backend }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
cinder-scheduler:
container_name: cinder_scheduler
group: cinder-scheduler
@@ -125,7 +127,7 @@ cinder_api_healthcheck_test:
- >-
healthcheck_curl {{
'https' if cinder_enable_tls_backend | bool else 'http' }}://{{
- api_interface_address | put_address_in_context('url') }}:{{ cinder_api_listen_port }}
+ api_interface_address | put_address_in_context('url') }}:{{ cinder_api_listen_port }}/healthcheck
cinder_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
cinder_api_healthcheck:
interval: "{{ cinder_api_healthcheck_interval }}"
diff --git a/ansible/roles/cloudkitty/defaults/main.yml b/ansible/roles/cloudkitty/defaults/main.yml
index c5c093571..b1840642e 100644
--- a/ansible/roles/cloudkitty/defaults/main.yml
+++ b/ansible/roles/cloudkitty/defaults/main.yml
@@ -17,7 +17,8 @@ cloudkitty_services:
port: "{{ cloudkitty_api_port }}"
listen_port: "{{ cloudkitty_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
cloudkitty_api_external:
enabled: "{{ enable_cloudkitty }}"
mode: "http"
@@ -26,7 +27,8 @@ cloudkitty_services:
port: "{{ cloudkitty_api_public_port }}"
listen_port: "{{ cloudkitty_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
cloudkitty-processor:
container_name: "cloudkitty_processor"
group: "cloudkitty-processor"
@@ -100,7 +102,11 @@ cloudkitty_api_enable_healthchecks: "{{ enable_container_healthchecks }}"
cloudkitty_api_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
cloudkitty_api_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
cloudkitty_api_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
-cloudkitty_api_healthcheck_test: ["CMD-SHELL", "healthcheck_curl http://{{ api_interface_address | put_address_in_context('url') }}:{{ cloudkitty_api_port }}"]
+cloudkitty_api_healthcheck_test:
+ - "CMD-SHELL"
+ - >-
+ healthcheck_curl http://{{
+ api_interface_address | put_address_in_context('url') }}:{{ cloudkitty_api_port }}/healthcheck
cloudkitty_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
cloudkitty_api_healthcheck:
interval: "{{ cloudkitty_api_healthcheck_interval }}"
diff --git a/ansible/roles/cyborg/defaults/main.yml b/ansible/roles/cyborg/defaults/main.yml
index 75e790eaa..7aa233a00 100644
--- a/ansible/roles/cyborg/defaults/main.yml
+++ b/ansible/roles/cyborg/defaults/main.yml
@@ -16,6 +16,9 @@ cyborg_services:
external: false
port: "{{ cyborg_api_port }}"
listen_port: "{{ cyborg_api_listen_port }}"
+ backend_http_extra:
+ - "option httpchk GET /"
+ - "http-check expect status 200"
cyborg_api_external:
enabled: "{{ enable_cyborg }}"
mode: "http"
@@ -23,6 +26,9 @@ cyborg_services:
external_fqdn: "{{ cyborg_external_fqdn }}"
port: "{{ cyborg_api_public_port }}"
listen_port: "{{ cyborg_api_listen_port }}"
+ backend_http_extra:
+ - "option httpchk GET /"
+ - "http-check expect status 200"
cyborg-agent:
container_name: cyborg_agent
group: cyborg-agent
diff --git a/ansible/roles/designate/defaults/main.yml b/ansible/roles/designate/defaults/main.yml
index cb94c39a6..f9e5bc7e5 100644
--- a/ansible/roles/designate/defaults/main.yml
+++ b/ansible/roles/designate/defaults/main.yml
@@ -17,7 +17,8 @@ designate_services:
port: "{{ designate_api_port }}"
listen_port: "{{ designate_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
tls_backend: "{{ designate_enable_tls_backend | bool }}"
designate_api_external:
enabled: "{{ enable_designate }}"
@@ -27,7 +28,8 @@ designate_services:
port: "{{ designate_api_public_port }}"
listen_port: "{{ designate_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
tls_backend: "{{ designate_enable_tls_backend | bool }}"
designate-backend-bind9:
container_name: designate_backend_bind9
@@ -159,7 +161,7 @@ designate_api_healthcheck_test:
- >-
healthcheck_curl {{
'https' if designate_enable_tls_backend | bool else 'http' }}://{{
- api_interface_address | put_address_in_context('url') }}:{{ designate_api_listen_port }}
+ api_interface_address | put_address_in_context('url') }}:{{ designate_api_listen_port }}/healthcheck
designate_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
designate_api_healthcheck:
interval: "{{ designate_api_healthcheck_interval }}"
diff --git a/ansible/roles/etcd/defaults/main.yml b/ansible/roles/etcd/defaults/main.yml
index 443031ecc..563eff9dc 100644
--- a/ansible/roles/etcd/defaults/main.yml
+++ b/ansible/roles/etcd/defaults/main.yml
@@ -8,12 +8,16 @@ etcd_services:
image: "{{ etcd_image_full }}"
volumes: "{{ etcd_default_volumes + etcd_extra_volumes }}"
dimensions: "{{ etcd_dimensions }}"
+ healthcheck: "{{ etcd_healthcheck }}"
haproxy:
etcd:
enabled: true
mode: "http"
external: false
port: "{{ etcd_client_port }}"
+ backend_http_extra:
+ - "option httpchk GET /health"
+ - "http-check expect status 200"
tls_backend: "{{ etcd_enable_tls | bool }}"
####################
@@ -84,6 +88,19 @@ etcd_tag: "{{ openstack_tag }}"
etcd_image_full: "{{ etcd_image }}:{{ etcd_tag }}"
etcd_dimensions: "{{ default_container_dimensions }}"
+etcd_enable_healthchecks: "{{ enable_container_healthchecks }}"
+etcd_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
+etcd_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
+etcd_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
+etcd_healthcheck_test: ["CMD-SHELL", "healthcheck_curl http://{{ api_interface_address | put_address_in_context('url') }}:{{ etcd_client_port }}/health"]
+etcd_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
+etcd_healthcheck:
+ interval: "{{ etcd_healthcheck_interval }}"
+ retries: "{{ etcd_healthcheck_retries }}"
+ start_period: "{{ etcd_healthcheck_start_period }}"
+ test: "{% if etcd_enable_healthchecks | bool %}{{ etcd_healthcheck_test }}{% else %}NONE{% endif %}"
+ timeout: "{{ etcd_healthcheck_timeout }}"
+
etcd_default_volumes:
- "{{ node_config_directory }}/etcd/:{{ container_config_directory }}/:ro"
- "/etc/localtime:/etc/localtime:ro"
diff --git a/ansible/roles/etcd/tasks/bootstrap_cluster.yml b/ansible/roles/etcd/tasks/bootstrap_cluster.yml
index e62ebfc0d..f8b731dea 100644
--- a/ansible/roles/etcd/tasks/bootstrap_cluster.yml
+++ b/ansible/roles/etcd/tasks/bootstrap_cluster.yml
@@ -12,6 +12,7 @@
name: "{{ service.container_name }}"
volumes: "{{ service.volumes }}"
dimensions: "{{ service.dimensions }}"
+ healthcheck: "{{ service.healthcheck | default(omit) }}"
- name: Wait for etcd service port liveness
ansible.builtin.wait_for:
diff --git a/ansible/roles/etcd/tasks/bootstrap_services.yml b/ansible/roles/etcd/tasks/bootstrap_services.yml
index b2bb46328..d9aa18abc 100644
--- a/ansible/roles/etcd/tasks/bootstrap_services.yml
+++ b/ansible/roles/etcd/tasks/bootstrap_services.yml
@@ -24,6 +24,7 @@
name: "{{ service.container_name }}"
volumes: "{{ service.volumes }}"
dimensions: "{{ service.dimensions }}"
+ healthcheck: "{{ service.healthcheck | default(omit) }}"
- name: Wait for etcd service port liveness
ansible.builtin.wait_for:
diff --git a/ansible/roles/etcd/tasks/restart_services.yml b/ansible/roles/etcd/tasks/restart_services.yml
index 3f6991dcf..192bad8d4 100644
--- a/ansible/roles/etcd/tasks/restart_services.yml
+++ b/ansible/roles/etcd/tasks/restart_services.yml
@@ -12,6 +12,7 @@
volumes: "{{ service.volumes }}"
dimensions: "{{ service.dimensions }}"
environment: "{{ service.environment }}"
+ healthcheck: "{{ service.healthcheck | default(omit) }}"
- name: Wait for etcd service port liveness
ansible.builtin.wait_for:
diff --git a/ansible/roles/glance/defaults/main.yml b/ansible/roles/glance/defaults/main.yml
index b24235c43..b8ab38514 100644
--- a/ansible/roles/glance/defaults/main.yml
+++ b/ansible/roles/glance/defaults/main.yml
@@ -22,7 +22,8 @@ glance_services:
- "timeout client {{ haproxy_glance_api_client_timeout }}"
backend_http_extra:
- "timeout server {{ haproxy_glance_api_server_timeout }}"
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
custom_member_list: "{{ haproxy_members.split(';') }}"
tls_backend: "{{ glance_enable_tls_backend | bool }}"
glance_api_external:
@@ -35,7 +36,8 @@ glance_services:
- "timeout client {{ haproxy_glance_api_client_timeout }}"
backend_http_extra:
- "timeout server {{ haproxy_glance_api_server_timeout }}"
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
custom_member_list: "{{ haproxy_members.split(';') }}"
tls_backend: "{{ glance_enable_tls_backend | bool }}"
@@ -146,7 +148,7 @@ glance_api_healthcheck_test:
- "CMD-SHELL"
- >-
healthcheck_curl {{ 'https' if glance_enable_tls_backend | bool else 'http' }}://{{
- api_interface_address | put_address_in_context('url') }}:{{ glance_api_listen_port }}
+ api_interface_address | put_address_in_context('url') }}:{{ glance_api_listen_port }}/healthcheck
glance_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
glance_api_healthcheck:
interval: "{{ glance_api_healthcheck_interval }}"
@@ -155,6 +157,23 @@ glance_api_healthcheck:
test: "{% if glance_api_enable_healthchecks | bool %}{{ glance_api_healthcheck_test }}{% else %}NONE{% endif %}"
timeout: "{{ glance_api_healthcheck_timeout }}"
+glance_tls_proxy_enable_healthchecks: "{{ enable_container_healthchecks }}"
+glance_tls_proxy_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
+glance_tls_proxy_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
+glance_tls_proxy_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
+glance_tls_proxy_healthcheck_test:
+ - "CMD-SHELL"
+ - >-
+ healthcheck_curl -u {{ haproxy_user }}:{{ haproxy_password }} {{
+ api_interface_address | put_address_in_context('url') }}:{{ glance_tls_proxy_stats_port }}/healthcheck
+glance_tls_proxy_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
+glance_tls_proxy_healthcheck:
+ interval: "{{ glance_tls_proxy_healthcheck_interval }}"
+ retries: "{{ glance_tls_proxy_healthcheck_retries }}"
+ start_period: "{{ glance_tls_proxy_healthcheck_start_period }}"
+ test: "{% if glance_tls_proxy_enable_healthchecks | bool %}{{ glance_tls_proxy_healthcheck_test }}{% else %}NONE{% endif %}"
+ timeout: "{{ glance_tls_proxy_healthcheck_timeout }}"
+
glance_api_default_volumes:
- "{{ node_config_directory }}/glance-api/:{{ container_config_directory }}/:ro"
- "/etc/localtime:/etc/localtime:ro"
diff --git a/ansible/roles/gnocchi/defaults/main.yml b/ansible/roles/gnocchi/defaults/main.yml
index 32ba19ca4..401f14326 100644
--- a/ansible/roles/gnocchi/defaults/main.yml
+++ b/ansible/roles/gnocchi/defaults/main.yml
@@ -17,7 +17,8 @@ gnocchi_services:
port: "{{ gnocchi_api_port }}"
listen_port: "{{ gnocchi_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
gnocchi_api_external:
enabled: "{{ enable_gnocchi }}"
mode: "http"
@@ -26,7 +27,8 @@ gnocchi_services:
port: "{{ gnocchi_api_public_port }}"
listen_port: "{{ gnocchi_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
gnocchi-metricd:
container_name: gnocchi_metricd
group: gnocchi-metricd
@@ -100,7 +102,11 @@ gnocchi_api_enable_healthchecks: "{{ enable_container_healthchecks }}"
gnocchi_api_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
gnocchi_api_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
gnocchi_api_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
-gnocchi_api_healthcheck_test: ["CMD-SHELL", "healthcheck_curl http://{{ api_interface_address | put_address_in_context('url') }}:{{ gnocchi_api_listen_port }}"]
+gnocchi_api_healthcheck_test:
+ - "CMD-SHELL"
+ - >-
+ healthcheck_curl http://{{
+ api_interface_address | put_address_in_context('url') }}:{{ gnocchi_api_listen_port }}/healthcheck
gnocchi_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
gnocchi_api_healthcheck:
interval: "{{ gnocchi_api_healthcheck_interval }}"
diff --git a/ansible/roles/grafana/defaults/main.yml b/ansible/roles/grafana/defaults/main.yml
index 0b34175b8..e7aac005a 100644
--- a/ansible/roles/grafana/defaults/main.yml
+++ b/ansible/roles/grafana/defaults/main.yml
@@ -7,6 +7,7 @@ grafana_services:
image: "{{ grafana_image_full }}"
volumes: "{{ grafana_default_volumes + grafana_extra_volumes }}"
dimensions: "{{ grafana_dimensions }}"
+ healthcheck: "{{ grafana_healthcheck }}"
haproxy:
grafana_server:
enabled: "{{ enable_grafana }}"
@@ -15,7 +16,8 @@ grafana_services:
port: "{{ grafana_server_port }}"
listen_port: "{{ grafana_server_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /api/health"
+ - "http-check expect status 200"
grafana_server_external:
enabled: "{{ enable_grafana_external | bool }}"
mode: "http"
@@ -24,7 +26,8 @@ grafana_services:
port: "{{ grafana_server_public_port }}"
listen_port: "{{ grafana_server_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /api/health"
+ - "http-check expect status 200"
####################
# Database
@@ -90,6 +93,23 @@ grafana_tag: "{{ openstack_tag }}"
grafana_image_full: "{{ grafana_image }}:{{ grafana_tag }}"
grafana_admin_username: "admin"
+grafana_enable_healthchecks: "{{ enable_container_healthchecks }}"
+grafana_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
+grafana_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
+grafana_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
+grafana_healthcheck_test:
+ - "CMD-SHELL"
+ - >-
+ healthcheck_curl http://{{
+ api_interface_address | put_address_in_context('url') }}:{{ grafana_server_port }}/api/health
+grafana_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
+grafana_healthcheck:
+ interval: "{{ grafana_healthcheck_interval }}"
+ retries: "{{ grafana_healthcheck_retries }}"
+ start_period: "{{ grafana_healthcheck_start_period }}"
+ test: "{% if grafana_enable_healthchecks | bool %}{{ grafana_healthcheck_test }}{% else %}NONE{% endif %}"
+ timeout: "{{ grafana_healthcheck_timeout }}"
+
grafana_dimensions: "{{ default_container_dimensions }}"
grafana_default_volumes:
- "{{ node_config_directory }}/grafana/:{{ container_config_directory }}/:ro"
diff --git a/ansible/roles/grafana/handlers/main.yml b/ansible/roles/grafana/handlers/main.yml
index 7096d367d..7e66df2da 100644
--- a/ansible/roles/grafana/handlers/main.yml
+++ b/ansible/roles/grafana/handlers/main.yml
@@ -12,6 +12,7 @@
image: "{{ service.image }}"
volumes: "{{ service.volumes }}"
dimensions: "{{ service.dimensions }}"
+ healthcheck: "{{ service.healthcheck | default(omit) }}"
when:
- inventory_hostname == groups[service.group] | first
@@ -25,7 +26,7 @@
container_engine: "{{ kolla_container_engine }}"
module_name: uri
module_args:
- url: "http://{{ api_interface_address | put_address_in_context('url') }}:{{ grafana_server_port }}/login"
+ url: "http://{{ api_interface_address | put_address_in_context('url') }}:{{ grafana_server_port }}/api/health"
status_code: 200
register: result
until: result.get('status') == 200
@@ -47,5 +48,6 @@
image: "{{ service.image }}"
volumes: "{{ service.volumes }}"
dimensions: "{{ service.dimensions }}"
+ healthcheck: "{{ service.healthcheck | default(omit) }}"
when:
- inventory_hostname != groups[service.group] | first
diff --git a/ansible/roles/heat/defaults/main.yml b/ansible/roles/heat/defaults/main.yml
index f13263d23..ec82d57c0 100644
--- a/ansible/roles/heat/defaults/main.yml
+++ b/ansible/roles/heat/defaults/main.yml
@@ -18,7 +18,8 @@ heat_services:
listen_port: "{{ heat_api_listen_port }}"
tls_backend: "{{ heat_enable_tls_backend }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
heat_api_external:
enabled: "{{ enable_heat }}"
mode: "http"
@@ -28,7 +29,8 @@ heat_services:
listen_port: "{{ heat_api_listen_port }}"
tls_backend: "{{ heat_enable_tls_backend }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
heat-api-cfn:
container_name: heat_api_cfn
group: heat-api-cfn
@@ -47,7 +49,8 @@ heat_services:
listen_port: "{{ heat_api_cfn_listen_port }}"
tls_backend: "{{ heat_enable_tls_backend }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
heat_api_cfn_external:
enabled: "{{ enable_heat }}"
mode: "http"
@@ -57,7 +60,8 @@ heat_services:
listen_port: "{{ heat_api_cfn_listen_port }}"
tls_backend: "{{ heat_enable_tls_backend }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
heat-engine:
container_name: heat_engine
group: heat-engine
@@ -127,7 +131,7 @@ heat_api_healthcheck_test:
- "CMD-SHELL"
- >-
healthcheck_curl {{ 'https' if heat_enable_tls_backend | bool else 'http' }}://{{
- api_interface_address | put_address_in_context('url') }}:{{ heat_api_listen_port }}
+ api_interface_address | put_address_in_context('url') }}:{{ heat_api_listen_port }}/healthcheck
heat_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
heat_api_healthcheck:
interval: "{{ heat_api_healthcheck_interval }}"
@@ -144,7 +148,7 @@ heat_api_cfn_healthcheck_test:
- "CMD-SHELL"
- >-
healthcheck_curl {{ 'https' if heat_enable_tls_backend | bool else 'http' }}://{{
- api_interface_address | put_address_in_context('url') }}:{{ heat_api_cfn_listen_port }}
+ api_interface_address | put_address_in_context('url') }}:{{ heat_api_cfn_listen_port }}/healthcheck
heat_api_cfn_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
heat_api_cfn_healthcheck:
interval: "{{ heat_api_cfn_healthcheck_interval }}"
diff --git a/ansible/roles/keystone/defaults/main.yml b/ansible/roles/keystone/defaults/main.yml
index f6a29d44b..3727fdd3f 100644
--- a/ansible/roles/keystone/defaults/main.yml
+++ b/ansible/roles/keystone/defaults/main.yml
@@ -19,7 +19,8 @@ keystone_services:
listen_port: "{{ keystone_internal_listen_port }}"
backend_http_extra:
- "balance {{ 'source' if enable_keystone_federation | bool else 'roundrobin' }}"
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
keystone_external:
enabled: "{{ enable_keystone }}"
mode: "http"
@@ -30,7 +31,8 @@ keystone_services:
listen_port: "{{ keystone_public_listen_port }}"
backend_http_extra:
- "balance {{ 'source' if enable_keystone_federation | bool else 'roundrobin' }}"
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
keystone-fernet:
container_name: "keystone_fernet"
group: "keystone"
@@ -136,7 +138,7 @@ keystone_healthcheck_test:
- "CMD-SHELL"
- >-
healthcheck_curl {{ 'https' if keystone_enable_tls_backend | bool else 'http' }}://{{
- api_interface_address | put_address_in_context('url') }}:{{ keystone_public_listen_port }}
+ api_interface_address | put_address_in_context('url') }}:{{ keystone_public_listen_port }}/healthcheck
keystone_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
keystone_healthcheck:
interval: "{{ keystone_healthcheck_interval }}"
diff --git a/ansible/roles/magnum/defaults/main.yml b/ansible/roles/magnum/defaults/main.yml
index 0118ee657..0e848a729 100644
--- a/ansible/roles/magnum/defaults/main.yml
+++ b/ansible/roles/magnum/defaults/main.yml
@@ -19,7 +19,8 @@ magnum_services:
port: "{{ magnum_api_port }}"
listen_port: "{{ magnum_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
tls_backend: "{{ magnum_enable_tls_backend | bool }}"
magnum_api_external:
enabled: "{{ enable_magnum }}"
@@ -29,7 +30,8 @@ magnum_services:
port: "{{ magnum_api_public_port }}"
listen_port: "{{ magnum_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
tls_backend: "{{ magnum_enable_tls_backend | bool }}"
magnum-conductor:
container_name: magnum_conductor
@@ -105,7 +107,7 @@ magnum_api_healthcheck_test:
- "CMD-SHELL"
- >-
healthcheck_curl {{ 'https' if magnum_enable_tls_backend | bool else 'http' }}://{{
- api_interface_address | put_address_in_context('url') }}:{{ magnum_api_listen_port }}
+ api_interface_address | put_address_in_context('url') }}:{{ magnum_api_listen_port }}/healthcheck
magnum_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
magnum_api_healthcheck:
interval: "{{ magnum_api_healthcheck_interval }}"
diff --git a/ansible/roles/manila/defaults/main.yml b/ansible/roles/manila/defaults/main.yml
index 8b7442ba5..3ddaa7d84 100644
--- a/ansible/roles/manila/defaults/main.yml
+++ b/ansible/roles/manila/defaults/main.yml
@@ -17,7 +17,8 @@ manila_services:
port: "{{ manila_api_port }}"
listen_port: "{{ manila_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
manila_api_external:
enabled: "{{ enable_manila }}"
mode: "http"
@@ -26,7 +27,8 @@ manila_services:
port: "{{ manila_api_public_port }}"
listen_port: "{{ manila_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
manila-scheduler:
container_name: "manila_scheduler"
group: "manila-scheduler"
@@ -115,7 +117,11 @@ manila_api_enable_healthchecks: "{{ enable_container_healthchecks }}"
manila_api_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
manila_api_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
manila_api_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
-manila_api_healthcheck_test: ["CMD-SHELL", "healthcheck_curl http://{{ api_interface_address | put_address_in_context('url') }}:{{ manila_api_port }}"]
+manila_api_healthcheck_test:
+ - "CMD-SHELL"
+ - >-
+ healthcheck_curl http://{{
+ api_interface_address | put_address_in_context('url') }}:{{ manila_api_port }}/healthcheck
manila_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
manila_api_healthcheck:
interval: "{{ manila_api_healthcheck_interval }}"
diff --git a/ansible/roles/masakari/defaults/main.yml b/ansible/roles/masakari/defaults/main.yml
index 396726964..12910a5b9 100644
--- a/ansible/roles/masakari/defaults/main.yml
+++ b/ansible/roles/masakari/defaults/main.yml
@@ -7,6 +7,7 @@ masakari_services:
image: "{{ masakari_api_image_full }}"
volumes: "{{ masakari_api_default_volumes + masakari_api_extra_volumes }}"
dimensions: "{{ masakari_api_dimensions }}"
+ healthcheck: "{{ masakari_api_healthcheck }}"
wsgi: "masakari.wsgi.api:application"
haproxy:
masakari_api:
@@ -16,7 +17,8 @@ masakari_services:
port: "{{ masakari_api_port }}"
listen_port: "{{ masakari_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /"
+ - "http-check expect status 200"
masakari_api_external:
enabled: "{{ enable_masakari }}"
mode: "http"
@@ -25,7 +27,8 @@ masakari_services:
port: "{{ masakari_api_public_port }}"
listen_port: "{{ masakari_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /"
+ - "http-check expect status 200"
masakari-engine:
container_name: masakari_engine
group: masakari-engine
@@ -105,6 +108,23 @@ masakari_engine_dimensions: "{{ default_container_dimensions }}"
masakari_instancemonitor_dimensions: "{{ masakari_monitors_dimensions | default(default_container_dimensions) }}"
masakari_hostmonitor_dimensions: "{{ default_container_dimensions }}"
+masakari_api_enable_healthchecks: "{{ enable_container_healthchecks }}"
+masakari_api_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
+masakari_api_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
+masakari_api_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
+masakari_api_healthcheck_test:
+ - "CMD-SHELL"
+ - >-
+ healthcheck_curl http://{{
+ api_interface_address | put_address_in_context('url') }}:{{ masakari_api_port }}/healthcheck
+masakari_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
+masakari_api_healthcheck:
+ interval: "{{ masakari_api_healthcheck_interval }}"
+ retries: "{{ masakari_api_healthcheck_retries }}"
+ start_period: "{{ masakari_api_healthcheck_start_period }}"
+ test: "{% if masakari_api_enable_healthchecks | bool %}{{ masakari_api_healthcheck_test }}{% else %}NONE{% endif %}"
+ timeout: "{{ masakari_api_healthcheck_timeout }}"
+
masakari_extra_volumes: "{{ default_extra_volumes }}"
masakari_api_extra_volumes: "{{ masakari_extra_volumes }}"
masakari_engine_extra_volumes: "{{ masakari_extra_volumes }}"
diff --git a/ansible/roles/mistral/defaults/main.yml b/ansible/roles/mistral/defaults/main.yml
index 0bb575590..156342118 100644
--- a/ansible/roles/mistral/defaults/main.yml
+++ b/ansible/roles/mistral/defaults/main.yml
@@ -17,7 +17,8 @@ mistral_services:
port: "{{ mistral_api_port }}"
listen_port: "{{ mistral_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /"
+ - "http-check expect status 200"
mistral_api_external:
enabled: "{{ enable_mistral }}"
mode: "http"
@@ -26,7 +27,8 @@ mistral_services:
port: "{{ mistral_api_public_port }}"
listen_port: "{{ mistral_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /"
+ - "http-check expect status 200"
mistral-engine:
container_name: mistral_engine
group: mistral-engine
diff --git a/ansible/roles/neutron/defaults/main.yml b/ansible/roles/neutron/defaults/main.yml
index 8e3e53c62..0518e3d8d 100644
--- a/ansible/roles/neutron/defaults/main.yml
+++ b/ansible/roles/neutron/defaults/main.yml
@@ -18,7 +18,8 @@ neutron_services:
port: "{{ neutron_server_port }}"
listen_port: "{{ neutron_server_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
tls_backend: "{{ neutron_enable_tls_backend | bool }}"
neutron_server_external:
enabled: true
@@ -28,7 +29,8 @@ neutron_services:
port: "{{ neutron_server_public_port }}"
listen_port: "{{ neutron_server_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
tls_backend: "{{ neutron_enable_tls_backend | bool }}"
neutron-rpc-server:
container_name: "neutron_rpc_server"
@@ -443,7 +445,7 @@ neutron_server_healthcheck_test:
- "CMD-SHELL"
- >-
healthcheck_curl {{ 'https' if neutron_enable_tls_backend | bool else 'http' }}://{{
- api_interface_address | put_address_in_context('url') }}:{{ neutron_server_listen_port }}
+ api_interface_address | put_address_in_context('url') }}:{{ neutron_server_listen_port }}/healthcheck
neutron_server_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
neutron_server_healthcheck:
interval: "{{ neutron_server_healthcheck_interval }}"
diff --git a/ansible/roles/nova/defaults/main.yml b/ansible/roles/nova/defaults/main.yml
index 2fe3b3e52..faf44558a 100644
--- a/ansible/roles/nova/defaults/main.yml
+++ b/ansible/roles/nova/defaults/main.yml
@@ -19,7 +19,8 @@ nova_services:
listen_port: "{{ nova_api_listen_port }}"
tls_backend: "{{ nova_enable_tls_backend }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /"
+ - "http-check expect status 200"
nova_api_external:
enabled: "{{ enable_nova }}"
mode: "http"
@@ -29,7 +30,8 @@ nova_services:
listen_port: "{{ nova_api_listen_port }}"
tls_backend: "{{ nova_enable_tls_backend }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /"
+ - "http-check expect status 200"
nova-metadata:
container_name: "nova_metadata"
group: "nova-metadata"
@@ -48,7 +50,8 @@ nova_services:
listen_port: "{{ nova_metadata_listen_port }}"
tls_backend: "{{ nova_enable_tls_backend }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /"
+ - "http-check expect status 200"
nova_metadata_external:
enabled: "{{ nova_enable_external_metadata }}"
mode: "http"
@@ -58,7 +61,8 @@ nova_services:
listen_port: "{{ nova_metadata_listen_port }}"
tls_backend: "{{ nova_enable_tls_backend }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /"
+ - "http-check expect status 200"
nova-scheduler:
container_name: "nova_scheduler"
group: "nova-scheduler"
diff --git a/ansible/roles/octavia/defaults/main.yml b/ansible/roles/octavia/defaults/main.yml
index 37cd2b077..a75ee1770 100644
--- a/ansible/roles/octavia/defaults/main.yml
+++ b/ansible/roles/octavia/defaults/main.yml
@@ -17,6 +17,9 @@ octavia_services:
port: "{{ octavia_api_port }}"
listen_port: "{{ octavia_api_listen_port }}"
tls_backend: "{{ octavia_enable_tls_backend }}"
+ backend_http_extra:
+ - "option httpchk GET /"
+ - "http-check expect status 200"
octavia_api_external:
enabled: "{{ enable_octavia }}"
mode: "http"
@@ -25,6 +28,9 @@ octavia_services:
port: "{{ octavia_api_public_port }}"
listen_port: "{{ octavia_api_listen_port }}"
tls_backend: "{{ octavia_enable_tls_backend }}"
+ backend_http_extra:
+ - "option httpchk GET /"
+ - "http-check expect status 200"
octavia-driver-agent:
container_name: octavia_driver_agent
group: octavia-driver-agent
diff --git a/ansible/roles/placement/defaults/main.yml b/ansible/roles/placement/defaults/main.yml
index 85a734c18..f70c496b9 100644
--- a/ansible/roles/placement/defaults/main.yml
+++ b/ansible/roles/placement/defaults/main.yml
@@ -19,6 +19,7 @@ placement_services:
tls_backend: "{{ placement_enable_tls_backend }}"
backend_http_extra:
- "option httpchk GET /"
+ - "http-check expect status 200"
placement_api_external:
enabled: "{{ enable_placement }}"
mode: "http"
@@ -29,6 +30,7 @@ placement_services:
tls_backend: "{{ placement_enable_tls_backend }}"
backend_http_extra:
- "option httpchk GET /"
+ - "http-check expect status 200"
####################
# Config Validate
diff --git a/ansible/roles/rabbitmq/defaults/main.yml b/ansible/roles/rabbitmq/defaults/main.yml
index f1ed69f38..72cb1e657 100644
--- a/ansible/roles/rabbitmq/defaults/main.yml
+++ b/ansible/roles/rabbitmq/defaults/main.yml
@@ -26,7 +26,8 @@ rabbitmq_services:
port: "{{ rabbitmq_management_port }}"
host_group: "rabbitmq"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /api/overview"
+ - "http-check send hdr Authorization 'Basic {{ (rabbitmq_monitoring_user + ':' + rabbitmq_monitoring_password) | b64encode }}'"
####################
# Docker
diff --git a/ansible/roles/tacker/defaults/main.yml b/ansible/roles/tacker/defaults/main.yml
index ddcee2a24..e00108b97 100644
--- a/ansible/roles/tacker/defaults/main.yml
+++ b/ansible/roles/tacker/defaults/main.yml
@@ -16,6 +16,9 @@ tacker_services:
external: false
port: "{{ tacker_server_port }}"
listen_port: "{{ tacker_server_listen_port }}"
+ backend_http_extra:
+ - "option httpchk GET /"
+ - "http-check expect status 200"
custom_member_list: "{{ tacker_haproxy_members.split(';') }}"
tacker_server_external:
enabled: "{{ enable_tacker }}"
@@ -24,6 +27,9 @@ tacker_services:
external_fqdn: "{{ tacker_external_fqdn }}"
port: "{{ tacker_server_public_port }}"
listen_port: "{{ tacker_server_listen_port }}"
+ backend_http_extra:
+ - "option httpchk GET /"
+ - "http-check expect status 200"
custom_member_list: "{{ tacker_haproxy_members.split(';') }}"
tacker-conductor:
container_name: "tacker_conductor"
diff --git a/ansible/roles/trove/defaults/main.yml b/ansible/roles/trove/defaults/main.yml
index 3abf8e622..8dd251d4e 100644
--- a/ansible/roles/trove/defaults/main.yml
+++ b/ansible/roles/trove/defaults/main.yml
@@ -18,7 +18,8 @@ trove_services:
listen_port: "{{ trove_api_listen_port }}"
tls_backend: "{{ trove_enable_tls_backend }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
trove_api_external:
enabled: "{{ enable_trove }}"
mode: "http"
@@ -28,7 +29,8 @@ trove_services:
external_fqdn: "{{ trove_external_fqdn }}"
port: "{{ trove_api_public_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
trove-conductor:
container_name: trove_conductor
group: trove-conductor
@@ -106,7 +108,7 @@ trove_api_healthcheck_test:
- "CMD-SHELL"
- >-
healthcheck_curl {{ 'https' if trove_enable_tls_backend | bool else 'http' }}://{{
- api_interface_address | put_address_in_context('url') }}:{{ trove_api_port }}
+ api_interface_address | put_address_in_context('url') }}:{{ trove_api_port }}/healthcheck
trove_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
trove_api_healthcheck:
interval: "{{ trove_api_healthcheck_interval }}"
diff --git a/ansible/roles/watcher/defaults/main.yml b/ansible/roles/watcher/defaults/main.yml
index d22e5ad99..86a68d5b4 100644
--- a/ansible/roles/watcher/defaults/main.yml
+++ b/ansible/roles/watcher/defaults/main.yml
@@ -17,6 +17,7 @@ watcher_services:
listen_port: "{{ watcher_api_listen_port }}"
backend_http_extra:
- "option httpchk GET /"
+ - "http-check expect status 200"
watcher_api_external:
enabled: "{{ enable_watcher }}"
mode: "http"
@@ -26,6 +27,7 @@ watcher_services:
listen_port: "{{ watcher_api_listen_port }}"
backend_http_extra:
- "option httpchk GET /"
+ - "http-check expect status 200"
watcher-applier:
container_name: watcher_applier
group: watcher-applier
diff --git a/ansible/roles/zun/defaults/main.yml b/ansible/roles/zun/defaults/main.yml
index a35d0ddfa..01a577f20 100644
--- a/ansible/roles/zun/defaults/main.yml
+++ b/ansible/roles/zun/defaults/main.yml
@@ -17,7 +17,8 @@ zun_services:
port: "{{ zun_api_port }}"
listen_port: "{{ zun_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
zun_api_external:
enabled: "{{ enable_zun }}"
mode: "http"
@@ -26,7 +27,8 @@ zun_services:
port: "{{ zun_api_public_port }}"
listen_port: "{{ zun_api_listen_port }}"
backend_http_extra:
- - "option httpchk"
+ - "option httpchk GET /healthcheck"
+ - "http-check expect status 200"
zun-wsproxy:
container_name: zun_wsproxy
group: zun-wsproxy
@@ -127,7 +129,7 @@ zun_api_enable_healthchecks: "{{ enable_container_healthchecks }}"
zun_api_healthcheck_interval: "{{ default_container_healthcheck_interval }}"
zun_api_healthcheck_retries: "{{ default_container_healthcheck_retries }}"
zun_api_healthcheck_start_period: "{{ default_container_healthcheck_start_period }}"
-zun_api_healthcheck_test: ["CMD-SHELL", "healthcheck_curl http://{{ api_interface_address | put_address_in_context('url') }}:{{ zun_api_port }}"]
+zun_api_healthcheck_test: ["CMD-SHELL", "healthcheck_curl http://{{ api_interface_address | put_address_in_context('url') }}:{{ zun_api_port }}/healthcheck"]
zun_api_healthcheck_timeout: "{{ default_container_healthcheck_timeout }}"
zun_api_healthcheck:
interval: "{{ zun_api_healthcheck_interval }}"
diff --git a/releasenotes/notes/add-healthcheck-a7b535c31bb72cfe.yaml b/releasenotes/notes/add-healthcheck-a7b535c31bb72cfe.yaml
new file mode 100644
index 000000000..9b0082db7
--- /dev/null
+++ b/releasenotes/notes/add-healthcheck-a7b535c31bb72cfe.yaml
@@ -0,0 +1,14 @@
+---
+features:
+ - |
+ Standardized health check endpoints for OpenStack API
+ services and supporting components (Grafana, etcd, influxdb,
+ rabbitmq). Both HAProxy and Docker health checks now use
+ dedicated endpoints like **/healthcheck**, **/api/health**,
+ or service-specific paths for consistent and reliable detection.
+
+ Health checks now explicitly expect HTTP 200 status codes
+ and use standardized curl commands across all services.
+
+ Docker container health checks have been unified with
+ HAProxy configurations, using the same dedicated endpoints.