)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":37313,"name":"Alma MAILLET-CONTOZ","display_name":"Alma MAILLET-CONTOZ","email":"alma.maillet-contoz@infomaniak.com","username":"nicolasmc","status":"Intern SRE at Infomaniak"},"change_message_id":"50acb5f6fd0c0f74267a806c804ca4cf304f2a15","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"8876b362_8fec5c47","updated":"2026-04-09 11:38:39.000000000","message":"LGTM!","commit_id":"7d2840b8e268bccfd954193175c488d983dfc93b"},{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"8009bc3b53f74bcd3cdff7dcc299d0210077cfd5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"a4f947b0_b8730b7f","updated":"2026-05-27 20:38:28.000000000","message":"Some safety stuff to review, but otherwise lgtm","commit_id":"7d2840b8e268bccfd954193175c488d983dfc93b"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"2c612b370e3eb3084a38e73effe4c6827f4d944d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"19e89303_dcdbc070","updated":"2026-06-09 06:48:48.000000000","message":"recheck -  mariadb, Connection reset by peer TLS","commit_id":"94d5648618485a6886c21ff323f9951b3923554b"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"876047eb91b5ff4a0df575f5a7aaa659f9881a15","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"5ee03de7_67d41623","updated":"2026-06-09 12:47:07.000000000","message":"recheck - TLS reset","commit_id":"2bf64a72bf074cf53359bdba2e16251f6fbf80ce"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"7827ce114fff2c4fc8d8d1178bcf4327d459a4d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"53f66679_5f071cd0","updated":"2026-06-09 14:32:22.000000000","message":"waiting to merge: https://review.opendev.org/c/openstack/kolla-ansible/+/992443","commit_id":"2bf64a72bf074cf53359bdba2e16251f6fbf80ce"},{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"17f2989a7b29139787bfb0f58fe43ebd33c00c18","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"168458ff_07dacbc8","updated":"2026-06-09 17:56:16.000000000","message":"LGTM","commit_id":"0f29f221c3f01b71fc8005275a602c14ab0c5bcb"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"26178bb7550a53245a49d7e5b3fff0c6a15a4b84","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"306fb8f5_f1cb7d94","updated":"2026-06-11 11:02:29.000000000","message":"recheck - Status code: 503 for https://mirrors.centos.org/","commit_id":"256835ee18c72b0e26346db1194a1aca4c9948c7"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"97c4903f71c44b9dd39cf11798879693895eb5ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"c88e2c1f_185b264c","updated":"2026-06-17 19:35:00.000000000","message":"Merging given previous +2s and split out of the internal stuff","commit_id":"d6910f01deb3fa41b2a7662d1d5eb4a7d1b5c50f"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"4deb4a68def3d69b35de369917eb2c4024c5c65b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"320926d2_e987214b","updated":"2026-06-18 19:10:59.000000000","message":"recheck","commit_id":"d6910f01deb3fa41b2a7662d1d5eb4a7d1b5c50f"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"6f04879700eb5f683b0316e66832b46edd2821c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"ed3e8df0_4012d859","updated":"2026-06-19 07:00:02.000000000","message":"recheck - TIMED_OUT RockyLinux 10","commit_id":"d6910f01deb3fa41b2a7662d1d5eb4a7d1b5c50f"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"7e50bf77e71f51aba7da5d933f6abdde62ac4761","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"e0fdcddc_d4e3eb62","updated":"2026-06-18 07:44:36.000000000","message":"recheck - container kolla_toolbox is not running","commit_id":"d6910f01deb3fa41b2a7662d1d5eb4a7d1b5c50f"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"cbf99028b28743445fb65b355d905c84009bea7b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"09a0dc52_9eb69dda","updated":"2026-06-18 10:50:10.000000000","message":"recheck - rockylinux upgrade No such container: neutron_dhcp_agent_haproxy_qdhcp-19480e7d-5ad9-44c5-832e-5ca872cc3ecf","commit_id":"d6910f01deb3fa41b2a7662d1d5eb4a7d1b5c50f"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"333474cd238c20765dc02ff20a471a0db45fa18b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"f0aee2fc_650b0234","updated":"2026-06-18 09:55:55.000000000","message":"recheck - rockylinux upgrade No such container: neutron_dhcp_agent_haproxy_qdhcp-19480e7d-5ad9-44c5-832e-5ca872cc3ecf","commit_id":"d6910f01deb3fa41b2a7662d1d5eb4a7d1b5c50f"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"7d4b37ae2255b192a9fdc5a88c7f9d3d32a68a53","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"e1193aed_5cd80b31","updated":"2026-06-18 04:36:55.000000000","message":"recheck trixie uograde unrelated failure","commit_id":"d6910f01deb3fa41b2a7662d1d5eb4a7d1b5c50f"}],"docker/base/set_configs.py":[{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"8009bc3b53f74bcd3cdff7dcc299d0210077cfd5","unresolved":true,"context_lines":[{"line_number":300,"context_line":"            LOG.info(\"Loading config file at %s\", config_file)"},{"line_number":301,"context_line":"            try:"},{"line_number":302,"context_line":"                with open(config_file) as f:"},{"line_number":303,"context_line":"                    return yaml.safe_load(f)"},{"line_number":304,"context_line":"            except yaml.YAMLError:"},{"line_number":305,"context_line":"                raise InvalidConfig("},{"line_number":306,"context_line":"                    \"Invalid yaml file found at %s\" % config_file)"}],"source_content_type":"text/x-python","patch_set":11,"id":"399443d3_ff4c2d2c","line":303,"range":{"start_line":303,"start_character":0,"end_line":303,"end_character":2},"updated":"2026-05-27 20:38:28.000000000","message":"I think we need to safe guard this. yaml_safe_load returns None on empty file and does not raise ValueError like json does","commit_id":"7d2840b8e268bccfd954193175c488d983dfc93b"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"5b3374e5433c77220d8d5529d6eab95dc621630d","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            LOG.info(\"Loading config file at %s\", config_file)"},{"line_number":301,"context_line":"            try:"},{"line_number":302,"context_line":"                with open(config_file) as f:"},{"line_number":303,"context_line":"                    return yaml.safe_load(f)"},{"line_number":304,"context_line":"            except yaml.YAMLError:"},{"line_number":305,"context_line":"                raise InvalidConfig("},{"line_number":306,"context_line":"                    \"Invalid yaml file found at %s\" % config_file)"}],"source_content_type":"text/x-python","patch_set":11,"id":"54af4e58_8aab3c3e","line":303,"range":{"start_line":303,"start_character":0,"end_line":303,"end_character":2},"in_reply_to":"399443d3_ff4c2d2c","updated":"2026-06-09 05:58:27.000000000","message":"Acknowledged","commit_id":"7d2840b8e268bccfd954193175c488d983dfc93b"},{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"8009bc3b53f74bcd3cdff7dcc299d0210077cfd5","unresolved":true,"context_lines":[{"line_number":304,"context_line":"            except yaml.YAMLError:"},{"line_number":305,"context_line":"                raise InvalidConfig("},{"line_number":306,"context_line":"                    \"Invalid yaml file found at %s\" % config_file)"},{"line_number":307,"context_line":"            except IOError as e:"},{"line_number":308,"context_line":"                raise InvalidConfig("},{"line_number":309,"context_line":"                    \"Could not read file %s: %r\" % (config_file, e))"},{"line_number":310,"context_line":"        else:"},{"line_number":311,"context_line":"            config_file \u003d json_config_file"},{"line_number":312,"context_line":"            LOG.info(\"Loading config file at %s\", config_file)"}],"source_content_type":"text/x-python","patch_set":11,"id":"b3330cbf_bd155ca7","line":309,"range":{"start_line":307,"start_character":12,"end_line":309,"end_character":68},"updated":"2026-05-27 20:38:28.000000000","message":"this will never trigger I think, the open() function call is not wrapped here so it will just raise IOError.","commit_id":"7d2840b8e268bccfd954193175c488d983dfc93b"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"5b3374e5433c77220d8d5529d6eab95dc621630d","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            except yaml.YAMLError:"},{"line_number":305,"context_line":"                raise InvalidConfig("},{"line_number":306,"context_line":"                    \"Invalid yaml file found at %s\" % config_file)"},{"line_number":307,"context_line":"            except IOError as e:"},{"line_number":308,"context_line":"                raise InvalidConfig("},{"line_number":309,"context_line":"                    \"Could not read file %s: %r\" % (config_file, e))"},{"line_number":310,"context_line":"        else:"},{"line_number":311,"context_line":"            config_file \u003d json_config_file"},{"line_number":312,"context_line":"            LOG.info(\"Loading config file at %s\", config_file)"}],"source_content_type":"text/x-python","patch_set":11,"id":"92c7f3cb_92e42793","line":309,"range":{"start_line":307,"start_character":12,"end_line":309,"end_character":68},"in_reply_to":"b3330cbf_bd155ca7","updated":"2026-06-09 05:58:27.000000000","message":"Acknowledged","commit_id":"7d2840b8e268bccfd954193175c488d983dfc93b"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"8104695c991b997d44053a0083a96d4ea1f81548","unresolved":true,"context_lines":[{"line_number":451,"context_line":"                        handle_exclusion(root, file_)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"def get_defaults_state():"},{"line_number":455,"context_line":"    \"\"\"Retrieve the saved default configuration state from default state file."},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    Creates the directory for Kolla defaults if it does not exist, then reads"},{"line_number":458,"context_line":"    and returns the current state. Returns an empty dictionary if the state"},{"line_number":459,"context_line":"    file does not exist yet (first run)."},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    Returns:"},{"line_number":462,"context_line":"        dict: The configuration state stored in the Kolla defaults state file."},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    Example::"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        /etc/cinder/cinder.conf:"},{"line_number":467,"context_line":"            source: /etc/cinder/cinder.conf"},{"line_number":468,"context_line":"            preserve_properties: true"},{"line_number":469,"context_line":"            dest: null"},{"line_number":470,"context_line":"        /etc/cinder/cinder_audit_map.conf:"},{"line_number":471,"context_line":"            source: /etc/cinder/cinder_audit_map.conf"},{"line_number":472,"context_line":"            preserve_properties: true"},{"line_number":473,"context_line":"            dest: /etc/kolla/defaults/etc/cinder/cinder_audit_map.conf"},{"line_number":474,"context_line":"    \"\"\""},{"line_number":475,"context_line":"    os.makedirs(KOLLA_DEFAULTS, exist_ok\u003dTrue)"},{"line_number":476,"context_line":"    if os.path.exists(KOLLA_DEFAULTS_STATE):"},{"line_number":477,"context_line":"        with open(KOLLA_DEFAULTS_STATE, \u0027r\u0027) as f:"},{"line_number":478,"context_line":"            return yaml.safe_load(f)"},{"line_number":479,"context_line":"    else:"},{"line_number":480,"context_line":"        return {}"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"def set_defaults_state(state):"},{"line_number":484,"context_line":"    \"\"\"Save the provided configuration state to the defaults state file."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    Args:"},{"line_number":487,"context_line":"        state (dict): The configuration state to save."},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    Example::"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        /etc/cinder/cinder.conf:"},{"line_number":492,"context_line":"            source: /etc/cinder/cinder.conf"},{"line_number":493,"context_line":"            preserve_properties: true"},{"line_number":494,"context_line":"            dest: null"},{"line_number":495,"context_line":"        /etc/cinder/cinder_audit_map.conf:"},{"line_number":496,"context_line":"            source: /etc/cinder/cinder_audit_map.conf"},{"line_number":497,"context_line":"            preserve_properties: true"},{"line_number":498,"context_line":"            dest: /etc/kolla/defaults/etc/cinder/cinder_audit_map.conf"},{"line_number":499,"context_line":"    \"\"\""},{"line_number":500,"context_line":"    with open(KOLLA_DEFAULTS_STATE, \u0027w\u0027) as f:"},{"line_number":501,"context_line":"        yaml.dump(state, f, default_flow_style\u003dFalse)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"def remove_or_restore_configs(state):"}],"source_content_type":"text/x-python","patch_set":19,"id":"857b4405_2375d506","line":501,"range":{"start_line":454,"start_character":0,"end_line":501,"end_character":53},"updated":"2026-06-11 12:05:49.000000000","message":"This is internal config, not visible from kolla-ansible, and different than config.json, can we split it ?","commit_id":"04493602aaef8fa7af3fbc247cddc951e3440141"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"39a29831c522fc73836272811692a3f508a42cf6","unresolved":true,"context_lines":[{"line_number":451,"context_line":"                        handle_exclusion(root, file_)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"def get_defaults_state():"},{"line_number":455,"context_line":"    \"\"\"Retrieve the saved default configuration state from default state file."},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    Creates the directory for Kolla defaults if it does not exist, then reads"},{"line_number":458,"context_line":"    and returns the current state. Returns an empty dictionary if the state"},{"line_number":459,"context_line":"    file does not exist yet (first run)."},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    Returns:"},{"line_number":462,"context_line":"        dict: The configuration state stored in the Kolla defaults state file."},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    Example::"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        /etc/cinder/cinder.conf:"},{"line_number":467,"context_line":"            source: /etc/cinder/cinder.conf"},{"line_number":468,"context_line":"            preserve_properties: true"},{"line_number":469,"context_line":"            dest: null"},{"line_number":470,"context_line":"        /etc/cinder/cinder_audit_map.conf:"},{"line_number":471,"context_line":"            source: /etc/cinder/cinder_audit_map.conf"},{"line_number":472,"context_line":"            preserve_properties: true"},{"line_number":473,"context_line":"            dest: /etc/kolla/defaults/etc/cinder/cinder_audit_map.conf"},{"line_number":474,"context_line":"    \"\"\""},{"line_number":475,"context_line":"    os.makedirs(KOLLA_DEFAULTS, exist_ok\u003dTrue)"},{"line_number":476,"context_line":"    if os.path.exists(KOLLA_DEFAULTS_STATE):"},{"line_number":477,"context_line":"        with open(KOLLA_DEFAULTS_STATE, \u0027r\u0027) as f:"},{"line_number":478,"context_line":"            return yaml.safe_load(f)"},{"line_number":479,"context_line":"    else:"},{"line_number":480,"context_line":"        return {}"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"def set_defaults_state(state):"},{"line_number":484,"context_line":"    \"\"\"Save the provided configuration state to the defaults state file."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    Args:"},{"line_number":487,"context_line":"        state (dict): The configuration state to save."},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    Example::"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        /etc/cinder/cinder.conf:"},{"line_number":492,"context_line":"            source: /etc/cinder/cinder.conf"},{"line_number":493,"context_line":"            preserve_properties: true"},{"line_number":494,"context_line":"            dest: null"},{"line_number":495,"context_line":"        /etc/cinder/cinder_audit_map.conf:"},{"line_number":496,"context_line":"            source: /etc/cinder/cinder_audit_map.conf"},{"line_number":497,"context_line":"            preserve_properties: true"},{"line_number":498,"context_line":"            dest: /etc/kolla/defaults/etc/cinder/cinder_audit_map.conf"},{"line_number":499,"context_line":"    \"\"\""},{"line_number":500,"context_line":"    with open(KOLLA_DEFAULTS_STATE, \u0027w\u0027) as f:"},{"line_number":501,"context_line":"        yaml.dump(state, f, default_flow_style\u003dFalse)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"def remove_or_restore_configs(state):"}],"source_content_type":"text/x-python","patch_set":19,"id":"be94fbcb_e0f17608","line":501,"range":{"start_line":454,"start_character":0,"end_line":501,"end_character":53},"in_reply_to":"33f62ed5_590bf33d","updated":"2026-06-16 18:43:06.000000000","message":"I think what @michal.arbet@ultimum.io wanted to write, is that if you can split that out to a separate patch for clarity.","commit_id":"04493602aaef8fa7af3fbc247cddc951e3440141"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"480af6261fcc4abc7f7c2f15184b4956fefef9cb","unresolved":true,"context_lines":[{"line_number":451,"context_line":"                        handle_exclusion(root, file_)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"def get_defaults_state():"},{"line_number":455,"context_line":"    \"\"\"Retrieve the saved default configuration state from default state file."},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    Creates the directory for Kolla defaults if it does not exist, then reads"},{"line_number":458,"context_line":"    and returns the current state. Returns an empty dictionary if the state"},{"line_number":459,"context_line":"    file does not exist yet (first run)."},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    Returns:"},{"line_number":462,"context_line":"        dict: The configuration state stored in the Kolla defaults state file."},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    Example::"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        /etc/cinder/cinder.conf:"},{"line_number":467,"context_line":"            source: /etc/cinder/cinder.conf"},{"line_number":468,"context_line":"            preserve_properties: true"},{"line_number":469,"context_line":"            dest: null"},{"line_number":470,"context_line":"        /etc/cinder/cinder_audit_map.conf:"},{"line_number":471,"context_line":"            source: /etc/cinder/cinder_audit_map.conf"},{"line_number":472,"context_line":"            preserve_properties: true"},{"line_number":473,"context_line":"            dest: /etc/kolla/defaults/etc/cinder/cinder_audit_map.conf"},{"line_number":474,"context_line":"    \"\"\""},{"line_number":475,"context_line":"    os.makedirs(KOLLA_DEFAULTS, exist_ok\u003dTrue)"},{"line_number":476,"context_line":"    if os.path.exists(KOLLA_DEFAULTS_STATE):"},{"line_number":477,"context_line":"        with open(KOLLA_DEFAULTS_STATE, \u0027r\u0027) as f:"},{"line_number":478,"context_line":"            return yaml.safe_load(f)"},{"line_number":479,"context_line":"    else:"},{"line_number":480,"context_line":"        return {}"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"def set_defaults_state(state):"},{"line_number":484,"context_line":"    \"\"\"Save the provided configuration state to the defaults state file."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    Args:"},{"line_number":487,"context_line":"        state (dict): The configuration state to save."},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    Example::"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        /etc/cinder/cinder.conf:"},{"line_number":492,"context_line":"            source: /etc/cinder/cinder.conf"},{"line_number":493,"context_line":"            preserve_properties: true"},{"line_number":494,"context_line":"            dest: null"},{"line_number":495,"context_line":"        /etc/cinder/cinder_audit_map.conf:"},{"line_number":496,"context_line":"            source: /etc/cinder/cinder_audit_map.conf"},{"line_number":497,"context_line":"            preserve_properties: true"},{"line_number":498,"context_line":"            dest: /etc/kolla/defaults/etc/cinder/cinder_audit_map.conf"},{"line_number":499,"context_line":"    \"\"\""},{"line_number":500,"context_line":"    with open(KOLLA_DEFAULTS_STATE, \u0027w\u0027) as f:"},{"line_number":501,"context_line":"        yaml.dump(state, f, default_flow_style\u003dFalse)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"def remove_or_restore_configs(state):"}],"source_content_type":"text/x-python","patch_set":19,"id":"33f62ed5_590bf33d","line":501,"range":{"start_line":454,"start_character":0,"end_line":501,"end_character":53},"in_reply_to":"857b4405_2375d506","updated":"2026-06-12 08:54:12.000000000","message":"I can split it, but my idea was to unify the formats since we are going to deprecate JSON eventually anyway. Keeping internal config in JSON means we\u0027ll have to keep both libraries and logic around. Do you think we should stick to JSON for the internal state permanently, or just move this YAML state transition to a separate follow-up patch?","commit_id":"04493602aaef8fa7af3fbc247cddc951e3440141"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"97c4903f71c44b9dd39cf11798879693895eb5ae","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                        handle_exclusion(root, file_)"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"def get_defaults_state():"},{"line_number":455,"context_line":"    \"\"\"Retrieve the saved default configuration state from default state file."},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    Creates the directory for Kolla defaults if it does not exist, then reads"},{"line_number":458,"context_line":"    and returns the current state. Returns an empty dictionary if the state"},{"line_number":459,"context_line":"    file does not exist yet (first run)."},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    Returns:"},{"line_number":462,"context_line":"        dict: The configuration state stored in the Kolla defaults state file."},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    Example::"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        /etc/cinder/cinder.conf:"},{"line_number":467,"context_line":"            source: /etc/cinder/cinder.conf"},{"line_number":468,"context_line":"            preserve_properties: true"},{"line_number":469,"context_line":"            dest: null"},{"line_number":470,"context_line":"        /etc/cinder/cinder_audit_map.conf:"},{"line_number":471,"context_line":"            source: /etc/cinder/cinder_audit_map.conf"},{"line_number":472,"context_line":"            preserve_properties: true"},{"line_number":473,"context_line":"            dest: /etc/kolla/defaults/etc/cinder/cinder_audit_map.conf"},{"line_number":474,"context_line":"    \"\"\""},{"line_number":475,"context_line":"    os.makedirs(KOLLA_DEFAULTS, exist_ok\u003dTrue)"},{"line_number":476,"context_line":"    if os.path.exists(KOLLA_DEFAULTS_STATE):"},{"line_number":477,"context_line":"        with open(KOLLA_DEFAULTS_STATE, \u0027r\u0027) as f:"},{"line_number":478,"context_line":"            return yaml.safe_load(f)"},{"line_number":479,"context_line":"    else:"},{"line_number":480,"context_line":"        return {}"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"def set_defaults_state(state):"},{"line_number":484,"context_line":"    \"\"\"Save the provided configuration state to the defaults state file."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    Args:"},{"line_number":487,"context_line":"        state (dict): The configuration state to save."},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    Example::"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        /etc/cinder/cinder.conf:"},{"line_number":492,"context_line":"            source: /etc/cinder/cinder.conf"},{"line_number":493,"context_line":"            preserve_properties: true"},{"line_number":494,"context_line":"            dest: null"},{"line_number":495,"context_line":"        /etc/cinder/cinder_audit_map.conf:"},{"line_number":496,"context_line":"            source: /etc/cinder/cinder_audit_map.conf"},{"line_number":497,"context_line":"            preserve_properties: true"},{"line_number":498,"context_line":"            dest: /etc/kolla/defaults/etc/cinder/cinder_audit_map.conf"},{"line_number":499,"context_line":"    \"\"\""},{"line_number":500,"context_line":"    with open(KOLLA_DEFAULTS_STATE, \u0027w\u0027) as f:"},{"line_number":501,"context_line":"        yaml.dump(state, f, default_flow_style\u003dFalse)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"def remove_or_restore_configs(state):"}],"source_content_type":"text/x-python","patch_set":19,"id":"e04390e2_a15c6257","line":501,"range":{"start_line":454,"start_character":0,"end_line":501,"end_character":53},"in_reply_to":"be94fbcb_e0f17608","updated":"2026-06-17 19:35:00.000000000","message":"Done","commit_id":"04493602aaef8fa7af3fbc247cddc951e3440141"}],"releasenotes/notes/switch-to-yaml-configs-32802ccb894c0295.yaml":[{"author":{"_account_id":37203,"name":"Bertrand Lanson","display_name":"Bertrand Lanson","email":"bertrand.lanson@infomaniak.com","username":"lanson","status":"Infomaniak Network SA"},"change_message_id":"8009bc3b53f74bcd3cdff7dcc299d0210077cfd5","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The ``kolla_set_configs`` tool now supports YAML as a native"},{"line_number":5,"context_line":"    configuration format. It can now load ``config.yaml`` or"},{"line_number":6,"context_line":"    ``config.yml`` files in addition to the legacy ``config.json``."},{"line_number":7,"context_line":"    YAML is used as a universal parser, meaning existing JSON"},{"line_number":8,"context_line":"    configurations remain fully supported while benefiting from"},{"line_number":9,"context_line":"    YAML\u0027s improved readability."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"c3b84be1_8e692d31","line":6,"range":{"start_line":5,"start_character":42,"end_line":6,"end_character":18},"updated":"2026-05-27 20:38:28.000000000","message":"Current implementation only support config.yaml, not .yml","commit_id":"7d2840b8e268bccfd954193175c488d983dfc93b"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"5b3374e5433c77220d8d5529d6eab95dc621630d","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The ``kolla_set_configs`` tool now supports YAML as a native"},{"line_number":5,"context_line":"    configuration format. It can now load ``config.yaml`` or"},{"line_number":6,"context_line":"    ``config.yml`` files in addition to the legacy ``config.json``."},{"line_number":7,"context_line":"    YAML is used as a universal parser, meaning existing JSON"},{"line_number":8,"context_line":"    configurations remain fully supported while benefiting from"},{"line_number":9,"context_line":"    YAML\u0027s improved readability."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"a9ae52d9_a752c57e","line":6,"range":{"start_line":5,"start_character":42,"end_line":6,"end_character":18},"in_reply_to":"c3b84be1_8e692d31","updated":"2026-06-09 05:58:27.000000000","message":"Acknowledged","commit_id":"7d2840b8e268bccfd954193175c488d983dfc93b"}]}
