)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"5d6e3baa0d148f1f7bd1864abd6185c866a8d62f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"0c3e4adf_b10d5786","updated":"2025-07-02 15:41:41.000000000","message":"recheck","commit_id":"4bd6908b88db7cf086393d247e0e9233c9b00d04"},{"author":{"_account_id":37598,"name":"Ivan Anfimov","display_name":"Ivan Anfimov","email":"lazekteam@gmail.com","username":"anfimovir"},"change_message_id":"3b7a810d8b74b27a5d2d14a49ab6ee88695bb8ff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"ad6b46df_7627e30b","updated":"2025-07-01 15:13:22.000000000","message":"recheck","commit_id":"4bd6908b88db7cf086393d247e0e9233c9b00d04"},{"author":{"_account_id":38079,"name":"Rafal Wadolowski","display_name":"Rafal Wadolowski","email":"rafal.wadolowski@cleura.com","username":"rafal.wadolowski.cleura"},"change_message_id":"191be55b5074123f1fa48b93c3b1116056d145f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c8bb5065_ffe773a3","updated":"2025-07-02 09:59:39.000000000","message":"recheck","commit_id":"4bd6908b88db7cf086393d247e0e9233c9b00d04"}],"tasks/haproxy_ssl_letsencrypt.yml":[{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"139351db2b7fbb3393c5a89954560ff6869115ff","unresolved":true,"context_lines":[{"line_number":16,"context_line":"    name: \"{{ haproxy_distro_certbot_packages }}\""},{"line_number":17,"context_line":"    state: present"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"- name: Check if certificate exists"},{"line_number":20,"context_line":"  ansible.builtin.stat:"},{"line_number":21,"context_line":"    path: \"{{ haproxy_ssl_letsencrypt_config_path }}/{{ haproxy_ssl_letsencrypt_domains | first }}/fullchain.pem\""},{"line_number":22,"context_line":"  register: letsencrypt_certificate"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"- name: Check if domains list changed"},{"line_number":25,"context_line":"  when: letsencrypt_certificate.stat.exists"},{"line_number":26,"context_line":"  block:"},{"line_number":27,"context_line":"    - name: Get acting list of certificates"},{"line_number":28,"context_line":"      ansible.builtin.shell: \u003e"},{"line_number":29,"context_line":"        {{ haproxy_ssl_letsencrypt_certbot_binary }} certificates"},{"line_number":30,"context_line":"        --cert-name \"{{ haproxy_ssl_letsencrypt_domains | first }}\" | grep Domains | cut -d\u0027:\u0027 -f2"},{"line_number":31,"context_line":"      changed_when: false"},{"line_number":32,"context_line":"      register: letsencrypt_certificate_domains_dirty"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    - name: Cleanup domain list"},{"line_number":35,"context_line":"      ansible.builtin.set_fact:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"cfc498a2_156a13ea","line":32,"range":{"start_line":19,"start_character":0,"end_line":32,"end_character":53},"updated":"2025-06-05 09:36:38.000000000","message":"Kinda wonder if it might be easier to do smth like this instead:\n```\n    - community.crypto.x509_certificate_info:\n        path: \"{{ haproxy_ssl_letsencrypt_config_path }}/{{ haproxy_ssl_letsencrypt_domains | first }}/fullchain.pem\"\n      register: letsencrypt_certificate\n      ignore_errors: true\n```\n\nAnd then all domains will be in `letsencrypt_certificate.cert.subject_alt_name`. The problem there, that `subject_alt_name` will be in format of `IP:127.0.0.1` or `DNS:example.com`\n\nBut somehow feels a bit more reliable/stable then `certbot`","commit_id":"ea113be8bfcac6a1e0c415586fbe961732718fc8"},{"author":{"_account_id":38079,"name":"Rafal Wadolowski","display_name":"Rafal Wadolowski","email":"rafal.wadolowski@cleura.com","username":"rafal.wadolowski.cleura"},"change_message_id":"f7579fdc338e445ee77989a2079372dca8a49814","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    name: \"{{ haproxy_distro_certbot_packages }}\""},{"line_number":17,"context_line":"    state: present"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"- name: Check if certificate exists"},{"line_number":20,"context_line":"  ansible.builtin.stat:"},{"line_number":21,"context_line":"    path: \"{{ haproxy_ssl_letsencrypt_config_path }}/{{ haproxy_ssl_letsencrypt_domains | first }}/fullchain.pem\""},{"line_number":22,"context_line":"  register: letsencrypt_certificate"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"- name: Check if domains list changed"},{"line_number":25,"context_line":"  when: letsencrypt_certificate.stat.exists"},{"line_number":26,"context_line":"  block:"},{"line_number":27,"context_line":"    - name: Get acting list of certificates"},{"line_number":28,"context_line":"      ansible.builtin.shell: \u003e"},{"line_number":29,"context_line":"        {{ haproxy_ssl_letsencrypt_certbot_binary }} certificates"},{"line_number":30,"context_line":"        --cert-name \"{{ haproxy_ssl_letsencrypt_domains | first }}\" | grep Domains | cut -d\u0027:\u0027 -f2"},{"line_number":31,"context_line":"      changed_when: false"},{"line_number":32,"context_line":"      register: letsencrypt_certificate_domains_dirty"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    - name: Cleanup domain list"},{"line_number":35,"context_line":"      ansible.builtin.set_fact:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"6108f37f_d3a0d36e","line":32,"range":{"start_line":19,"start_character":0,"end_line":32,"end_character":53},"in_reply_to":"75b40c22_b43f5106","updated":"2025-06-10 10:01:52.000000000","message":"Acknowledged","commit_id":"ea113be8bfcac6a1e0c415586fbe961732718fc8"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"1417fd82b079f17206f03e5f6a33478ad7587d61","unresolved":true,"context_lines":[{"line_number":16,"context_line":"    name: \"{{ haproxy_distro_certbot_packages }}\""},{"line_number":17,"context_line":"    state: present"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"- name: Check if certificate exists"},{"line_number":20,"context_line":"  ansible.builtin.stat:"},{"line_number":21,"context_line":"    path: \"{{ haproxy_ssl_letsencrypt_config_path }}/{{ haproxy_ssl_letsencrypt_domains | first }}/fullchain.pem\""},{"line_number":22,"context_line":"  register: letsencrypt_certificate"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"- name: Check if domains list changed"},{"line_number":25,"context_line":"  when: letsencrypt_certificate.stat.exists"},{"line_number":26,"context_line":"  block:"},{"line_number":27,"context_line":"    - name: Get acting list of certificates"},{"line_number":28,"context_line":"      ansible.builtin.shell: \u003e"},{"line_number":29,"context_line":"        {{ haproxy_ssl_letsencrypt_certbot_binary }} certificates"},{"line_number":30,"context_line":"        --cert-name \"{{ haproxy_ssl_letsencrypt_domains | first }}\" | grep Domains | cut -d\u0027:\u0027 -f2"},{"line_number":31,"context_line":"      changed_when: false"},{"line_number":32,"context_line":"      register: letsencrypt_certificate_domains_dirty"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    - name: Cleanup domain list"},{"line_number":35,"context_line":"      ansible.builtin.set_fact:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"75b40c22_b43f5106","line":32,"range":{"start_line":19,"start_character":0,"end_line":32,"end_character":53},"in_reply_to":"cfc498a2_156a13ea","updated":"2025-06-05 09:47:29.000000000","message":"but `letsencrypt_certificate.cert.subject_alt_name | map(\u0027regex_replace\u0027, \u0027^(DNS|IP):(.*)$\u0027, \u0027\\\\2\u0027) | list` or smth like that can solve that I guess","commit_id":"ea113be8bfcac6a1e0c415586fbe961732718fc8"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"139351db2b7fbb3393c5a89954560ff6869115ff","unresolved":true,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    - name: Cleanup domain list"},{"line_number":35,"context_line":"      ansible.builtin.set_fact:"},{"line_number":36,"context_line":"        letsencrypt_certificate_domains: \"{{ letsencrypt_certificate_domains_dirty.stdout | trim | split(\u0027 \u0027) | map(\u0027trim\u0027) | select(\u0027!\u003d\u0027, \u0027\u0027) | list | sort }}\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    - name: Determine if domains have changed"},{"line_number":39,"context_line":"      ansible.builtin.set_fact:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"06a6ca2e_18108d91","line":36,"range":{"start_line":36,"start_character":45,"end_line":36,"end_character":156},"updated":"2025-06-05 09:36:38.000000000","message":"This can be simplified to `letsencrypt_certificate_domains_dirty.stdout  | split(\u0027 \u0027) | select() | sort`\n\nBut potentially better to use sort also while defining `letsencrypt_certificate_domains_changed`","commit_id":"ea113be8bfcac6a1e0c415586fbe961732718fc8"},{"author":{"_account_id":38079,"name":"Rafal Wadolowski","display_name":"Rafal Wadolowski","email":"rafal.wadolowski@cleura.com","username":"rafal.wadolowski.cleura"},"change_message_id":"f7579fdc338e445ee77989a2079372dca8a49814","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    - name: Cleanup domain list"},{"line_number":35,"context_line":"      ansible.builtin.set_fact:"},{"line_number":36,"context_line":"        letsencrypt_certificate_domains: \"{{ letsencrypt_certificate_domains_dirty.stdout | trim | split(\u0027 \u0027) | map(\u0027trim\u0027) | select(\u0027!\u003d\u0027, \u0027\u0027) | list | sort }}\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    - name: Determine if domains have changed"},{"line_number":39,"context_line":"      ansible.builtin.set_fact:"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"1379dc92_5f8835fe","line":36,"range":{"start_line":36,"start_character":45,"end_line":36,"end_character":156},"in_reply_to":"06a6ca2e_18108d91","updated":"2025-06-10 10:01:52.000000000","message":"Done","commit_id":"ea113be8bfcac6a1e0c415586fbe961732718fc8"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"139351db2b7fbb3393c5a89954560ff6869115ff","unresolved":true,"context_lines":[{"line_number":30,"context_line":"        --cert-name \"{{ haproxy_ssl_letsencrypt_domains | first }}\" | grep Domains | cut -d\u0027:\u0027 -f2"},{"line_number":31,"context_line":"      changed_when: false"},{"line_number":32,"context_line":"      register: letsencrypt_certificate_domains_dirty"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    - name: Cleanup domain list"},{"line_number":35,"context_line":"      ansible.builtin.set_fact:"},{"line_number":36,"context_line":"        letsencrypt_certificate_domains: \"{{ letsencrypt_certificate_domains_dirty.stdout | trim | split(\u0027 \u0027) | map(\u0027trim\u0027) | select(\u0027!\u003d\u0027, \u0027\u0027) | list | sort }}\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    - name: Determine if domains have changed"},{"line_number":39,"context_line":"      ansible.builtin.set_fact:"},{"line_number":40,"context_line":"        letsencrypt_certificate_domains_changed: \"{{ letsencrypt_certificate_domains !\u003d (haproxy_ssl_letsencrypt_domains | sort) }}\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- name: Create first time ssl cert with certbot"},{"line_number":43,"context_line":"  throttle: 1"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"3a0709e9_2144de6b","line":40,"range":{"start_line":33,"start_character":0,"end_line":40,"end_character":132},"updated":"2025-06-05 09:36:38.000000000","message":"Can we instead of doing `set_fact` define vars exactly for `Create first time ssl cert with certbot` task?\n\nie:\n```\n- name: Create first time ssl cert with certbot\n  throttle: 1\n  vars:\n    letsencrypt_certificate_domains: \"{{ letsencrypt_certificate_domains_dirty.stdout  | split(\u0027 \u0027) | select() }}\"\n    letsencrypt_certificate_domains_changed: \"{{ (letsencrypt_certificate_domains | sort) !\u003d (haproxy_ssl_letsencrypt_domains | sort) }}\"\n  ansible.builtin.shell: \u003e\n  ....\n  ....\n```\n\nIt\u0027s just faster to execute rather then set_fact.","commit_id":"ea113be8bfcac6a1e0c415586fbe961732718fc8"},{"author":{"_account_id":38079,"name":"Rafal Wadolowski","display_name":"Rafal Wadolowski","email":"rafal.wadolowski@cleura.com","username":"rafal.wadolowski.cleura"},"change_message_id":"ecc55ff0efba92b523bfae16c8b24974a93adf18","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        --cert-name \"{{ haproxy_ssl_letsencrypt_domains | first }}\" | grep Domains | cut -d\u0027:\u0027 -f2"},{"line_number":31,"context_line":"      changed_when: false"},{"line_number":32,"context_line":"      register: letsencrypt_certificate_domains_dirty"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    - name: Cleanup domain list"},{"line_number":35,"context_line":"      ansible.builtin.set_fact:"},{"line_number":36,"context_line":"        letsencrypt_certificate_domains: \"{{ letsencrypt_certificate_domains_dirty.stdout | trim | split(\u0027 \u0027) | map(\u0027trim\u0027) | select(\u0027!\u003d\u0027, \u0027\u0027) | list | sort }}\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    - name: Determine if domains have changed"},{"line_number":39,"context_line":"      ansible.builtin.set_fact:"},{"line_number":40,"context_line":"        letsencrypt_certificate_domains_changed: \"{{ letsencrypt_certificate_domains !\u003d (haproxy_ssl_letsencrypt_domains | sort) }}\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- name: Create first time ssl cert with certbot"},{"line_number":43,"context_line":"  throttle: 1"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"16cc3bc2_83540973","line":40,"range":{"start_line":33,"start_character":0,"end_line":40,"end_character":132},"in_reply_to":"1e4898d6_c77abdb9","updated":"2025-06-11 12:03:59.000000000","message":"Acknowledged","commit_id":"ea113be8bfcac6a1e0c415586fbe961732718fc8"},{"author":{"_account_id":38079,"name":"Rafal Wadolowski","display_name":"Rafal Wadolowski","email":"rafal.wadolowski@cleura.com","username":"rafal.wadolowski.cleura"},"change_message_id":"f7579fdc338e445ee77989a2079372dca8a49814","unresolved":true,"context_lines":[{"line_number":30,"context_line":"        --cert-name \"{{ haproxy_ssl_letsencrypt_domains | first }}\" | grep Domains | cut -d\u0027:\u0027 -f2"},{"line_number":31,"context_line":"      changed_when: false"},{"line_number":32,"context_line":"      register: letsencrypt_certificate_domains_dirty"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    - name: Cleanup domain list"},{"line_number":35,"context_line":"      ansible.builtin.set_fact:"},{"line_number":36,"context_line":"        letsencrypt_certificate_domains: \"{{ letsencrypt_certificate_domains_dirty.stdout | trim | split(\u0027 \u0027) | map(\u0027trim\u0027) | select(\u0027!\u003d\u0027, \u0027\u0027) | list | sort }}\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    - name: Determine if domains have changed"},{"line_number":39,"context_line":"      ansible.builtin.set_fact:"},{"line_number":40,"context_line":"        letsencrypt_certificate_domains_changed: \"{{ letsencrypt_certificate_domains !\u003d (haproxy_ssl_letsencrypt_domains | sort) }}\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- name: Create first time ssl cert with certbot"},{"line_number":43,"context_line":"  throttle: 1"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"1e4898d6_c77abdb9","line":40,"range":{"start_line":33,"start_character":0,"end_line":40,"end_character":132},"in_reply_to":"3a0709e9_2144de6b","updated":"2025-06-10 10:01:52.000000000","message":"can\u0027t be done this way, we depend on previous vars","commit_id":"ea113be8bfcac6a1e0c415586fbe961732718fc8"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"dbf2db047818d8f00f1a30bd478e546bdd2b10d6","unresolved":true,"context_lines":[{"line_number":22,"context_line":"  register: letsencrypt_certificate"},{"line_number":23,"context_line":"  ignore_errors: true"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"- name: Check if domains list changed"},{"line_number":26,"context_line":"  ansible.builtin.set_fact:"},{"line_number":27,"context_line":"    letsencrypt_certificate_domains_changed: \u003e"},{"line_number":28,"context_line":"      \"{{ (letsencrypt_certificate.subject_alt_name | map(\u0027regex_replace\u0027, \u0027^(DNS|IP):(.*)$\u0027, \u0027\\\\2\u0027) | list)"},{"line_number":29,"context_line":"      !\u003d (haproxy_ssl_letsencrypt_domains | sort) }}\""},{"line_number":30,"context_line":"  when: letsencrypt_certificate"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"- name: Create first time ssl cert with certbot"},{"line_number":33,"context_line":"  throttle: 1"},{"line_number":34,"context_line":"  ansible.builtin.shell: \u003e"},{"line_number":35,"context_line":"    {% if haproxy_ssl_letsencrypt_certbot_challenge \u003d\u003d \u0027http-01\u0027 %}"},{"line_number":36,"context_line":"    timeout {{ haproxy_ssl_letsencrypt_pre_hook_timeout }}"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"6f173991_707c7ca5","line":33,"range":{"start_line":25,"start_character":0,"end_line":33,"end_character":13},"updated":"2025-06-10 10:33:10.000000000","message":"Won\u0027t it work like this?\n\n```suggestion\n- name: Create first time ssl cert with certbot\n  vars:\n    letsencrypt_certificate_domains_changed: \u003e\n      {{\n        (letsencrypt_certificate is success) | ternary(\n          (letsencrypt_certificate.subject_alt_name | map(\n            \u0027regex_replace\u0027, \u0027^(DNS|IP):(.*)$\u0027, \u0027\\\\2\u0027\n          ) | list) !\u003d (haproxy_ssl_letsencrypt_domains | sort),\n          true\n        )\n      }}\n  throttle: 1\n```","commit_id":"48160bbfb486ce9c3a7be46956b57049a15c98f8"},{"author":{"_account_id":38079,"name":"Rafal Wadolowski","display_name":"Rafal Wadolowski","email":"rafal.wadolowski@cleura.com","username":"rafal.wadolowski.cleura"},"change_message_id":"ecc55ff0efba92b523bfae16c8b24974a93adf18","unresolved":false,"context_lines":[{"line_number":22,"context_line":"  register: letsencrypt_certificate"},{"line_number":23,"context_line":"  ignore_errors: true"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"- name: Check if domains list changed"},{"line_number":26,"context_line":"  ansible.builtin.set_fact:"},{"line_number":27,"context_line":"    letsencrypt_certificate_domains_changed: \u003e"},{"line_number":28,"context_line":"      \"{{ (letsencrypt_certificate.subject_alt_name | map(\u0027regex_replace\u0027, \u0027^(DNS|IP):(.*)$\u0027, \u0027\\\\2\u0027) | list)"},{"line_number":29,"context_line":"      !\u003d (haproxy_ssl_letsencrypt_domains | sort) }}\""},{"line_number":30,"context_line":"  when: letsencrypt_certificate"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"- name: Create first time ssl cert with certbot"},{"line_number":33,"context_line":"  throttle: 1"},{"line_number":34,"context_line":"  ansible.builtin.shell: \u003e"},{"line_number":35,"context_line":"    {% if haproxy_ssl_letsencrypt_certbot_challenge \u003d\u003d \u0027http-01\u0027 %}"},{"line_number":36,"context_line":"    timeout {{ haproxy_ssl_letsencrypt_pre_hook_timeout }}"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"fb2d99c8_04a0b616","line":33,"range":{"start_line":25,"start_character":0,"end_line":33,"end_character":13},"in_reply_to":"6f173991_707c7ca5","updated":"2025-06-11 12:03:59.000000000","message":"Acknowledged","commit_id":"48160bbfb486ce9c3a7be46956b57049a15c98f8"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"dbf2db047818d8f00f1a30bd478e546bdd2b10d6","unresolved":true,"context_lines":[{"line_number":54,"context_line":"    --http-01-address {{ haproxy_ssl_letsencrypt_certbot_bind_address }}"},{"line_number":55,"context_line":"    {% endif %}"},{"line_number":56,"context_line":"    {{ haproxy_ssl_letsencrypt_setup_extra_params }}"},{"line_number":57,"context_line":"  when: not letsencrypt_certificate or letsencrypt_certificate_domains_changed | default(false)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"# Certbot automatically installs its systemd timer responsible for renewals"},{"line_number":60,"context_line":"- name: Create certbot pre hook"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"87a79731_cde761a0","line":57,"range":{"start_line":57,"start_character":2,"end_line":57,"end_character":95},"updated":"2025-06-10 10:33:10.000000000","message":"```suggestion\n  when:\n    - letsencrypt_certificate_domains_changed | bool\n```","commit_id":"48160bbfb486ce9c3a7be46956b57049a15c98f8"},{"author":{"_account_id":38079,"name":"Rafal Wadolowski","display_name":"Rafal Wadolowski","email":"rafal.wadolowski@cleura.com","username":"rafal.wadolowski.cleura"},"change_message_id":"ecc55ff0efba92b523bfae16c8b24974a93adf18","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    --http-01-address {{ haproxy_ssl_letsencrypt_certbot_bind_address }}"},{"line_number":55,"context_line":"    {% endif %}"},{"line_number":56,"context_line":"    {{ haproxy_ssl_letsencrypt_setup_extra_params }}"},{"line_number":57,"context_line":"  when: not letsencrypt_certificate or letsencrypt_certificate_domains_changed | default(false)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"# Certbot automatically installs its systemd timer responsible for renewals"},{"line_number":60,"context_line":"- name: Create certbot pre hook"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"f2d330a1_24dd5ecc","line":57,"range":{"start_line":57,"start_character":2,"end_line":57,"end_character":95},"in_reply_to":"87a79731_cde761a0","updated":"2025-06-11 12:03:59.000000000","message":"Done","commit_id":"48160bbfb486ce9c3a7be46956b57049a15c98f8"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"d3cf8f2b230b3308ec8c4899e00b62b88a761ce3","unresolved":true,"context_lines":[{"line_number":58,"context_line":"    {% endif %}"},{"line_number":59,"context_line":"    {{ haproxy_ssl_letsencrypt_setup_extra_params }}"},{"line_number":60,"context_line":"  register: certbot_output"},{"line_number":61,"context_line":"  changed_when: \"\u0027no action taken\u0027 not in certbot_output.stdout\""},{"line_number":62,"context_line":"  when: letsencrypt_certificate_domains_changed | bool"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"# Certbot automatically installs its systemd timer responsible for renewals"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5c13b8f8_52ac253c","line":61,"range":{"start_line":61,"start_character":2,"end_line":61,"end_character":64},"updated":"2025-06-24 07:59:50.000000000","message":"I was thinking - would it make sense to try to match a line as a whole instead?\n\nIe - `changed_when: \"\u0027no action taken\u0027 not in certbot_output.stdout_lines\"`? I just can\u0027t recall what full line looks like, but searching element in the list should likely be faster then text in string?","commit_id":"da00ebfaed72974d5bd6fd345c7cd082522cce2a"},{"author":{"_account_id":38079,"name":"Rafal Wadolowski","display_name":"Rafal Wadolowski","email":"rafal.wadolowski@cleura.com","username":"rafal.wadolowski.cleura"},"change_message_id":"191be55b5074123f1fa48b93c3b1116056d145f5","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    {% endif %}"},{"line_number":59,"context_line":"    {{ haproxy_ssl_letsencrypt_setup_extra_params }}"},{"line_number":60,"context_line":"  register: certbot_output"},{"line_number":61,"context_line":"  changed_when: \"\u0027no action taken\u0027 not in certbot_output.stdout\""},{"line_number":62,"context_line":"  when: letsencrypt_certificate_domains_changed | bool"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"# Certbot automatically installs its systemd timer responsible for renewals"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"08a66e1c_d93cad85","line":61,"range":{"start_line":61,"start_character":2,"end_line":61,"end_character":64},"in_reply_to":"5c13b8f8_52ac253c","updated":"2025-07-02 09:59:39.000000000","message":"Done","commit_id":"da00ebfaed72974d5bd6fd345c7cd082522cce2a"}]}
