)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":25023,"name":"Jonathan Rosser","email":"jonathan.rosser@rd.bbc.co.uk","username":"jrosser"},"change_message_id":"9276ea7e295863991d982ca5d9b1d697defc3c8f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"84f675b8_32e7a0b7","updated":"2023-02-03 18:56:59.000000000","message":"Initial comments","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"bc808cf4d122ff0674c54f614d1a7a81282122d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"f4c1c2f9_6d219831","updated":"2023-02-16 13:54:47.000000000","message":"i fixed your suggestions so:\n- switched back from haproxy_base_services to haproxy_default_services\n- switched back from haproxy_services to haproxy_service_configs(automatic conversion will be supported until 2024.1)\n- added back support for haproxy service overrides\n- moved haproxy LE temporary service creation from haproxy_server role to openstack-ansible repo\n- added licenses in newly created files","commit_id":"f718ff3e3f278640bfaa30cf1c10c2209aac5a28"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"f6b9b9756cbdf75068c3bde92c11b5a21dde4d20","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"1445a6d3_63da6111","updated":"2023-02-22 21:29:10.000000000","message":"recheck - probably i rebased changes in a wrong order","commit_id":"914209f5c930850814d9207eac57b1acebcf2253"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"c55258d89710e6d25ff23e7552e5fba97012df79","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"12c36246_cd3fc6a5","updated":"2023-03-14 15:28:33.000000000","message":"recheck timeout","commit_id":"0f1b2ce37bde105242924177abba0fbae2042df8"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"47ad15416400adcc3abf31ae9182aed0eecdda7e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"306c2cde_2cc7a0eb","updated":"2023-03-16 11:09:47.000000000","message":"I won\u0027t place +W to avoid confusion as currently other V+2 is set by owner and uploader.\n\nSo having one more review would be great here.","commit_id":"500d6983459dc7cc858dd6be69ad0955d6fe10fb"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"91d5424d6f3977f8c8f45c79cbfbff477da6288d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"a161e43a_d3d96b75","in_reply_to":"306c2cde_2cc7a0eb","updated":"2023-03-16 11:16:34.000000000","message":"ack it\u0027s fine.\n\nJonathan uploaded last patch set to I wondered who should vote on this.\nBut yeah, nothing prevents us to have 3 votes here.","commit_id":"500d6983459dc7cc858dd6be69ad0955d6fe10fb"}],"defaults/main.yml":[{"author":{"_account_id":25023,"name":"Jonathan Rosser","email":"jonathan.rosser@rd.bbc.co.uk","username":"jrosser"},"change_message_id":"9276ea7e295863991d982ca5d9b1d697defc3c8f","unresolved":true,"context_lines":[{"line_number":232,"context_line":"# Ansible group name which should be used for distrtibuting self signed SSL Certificates"},{"line_number":233,"context_line":"haproxy_ansible_group_name: haproxy_all"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"haproxy_base_services:"},{"line_number":236,"context_line":"  - haproxy_service_name: letsencrypt"},{"line_number":237,"context_line":"    haproxy_backend_nodes: \"{{ groups[\u0027haproxy_all\u0027] }}\""},{"line_number":238,"context_line":"    backend_rise: 1"},{"line_number":239,"context_line":"    backend_fall: 5"},{"line_number":240,"context_line":"    interval: 4000"},{"line_number":241,"context_line":"    haproxy_bind:"},{"line_number":242,"context_line":"      - 127.0.0.1"},{"line_number":243,"context_line":"    haproxy_port: \"{{ haproxy_ssl_letsencrypt_certbot_backend_port }}\""},{"line_number":244,"context_line":"    haproxy_balance_type: http"},{"line_number":245,"context_line":"    haproxy_service_enabled: \"{{ (haproxy_ssl_letsencrypt_enable | bool and haproxy_ssl | bool) }}\""},{"line_number":246,"context_line":"  - haproxy_service_name: ceph-rgw"},{"line_number":247,"context_line":"    haproxy_backend_nodes: \"{{ (groups[\u0027ceph-rgw\u0027] is defined and groups[\u0027ceph-rgw\u0027] | length \u003e 0) | ternary(groups[\u0027ceph-rgw\u0027], ceph_rgws) }}\""},{"line_number":248,"context_line":"    haproxy_ssl: \"{{ haproxy_ssl }}\""},{"line_number":249,"context_line":"    haproxy_ssl_all_vips: \"{{ haproxy_ssl_all_vips }}\""},{"line_number":250,"context_line":"    haproxy_balance_alg: source"},{"line_number":251,"context_line":"    haproxy_port: \"{{ radosgw_service_port | default(7980) }}\""},{"line_number":252,"context_line":"    haproxy_balance_type: http"},{"line_number":253,"context_line":"    haproxy_backend_options:"},{"line_number":254,"context_line":"      - httpchk HEAD /"},{"line_number":255,"context_line":"    haproxy_backend_httpcheck_options:"},{"line_number":256,"context_line":"      - expect rstatus 200|405"},{"line_number":257,"context_line":"    haproxy_service_enabled: \"{{ (groups[\u0027ceph-rgw\u0027] is defined and groups[\u0027ceph-rgw\u0027] | length \u003e 0) or (ceph_rgws | length \u003e 0) }}\""},{"line_number":258,"context_line":"haproxy_extra_services: []"},{"line_number":259,"context_line":"haproxy_preconfigured_services: \"{{ haproxy_base_services + haproxy_extra_services }}\""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"0164ebd8_d5bab375","line":259,"range":{"start_line":235,"start_character":0,"end_line":259,"end_character":86},"updated":"2023-02-03 18:56:59.000000000","message":"this is now specific config to OSA rather than keeping the role generic.\n\nthe role should be generic and the specific data passed in through vars when the role is called, just like we do with python_venv_build and the pki role","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"7c426ca2940527da49db2f6577d7a32ab57731fa","unresolved":true,"context_lines":[{"line_number":232,"context_line":"# Ansible group name which should be used for distrtibuting self signed SSL Certificates"},{"line_number":233,"context_line":"haproxy_ansible_group_name: haproxy_all"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"haproxy_base_services:"},{"line_number":236,"context_line":"  - haproxy_service_name: letsencrypt"},{"line_number":237,"context_line":"    haproxy_backend_nodes: \"{{ groups[\u0027haproxy_all\u0027] }}\""},{"line_number":238,"context_line":"    backend_rise: 1"},{"line_number":239,"context_line":"    backend_fall: 5"},{"line_number":240,"context_line":"    interval: 4000"},{"line_number":241,"context_line":"    haproxy_bind:"},{"line_number":242,"context_line":"      - 127.0.0.1"},{"line_number":243,"context_line":"    haproxy_port: \"{{ haproxy_ssl_letsencrypt_certbot_backend_port }}\""},{"line_number":244,"context_line":"    haproxy_balance_type: http"},{"line_number":245,"context_line":"    haproxy_service_enabled: \"{{ (haproxy_ssl_letsencrypt_enable | bool and haproxy_ssl | bool) }}\""},{"line_number":246,"context_line":"  - haproxy_service_name: ceph-rgw"},{"line_number":247,"context_line":"    haproxy_backend_nodes: \"{{ (groups[\u0027ceph-rgw\u0027] is defined and groups[\u0027ceph-rgw\u0027] | length \u003e 0) | ternary(groups[\u0027ceph-rgw\u0027], ceph_rgws) }}\""},{"line_number":248,"context_line":"    haproxy_ssl: \"{{ haproxy_ssl }}\""},{"line_number":249,"context_line":"    haproxy_ssl_all_vips: \"{{ haproxy_ssl_all_vips }}\""},{"line_number":250,"context_line":"    haproxy_balance_alg: source"},{"line_number":251,"context_line":"    haproxy_port: \"{{ radosgw_service_port | default(7980) }}\""},{"line_number":252,"context_line":"    haproxy_balance_type: http"},{"line_number":253,"context_line":"    haproxy_backend_options:"},{"line_number":254,"context_line":"      - httpchk HEAD /"},{"line_number":255,"context_line":"    haproxy_backend_httpcheck_options:"},{"line_number":256,"context_line":"      - expect rstatus 200|405"},{"line_number":257,"context_line":"    haproxy_service_enabled: \"{{ (groups[\u0027ceph-rgw\u0027] is defined and groups[\u0027ceph-rgw\u0027] | length \u003e 0) or (ceph_rgws | length \u003e 0) }}\""},{"line_number":258,"context_line":"haproxy_extra_services: []"},{"line_number":259,"context_line":"haproxy_preconfigured_services: \"{{ haproxy_base_services + haproxy_extra_services }}\""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"f356ef0c_38b039a8","line":259,"range":{"start_line":235,"start_character":0,"end_line":259,"end_character":86},"in_reply_to":"0164ebd8_d5bab375","updated":"2023-02-06 23:22:48.000000000","message":"i fixed it by defining OSA specific config in `inventory/group_vars/haproxy/haproxy.yml`","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"bf47210aa133818af175ef26dd4b818d4c62f576","unresolved":false,"context_lines":[{"line_number":232,"context_line":"# Ansible group name which should be used for distrtibuting self signed SSL Certificates"},{"line_number":233,"context_line":"haproxy_ansible_group_name: haproxy_all"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"haproxy_base_services:"},{"line_number":236,"context_line":"  - haproxy_service_name: letsencrypt"},{"line_number":237,"context_line":"    haproxy_backend_nodes: \"{{ groups[\u0027haproxy_all\u0027] }}\""},{"line_number":238,"context_line":"    backend_rise: 1"},{"line_number":239,"context_line":"    backend_fall: 5"},{"line_number":240,"context_line":"    interval: 4000"},{"line_number":241,"context_line":"    haproxy_bind:"},{"line_number":242,"context_line":"      - 127.0.0.1"},{"line_number":243,"context_line":"    haproxy_port: \"{{ haproxy_ssl_letsencrypt_certbot_backend_port }}\""},{"line_number":244,"context_line":"    haproxy_balance_type: http"},{"line_number":245,"context_line":"    haproxy_service_enabled: \"{{ (haproxy_ssl_letsencrypt_enable | bool and haproxy_ssl | bool) }}\""},{"line_number":246,"context_line":"  - haproxy_service_name: ceph-rgw"},{"line_number":247,"context_line":"    haproxy_backend_nodes: \"{{ (groups[\u0027ceph-rgw\u0027] is defined and groups[\u0027ceph-rgw\u0027] | length \u003e 0) | ternary(groups[\u0027ceph-rgw\u0027], ceph_rgws) }}\""},{"line_number":248,"context_line":"    haproxy_ssl: \"{{ haproxy_ssl }}\""},{"line_number":249,"context_line":"    haproxy_ssl_all_vips: \"{{ haproxy_ssl_all_vips }}\""},{"line_number":250,"context_line":"    haproxy_balance_alg: source"},{"line_number":251,"context_line":"    haproxy_port: \"{{ radosgw_service_port | default(7980) }}\""},{"line_number":252,"context_line":"    haproxy_balance_type: http"},{"line_number":253,"context_line":"    haproxy_backend_options:"},{"line_number":254,"context_line":"      - httpchk HEAD /"},{"line_number":255,"context_line":"    haproxy_backend_httpcheck_options:"},{"line_number":256,"context_line":"      - expect rstatus 200|405"},{"line_number":257,"context_line":"    haproxy_service_enabled: \"{{ (groups[\u0027ceph-rgw\u0027] is defined and groups[\u0027ceph-rgw\u0027] | length \u003e 0) or (ceph_rgws | length \u003e 0) }}\""},{"line_number":258,"context_line":"haproxy_extra_services: []"},{"line_number":259,"context_line":"haproxy_preconfigured_services: \"{{ haproxy_base_services + haproxy_extra_services }}\""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"5be8d8ec_ddc83166","line":259,"range":{"start_line":235,"start_character":0,"end_line":259,"end_character":86},"in_reply_to":"f356ef0c_38b039a8","updated":"2023-03-01 22:58:46.000000000","message":"Done","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"}],"releasenotes/notes/separated-haproxy-config-b38d200ee0baaeac.yaml":[{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"addfe014c83e1d1ca8dec96b7c4c0010218f55c3","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"deprecations:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ``haproxy_service_configs`` format was simplified."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"d6f231f0_e99a015c","line":1,"updated":"2023-02-27 14:53:10.000000000","message":"worth also adding upgrade note to mention format change that should take place in overrides.","commit_id":"914209f5c930850814d9207eac57b1acebcf2253"},{"author":{"_account_id":25023,"name":"Jonathan Rosser","email":"jonathan.rosser@rd.bbc.co.uk","username":"jrosser"},"change_message_id":"590c27255456a711a7811598f0ce4ad261f8881b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"deprecations:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ``haproxy_service_configs`` format was simplified."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"c355abeb_f6b7b66f","line":1,"in_reply_to":"a8b16176_eaa4dc16","updated":"2023-03-21 16:20:00.000000000","message":"Done","commit_id":"914209f5c930850814d9207eac57b1acebcf2253"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"42346882371923c169a2aaf6ecb2221ed502912d","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"deprecations:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    ``haproxy_service_configs`` format was simplified."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"a8b16176_eaa4dc16","line":1,"in_reply_to":"d6f231f0_e99a015c","updated":"2023-03-21 15:32:48.000000000","message":"Thinking about this now, deprecation note might be enough as we\u0027re keeping old behaviour.","commit_id":"914209f5c930850814d9207eac57b1acebcf2253"}],"tasks/haproxy_service_config.yml":[{"author":{"_account_id":25023,"name":"Jonathan Rosser","email":"jonathan.rosser@rd.bbc.co.uk","username":"jrosser"},"change_message_id":"5d0be7bc6dc22f7cdb190a1e45d7352cb9a9dc6e","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    - always"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"- name: Configure haproxy"},{"line_number":32,"context_line":"  delegate_to: \"{{ haproxy_host }}\""},{"line_number":33,"context_line":"  block:"},{"line_number":34,"context_line":"    - name: Create haproxy service config files"},{"line_number":35,"context_line":"      template:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"d62261f4_e2ea9077","line":32,"range":{"start_line":32,"start_character":19,"end_line":32,"end_character":31},"updated":"2023-02-06 09:23:48.000000000","message":"Does the addition of this variable break the role completely for use outside of OSA, as it now cannot be targeted at a group like haproxy_all?","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":25023,"name":"Jonathan Rosser","email":"jonathan.rosser@rd.bbc.co.uk","username":"jrosser"},"change_message_id":"9276ea7e295863991d982ca5d9b1d697defc3c8f","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    - always"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"- name: Configure haproxy"},{"line_number":32,"context_line":"  delegate_to: \"{{ haproxy_host }}\""},{"line_number":33,"context_line":"  block:"},{"line_number":34,"context_line":"    - name: Create haproxy service config files"},{"line_number":35,"context_line":"      template:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"2b15cc72_1e29b4ee","line":32,"range":{"start_line":32,"start_character":19,"end_line":32,"end_character":31},"updated":"2023-02-03 18:56:59.000000000","message":"are all of these tasks delegated to the same host? what happens when there are a group of haproxy servers in a multinode deployment?","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"7c426ca2940527da49db2f6577d7a32ab57731fa","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    - always"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"- name: Configure haproxy"},{"line_number":32,"context_line":"  delegate_to: \"{{ haproxy_host }}\""},{"line_number":33,"context_line":"  block:"},{"line_number":34,"context_line":"    - name: Create haproxy service config files"},{"line_number":35,"context_line":"      template:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"61b11348_8b181269","line":32,"range":{"start_line":32,"start_character":19,"end_line":32,"end_character":31},"in_reply_to":"2b15cc72_1e29b4ee","updated":"2023-02-06 23:22:48.000000000","message":"fixed it by moving moving `delegate_to` to `playbooks/common-tasks/haproxy-service-config.yml` in main repository","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"bf47210aa133818af175ef26dd4b818d4c62f576","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    - always"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"- name: Configure haproxy"},{"line_number":32,"context_line":"  delegate_to: \"{{ haproxy_host }}\""},{"line_number":33,"context_line":"  block:"},{"line_number":34,"context_line":"    - name: Create haproxy service config files"},{"line_number":35,"context_line":"      template:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"83a1868c_63e2cec6","line":32,"range":{"start_line":32,"start_character":19,"end_line":32,"end_character":31},"in_reply_to":"61b11348_8b181269","updated":"2023-03-01 22:58:46.000000000","message":"Done","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"bf47210aa133818af175ef26dd4b818d4c62f576","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    - always"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"- name: Configure haproxy"},{"line_number":32,"context_line":"  delegate_to: \"{{ haproxy_host }}\""},{"line_number":33,"context_line":"  block:"},{"line_number":34,"context_line":"    - name: Create haproxy service config files"},{"line_number":35,"context_line":"      template:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"0c45f723_c7e94c99","line":32,"range":{"start_line":32,"start_character":19,"end_line":32,"end_character":31},"in_reply_to":"c2332dde_812e12ae","updated":"2023-03-01 22:58:46.000000000","message":"Done","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"7c426ca2940527da49db2f6577d7a32ab57731fa","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    - always"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"- name: Configure haproxy"},{"line_number":32,"context_line":"  delegate_to: \"{{ haproxy_host }}\""},{"line_number":33,"context_line":"  block:"},{"line_number":34,"context_line":"    - name: Create haproxy service config files"},{"line_number":35,"context_line":"      template:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"c2332dde_812e12ae","line":32,"range":{"start_line":32,"start_character":19,"end_line":32,"end_character":31},"in_reply_to":"d62261f4_e2ea9077","updated":"2023-02-06 23:22:48.000000000","message":"fixed it by moving moving  delegate_to  to  playbooks/common-tasks/haproxy-service-config.yml  in main repository","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"addfe014c83e1d1ca8dec96b7c4c0010218f55c3","unresolved":true,"context_lines":[{"line_number":17,"context_line":"  template:"},{"line_number":18,"context_line":"    src: service.j2"},{"line_number":19,"context_line":"    dest: \"/etc/haproxy/conf.d/{{ service.haproxy_service_name }}\""},{"line_number":20,"context_line":"# NOTE(damiandabrowski): Deprecated haproxy_service_configs format"},{"line_number":21,"context_line":"# conversion will be removed in 2024.1."},{"line_number":22,"context_line":"#  loop: \"{{ haproxy_service_configs }}\""},{"line_number":23,"context_line":"  loop: \"{{ haproxy_service_configs[0].service is defined | ternary(haproxy_service_configs | map(attribute\u003d\u0027service\u0027), haproxy_service_configs) | list }}\""},{"line_number":24,"context_line":"  loop_control:"},{"line_number":25,"context_line":"    loop_var: service"},{"line_number":26,"context_line":"  when:"},{"line_number":27,"context_line":"    - (service.haproxy_backend_nodes is defined and"},{"line_number":28,"context_line":"      service.haproxy_backend_nodes | length \u003e 0) or"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"e96c4c01_bd020c73","line":25,"range":{"start_line":20,"start_character":0,"end_line":25,"end_character":21},"updated":"2023-02-27 14:53:10.000000000","message":"can we please implement haproxy_service_configs format change in a standalone patch to heave clearer diff of things we want to change for separated config?\n\nWe can rebase config separation on top of format change if we want to benefit from simplification.","commit_id":"914209f5c930850814d9207eac57b1acebcf2253"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"bf47210aa133818af175ef26dd4b818d4c62f576","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  template:"},{"line_number":18,"context_line":"    src: service.j2"},{"line_number":19,"context_line":"    dest: \"/etc/haproxy/conf.d/{{ service.haproxy_service_name }}\""},{"line_number":20,"context_line":"# NOTE(damiandabrowski): Deprecated haproxy_service_configs format"},{"line_number":21,"context_line":"# conversion will be removed in 2024.1."},{"line_number":22,"context_line":"#  loop: \"{{ haproxy_service_configs }}\""},{"line_number":23,"context_line":"  loop: \"{{ haproxy_service_configs[0].service is defined | ternary(haproxy_service_configs | map(attribute\u003d\u0027service\u0027), haproxy_service_configs) | list }}\""},{"line_number":24,"context_line":"  loop_control:"},{"line_number":25,"context_line":"    loop_var: service"},{"line_number":26,"context_line":"  when:"},{"line_number":27,"context_line":"    - (service.haproxy_backend_nodes is defined and"},{"line_number":28,"context_line":"      service.haproxy_backend_nodes | length \u003e 0) or"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"ff967314_94f36824","line":25,"range":{"start_line":20,"start_character":0,"end_line":25,"end_character":21},"in_reply_to":"e96c4c01_bd020c73","updated":"2023-03-01 22:58:46.000000000","message":"Done","commit_id":"914209f5c930850814d9207eac57b1acebcf2253"}],"tasks/haproxy_service_config_temporary.yml":[{"author":{"_account_id":25023,"name":"Jonathan Rosser","email":"jonathan.rosser@rd.bbc.co.uk","username":"jrosser"},"change_message_id":"bf366f414c7e494a20478b9c4dc870c3e3da36db","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# NOTE(damiandabrowski) temporary section made for gating purposes to allow merging of \u0027separated haproxy service config\u0027 changes"},{"line_number":2,"context_line":"# It will be removed once all services support this feature."},{"line_number":3,"context_line":"- name: Check if target role is already prepared for separated haproxy service config"},{"line_number":4,"context_line":"  command: \"grep \u0027^haproxy_services:\u0027 /etc/ansible/roles/{{ service_def.service.role }}/defaults/main.yml\""},{"line_number":5,"context_line":"  ignore_errors: true"},{"line_number":6,"context_line":"  changed_when: false"},{"line_number":7,"context_line":"  loop: \"{{ haproxy_default_services_temporary }}\""},{"line_number":8,"context_line":"  loop_control:"},{"line_number":9,"context_line":"    loop_var: service_def"},{"line_number":10,"context_line":"  register: haproxy_service_definition"},{"line_number":11,"context_line":"  tags:"},{"line_number":12,"context_line":"    - haproxy-service-config"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"- name: Preconfigure haproxy services if target role is not prepared for separated haproxy service config"},{"line_number":15,"context_line":"  template:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"1675b15a_5efddc26","line":12,"range":{"start_line":3,"start_character":0,"end_line":12,"end_character":28},"updated":"2023-02-06 09:19:44.000000000","message":"which host does this run on? those roles are only present on the deploy host, not the haproxy host and it looks like these tasks are intended to target the haproxy host","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"7c426ca2940527da49db2f6577d7a32ab57731fa","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# NOTE(damiandabrowski) temporary section made for gating purposes to allow merging of \u0027separated haproxy service config\u0027 changes"},{"line_number":2,"context_line":"# It will be removed once all services support this feature."},{"line_number":3,"context_line":"- name: Check if target role is already prepared for separated haproxy service config"},{"line_number":4,"context_line":"  command: \"grep \u0027^haproxy_services:\u0027 /etc/ansible/roles/{{ service_def.service.role }}/defaults/main.yml\""},{"line_number":5,"context_line":"  ignore_errors: true"},{"line_number":6,"context_line":"  changed_when: false"},{"line_number":7,"context_line":"  loop: \"{{ haproxy_default_services_temporary }}\""},{"line_number":8,"context_line":"  loop_control:"},{"line_number":9,"context_line":"    loop_var: service_def"},{"line_number":10,"context_line":"  register: haproxy_service_definition"},{"line_number":11,"context_line":"  tags:"},{"line_number":12,"context_line":"    - haproxy-service-config"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"- name: Preconfigure haproxy services if target role is not prepared for separated haproxy service config"},{"line_number":15,"context_line":"  template:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"4f005da3_05014dcb","line":12,"range":{"start_line":3,"start_character":0,"end_line":12,"end_character":28},"in_reply_to":"1675b15a_5efddc26","updated":"2023-02-06 23:22:48.000000000","message":"yes I know, but as you see it\u0027s only temporary part which will be removed after all necessary changes are merged: https://review.opendev.org/c/openstack/openstack-ansible-haproxy_server/+/871194/2/tasks/haproxy_post_install.yml\n\nAFAIK haproxy_host is always deploy host in our gating.","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"bf47210aa133818af175ef26dd4b818d4c62f576","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# NOTE(damiandabrowski) temporary section made for gating purposes to allow merging of \u0027separated haproxy service config\u0027 changes"},{"line_number":2,"context_line":"# It will be removed once all services support this feature."},{"line_number":3,"context_line":"- name: Check if target role is already prepared for separated haproxy service config"},{"line_number":4,"context_line":"  command: \"grep \u0027^haproxy_services:\u0027 /etc/ansible/roles/{{ service_def.service.role }}/defaults/main.yml\""},{"line_number":5,"context_line":"  ignore_errors: true"},{"line_number":6,"context_line":"  changed_when: false"},{"line_number":7,"context_line":"  loop: \"{{ haproxy_default_services_temporary }}\""},{"line_number":8,"context_line":"  loop_control:"},{"line_number":9,"context_line":"    loop_var: service_def"},{"line_number":10,"context_line":"  register: haproxy_service_definition"},{"line_number":11,"context_line":"  tags:"},{"line_number":12,"context_line":"    - haproxy-service-config"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"- name: Preconfigure haproxy services if target role is not prepared for separated haproxy service config"},{"line_number":15,"context_line":"  template:"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"df58ac13_8da60f7c","line":12,"range":{"start_line":3,"start_character":0,"end_line":12,"end_character":28},"in_reply_to":"4f005da3_05014dcb","updated":"2023-03-01 22:58:46.000000000","message":"Done","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"}],"tasks/haproxy_ssl_letsencrypt.yml":[{"author":{"_account_id":25023,"name":"Jonathan Rosser","email":"jonathan.rosser@rd.bbc.co.uk","username":"jrosser"},"change_message_id":"9276ea7e295863991d982ca5d9b1d697defc3c8f","unresolved":true,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"- name: Check if there is an active horizon frontend"},{"line_number":65,"context_line":"  wait_for:"},{"line_number":66,"context_line":"    host: \"{{ external_lb_vip_address }}\""},{"line_number":67,"context_line":"    port: 443"},{"line_number":68,"context_line":"    timeout: 2"},{"line_number":69,"context_line":"  register: horizon_listening"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"848e0c6f_0057969a","line":66,"range":{"start_line":66,"start_character":14,"end_line":66,"end_character":37},"updated":"2023-02-03 18:56:59.000000000","message":"in a H/A deployment this IP will always be on one of the haproxy with keepalived, i don\u0027t think that this task is checking that the specific haproxy instance that is the ansible target is listening.","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":25023,"name":"Jonathan Rosser","email":"jonathan.rosser@rd.bbc.co.uk","username":"jrosser"},"change_message_id":"a0e9d4a58f5bd2093aaf8fe3d31684eba3d57d26","unresolved":true,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"- name: Check if there is an active horizon frontend"},{"line_number":65,"context_line":"  wait_for:"},{"line_number":66,"context_line":"    host: \"{{ external_lb_vip_address }}\""},{"line_number":67,"context_line":"    port: 443"},{"line_number":68,"context_line":"    timeout: 2"},{"line_number":69,"context_line":"  register: horizon_listening"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"df516c5c_68fb0702","line":66,"range":{"start_line":66,"start_character":14,"end_line":66,"end_character":37},"in_reply_to":"756dc8b3_9289e800","updated":"2023-02-14 09:26:10.000000000","message":"All haproxy are binding to the external_lb_vip_address but that address will float between the haproxy nodes under the control of keepalived. The binding to the address and the address being active on an interface are independant.\n\nI just varified this with `wget` and `nc` and http and raw tcp connections to the VIP are always handled by the node where keepalived is in active state, not the local node.","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"7c426ca2940527da49db2f6577d7a32ab57731fa","unresolved":true,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"- name: Check if there is an active horizon frontend"},{"line_number":65,"context_line":"  wait_for:"},{"line_number":66,"context_line":"    host: \"{{ external_lb_vip_address }}\""},{"line_number":67,"context_line":"    port: 443"},{"line_number":68,"context_line":"    timeout: 2"},{"line_number":69,"context_line":"  register: horizon_listening"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"756dc8b3_9289e800","line":66,"range":{"start_line":66,"start_character":14,"end_line":66,"end_character":37},"in_reply_to":"848e0c6f_0057969a","updated":"2023-02-06 23:22:48.000000000","message":"I can\u0027t agree. All haproxy hosts are listening on `external_lb_vip_address` even they don\u0027t have this IP assigned at the moment.\n\nIt makes haproxy ready to handle connections when keepalived changes \u0027master\u0027 node.","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"bf47210aa133818af175ef26dd4b818d4c62f576","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"- name: Check if there is an active horizon frontend"},{"line_number":65,"context_line":"  wait_for:"},{"line_number":66,"context_line":"    host: \"{{ external_lb_vip_address }}\""},{"line_number":67,"context_line":"    port: 443"},{"line_number":68,"context_line":"    timeout: 2"},{"line_number":69,"context_line":"  register: horizon_listening"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"33ae837b_4bc7787e","line":66,"range":{"start_line":66,"start_character":14,"end_line":66,"end_character":37},"in_reply_to":"b1b076fa_f1ab926b","updated":"2023-03-01 22:58:46.000000000","message":"Done","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"bc808cf4d122ff0674c54f614d1a7a81282122d4","unresolved":true,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"- name: Check if there is an active horizon frontend"},{"line_number":65,"context_line":"  wait_for:"},{"line_number":66,"context_line":"    host: \"{{ external_lb_vip_address }}\""},{"line_number":67,"context_line":"    port: 443"},{"line_number":68,"context_line":"    timeout: 2"},{"line_number":69,"context_line":"  register: horizon_listening"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"b1b076fa_f1ab926b","line":66,"range":{"start_line":66,"start_character":14,"end_line":66,"end_character":37},"in_reply_to":"df516c5c_68fb0702","updated":"2023-02-16 13:54:47.000000000","message":"ah i get your point now.\nI moved this part to openstack-ansible repo and fixed the issue(now task checks if there\u0027s active horizon haproxy service).","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":25023,"name":"Jonathan Rosser","email":"jonathan.rosser@rd.bbc.co.uk","username":"jrosser"},"change_message_id":"9276ea7e295863991d982ca5d9b1d697defc3c8f","unresolved":true,"context_lines":[{"line_number":64,"context_line":"- name: Check if there is an active horizon frontend"},{"line_number":65,"context_line":"  wait_for:"},{"line_number":66,"context_line":"    host: \"{{ external_lb_vip_address }}\""},{"line_number":67,"context_line":"    port: 443"},{"line_number":68,"context_line":"    timeout: 2"},{"line_number":69,"context_line":"  register: horizon_listening"},{"line_number":70,"context_line":"  ignore_errors: yes"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"7e220d6b_a2fb30b8","line":67,"range":{"start_line":67,"start_character":10,"end_line":67,"end_character":13},"updated":"2023-02-03 18:56:59.000000000","message":"this assumes that port 443 is in use, which may not be the case","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"bf47210aa133818af175ef26dd4b818d4c62f576","unresolved":false,"context_lines":[{"line_number":64,"context_line":"- name: Check if there is an active horizon frontend"},{"line_number":65,"context_line":"  wait_for:"},{"line_number":66,"context_line":"    host: \"{{ external_lb_vip_address }}\""},{"line_number":67,"context_line":"    port: 443"},{"line_number":68,"context_line":"    timeout: 2"},{"line_number":69,"context_line":"  register: horizon_listening"},{"line_number":70,"context_line":"  ignore_errors: yes"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"75169c12_0fc11166","line":67,"range":{"start_line":67,"start_character":10,"end_line":67,"end_character":13},"in_reply_to":"4e66b8fc_23743646","updated":"2023-03-01 22:58:46.000000000","message":"Done","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"7c426ca2940527da49db2f6577d7a32ab57731fa","unresolved":true,"context_lines":[{"line_number":64,"context_line":"- name: Check if there is an active horizon frontend"},{"line_number":65,"context_line":"  wait_for:"},{"line_number":66,"context_line":"    host: \"{{ external_lb_vip_address }}\""},{"line_number":67,"context_line":"    port: 443"},{"line_number":68,"context_line":"    timeout: 2"},{"line_number":69,"context_line":"  register: horizon_listening"},{"line_number":70,"context_line":"  ignore_errors: yes"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"4e66b8fc_23743646","line":67,"range":{"start_line":67,"start_character":10,"end_line":67,"end_character":13},"in_reply_to":"7e220d6b_a2fb30b8","updated":"2023-02-06 23:22:48.000000000","message":"i changed that to \u002780\u0027 because it\u0027s used by HTTP-01 challenge.\nbut actually that\u0027s the only port supported by HTTP-01 challenge so there are no other options","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":25023,"name":"Jonathan Rosser","email":"jonathan.rosser@rd.bbc.co.uk","username":"jrosser"},"change_message_id":"9276ea7e295863991d982ca5d9b1d697defc3c8f","unresolved":true,"context_lines":[{"line_number":66,"context_line":"    host: \"{{ external_lb_vip_address }}\""},{"line_number":67,"context_line":"    port: 443"},{"line_number":68,"context_line":"    timeout: 2"},{"line_number":69,"context_line":"  register: horizon_listening"},{"line_number":70,"context_line":"  ignore_errors: yes"},{"line_number":71,"context_line":"  when: haproxy_ssl_letsencrypt_certbot_challenge \u003d\u003d \u0027http-01\u0027"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"d658d394_5a48a01d","line":69,"range":{"start_line":69,"start_character":12,"end_line":69,"end_character":29},"updated":"2023-02-03 18:56:59.000000000","message":"this role should not know anything at all about horizon, or even that it is openstack","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"7c426ca2940527da49db2f6577d7a32ab57731fa","unresolved":true,"context_lines":[{"line_number":66,"context_line":"    host: \"{{ external_lb_vip_address }}\""},{"line_number":67,"context_line":"    port: 443"},{"line_number":68,"context_line":"    timeout: 2"},{"line_number":69,"context_line":"  register: horizon_listening"},{"line_number":70,"context_line":"  ignore_errors: yes"},{"line_number":71,"context_line":"  when: haproxy_ssl_letsencrypt_certbot_challenge \u003d\u003d \u0027http-01\u0027"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"dc0cfdfe_6e85954a","line":69,"range":{"start_line":69,"start_character":12,"end_line":69,"end_character":29},"in_reply_to":"d658d394_5a48a01d","updated":"2023-02-06 23:22:48.000000000","message":"you\u0027re right. I changed the naming convention in tasks/variable names.","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"},{"author":{"_account_id":32666,"name":"Damian Dąbrowski","email":"damian@dabrowski.cloud","username":"ddabrowski"},"change_message_id":"bf47210aa133818af175ef26dd4b818d4c62f576","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    host: \"{{ external_lb_vip_address }}\""},{"line_number":67,"context_line":"    port: 443"},{"line_number":68,"context_line":"    timeout: 2"},{"line_number":69,"context_line":"  register: horizon_listening"},{"line_number":70,"context_line":"  ignore_errors: yes"},{"line_number":71,"context_line":"  when: haproxy_ssl_letsencrypt_certbot_challenge \u003d\u003d \u0027http-01\u0027"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9d2239f2_7362a72a","line":69,"range":{"start_line":69,"start_character":12,"end_line":69,"end_character":29},"in_reply_to":"dc0cfdfe_6e85954a","updated":"2023-03-01 22:58:46.000000000","message":"Done","commit_id":"29df2df1f2581a4c0922baa9291048b88f32e6de"}]}
