{"id":210,"sha1":"7ab7ed9dce7edb9185c5ff905043533b2ea6fc99","playbook":{"id":3,"items":{"plays":37,"tasks":567,"results":554,"hosts":7,"files":221,"records":0},"arguments":{"version":null,"verbosity":0,"private_key_file":null,"remote_user":null,"connection":"openstack.osa.ssh","timeout":null,"ssh_common_args":null,"sftp_extra_args":null,"scp_extra_args":null,"ssh_extra_args":null,"ask_pass":false,"connection_password_file":null,"force_handlers":true,"flush_cache":false,"become":false,"become_method":"sudo","become_user":null,"become_ask_pass":false,"become_password_file":null,"tags":["all"],"skip_tags":[],"check":false,"diff":false,"inventory":["/home/zuul/src/opendev.org/openstack/openstack-ansible/inventory/dynamic_inventory.py","/home/zuul/src/opendev.org/openstack/openstack-ansible/inventory/inventory.ini","/etc/openstack_deploy/inventory.ini"],"listhosts":false,"subset":null,"extra_vars":"Not saved by ARA as configured by 'ignored_arguments'","vault_ids":[],"ask_vault_pass":false,"vault_password_files":[],"forks":4,"module_path":null,"syntax":false,"listtasks":false,"listtags":false,"step":false,"start_at_task":null,"args":["setup-infrastructure.yml"]},"labels":[{"id":1,"name":"check:False"},{"id":2,"name":"tags:all"}],"started":"2025-12-14T10:15:01.440414Z","ended":"2025-12-14T10:21:34.655502Z","duration":"00:06:33.215088","name":null,"ansible_version":"2.18.6","client_version":"1.7.4","python_version":"3.13.5","server_version":"1.7.4","status":"completed","path":"/home/zuul/src/opendev.org/openstack/openstack-ansible/playbooks/setup-infrastructure.yml","controller":"aio1.openstack.local","user":"root"},"content":"---\n# Copyright 2014, Rackspace US, Inc.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n- name: Regen pem # noqa: no-changed-when\n  ansible.builtin.shell: |\n      {\n      files=(\n          \"{{ item_base_path ~ '.crt' }}\"\n          \"$(test -f {{ item_base_path  ~ '-ca.crt' }} && echo {{ item_base_path  ~ '-ca.crt' }})\"\n          \"{{ item_base_path  ~ '.key' }}\"\n      )\n      for f in \"${files[@]}\"; do\n          cat \"$f\"\n          # adds a newline at the end of file's content if it doesn't exist\n          tail -c1 \"$f\" | grep -q '^$' || echo\n        done\n      } > {{ target_base_path  ~ '.pem' }}\n  args:\n    executable: /bin/bash\n  vars:\n    item_interface: \"{{ item['interface'] | default('') }}\"\n    item_name: \"{{ ('interface' in item and item['interface'] is truthy) | ternary(item['address'] ~ '-' ~ item_interface, item['address']) }}\"\n    item_base_path: \"{{ haproxy_ssl_temp_path ~ '/haproxy_' ~ ansible_facts['hostname'] ~ '-' ~ item_name }}\"\n    target_base_path: \"{{ haproxy_ssl_cert_path ~ '/haproxy_' ~ ansible_facts['hostname'] ~ '-' ~ item_name }}\"\n  with_items: \"{{ haproxy_vip_binds }}\"\n  listen:\n    - haproxy cert installed\n\n- name: Regenerate maps\n  vars:\n    all_changed_results: \"{{ (map_create.results + map_delete.results) | select('changed') }}\"\n  ansible.builtin.assemble:\n    src: \"/etc/haproxy/map.conf.d/{{ item }}\"\n    dest: \"/etc/haproxy/{{ item }}.map\"\n    mode: \"0640\"\n    owner: haproxy\n    group: haproxy\n  with_items: \"{{ all_changed_results | map(attribute='item') | flatten | selectattr('name', 'defined') | map(attribute='name') | unique }}\"\n\n- name: Regenerate haproxy configuration\n  ansible.builtin.assemble:\n    src: \"/etc/haproxy/conf.d\"\n    dest: \"/etc/haproxy/haproxy.cfg\"\n    validate: /usr/sbin/haproxy -c -f %s\n    mode: \"0640\"\n    owner: haproxy\n    group: haproxy\n  tags:\n    - haproxy-general-config\n\n- name: Get package facts\n  ansible.builtin.package_facts:\n    manager: auto\n  listen: Restart rsyslog\n\n- name: Restart rsyslog\n  ansible.builtin.service:\n    name: \"rsyslog\"\n    state: \"restarted\"\n    enabled: true\n    daemon_reload: true\n  when:\n    - \"'rsyslog' in ansible_facts.packages\"\n\n- name: Reload haproxy\n  ansible.builtin.service:\n    name: \"haproxy\"\n    state: \"reloaded\"\n    enabled: true\n    daemon_reload: true\n  listen:\n    - Regen pem\n    - Regenerate maps\n    - Regenerate haproxy configuration\n","created":"2025-12-14T10:15:02.949227Z","updated":"2025-12-14T10:15:02.949240Z","path":"/home/zuul/src/opendev.org/openstack/openstack-ansible-haproxy_server/handlers/main.yml"}