Merge "Implement separated haproxy service config"
This commit is contained in:
commit
3c201f8c71
29
inventory/group_vars/adjutant_all.yml
Normal file
29
inventory/group_vars/adjutant_all.yml
Normal file
@ -0,0 +1,29 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_adjutant_api_service:
|
||||
haproxy_service_name: adjutant_api
|
||||
haproxy_backend_nodes: "{{ groups['adjutant_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 5050
|
||||
haproxy_balance_type: http
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['adjutant_api'] is defined and groups['adjutant_api'] | length > 0 }}"
|
||||
|
||||
adjutant_haproxy_services:
|
||||
- "{{ haproxy_adjutant_api_service | combine(haproxy_adjutant_api_service_overrides | default({})) }}"
|
35
inventory/group_vars/all/haproxy.yml
Normal file
35
inventory/group_vars/all/haproxy.yml
Normal file
@ -0,0 +1,35 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_ssl: true
|
||||
haproxy_ssl_all_vips: false
|
||||
|
||||
haproxy_allowlist_networks:
|
||||
- 192.168.0.0/16
|
||||
- 172.16.0.0/12
|
||||
- 10.0.0.0/8
|
||||
|
||||
haproxy_stick_table_allowlist_networks: "{{ haproxy_allowlist_networks }}"
|
||||
|
||||
# haproxy default stick table
|
||||
# returns 429 when more than 20 4xx responses per 10 second window
|
||||
# from external IP addresses. Override as necessary.
|
||||
openstack_haproxy_stick_table:
|
||||
- "stick-table type ipv6 size 256k expire 10s store http_err_rate(10s)"
|
||||
- "http-request track-sc0 src"
|
||||
- "http-request deny deny_status 429 if { sc_http_err_rate(0) gt 20 } !{ src {{ haproxy_stick_table_allowlist_networks | join(' } !{ src ') }} }"
|
||||
|
||||
# apply the stick table as default for all backends
|
||||
haproxy_stick_table: "{{ openstack_haproxy_stick_table }}"
|
28
inventory/group_vars/aodh_all.yml
Normal file
28
inventory/group_vars/aodh_all.yml
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_aodh_api_service:
|
||||
haproxy_service_name: aodh_api
|
||||
haproxy_backend_nodes: "{{ groups['aodh_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8042
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['aodh_api'] is defined and groups['aodh_api'] | length > 0 }}"
|
||||
|
||||
aodh_haproxy_services:
|
||||
- "{{ haproxy_aodh_api_service | combine(haproxy_aodh_api_service_overrides | default({})) }}"
|
28
inventory/group_vars/barbican_all.yml
Normal file
28
inventory/group_vars/barbican_all.yml
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_barbican_service:
|
||||
haproxy_service_name: barbican
|
||||
haproxy_backend_nodes: "{{ groups['barbican_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 9311
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['barbican_api'] is defined and groups['barbican_api'] | length > 0 }}"
|
||||
|
||||
barbican_haproxy_services:
|
||||
- "{{ haproxy_barbican_service | combine(haproxy_barbican_service_overrides | default({})) }}"
|
30
inventory/group_vars/blazar_all.yml
Normal file
30
inventory/group_vars/blazar_all.yml
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_blazar_api_service:
|
||||
haproxy_service_name: blazar_api
|
||||
haproxy_backend_nodes: "{{ groups['blazar_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 1234
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_backend_httpcheck_options:
|
||||
- 'expect rstatus (200|401)'
|
||||
haproxy_service_enabled: "{{ groups['blazar_api'] is defined and groups['blazar_api'] | length > 0 }}"
|
||||
|
||||
blazar_haproxy_services:
|
||||
- "{{ haproxy_blazar_api_service | combine(haproxy_blazar_api_service_overrides | default({})) }}"
|
@ -26,3 +26,17 @@ glance_default_store: "{{ ((groups['swift_all'] is defined) and (groups['swift_a
|
||||
|
||||
# cinder_backend_lvm_inuse: True if current host has an lvm backend
|
||||
cinder_backend_lvm_inuse: '{{ (cinder_backends|default("")|to_json).find("cinder.volume.drivers.lvm.LVMVolumeDriver") != -1 }}'
|
||||
|
||||
haproxy_cinder_api_service:
|
||||
haproxy_service_name: cinder_api
|
||||
haproxy_backend_nodes: "{{ groups['cinder_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8776
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['cinder_api'] is defined and groups['cinder_api'] | length > 0 }}"
|
||||
|
||||
cinder_haproxy_services:
|
||||
- "{{ haproxy_cinder_api_service | combine(haproxy_cinder_api_service_overrides | default({})) }}"
|
||||
|
29
inventory/group_vars/cloudkitty_all.yml
Normal file
29
inventory/group_vars/cloudkitty_all.yml
Normal file
@ -0,0 +1,29 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_cloudkitty_api_service:
|
||||
haproxy_service_name: cloudkitty_api
|
||||
haproxy_backend_nodes: "{{ groups['cloudkitty_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8089
|
||||
haproxy_balance_type: http
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['cloudkitty_api'] is defined and groups['cloudkitty_api'] | length > 0 }}"
|
||||
|
||||
cloudkitty_haproxy_services:
|
||||
- "{{ haproxy_cloudkitty_api_service | combine(haproxy_cloudkitty_api_service_overrides | default({})) }}"
|
30
inventory/group_vars/designate_all.yml
Normal file
30
inventory/group_vars/designate_all.yml
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_designate_api_service:
|
||||
haproxy_service_name: designate_api
|
||||
haproxy_backend_nodes: "{{ groups['designate_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 9001
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "forwardfor"
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
- "httplog"
|
||||
haproxy_service_enabled: "{{ groups['designate_api'] is defined and groups['designate_api'] | length > 0 }}"
|
||||
|
||||
designate_haproxy_services:
|
||||
- "{{ haproxy_designate_api_service | combine(haproxy_designate_api_service_overrides | default({})) }}"
|
@ -51,3 +51,26 @@ galera_server_proxy_protocol_networks: >-
|
||||
# Galera sessions are long lived, so if we do endpoint maintenance we will
|
||||
# force kill the sessions to force a failover to the active endpoint.
|
||||
haproxy_shutdown_sessions: yes
|
||||
|
||||
haproxy_galera_allowlist_networks: "{{ haproxy_allowlist_networks }}"
|
||||
|
||||
haproxy_galera_service:
|
||||
haproxy_service_name: galera
|
||||
haproxy_backend_nodes: "{{ (groups['galera_all'] | default([]))[:1] }}" # list expected
|
||||
haproxy_backup_nodes: "{{ (groups['galera_all'] | default([]))[1:] }}"
|
||||
haproxy_bind: "{{ [internal_lb_vip_address] }}"
|
||||
haproxy_port: 3306
|
||||
haproxy_check_port: 9200
|
||||
haproxy_balance_type: tcp
|
||||
haproxy_stick_table_enabled: False
|
||||
haproxy_timeout_client: 5000s
|
||||
haproxy_timeout_server: 5000s
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_backend_server_options:
|
||||
- "send-proxy-v2"
|
||||
haproxy_allowlist_networks: "{{ haproxy_galera_allowlist_networks }}"
|
||||
haproxy_service_enabled: "{{ groups['galera_all'] is defined and groups['galera_all'] | length > 0 }}"
|
||||
|
||||
galera_haproxy_services:
|
||||
- "{{ haproxy_galera_service | combine(haproxy_galera_service_overrides | default({})) }}"
|
||||
|
@ -22,3 +22,18 @@ glance_container_bind_mounts:
|
||||
mount_path: "/openstack/{{ inventory_hostname }}"
|
||||
- bind_dir_path: "/var/lib/glance/cache"
|
||||
mount_path: "/openstack/{{ inventory_hostname }}"
|
||||
|
||||
haproxy_glance_api_service:
|
||||
haproxy_service_name: glance_api
|
||||
haproxy_backend_nodes: "{{ groups['glance_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 9292
|
||||
haproxy_balance_type: http
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['glance_api'] is defined and groups['glance_api'] | length > 0 }}"
|
||||
|
||||
glance_haproxy_services:
|
||||
- "{{ haproxy_glance_api_service | combine(haproxy_glance_api_service_overrides | default({})) }}"
|
||||
|
@ -17,3 +17,17 @@
|
||||
gnocchi_container_bind_mounts:
|
||||
- bind_dir_path: "/var/lib/gnocchi"
|
||||
mount_path: "/openstack/{{ inventory_hostname }}"
|
||||
|
||||
haproxy_gnocchi_service:
|
||||
haproxy_service_name: gnocchi
|
||||
haproxy_backend_nodes: "{{ groups['gnocchi_all'] | default([]) }}"
|
||||
haproxy_port: 8041
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['gnocchi_all'] is defined and groups['gnocchi_all'] | length > 0 }}"
|
||||
|
||||
gnocchi_haproxy_services:
|
||||
- "{{ haproxy_gnocchi_service | combine(haproxy_gnocchi_service_overrides | default({})) }}"
|
||||
|
@ -19,27 +19,19 @@ keepalived_selinux_compile_rules:
|
||||
- keepalived_ping
|
||||
- keepalived_haproxy_pid_file
|
||||
|
||||
haproxy_ssl_letsencrypt_enable: false
|
||||
haproxy_ssl_letsencrypt_acl:
|
||||
letsencrypt-acl:
|
||||
rule: "path_beg /.well-known/acme-challenge/"
|
||||
backend_name: letsencrypt
|
||||
|
||||
# Ensure that the package state matches the global setting
|
||||
haproxy_package_state: "{{ package_state }}"
|
||||
|
||||
haproxy_allowlist_networks:
|
||||
- 192.168.0.0/16
|
||||
- 172.16.0.0/12
|
||||
- 10.0.0.0/8
|
||||
|
||||
haproxy_galera_allowlist_networks: "{{ haproxy_allowlist_networks }}"
|
||||
haproxy_nova_metadata_allowlist_networks: "{{ haproxy_allowlist_networks }}"
|
||||
haproxy_rabbitmq_management_allowlist_networks: "{{ haproxy_allowlist_networks }}"
|
||||
haproxy_opendaylight_allowlist_networks: "{{ haproxy_allowlist_networks }}"
|
||||
haproxy_stick_table_allowlist_networks: "{{ haproxy_allowlist_networks }}"
|
||||
haproxy_ironic_allowlist_networks: "{{ haproxy_allowlist_networks }}"
|
||||
haproxy_ironic_inspector_allowlist_networks: "{{ haproxy_allowlist_networks }}"
|
||||
|
||||
# Variables to set security headers used by browsers
|
||||
haproxy_security_headers_max_age: 31536000
|
||||
# Set CSP headers to report only for testing
|
||||
haproxy_security_headers_csp_report_only: False
|
||||
# To override the CSP used by a specific service define a variable haproxy_<service name>_csp
|
||||
haproxy_security_headers_csp: >
|
||||
http-response set-header {{ haproxy_security_headers_csp_report_only | ternary('Content-Security-Policy-Report-Only', 'Content-Security-Policy') }} "
|
||||
default-src 'self';
|
||||
@ -62,28 +54,6 @@ haproxy_security_headers:
|
||||
- 'http-response set-header Referrer-Policy "same-origin"'
|
||||
- 'http-response set-header Permissions-Policy "accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(self), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), navigation-override=(self), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(), usb=(), web-share=(), xr-spatial-tracking=(), clipboard-read=(self), clipboard-write=(self), gamepad=(), speaker-selection=()"'
|
||||
|
||||
# haproxy default stick table
|
||||
# returns 429 when more than 20 4xx responses per 10 second window
|
||||
# from external IP addresses. Override as necessary.
|
||||
openstack_haproxy_stick_table:
|
||||
- "stick-table type ipv6 size 256k expire 10s store http_err_rate(10s)"
|
||||
- "http-request track-sc0 src"
|
||||
- "http-request deny deny_status 429 if { sc_http_err_rate(0) gt 20 } !{ src {{haproxy_stick_table_allowlist_networks | join(' } !{ src ') }} }"
|
||||
|
||||
# apply the stick table as default for all backends
|
||||
haproxy_stick_table: "{{ openstack_haproxy_stick_table }}"
|
||||
|
||||
# special haproxy stick table for horizon
|
||||
# returns 429 when more than 20 calls to /auth per 10 second window
|
||||
# returns 429 when more than 20 4xx responses per 10 second window
|
||||
# from external IP addresses. Override as necessary.
|
||||
openstack_haproxy_horizon_stick_table:
|
||||
- "stick-table type ipv6 size 256k expire 10s store http_req_rate(10s),http_err_rate(10s)"
|
||||
- "http-request track-sc0 src"
|
||||
- "http-request deny deny_status 429 if { sc_http_req_rate(0) gt 20 } { path_beg /auth } !{ src {{haproxy_stick_table_allowlist_networks | join(' } !{ src ') }} }"
|
||||
- "http-request deny deny_status 429 if { sc_http_err_rate(0) gt 20 } !{ src {{haproxy_stick_table_allowlist_networks | join(' } !{ src ') }} }"
|
||||
|
||||
|
||||
haproxy_security_txt_service:
|
||||
haproxy_backend_only: true
|
||||
haproxy_service_name: security_txt
|
||||
@ -120,53 +90,20 @@ haproxy_base_service:
|
||||
entries:
|
||||
- "#Regular expression map file - this comment is defined in the base frontend config"
|
||||
|
||||
haproxy_adjutant_api_service:
|
||||
haproxy_service_name: adjutant_api
|
||||
haproxy_backend_nodes: "{{ groups['adjutant_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 5050
|
||||
# Handles LetsEncrypt HTTP-01 challenge
|
||||
haproxy_letsencrypt_service:
|
||||
haproxy_service_name: letsencrypt
|
||||
haproxy_backend_nodes: "{{ groups['haproxy_all'] }}"
|
||||
backend_rise: 1
|
||||
backend_fall: 5
|
||||
interval: 4000
|
||||
haproxy_bind:
|
||||
- 127.0.0.1
|
||||
haproxy_port: "{{ haproxy_ssl_letsencrypt_certbot_backend_port }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['adjutant_api'] is defined and groups['adjutant_api'] | length > 0 }}"
|
||||
|
||||
haproxy_aodh_api_service:
|
||||
haproxy_service_name: aodh_api
|
||||
haproxy_backend_nodes: "{{ groups['aodh_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8042
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['aodh_api'] is defined and groups['aodh_api'] | length > 0 }}"
|
||||
|
||||
haproxy_barbican_service:
|
||||
haproxy_service_name: barbican
|
||||
haproxy_backend_nodes: "{{ groups['barbican_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 9311
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['barbican_api'] is defined and groups['barbican_api'] | length > 0 }}"
|
||||
|
||||
haproxy_blazar_api_service:
|
||||
haproxy_service_name: blazar_api
|
||||
haproxy_backend_nodes: "{{ groups['blazar_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 1234
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_backend_httpcheck_options:
|
||||
- 'expect rstatus (200|401)'
|
||||
haproxy_service_enabled: "{{ groups['blazar_api'] is defined and groups['blazar_api'] | length > 0 }}"
|
||||
haproxy_service_enabled: "{{ (haproxy_ssl_letsencrypt_enable | bool and haproxy_ssl | bool) }}"
|
||||
|
||||
# RGW backend is defined here as it might be referring to an external ceph cluster via 'ceph_rgws'
|
||||
haproxy_ceph_rgw_service:
|
||||
haproxy_service_name: ceph-rgw
|
||||
haproxy_backend_nodes: "{{ (groups['ceph-rgw'] is defined and groups['ceph-rgw'] | length > 0) | ternary(groups['ceph-rgw'], ceph_rgws) }}"
|
||||
@ -181,523 +118,8 @@ haproxy_ceph_rgw_service:
|
||||
- expect rstatus 200|405
|
||||
haproxy_service_enabled: "{{ (groups['ceph-rgw'] is defined and groups['ceph-rgw'] | length > 0) or (ceph_rgws | length > 0) }}"
|
||||
|
||||
haproxy_cinder_api_service:
|
||||
haproxy_service_name: cinder_api
|
||||
haproxy_backend_nodes: "{{ groups['cinder_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8776
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['cinder_api'] is defined and groups['cinder_api'] | length > 0 }}"
|
||||
|
||||
haproxy_cloudkitty_api_service:
|
||||
haproxy_service_name: cloudkitty_api
|
||||
haproxy_backend_nodes: "{{ groups['cloudkitty_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8089
|
||||
haproxy_balance_type: http
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['cloudkitty_api'] is defined and groups['cloudkitty_api'] | length > 0 }}"
|
||||
|
||||
haproxy_designate_api_service:
|
||||
haproxy_service_name: designate_api
|
||||
haproxy_backend_nodes: "{{ groups['designate_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 9001
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "forwardfor"
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
- "httplog"
|
||||
haproxy_service_enabled: "{{ groups['designate_api'] is defined and groups['designate_api'] | length > 0 }}"
|
||||
|
||||
haproxy_galera_service:
|
||||
haproxy_service_name: galera
|
||||
haproxy_backend_nodes: "{{ (groups['galera_all'] | default([]))[:1] }}" # list expected
|
||||
haproxy_backup_nodes: "{{ (groups['galera_all'] | default([]))[1:] }}"
|
||||
haproxy_bind: "{{ [internal_lb_vip_address] }}"
|
||||
haproxy_port: 3306
|
||||
haproxy_check_port: 9200
|
||||
haproxy_balance_type: tcp
|
||||
haproxy_stick_table_enabled: False
|
||||
haproxy_timeout_client: 5000s
|
||||
haproxy_timeout_server: 5000s
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_backend_server_options:
|
||||
- "send-proxy-v2"
|
||||
haproxy_allowlist_networks: "{{ haproxy_galera_allowlist_networks }}"
|
||||
haproxy_service_enabled: "{{ groups['galera_all'] is defined and groups['galera_all'] | length > 0 }}"
|
||||
|
||||
haproxy_glance_api_service:
|
||||
haproxy_service_name: glance_api
|
||||
haproxy_backend_nodes: "{{ groups['glance_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 9292
|
||||
haproxy_balance_type: http
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['glance_api'] is defined and groups['glance_api'] | length > 0 }}"
|
||||
|
||||
haproxy_gnocchi_service:
|
||||
haproxy_service_name: gnocchi
|
||||
haproxy_backend_nodes: "{{ groups['gnocchi_all'] | default([]) }}"
|
||||
haproxy_port: 8041
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['gnocchi_all'] is defined and groups['gnocchi_all'] | length > 0 }}"
|
||||
|
||||
haproxy_heat_api_cfn_service:
|
||||
haproxy_service_name: heat_api_cfn
|
||||
haproxy_backend_nodes: "{{ groups['heat_api_cfn'] | default([]) }}"
|
||||
haproxy_port: 8000
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['heat_api_cfn'] is defined and groups['heat_api_cfn'] | length > 0 }}"
|
||||
|
||||
haproxy_heat_api_service:
|
||||
haproxy_service_name: heat_api
|
||||
haproxy_backend_nodes: "{{ groups['heat_api'] | default([]) }}"
|
||||
haproxy_port: 8004
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['heat_api'] is defined and groups['heat_api'] | length > 0 }}"
|
||||
|
||||
haproxy_horizon_service:
|
||||
haproxy_backend_only: true #only describe the backends, frontend is in `base`
|
||||
haproxy_service_name: horizon
|
||||
haproxy_backend_nodes: "{{ groups['horizon_all'] | default([]) }}"
|
||||
haproxy_backend_port: 80
|
||||
haproxy_balance_type: http
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD /auth/login/ HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['horizon_all'] is defined and groups['horizon_all'] | length > 0 }}"
|
||||
haproxy_stick_table: "{{ openstack_haproxy_horizon_stick_table }}"
|
||||
haproxy_map_entries:
|
||||
- name: base_regex
|
||||
order: 99
|
||||
#match any requests to the horizon backend
|
||||
entries:
|
||||
- '.* horizon-back'
|
||||
|
||||
haproxy_ironic_api_service:
|
||||
haproxy_service_name: ironic_api
|
||||
haproxy_backend_nodes: "{{ groups['ironic_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 6385
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_backend_arguments:
|
||||
- "http-request deny if { path_beg /v1/lookup } !{ src {{haproxy_ironic_allowlist_networks | join(' } !{ src ') }} }"
|
||||
- "http-request deny if { path_beg /v1/heartbeat } !{ src {{haproxy_ironic_allowlist_networks | join(' } !{ src ') }} }"
|
||||
haproxy_service_enabled: "{{ groups['ironic_api'] is defined and groups['ironic_api'] | length > 0 }}"
|
||||
|
||||
haproxy_ironic_inspector_service:
|
||||
haproxy_service_name: ironic_inspector
|
||||
haproxy_backend_nodes: "{{ groups['ironic_inspector'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 5050
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_backend_arguments:
|
||||
- "http-request deny if { path_beg /v1/continue } !{ src {{haproxy_ironic_inspector_allowlist_networks | join(' } !{ src ') }} }"
|
||||
haproxy_service_enabled: "{{ groups['ironic_inspector'] is defined and groups['ironic_inspector'] | length > 0 }}"
|
||||
|
||||
haproxy_keystone_service:
|
||||
haproxy_service_name: keystone_service
|
||||
haproxy_backend_nodes: "{{ groups['keystone_all'] | default([]) }}"
|
||||
haproxy_port: 5000
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_type: "http"
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['keystone_all'] is defined and groups['keystone_all'] | length > 0 }}"
|
||||
|
||||
haproxy_letsencrypt_service:
|
||||
haproxy_service_name: letsencrypt
|
||||
haproxy_backend_nodes: "{{ groups['haproxy_all'] }}"
|
||||
backend_rise: 1
|
||||
backend_fall: 5
|
||||
interval: 4000
|
||||
haproxy_bind:
|
||||
- 127.0.0.1
|
||||
haproxy_port: "{{ haproxy_ssl_letsencrypt_certbot_backend_port }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_service_enabled: "{{ (haproxy_ssl_letsencrypt_enable | bool and haproxy_ssl | bool) }}"
|
||||
|
||||
haproxy_magnum_service:
|
||||
haproxy_service_name: magnum
|
||||
haproxy_backend_nodes: "{{ groups['magnum_all'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 9511
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['magnum_all'] is defined and groups['magnum_all'] | length > 0 }}"
|
||||
|
||||
haproxy_manila_service:
|
||||
haproxy_service_name: manila
|
||||
haproxy_backend_nodes: "{{ groups['manila_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8786
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['manila_api'] is defined and groups['manila_api'] | length > 0 }}"
|
||||
|
||||
haproxy_masakari_api_service:
|
||||
haproxy_service_name: masakari_api
|
||||
haproxy_backend_nodes: "{{ groups['masakari_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 15868
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['masakari_api'] is defined and groups['masakari_api'] | length > 0 }}"
|
||||
|
||||
haproxy_mistral_service:
|
||||
haproxy_service_name: mistral
|
||||
haproxy_backend_nodes: "{{ groups['mistral_all'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8989
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['mistral_all'] is defined and groups['mistral_all'] | length > 0 }}"
|
||||
|
||||
haproxy_murano_service:
|
||||
haproxy_service_name: murano
|
||||
haproxy_backend_nodes: "{{ groups['murano_all'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8082
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /v1 HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_backend_httpcheck_options:
|
||||
- "expect status 401"
|
||||
haproxy_service_enabled: "{{ groups['murano_all'] is defined and groups['murano_all'] | length > 0 }}"
|
||||
|
||||
haproxy_neutron_server_service:
|
||||
haproxy_service_name: neutron_server
|
||||
haproxy_backend_nodes: "{{ groups['neutron_server'] | default([]) }}"
|
||||
haproxy_port: 9696
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['neutron_server'] is defined and groups['neutron_server'] | length > 0 }}"
|
||||
|
||||
haproxy_nova_api_metadata_service:
|
||||
haproxy_service_name: nova_api_metadata
|
||||
haproxy_backend_nodes: "{{ groups['nova_api_metadata'] | default([]) }}"
|
||||
haproxy_bind: "{{ [internal_lb_vip_address] }}"
|
||||
haproxy_port: 8775
|
||||
haproxy_ssl: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_allowlist_networks: "{{ haproxy_nova_metadata_allowlist_networks }}"
|
||||
haproxy_service_enabled: "{{ groups['nova_api_metadata'] is defined and groups['nova_api_metadata'] | length > 0 }}"
|
||||
|
||||
haproxy_nova_api_compute_service:
|
||||
haproxy_service_name: nova_api_os_compute
|
||||
haproxy_backend_nodes: "{{ groups['nova_api_os_compute'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8774
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['nova_api_os_compute'] is defined and groups['nova_api_os_compute'] | length > 0 }}"
|
||||
|
||||
# By default the nova console service on HAProxy is configured in HTTP mode to
|
||||
# allow for more fine grained control. But if the SSL connection is terminated
|
||||
# on the nova console container it has to be run in TCP mode.
|
||||
haproxy_nova_console_http_mode: "{{ not (nova_console_user_ssl_cert is defined
|
||||
and nova_console_user_ssl_key is defined) }}"
|
||||
|
||||
haproxy_nova_spice_console_service:
|
||||
haproxy_service_name: nova_spice_console
|
||||
haproxy_backend_nodes: "{{ groups['nova_console'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: "{{ nova_spice_html5proxy_base_port | default('6082') }}"
|
||||
haproxy_balance_type: "{{ haproxy_nova_console_http_mode | ternary('http', 'tcp') }}"
|
||||
haproxy_timeout_client: 60m
|
||||
haproxy_timeout_server: 60m
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options: "{{ haproxy_nova_console_http_mode | ternary(['httpchk HEAD /spice_auto.html HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck'], []) }}"
|
||||
haproxy_backend_httpcheck_options: "{{ haproxy_nova_console_http_mode | ternary(['expect status 200'], []) }}"
|
||||
haproxy_service_enabled: "{{ groups['nova_console'] is defined and groups['nova_console'] | length > 0 and nova_console_type == 'spice' }}"
|
||||
|
||||
haproxy_nova_serial_console_service:
|
||||
haproxy_service_name: nova_serial_console
|
||||
haproxy_backend_nodes: "{{ groups['nova_console'] | default([]) + ((ironic_console_type == 'serialconsole') | ternary(groups['ironic_console'] | default([]), [])) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: "{{ nova_serialconsoleproxy_port | default('6083') }}"
|
||||
haproxy_balance_type: "{{ haproxy_nova_console_http_mode | ternary('http', 'tcp') }}"
|
||||
haproxy_timeout_client: 60m
|
||||
haproxy_timeout_server: 60m
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options: "{{ haproxy_nova_console_http_mode | ternary(['httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck'], []) }}"
|
||||
haproxy_backend_httpcheck_options: "{{ haproxy_nova_console_http_mode | ternary(['expect status 200'], []) }}"
|
||||
haproxy_service_enabled: "{{ (groups['nova_console'] is defined and groups['nova_console'] | length > 0 and nova_console_type == 'serial') or
|
||||
(groups['ironic_console'] is defined and groups['ironic_console'] | length > 0 and ironic_console_type == 'serial') }}"
|
||||
|
||||
haproxy_nova_novnc_console_service:
|
||||
haproxy_service_name: nova_novnc_console
|
||||
haproxy_backend_nodes: "{{ groups['nova_console'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: "{{ nova_novncproxy_port | default('6080') }}"
|
||||
haproxy_balance_type: "{{ haproxy_nova_console_http_mode | ternary('http', 'tcp') }}"
|
||||
haproxy_timeout_client: 60m
|
||||
haproxy_timeout_server: 60m
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options: "{{ haproxy_nova_console_http_mode | ternary(['httpchk HEAD /vnc.html HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck'], []) }}"
|
||||
haproxy_backend_httpcheck_options: "{{ haproxy_nova_console_http_mode | ternary(['expect status 200'], []) }}"
|
||||
haproxy_service_enabled: "{{ groups['nova_console'] is defined and groups['nova_console'] | length > 0 and nova_console_type == 'novnc' }}"
|
||||
|
||||
# NOTE(jrosser) Clean up legacy console haproxy configs from previous releases
|
||||
haproxy_nova_console_service:
|
||||
haproxy_service_name: nova_console
|
||||
haproxy_service_enabled: False
|
||||
|
||||
haproxy_nova_ironic_console_service:
|
||||
haproxy_service_name: nova_ironic_console
|
||||
haproxy_service_enabled: False
|
||||
|
||||
haproxy_octavia_service:
|
||||
haproxy_service_name: octavia
|
||||
haproxy_backend_nodes: "{{ groups['octavia_all'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 9876
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['octavia_all'] is defined and groups['octavia_all'] | length > 0 }}"
|
||||
|
||||
haproxy_opendaylight_neutron_service:
|
||||
haproxy_service_name: opendaylight-neutron
|
||||
haproxy_backend_nodes: "{{ groups['neutron_server'] | default([]) }}"
|
||||
haproxy_bind: "{{ [internal_lb_vip_address] }}"
|
||||
haproxy_port: 8180
|
||||
haproxy_balance_type: tcp
|
||||
haproxy_timeout_client: 5000s
|
||||
haproxy_timeout_server: 5000s
|
||||
haproxy_allowlist_networks: "{{ haproxy_opendaylight_allowlist_networks }}"
|
||||
haproxy_service_enabled: "{{ (neutron_plugin_type | default('ml2.ovn') == 'ml2.opendaylight') }}"
|
||||
|
||||
haproxy_opendaylight_websocket_service:
|
||||
haproxy_service_name: opendaylight-websocket
|
||||
haproxy_backend_nodes: "{{ groups['neutron_server'] | default([]) }}"
|
||||
haproxy_bind: "{{ [internal_lb_vip_address] }}"
|
||||
haproxy_port: 8185
|
||||
haproxy_balance_type: tcp
|
||||
haproxy_timeout_client: 5000s
|
||||
haproxy_timeout_server: 5000s
|
||||
haproxy_allowlist_networks: "{{ haproxy_opendaylight_allowlist_networks }}"
|
||||
haproxy_service_enabled: "{{ (neutron_plugin_type | default('ml2.ovn') == 'ml2.opendaylight') }}"
|
||||
|
||||
haproxy_placement_service:
|
||||
haproxy_service_name: placement
|
||||
haproxy_backend_nodes: "{{ groups['placement_all'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8780
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['placement_all'] is defined and groups['placement_all'] | length > 0 }}"
|
||||
|
||||
haproxy_rabbitmq_service:
|
||||
haproxy_service_name: rabbitmq_mgmt
|
||||
haproxy_backend_nodes: "{{ groups['rabbitmq'] | default([]) }}"
|
||||
haproxy_ssl: "{{ rabbitmq_management_ssl | bool }}"
|
||||
haproxy_backend_ssl: "{{ rabbitmq_management_ssl | bool }}"
|
||||
haproxy_backend_ca: False
|
||||
haproxy_bind: "{{ [internal_lb_vip_address] }}"
|
||||
haproxy_port: "{{ (rabbitmq_management_ssl | bool) | ternary(15671, 15672) }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_allowlist_networks: "{{ haproxy_rabbitmq_management_allowlist_networks }}"
|
||||
haproxy_service_enabled: "{{ groups['rabbitmq'] is defined and groups['rabbitmq'] | length > 0 }}"
|
||||
|
||||
haproxy_repo_service:
|
||||
haproxy_service_name: repo_all
|
||||
haproxy_backend_nodes: "{{ groups['repo_all'] | default([]) }}"
|
||||
haproxy_bind: "{{ [internal_lb_vip_address] }}"
|
||||
haproxy_port: 8181
|
||||
haproxy_ssl: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /constraints/upper_constraints_cached.txt HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_backend_httpcheck_options:
|
||||
- "expect status 200"
|
||||
haproxy_service_enabled: "{{ groups['repo_all'] is defined and groups['repo_all'] | length > 0 }}"
|
||||
|
||||
haproxy_sahara_api_service:
|
||||
haproxy_service_name: sahara_api
|
||||
haproxy_backend_nodes: "{{ groups['sahara_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_alg: source
|
||||
haproxy_port: 8386
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['sahara_api'] is defined and groups['sahara_api'] | length > 0 }}"
|
||||
|
||||
haproxy_senlin_api_service:
|
||||
haproxy_service_name: senlin_api
|
||||
haproxy_backend_nodes: "{{ groups['senlin_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8778
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['senlin_api'] is defined and groups['senlin_api'] | length > 0 }}"
|
||||
|
||||
haproxy_swift_proxy_service:
|
||||
haproxy_service_name: swift_proxy
|
||||
haproxy_backend_nodes: "{{ groups['swift_proxy'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_alg: source
|
||||
haproxy_port: 8080
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['swift_proxy'] is defined and groups['swift_proxy'] | length > 0 }}"
|
||||
|
||||
haproxy_tacker_service:
|
||||
haproxy_service_name: tacker
|
||||
haproxy_backend_nodes: "{{ groups['tacker_all'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 9890
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "forwardfor"
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
- "httplog"
|
||||
haproxy_service_enabled: "{{ groups['tacker_all'] is defined and groups['tacker_all'] | length > 0 }}"
|
||||
|
||||
haproxy_trove_service:
|
||||
haproxy_service_name: trove
|
||||
haproxy_backend_nodes: "{{ groups['trove_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8779
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['trove_api'] is defined and groups['trove_api'] | length > 0 }}"
|
||||
|
||||
haproxy_zun_api_service:
|
||||
haproxy_service_name: zun_api
|
||||
haproxy_backend_nodes: "{{ groups['zun_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 9517
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['zun_api'] is defined and groups['zun_api'] | length > 0 }}"
|
||||
|
||||
haproxy_zun_console_service:
|
||||
haproxy_service_name: zun_console
|
||||
haproxy_backend_nodes: "{{ groups['zun_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 6784
|
||||
haproxy_balance_type: http
|
||||
haproxy_timeout_client: 60m
|
||||
haproxy_timeout_server: 60m
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_backend_httpcheck_options:
|
||||
- "expect status 405"
|
||||
haproxy_service_enabled: "{{ groups['zun_api'] is defined and groups['zun_api'] | length > 0 }}"
|
||||
|
||||
haproxy_default_services:
|
||||
- service: "{{ haproxy_security_txt_service | combine(haproxy_security_txt_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_base_service | combine(haproxy_base_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_adjutant_api_service | combine(haproxy_adjutant_api_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_aodh_api_service | combine(haproxy_aodh_api_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_barbican_service | combine(haproxy_barbican_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_blazar_api_service | combine(haproxy_blazar_api_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_ceph_rgw_service | combine(haproxy_ceph_rgw_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_cinder_api_service | combine(haproxy_cinder_api_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_cloudkitty_api_service | combine(haproxy_cloudkitty_api_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_designate_api_service | combine(haproxy_designate_api_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_galera_service | combine(haproxy_galera_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_glance_api_service | combine(haproxy_glance_api_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_gnocchi_service | combine(haproxy_gnocchi_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_heat_api_cfn_service | combine(haproxy_heat_api_cfn_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_heat_api_service | combine(haproxy_heat_api_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_horizon_service | combine(haproxy_horizon_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_ironic_api_service | combine(haproxy_ironic_api_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_ironic_inspector_service | combine(haproxy_ironic_inspector_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_keystone_service | combine(haproxy_keystone_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_letsencrypt_service | combine(haproxy_letsencrypt_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_magnum_service | combine(haproxy_magnum_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_manila_service | combine(haproxy_manila_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_masakari_api_service | combine(haproxy_masakari_api_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_mistral_service | combine(haproxy_mistral_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_murano_service | combine(haproxy_murano_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_neutron_server_service | combine(haproxy_neutron_server_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_nova_api_metadata_service | combine(haproxy_nova_api_metadata_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_nova_api_compute_service | combine(haproxy_nova_api_compute_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_nova_spice_console_service | combine(haproxy_nova_spice_console_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_nova_novnc_console_service | combine(haproxy_nova_novnc_console_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_nova_serial_console_service | combine(haproxy_nova_serial_console_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_nova_console_service | combine(haproxy_nova_console_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_nova_ironic_console_service | combine(haproxy_nova_ironic_console_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_octavia_service | combine(haproxy_octavia_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_opendaylight_neutron_service | combine(haproxy_opendaylight_neutron_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_opendaylight_websocket_service | combine(haproxy_opendaylight_websocket_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_placement_service | combine(haproxy_placement_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_rabbitmq_service | combine(haproxy_rabbitmq_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_repo_service | combine(haproxy_repo_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_sahara_api_service | combine(haproxy_sahara_api_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_senlin_api_service | combine(haproxy_senlin_api_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_swift_proxy_service | combine(haproxy_swift_proxy_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_tacker_service | combine(haproxy_tacker_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_trove_service | combine(haproxy_trove_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_zun_api_service | combine(haproxy_zun_api_service_overrides | default({})) }}"
|
||||
- service: "{{ haproxy_zun_console_service | combine(haproxy_zun_console_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_security_txt_service | combine(haproxy_security_txt_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_base_service | combine(haproxy_base_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_letsencrypt_service | combine(haproxy_letsencrypt_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_ceph_rgw_service | combine(haproxy_ceph_rgw_service_overrides | default({})) }}"
|
||||
|
@ -16,3 +16,29 @@
|
||||
# Only enable the heat cinder backups functionality if the cinder backup
|
||||
# service is enabled.
|
||||
heat_cinder_backups_enabled: "{{ hostvars['localhost']['cinder_service_backup_program_enabled'] }}"
|
||||
|
||||
haproxy_heat_api_service:
|
||||
haproxy_service_name: heat_api
|
||||
haproxy_backend_nodes: "{{ groups['heat_api'] | default([]) }}"
|
||||
haproxy_port: 8004
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['heat_api'] is defined and groups['heat_api'] | length > 0 }}"
|
||||
|
||||
haproxy_heat_api_cfn_service:
|
||||
haproxy_service_name: heat_api_cfn
|
||||
haproxy_backend_nodes: "{{ groups['heat_api_cfn'] | default([]) }}"
|
||||
haproxy_port: 8000
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['heat_api_cfn'] is defined and groups['heat_api_cfn'] | length > 0 }}"
|
||||
|
||||
heat_haproxy_services:
|
||||
- "{{ haproxy_heat_api_cfn_service | combine(haproxy_heat_api_cfn_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_heat_api_service | combine(haproxy_heat_api_service_overrides | default({})) }}"
|
||||
|
@ -15,3 +15,34 @@
|
||||
|
||||
horizon_enable_cinder_backup: "{{ hostvars['localhost']['cinder_service_backup_program_enabled'] }}"
|
||||
horizon_enable_ha_router: "{{ groups['neutron_l3_agent'] | length >= 2 }}"
|
||||
|
||||
# special haproxy stick table for horizon
|
||||
# returns 429 when more than 20 calls to /auth per 10 second window
|
||||
# returns 429 when more than 20 4xx responses per 10 second window
|
||||
# from external IP addresses. Override as necessary.
|
||||
openstack_haproxy_horizon_stick_table:
|
||||
- "stick-table type ipv6 size 256k expire 10s store http_req_rate(10s),http_err_rate(10s)"
|
||||
- "http-request track-sc0 src"
|
||||
- "http-request deny deny_status 429 if { sc_http_req_rate(0) gt 20 } { path_beg /auth } !{ src {{ haproxy_stick_table_allowlist_networks | join(' } !{ src ') }} }"
|
||||
- "http-request deny deny_status 429 if { sc_http_err_rate(0) gt 20 } !{ src {{ haproxy_stick_table_allowlist_networks | join(' } !{ src ') }} }"
|
||||
|
||||
haproxy_horizon_service:
|
||||
haproxy_backend_only: true #only describe the backends, frontend is in `base` via haproxy_all group vars
|
||||
haproxy_service_name: horizon
|
||||
haproxy_backend_nodes: "{{ groups['horizon_all'] | default([]) }}"
|
||||
haproxy_backend_port: 80
|
||||
haproxy_balance_type: http
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD /auth/login/ HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['horizon_all'] is defined and groups['horizon_all'] | length > 0 }}"
|
||||
haproxy_stick_table: "{{ openstack_haproxy_horizon_stick_table }}"
|
||||
haproxy_map_entries:
|
||||
- name: base_regex
|
||||
order: 99
|
||||
#match any requests to the horizon backend
|
||||
entries:
|
||||
- '.* horizon-back'
|
||||
|
||||
horizon_haproxy_services:
|
||||
- "{{ haproxy_horizon_service | combine(haproxy_horizon_service_overrides | default({})) }}"
|
||||
|
48
inventory/group_vars/ironic_all.yml
Normal file
48
inventory/group_vars/ironic_all.yml
Normal file
@ -0,0 +1,48 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_ironic_allowlist_networks: "{{ haproxy_allowlist_networks }}"
|
||||
haproxy_ironic_inspector_allowlist_networks: "{{ haproxy_allowlist_networks }}"
|
||||
|
||||
haproxy_ironic_api_service:
|
||||
haproxy_service_name: ironic_api
|
||||
haproxy_backend_nodes: "{{ groups['ironic_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 6385
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_backend_arguments:
|
||||
- "http-request deny if { path_beg /v1/lookup } !{ src {{ haproxy_ironic_allowlist_networks | join(' } !{ src ') }} }"
|
||||
- "http-request deny if { path_beg /v1/heartbeat } !{ src {{ haproxy_ironic_allowlist_networks | join(' } !{ src ') }} }"
|
||||
haproxy_service_enabled: "{{ groups['ironic_api'] is defined and groups['ironic_api'] | length > 0 }}"
|
||||
|
||||
haproxy_ironic_inspector_service:
|
||||
haproxy_service_name: ironic_inspector
|
||||
haproxy_backend_nodes: "{{ groups['ironic_inspector'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 5050
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_backend_arguments:
|
||||
- "http-request deny if { path_beg /v1/continue } !{ src {{ haproxy_ironic_inspector_allowlist_networks | join(' } !{ src ') }} }"
|
||||
haproxy_service_enabled: "{{ groups['ironic_inspector'] is defined and groups['ironic_inspector'] | length > 0 }}"
|
||||
|
||||
ironic_haproxy_services:
|
||||
- "{{ haproxy_ironic_api_service | combine(haproxy_ironic_api_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_ironic_inspector_service | combine(haproxy_ironic_inspector_service_overrides | default({})) }}"
|
@ -18,3 +18,17 @@
|
||||
|
||||
# Hosts allowed to override remote IP with X-Forwarded-For
|
||||
keystone_set_real_ip_from: "{{ groups['haproxy'] | map('extract', hostvars, 'container_address') | list }}"
|
||||
|
||||
haproxy_keystone_service:
|
||||
haproxy_service_name: keystone_service
|
||||
haproxy_backend_nodes: "{{ groups['keystone_all'] | default([]) }}"
|
||||
haproxy_port: 5000
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_type: "http"
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['keystone_all'] is defined and groups['keystone_all'] | length > 0 }}"
|
||||
|
||||
keystone_haproxy_services:
|
||||
- "{{ haproxy_keystone_service | combine(haproxy_keystone_service_overrides | default({})) }}"
|
||||
|
28
inventory/group_vars/magnum_all.yml
Normal file
28
inventory/group_vars/magnum_all.yml
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_magnum_service:
|
||||
haproxy_service_name: magnum
|
||||
haproxy_backend_nodes: "{{ groups['magnum_all'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 9511
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['magnum_all'] is defined and groups['magnum_all'] | length > 0 }}"
|
||||
|
||||
magnum_haproxy_services:
|
||||
- "{{ haproxy_magnum_service | combine(haproxy_magnum_service_overrides | default({})) }}"
|
28
inventory/group_vars/manila_all.yml
Normal file
28
inventory/group_vars/manila_all.yml
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_manila_service:
|
||||
haproxy_service_name: manila
|
||||
haproxy_backend_nodes: "{{ groups['manila_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8786
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['manila_api'] is defined and groups['manila_api'] | length > 0 }}"
|
||||
|
||||
manila_haproxy_services:
|
||||
- "{{ haproxy_manila_service | combine(haproxy_manila_service_overrides | default({})) }}"
|
28
inventory/group_vars/masakari_all.yml
Normal file
28
inventory/group_vars/masakari_all.yml
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_masakari_api_service:
|
||||
haproxy_service_name: masakari_api
|
||||
haproxy_backend_nodes: "{{ groups['masakari_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 15868
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['masakari_api'] is defined and groups['masakari_api'] | length > 0 }}"
|
||||
|
||||
masakari_haproxy_services:
|
||||
- "{{ haproxy_masakari_api_service | combine(haproxy_masakari_api_service_overrides | default({})) }}"
|
28
inventory/group_vars/mistral_all.yml
Normal file
28
inventory/group_vars/mistral_all.yml
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_mistral_service:
|
||||
haproxy_service_name: mistral
|
||||
haproxy_backend_nodes: "{{ groups['mistral_all'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8989
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['mistral_all'] is defined and groups['mistral_all'] | length > 0 }}"
|
||||
|
||||
mistral_haproxy_services:
|
||||
- "{{ haproxy_mistral_service | combine(haproxy_mistral_service_overrides | default({})) }}"
|
30
inventory/group_vars/murano_all.yml
Normal file
30
inventory/group_vars/murano_all.yml
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_murano_service:
|
||||
haproxy_service_name: murano
|
||||
haproxy_backend_nodes: "{{ groups['murano_all'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8082
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /v1 HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_backend_httpcheck_options:
|
||||
- "expect status 401"
|
||||
haproxy_service_enabled: "{{ groups['murano_all'] is defined and groups['murano_all'] | length > 0 }}"
|
||||
|
||||
murano_haproxy_services:
|
||||
- "{{ haproxy_murano_service | combine(haproxy_murano_service_overrides | default({})) }}"
|
54
inventory/group_vars/neutron_all.yml
Normal file
54
inventory/group_vars/neutron_all.yml
Normal file
@ -0,0 +1,54 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_opendaylight_allowlist_networks: "{{ haproxy_allowlist_networks }}"
|
||||
|
||||
haproxy_neutron_server_service:
|
||||
haproxy_service_name: neutron_server
|
||||
haproxy_backend_nodes: "{{ groups['neutron_server'] | default([]) }}"
|
||||
haproxy_port: 9696
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['neutron_server'] is defined and groups['neutron_server'] | length > 0 }}"
|
||||
|
||||
haproxy_opendaylight_neutron_service:
|
||||
haproxy_service_name: opendaylight-neutron
|
||||
haproxy_backend_nodes: "{{ groups['neutron_server'] | default([]) }}"
|
||||
haproxy_bind: "{{ [internal_lb_vip_address] }}"
|
||||
haproxy_port: 8180
|
||||
haproxy_balance_type: tcp
|
||||
haproxy_timeout_client: 5000s
|
||||
haproxy_timeout_server: 5000s
|
||||
haproxy_allowlist_networks: "{{ haproxy_opendaylight_allowlist_networks }}"
|
||||
haproxy_service_enabled: "{{ (neutron_plugin_type | default('ml2.ovn') == 'ml2.opendaylight') }}"
|
||||
|
||||
haproxy_opendaylight_websocket_service:
|
||||
haproxy_service_name: opendaylight-websocket
|
||||
haproxy_backend_nodes: "{{ groups['neutron_server'] | default([]) }}"
|
||||
haproxy_bind: "{{ [internal_lb_vip_address] }}"
|
||||
haproxy_port: 8185
|
||||
haproxy_balance_type: tcp
|
||||
haproxy_timeout_client: 5000s
|
||||
haproxy_timeout_server: 5000s
|
||||
haproxy_allowlist_networks: "{{ haproxy_opendaylight_allowlist_networks }}"
|
||||
haproxy_service_enabled: "{{ (neutron_plugin_type | default('ml2.ovn') == 'ml2.opendaylight') }}"
|
||||
|
||||
neutron_haproxy_services:
|
||||
- "{{ haproxy_neutron_server_service | combine(haproxy_neutron_server_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_opendaylight_neutron_service | combine(haproxy_opendaylight_neutron_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_opendaylight_websocket_service | combine(haproxy_opendaylight_websocket_service_overrides | default({})) }}"
|
@ -14,3 +14,95 @@
|
||||
# limitations under the License.
|
||||
|
||||
nova_ceph_client_uuid: '{{ cinder_ceph_client_uuid | default() }}'
|
||||
|
||||
# By default the nova console service on HAProxy is configured in HTTP mode to
|
||||
# allow for more fine grained control. But if the SSL connection is terminated
|
||||
# on the nova console container it has to be run in TCP mode.
|
||||
haproxy_nova_console_http_mode: "{{ not (nova_console_user_ssl_cert is defined
|
||||
and nova_console_user_ssl_key is defined) }}"
|
||||
|
||||
haproxy_nova_metadata_allowlist_networks: "{{ haproxy_allowlist_networks }}"
|
||||
|
||||
haproxy_nova_api_metadata_service:
|
||||
haproxy_service_name: nova_api_metadata
|
||||
haproxy_backend_nodes: "{{ groups['nova_api_metadata'] | default([]) }}"
|
||||
haproxy_bind: "{{ [internal_lb_vip_address] }}"
|
||||
haproxy_port: 8775
|
||||
haproxy_ssl: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_allowlist_networks: "{{ haproxy_nova_metadata_allowlist_networks }}"
|
||||
haproxy_service_enabled: "{{ groups['nova_api_metadata'] is defined and groups['nova_api_metadata'] | length > 0 }}"
|
||||
|
||||
haproxy_nova_api_compute_service:
|
||||
haproxy_service_name: nova_api_os_compute
|
||||
haproxy_backend_nodes: "{{ groups['nova_api_os_compute'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8774
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['nova_api_os_compute'] is defined and groups['nova_api_os_compute'] | length > 0 }}"
|
||||
|
||||
haproxy_nova_spice_console_service:
|
||||
haproxy_service_name: nova_spice_console
|
||||
haproxy_backend_nodes: "{{ groups['nova_console'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: "{{ nova_spice_html5proxy_base_port | default('6082') }}"
|
||||
haproxy_balance_type: "{{ haproxy_nova_console_http_mode | ternary('http', 'tcp') }}"
|
||||
haproxy_timeout_client: 60m
|
||||
haproxy_timeout_server: 60m
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options: "{{ haproxy_nova_console_http_mode | ternary(['httpchk HEAD /spice_auto.html HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck'], []) }}"
|
||||
haproxy_backend_httpcheck_options: "{{ haproxy_nova_console_http_mode | ternary(['expect status 200'], []) }}"
|
||||
haproxy_service_enabled: "{{ groups['nova_console'] is defined and groups['nova_console'] | length > 0 and nova_console_type == 'spice' }}"
|
||||
|
||||
haproxy_nova_serial_console_service:
|
||||
haproxy_service_name: nova_serial_console
|
||||
haproxy_backend_nodes: "{{ groups['nova_console'] | default([]) + ((ironic_console_type == 'serialconsole') | ternary(groups['ironic_console'] | default([]), [])) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: "{{ nova_serialconsoleproxy_port | default('6083') }}"
|
||||
haproxy_balance_type: "{{ haproxy_nova_console_http_mode | ternary('http', 'tcp') }}"
|
||||
haproxy_timeout_client: 60m
|
||||
haproxy_timeout_server: 60m
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options: "{{ haproxy_nova_console_http_mode | ternary(['httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck'], []) }}"
|
||||
haproxy_backend_httpcheck_options: "{{ haproxy_nova_console_http_mode | ternary(['expect status 200'], []) }}"
|
||||
haproxy_service_enabled: "{{ (groups['nova_console'] is defined and groups['nova_console'] | length > 0 and nova_console_type == 'serial') or
|
||||
(groups['ironic_console'] is defined and groups['ironic_console'] | length > 0 and ironic_console_type == 'serial') }}"
|
||||
|
||||
haproxy_nova_novnc_console_service:
|
||||
haproxy_service_name: nova_novnc_console
|
||||
haproxy_backend_nodes: "{{ groups['nova_console'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: "{{ nova_novncproxy_port | default('6080') }}"
|
||||
haproxy_balance_type: "{{ haproxy_nova_console_http_mode | ternary('http', 'tcp') }}"
|
||||
haproxy_timeout_client: 60m
|
||||
haproxy_timeout_server: 60m
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options: "{{ haproxy_nova_console_http_mode | ternary(['httpchk HEAD /vnc.html HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck'], []) }}"
|
||||
haproxy_backend_httpcheck_options: "{{ haproxy_nova_console_http_mode | ternary(['expect status 200'], []) }}"
|
||||
haproxy_service_enabled: "{{ groups['nova_console'] is defined and groups['nova_console'] | length > 0 and nova_console_type == 'novnc' }}"
|
||||
|
||||
# NOTE(jrosser) Clean up legacy console haproxy configs from previous releases
|
||||
haproxy_nova_console_service:
|
||||
haproxy_service_name: nova_console
|
||||
haproxy_service_enabled: False
|
||||
|
||||
haproxy_nova_ironic_console_service:
|
||||
haproxy_service_name: nova_ironic_console
|
||||
haproxy_service_enabled: False
|
||||
|
||||
nova_haproxy_services:
|
||||
- "{{ haproxy_nova_api_metadata_service | combine(haproxy_nova_api_metadata_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_nova_api_compute_service | combine(haproxy_nova_api_compute_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_nova_spice_console_service | combine(haproxy_nova_spice_console_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_nova_novnc_console_service | combine(haproxy_nova_novnc_console_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_nova_serial_console_service | combine(haproxy_nova_serial_console_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_nova_console_service | combine(haproxy_nova_console_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_nova_ironic_console_service | combine(haproxy_nova_ironic_console_service_overrides | default({})) }}"
|
||||
|
28
inventory/group_vars/octavia_all.yml
Normal file
28
inventory/group_vars/octavia_all.yml
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_octavia_service:
|
||||
haproxy_service_name: octavia
|
||||
haproxy_backend_nodes: "{{ groups['octavia_all'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 9876
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['octavia_all'] is defined and groups['octavia_all'] | length > 0 }}"
|
||||
|
||||
octavia_haproxy_services:
|
||||
- "{{ haproxy_octavia_service | combine(haproxy_octavia_service_overrides | default({})) }}"
|
28
inventory/group_vars/placement_all.yml
Normal file
28
inventory/group_vars/placement_all.yml
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_placement_service:
|
||||
haproxy_service_name: placement
|
||||
haproxy_backend_nodes: "{{ groups['placement_all'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8780
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['placement_all'] is defined and groups['placement_all'] | length > 0 }}"
|
||||
|
||||
placement_haproxy_services:
|
||||
- "{{ haproxy_placement_service | combine(haproxy_placement_service_overrides | default({})) }}"
|
@ -32,3 +32,22 @@ rabbitmq_package_state: "{{ rabbitmq_upgrade | default(False) | bool | ternary('
|
||||
|
||||
# Ensure that all rabbitmq containers get a fixed mac address
|
||||
lxc_container_fixed_mac: true
|
||||
|
||||
haproxy_rabbitmq_management_allowlist_networks: "{{ haproxy_allowlist_networks }}"
|
||||
|
||||
haproxy_rabbitmq_service:
|
||||
haproxy_service_name: rabbitmq_mgmt
|
||||
haproxy_backend_nodes: "{{ groups['rabbitmq'] | default([]) }}"
|
||||
haproxy_ssl: "{{ rabbitmq_management_ssl | bool }}"
|
||||
haproxy_backend_ssl: "{{ rabbitmq_management_ssl | bool }}"
|
||||
haproxy_backend_ca: False
|
||||
haproxy_bind: "{{ [internal_lb_vip_address] }}"
|
||||
haproxy_port: "{{ (rabbitmq_management_ssl | bool) | ternary(15671, 15672) }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_allowlist_networks: "{{ haproxy_rabbitmq_management_allowlist_networks }}"
|
||||
haproxy_service_enabled: "{{ groups['rabbitmq'] is defined and groups['rabbitmq'] | length > 0 }}"
|
||||
|
||||
rabbitmq_haproxy_services:
|
||||
- "{{ haproxy_rabbitmq_service | combine(haproxy_rabbitmq_service_overrides | default({})) }}"
|
||||
|
@ -22,7 +22,7 @@ repo_server_enable_sync_manager: False
|
||||
# Repo container default list of bind mounts
|
||||
repo_container_bind_mounts:
|
||||
- bind_dir_path: "/var/lib/glusterd"
|
||||
mount_path: "/openstack/glusterd/{{inventory_hostname }}"
|
||||
mount_path: "/openstack/glusterd/{{ inventory_hostname }}"
|
||||
|
||||
# Enable glusterfs mount
|
||||
repo_server_systemd_mounts:
|
||||
@ -31,5 +31,21 @@ repo_server_systemd_mounts:
|
||||
type: glusterfs
|
||||
state: 'started'
|
||||
enabled: true
|
||||
|
||||
|
||||
openstack_repo_server_enable_glusterfs: True
|
||||
|
||||
haproxy_repo_service:
|
||||
haproxy_service_name: repo_all
|
||||
haproxy_backend_nodes: "{{ groups['repo_all'] | default([]) }}"
|
||||
haproxy_bind: "{{ [internal_lb_vip_address] }}"
|
||||
haproxy_port: 8181
|
||||
haproxy_ssl: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /constraints/upper_constraints_cached.txt HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_backend_httpcheck_options:
|
||||
- "expect status 200"
|
||||
haproxy_service_enabled: "{{ groups['repo_all'] is defined and groups['repo_all'] | length > 0 }}"
|
||||
|
||||
repo_haproxy_services:
|
||||
- "{{ haproxy_repo_service | combine(haproxy_repo_service_overrides | default({})) }}"
|
||||
|
29
inventory/group_vars/sahara_all.yml
Normal file
29
inventory/group_vars/sahara_all.yml
Normal file
@ -0,0 +1,29 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_sahara_api_service:
|
||||
haproxy_service_name: sahara_api
|
||||
haproxy_backend_nodes: "{{ groups['sahara_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_alg: source
|
||||
haproxy_port: 8386
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['sahara_api'] is defined and groups['sahara_api'] | length > 0 }}"
|
||||
|
||||
sahara_haproxy_services:
|
||||
- "{{ haproxy_sahara_api_service | combine(haproxy_sahara_api_service_overrides | default({})) }}"
|
28
inventory/group_vars/senlin_all.yml
Normal file
28
inventory/group_vars/senlin_all.yml
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_senlin_api_service:
|
||||
haproxy_service_name: senlin_api
|
||||
haproxy_backend_nodes: "{{ groups['senlin_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8778
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['senlin_api'] is defined and groups['senlin_api'] | length > 0 }}"
|
||||
|
||||
senlin_haproxy_services:
|
||||
- "{{ haproxy_senlin_api_service | combine(haproxy_senlin_api_service_overrides | default({})) }}"
|
@ -18,3 +18,18 @@ swift_system_user_name: "{{ hostvars['localhost']['swift_system_user_name'] }}"
|
||||
swift_system_shell: "{{ hostvars['localhost']['swift_system_shell'] }}"
|
||||
swift_system_comment: "{{ hostvars['localhost']['swift_system_comment'] }}"
|
||||
swift_system_home_folder: "{{ hostvars['localhost']['swift_system_home_folder'] }}"
|
||||
|
||||
haproxy_swift_proxy_service:
|
||||
haproxy_service_name: swift_proxy
|
||||
haproxy_backend_nodes: "{{ groups['swift_proxy'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_balance_alg: source
|
||||
haproxy_port: 8080
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['swift_proxy'] is defined and groups['swift_proxy'] | length > 0 }}"
|
||||
|
||||
swift_haproxy_services:
|
||||
- "{{ haproxy_swift_proxy_service | combine(haproxy_swift_proxy_service_overrides | default({})) }}"
|
||||
|
30
inventory/group_vars/tacker_all.yml
Normal file
30
inventory/group_vars/tacker_all.yml
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_tacker_service:
|
||||
haproxy_service_name: tacker
|
||||
haproxy_backend_nodes: "{{ groups['tacker_all'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 9890
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "forwardfor"
|
||||
- "httpchk GET / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
- "httplog"
|
||||
haproxy_service_enabled: "{{ groups['tacker_all'] is defined and groups['tacker_all'] | length > 0 }}"
|
||||
|
||||
tacker_haproxy_services:
|
||||
- "{{ haproxy_tacker_service | combine(haproxy_tacker_service_overrides | default({})) }}"
|
@ -14,3 +14,17 @@
|
||||
# limitations under the License.
|
||||
|
||||
swift_proxy_port: "{{ hostvars['localhost']['swift_proxy_port'] }}"
|
||||
|
||||
haproxy_trove_service:
|
||||
haproxy_service_name: trove
|
||||
haproxy_backend_nodes: "{{ groups['trove_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 8779
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['trove_api'] is defined and groups['trove_api'] | length > 0 }}"
|
||||
|
||||
trove_haproxy_services:
|
||||
- "{{ haproxy_trove_service | combine(haproxy_trove_service_overrides | default({})) }}"
|
||||
|
45
inventory/group_vars/zun_all.yml
Normal file
45
inventory/group_vars/zun_all.yml
Normal file
@ -0,0 +1,45 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
haproxy_zun_api_service:
|
||||
haproxy_service_name: zun_api
|
||||
haproxy_backend_nodes: "{{ groups['zun_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 9517
|
||||
haproxy_balance_type: http
|
||||
haproxy_backend_options:
|
||||
- "httpchk GET /healthcheck HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_service_enabled: "{{ groups['zun_api'] is defined and groups['zun_api'] | length > 0 }}"
|
||||
|
||||
haproxy_zun_console_service:
|
||||
haproxy_service_name: zun_console
|
||||
haproxy_backend_nodes: "{{ groups['zun_api'] | default([]) }}"
|
||||
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||
haproxy_ssl_all_vips: "{{ haproxy_ssl_all_vips }}"
|
||||
haproxy_port: 6784
|
||||
haproxy_balance_type: http
|
||||
haproxy_timeout_client: 60m
|
||||
haproxy_timeout_server: 60m
|
||||
haproxy_balance_alg: source
|
||||
haproxy_backend_options:
|
||||
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||
haproxy_backend_httpcheck_options:
|
||||
- "expect status 405"
|
||||
haproxy_service_enabled: "{{ groups['zun_api'] is defined and groups['zun_api'] | length > 0 }}"
|
||||
|
||||
zun_haproxy_services:
|
||||
- "{{ haproxy_zun_api_service | combine(haproxy_zun_api_service_overrides | default({})) }}"
|
||||
- "{{ haproxy_zun_console_service | combine(haproxy_zun_console_service_overrides | default({})) }}"
|
41
playbooks/common-playbooks/haproxy-service-config.yml
Normal file
41
playbooks/common-playbooks/haproxy-service-config.yml
Normal file
@ -0,0 +1,41 @@
|
||||
---
|
||||
# Copyright 2023, Cleura AB
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# Haproxy service configs are stored in service group vars
|
||||
# (for ex. `glance_haproxy_services` are stored in glance group vars).
|
||||
# This is because they may refer to other variables in this group that are not
|
||||
# used only for haproxy(like `glance_backend_ssl`).
|
||||
# Group haproxy_all does not have access to service group vars by default.
|
||||
# To solve this, haproxy_all hosts are temporarily added to `service_group`.
|
||||
# After haproxy is configured, refresh_inventory is triggered to restore the
|
||||
# original inventory state.
|
||||
|
||||
- hosts: "{{ service_group }}"
|
||||
gather_facts: false
|
||||
run_once: true
|
||||
tasks:
|
||||
- name: "Temporarily copy haproxy_service_configs value from {{ service_group }} to haproxy_all"
|
||||
add_host:
|
||||
name: "{{ item }}"
|
||||
haproxy_service_configs: "{{ hostvars[inventory_hostname][service_variable] }}"
|
||||
with_items: "{{ groups['haproxy_all'] }}"
|
||||
|
||||
- hosts: haproxy_all
|
||||
serial: "{{ haproxy_serial | default('50%') }}"
|
||||
tasks:
|
||||
- name: Configure haproxy for the service
|
||||
import_role:
|
||||
name: haproxy_server
|
||||
tasks_from: haproxy_service_config_external.yml
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: galera_all
|
||||
service_variable: "galera_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install galera server
|
||||
hosts: galera_all
|
||||
gather_facts: false
|
||||
|
@ -47,13 +47,16 @@
|
||||
- "item.when | bool"
|
||||
tags:
|
||||
- haproxy-config # this tag is present because the task is ONLY a config task
|
||||
|
||||
roles:
|
||||
- role: "keepalived"
|
||||
when: haproxy_use_keepalived | bool
|
||||
tags:
|
||||
- keepalived
|
||||
|
||||
- role: "haproxy_server"
|
||||
haproxy_service_configs: "{{ haproxy_default_services + haproxy_extra_services|default([]) }}"
|
||||
haproxy_service_configs: "{{ haproxy_default_services + haproxy_extra_services | default([]) }}"
|
||||
|
||||
environment: "{{ deployment_environment_variables | default({}) }}"
|
||||
tags:
|
||||
- haproxy-config
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: adjutant_api
|
||||
service_variable: "adjutant_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install adjutant services
|
||||
hosts: adjutant_all
|
||||
gather_facts: false
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: aodh_api
|
||||
service_variable: "aodh_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install the aodh components
|
||||
hosts: aodh_all
|
||||
gather_facts: false
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: barbican_api
|
||||
service_variable: "barbican_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Installation and setup of barbican
|
||||
hosts: barbican_all
|
||||
gather_facts: false
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: blazar_api
|
||||
service_variable: "blazar_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install blazar components
|
||||
hosts: blazar_all
|
||||
gather_facts: false
|
||||
|
@ -35,7 +35,14 @@
|
||||
cinder_hosts: "cinder_backup:!cinder_volume:!cinder_scheduler:!cinder_api"
|
||||
cinder_serial: "{{ cinder_backend_serial | default(['1', '100%']) }}"
|
||||
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: cinder_api
|
||||
service_variable: "cinder_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install cinder API services
|
||||
import_playbook: common-playbooks/cinder.yml
|
||||
|
@ -24,6 +24,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: cloudkitty_api
|
||||
service_variable: "cloudkitty_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install cloudkitty services
|
||||
hosts: cloudkitty_all
|
||||
serial: "{{ cloudkitty_api_serial | default(['1', '100%']) }}"
|
||||
|
@ -26,6 +26,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: designate_api
|
||||
service_variable: "designate_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install designate server
|
||||
hosts: designate_all
|
||||
gather_facts: false
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: glance_api
|
||||
service_variable: "glance_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install glance services
|
||||
hosts: "glance_all"
|
||||
serial: "{{ glance_api_serial | default(['1', '100%']) }}"
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: gnocchi_api
|
||||
service_variable: "gnocchi_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install Gnocchi components
|
||||
hosts: gnocchi_all
|
||||
gather_facts: false
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: heat_api
|
||||
service_variable: "heat_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install heat server
|
||||
hosts: heat_all
|
||||
gather_facts: false
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: horizon_all
|
||||
service_variable: "horizon_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install horizon server
|
||||
hosts: horizon_all
|
||||
gather_facts: false
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: ironic_api
|
||||
service_variable: "ironic_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Installation and setup of Ironic
|
||||
hosts: ironic_all
|
||||
gather_facts: false
|
||||
|
@ -51,6 +51,15 @@
|
||||
tags:
|
||||
- keystone
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: keystone_all
|
||||
service_variable: "keystone_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Installation and setup of Keystone
|
||||
hosts: keystone_all
|
||||
serial: "{{ keystone_serial | default(['1', '100%']) }}"
|
||||
|
@ -26,6 +26,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: magnum_all
|
||||
service_variable: "magnum_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install magnum server
|
||||
hosts: magnum_all
|
||||
user: root
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: manila_api
|
||||
service_variable: "manila_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install manila API services
|
||||
hosts: manila_api:manila_scheduler
|
||||
gather_facts: false
|
||||
|
@ -44,6 +44,15 @@
|
||||
- role: "pacemaker_corosync"
|
||||
tags: pacemaker-corosync
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: masakari_api
|
||||
service_variable: "masakari_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install the masakari components
|
||||
hosts: masakari_all
|
||||
gather_facts: false
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: mistral_api
|
||||
service_variable: "mistral_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install mistral components
|
||||
hosts: mistral_all
|
||||
gather_facts: false
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: murano_api
|
||||
service_variable: "murano_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install murano components
|
||||
hosts: murano_all
|
||||
gather_facts: false
|
||||
|
@ -25,7 +25,14 @@
|
||||
dest_group: "neutron_l3_agent, neutron_metadata_agent"
|
||||
group_when: "{{ (neutron_plugin_type | default('ml2.ovn') == 'ml2.ovs.dvr') }}"
|
||||
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: neutron_server
|
||||
service_variable: "neutron_haproxy_services"
|
||||
when: groups[service_group]
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install neutron server
|
||||
import_playbook: common-playbooks/neutron.yml
|
||||
|
@ -13,6 +13,19 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
- name: "Config haproxy service"
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group:
|
||||
- nova_api_os_compute
|
||||
- nova_api_metadata
|
||||
- nova_console
|
||||
- nova_ironic_console
|
||||
service_variable: "nova_haproxy_services"
|
||||
when: groups['nova_all'] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install nova-conductor services
|
||||
import_playbook: common-playbooks/nova.yml
|
||||
vars:
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: octavia-api
|
||||
service_variable: "octavia_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install octavia server
|
||||
hosts: octavia_all
|
||||
gather_facts: false
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: placement_api
|
||||
service_variable: "placement_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install placement components
|
||||
hosts: placement_all
|
||||
gather_facts: false
|
||||
@ -41,7 +50,6 @@
|
||||
- include_tasks: common-tasks/unbound-clients.yml
|
||||
when:
|
||||
- hostvars['localhost']['resolvconf_enabled'] | bool
|
||||
|
||||
roles:
|
||||
- role: "os_placement"
|
||||
- role: "openstack.osa.system_crontab_coordination"
|
||||
|
@ -21,6 +21,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: sahara_api
|
||||
service_variable: "sahara_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install sahara server
|
||||
hosts: sahara_all
|
||||
gather_facts: "{{ osa_gather_facts | default(True) }}"
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: senlin_api
|
||||
service_variable: "senlin_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install senlin services
|
||||
hosts: senlin_all
|
||||
gather_facts: false
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: swift_all
|
||||
service_variable: "swift_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Installation and setup of Swift
|
||||
hosts: swift_all:swift_remote_all
|
||||
gather_facts: false
|
||||
|
@ -23,6 +23,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: tacker_server
|
||||
service_variable: "tacker_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install the tacker components
|
||||
hosts: tacker_all
|
||||
gather_facts: false
|
||||
|
@ -26,6 +26,15 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: trove_api
|
||||
service_variable: "trove_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install trove server
|
||||
hosts: trove_all
|
||||
gather_facts: false
|
||||
|
@ -36,6 +36,15 @@
|
||||
- zun-install
|
||||
- etcd-server
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: zun_api
|
||||
service_variable: "zun_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install the zun components
|
||||
hosts: zun_all
|
||||
gather_facts: false
|
||||
|
@ -53,6 +53,15 @@
|
||||
state: "stopped"
|
||||
when: rabbitmq_upgrade | default(false) | bool
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: rabbitmq_all
|
||||
service_variable: "rabbitmq_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Install rabbitmq server
|
||||
hosts: "{{ rabbitmq_host_group | default('rabbitmq_all') }}"
|
||||
gather_facts: false
|
||||
|
@ -55,6 +55,15 @@
|
||||
- openstack_repo_server_enable_glusterfs | default(False)
|
||||
environment: "{{ deployment_environment_variables | default({}) }}"
|
||||
|
||||
- name: Configure haproxy services
|
||||
import_playbook: common-playbooks/haproxy-service-config.yml
|
||||
vars:
|
||||
service_group: repo_all
|
||||
service_variable: "repo_haproxy_services"
|
||||
when: groups[service_group] | length > 0
|
||||
tags:
|
||||
- haproxy-service-config
|
||||
|
||||
- name: Setup repo servers
|
||||
hosts: repo_all
|
||||
gather_facts: false
|
||||
@ -62,7 +71,6 @@
|
||||
user: root
|
||||
roles:
|
||||
- role: "repo_server"
|
||||
|
||||
vars_files:
|
||||
- defaults/repo_packages/openstack_services.yml
|
||||
- "defaults/{{ install_method }}_install.yml"
|
||||
|
@ -14,8 +14,8 @@
|
||||
# limitations under the License.
|
||||
|
||||
- import_playbook: unbound-install.yml
|
||||
- import_playbook: repo-install.yml
|
||||
- import_playbook: haproxy-install.yml
|
||||
- import_playbook: repo-install.yml
|
||||
- import_playbook: memcached-install.yml
|
||||
- import_playbook: galera-install.yml
|
||||
- import_playbook: qdrouterd-install.yml
|
||||
|
@ -0,0 +1,16 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Haproxy services are now configured separately at the beginning of each
|
||||
service playbook.
|
||||
other:
|
||||
- |
|
||||
Haproxy service definitions(along with their overrides) are no longer
|
||||
stored in haproxy group vars. They were moved to service variables,
|
||||
so for example ``glance_haproxy_services`` are stored in glance_all
|
||||
group variables.
|
||||
- |
|
||||
The structure of ``haproxy_default_services`` and
|
||||
``haproxy_extra_services`` was simplified.
|
||||
Now it's just a list of dicts.
|
||||
It has the same format as ``haproxy_service_configs``.
|
Loading…
x
Reference in New Issue
Block a user