)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"4b58344f38ff8f8bbfd5cb259a863f2e9bf78b99","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Integrate oslo-config-validator"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Regularly, we experience issues in Kolla Ansible deployments because we use"},{"line_number":10,"context_line":"wrong options in OpenStack configuration files. This is because OpenStack"},{"line_number":11,"context_line":"services ignore unknown options. We also need to keep on top of deprecated"},{"line_number":12,"context_line":"options that may be removed in the future. Integrating"},{"line_number":13,"context_line":"oslo-config-validator into Kolla Ansible will greatly help."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Adds a shared role to run oslo-config-validator on each service. Takes into"},{"line_number":16,"context_line":"account that services have multiple containers, and these may also use"},{"line_number":17,"context_line":"multiple config files. Service roles are extended to use this shared role."},{"line_number":18,"context_line":"Executed with the new command ``kolla-ansible validate-config``."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: Ic10b410fc115646d96d2ce39d9618e7c46cb3fbc"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1aad767a_2330f2a6","line":18,"range":{"start_line":9,"start_character":0,"end_line":18,"end_character":64},"updated":"2022-11-22 16:19:34.000000000","message":"Please configure your editor to wrap commit messages at 72 characters.","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"749b5dc251e6fc62637a2aa0c6576dce9f218bb0","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Integrate oslo-config-validator"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Regularly, we experience issues in Kolla Ansible deployments because we use"},{"line_number":10,"context_line":"wrong options in OpenStack configuration files. This is because OpenStack"},{"line_number":11,"context_line":"services ignore unknown options. We also need to keep on top of deprecated"},{"line_number":12,"context_line":"options that may be removed in the future. Integrating"},{"line_number":13,"context_line":"oslo-config-validator into Kolla Ansible will greatly help."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Adds a shared role to run oslo-config-validator on each service. Takes into"},{"line_number":16,"context_line":"account that services have multiple containers, and these may also use"},{"line_number":17,"context_line":"multiple config files. Service roles are extended to use this shared role."},{"line_number":18,"context_line":"Executed with the new command ``kolla-ansible validate-config``."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: Ic10b410fc115646d96d2ce39d9618e7c46cb3fbc"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7e8dc9f5_bc3d6607","line":18,"range":{"start_line":9,"start_character":0,"end_line":18,"end_character":64},"in_reply_to":"1aad767a_2330f2a6","updated":"2022-11-23 11:06:15.000000000","message":"Done","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"aebc43b1b2a88d21e35d1c29dabfa2c04aa567ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4b30017d_1d041037","updated":"2022-11-15 14:04:33.000000000","message":"Neutron has been included to show how this is integrated into a service roles. I\u0027ll push the changes to the rest of the services once it\u0027s certain they won\u0027t need any changes (to avoid having to alter them all at once)","commit_id":"6ec7d1b81414876fb444a7c69f97dc0d0a7aca73"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"4b58344f38ff8f8bbfd5cb259a863f2e9bf78b99","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2f6c87c9_83420378","updated":"2022-11-22 16:19:34.000000000","message":"Great work! Looking forward to run it. Some fixes need on this patch, see comments inline.","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"f0c5b15e27f838574f7d013e21dc54707012af5d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d4df9650_f767c342","updated":"2022-11-24 17:13:18.000000000","message":"We should rework it so it runs fine even in this patch: it currently fails because it cannot find the playbook in common, which is the first executed role. I think we can do like was done for check.yml: add empty playbooks.","commit_id":"1d5946cc96d1899a2e7a2193060bdc5a82c2562e"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"1075ec707c14fc2fed4b3cd2999c8e815be0fa08","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d7f42e87_5fc7934b","in_reply_to":"d4df9650_f767c342","updated":"2022-11-24 17:17:27.000000000","message":"Added config_validate.yml for all roles that had check.yml.","commit_id":"1d5946cc96d1899a2e7a2193060bdc5a82c2562e"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"d904204c7e31103e818e853ded6fa74730ec47a7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1930ae8e_0e23d37e","updated":"2022-11-24 17:22:49.000000000","message":"This is still missing some services which didn\u0027t have check.yml.","commit_id":"cd431ab6278029ad384c8879d5ee1f7a7acf704e"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"d9441257357a38a5eec07a2a64c88a1af16255e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"728a75c0_b57df81a","in_reply_to":"1930ae8e_0e23d37e","updated":"2022-11-25 09:54:09.000000000","message":"Done","commit_id":"cd431ab6278029ad384c8879d5ee1f7a7acf704e"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"c0723eac2cb95d75872f88d289141c2f7495ce57","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"9d664758_8a613093","updated":"2022-11-29 12:08:28.000000000","message":"In the majority of services, the same config/generator pair of files is shared across all containers. To avoid unnecessary duplication in the services dictionaries, I\u0027ve extracted the list of config files to a separate list. Now, we check if the files are present in each container when we do the validation.","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6a77469ed04c1126bb8f77377868ef329620a2b7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"249aad87_e918bd16","updated":"2022-11-30 14:15:37.000000000","message":"Looks like a nice start.","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":24072,"name":"Marcin Juszkiewicz","email":"mjuszkiewicz@redhat.com","username":"hrw"},"change_message_id":"80ef87352061ec9c9dd3809c25bdbaa3de86cec6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"6d28c5b6_2c85dc6d","updated":"2022-12-05 11:47:57.000000000","message":"can you add a call to it in CI?","commit_id":"9fb019070b663c4ae9d2bf5b44c168d4ad028cd4"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"c7649b0feaad597bf8f41614baee0e4440f7fa32","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"96478ad1_64641888","in_reply_to":"6d28c5b6_2c85dc6d","updated":"2022-12-05 12:46:52.000000000","message":"See the next patch in the chain: https://review.opendev.org/c/openstack/kolla-ansible/+/865331","commit_id":"9fb019070b663c4ae9d2bf5b44c168d4ad028cd4"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"d9b111811bf4a20c152900dde76b11c42234c880","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"2d163a97_3a69e1ea","updated":"2023-01-03 16:28:22.000000000","message":"Nice, thanks","commit_id":"6c2aace8d6e6ea97d741645a66042e02bdbffa4b"}],"ansible/roles/masakari/defaults/main.yml":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"fd6bb70486eba029bf386a9a3ebb7aa1fec50c47","unresolved":true,"context_lines":[{"line_number":48,"context_line":"masakari_config_validation:"},{"line_number":49,"context_line":"  - generator: \"/masakari/etc/masakari/masakari-config-generator.conf\""},{"line_number":50,"context_line":"    config: \"/etc/masakari/masakari.conf\""},{"line_number":51,"context_line":"  - generator: \"/masakari/etc/masakari/api-paste.ini\""},{"line_number":52,"context_line":"    config: \"/etc/masakari/api-paste.ini\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"####################"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"38716a91_72f6453a","line":51,"range":{"start_line":51,"start_character":39,"end_line":51,"end_character":53},"updated":"2022-12-20 11:31:23.000000000","message":"Is this a generator config?","commit_id":"1944c30dafcfa5143b1489ee85bfbe68d1e12ca6"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"84e9e0006b5198015bf62c80e61c6bcb1f594651","unresolved":false,"context_lines":[{"line_number":48,"context_line":"masakari_config_validation:"},{"line_number":49,"context_line":"  - generator: \"/masakari/etc/masakari/masakari-config-generator.conf\""},{"line_number":50,"context_line":"    config: \"/etc/masakari/masakari.conf\""},{"line_number":51,"context_line":"  - generator: \"/masakari/etc/masakari/api-paste.ini\""},{"line_number":52,"context_line":"    config: \"/etc/masakari/api-paste.ini\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"####################"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"eb6066f3_3bd8630c","line":51,"range":{"start_line":51,"start_character":39,"end_line":51,"end_character":53},"in_reply_to":"38716a91_72f6453a","updated":"2022-12-21 17:20:31.000000000","message":"No it isn\u0027t, I\u0027ve now removed that from the list.","commit_id":"1944c30dafcfa5143b1489ee85bfbe68d1e12ca6"}],"ansible/roles/neutron/defaults/main.yml":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"4b58344f38ff8f8bbfd5cb259a863f2e9bf78b99","unresolved":true,"context_lines":[{"line_number":130,"context_line":"    config_validation:"},{"line_number":131,"context_line":"      - generator: \"/neutron/etc/oslo-config-generator/neutron.conf\""},{"line_number":132,"context_line":"        config: \"/etc/neutron/neutron.conf\""},{"line_number":133,"context_line":"      - generator: \"/neutron/etc/oslo-config-generator/sirov_agent.ini\""},{"line_number":134,"context_line":"        config: \"/etc/neutron/plugins/ml2/sriov_agent.ini\""},{"line_number":135,"context_line":"  neutron-mlnx-agent:"},{"line_number":136,"context_line":"    container_name: \"neutron_mlnx_agent\""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"09c38d7b_122d900b","line":133,"range":{"start_line":133,"start_character":55,"end_line":133,"end_character":66},"updated":"2022-11-22 16:19:34.000000000","message":"Typo in filename","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"749b5dc251e6fc62637a2aa0c6576dce9f218bb0","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    config_validation:"},{"line_number":131,"context_line":"      - generator: \"/neutron/etc/oslo-config-generator/neutron.conf\""},{"line_number":132,"context_line":"        config: \"/etc/neutron/neutron.conf\""},{"line_number":133,"context_line":"      - generator: \"/neutron/etc/oslo-config-generator/sirov_agent.ini\""},{"line_number":134,"context_line":"        config: \"/etc/neutron/plugins/ml2/sriov_agent.ini\""},{"line_number":135,"context_line":"  neutron-mlnx-agent:"},{"line_number":136,"context_line":"    container_name: \"neutron_mlnx_agent\""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"d5f0bbfb_71a0ccf0","line":133,"range":{"start_line":133,"start_character":55,"end_line":133,"end_character":66},"in_reply_to":"09c38d7b_122d900b","updated":"2022-11-23 11:06:15.000000000","message":"Done","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"4b58344f38ff8f8bbfd5cb259a863f2e9bf78b99","unresolved":true,"context_lines":[{"line_number":236,"context_line":"    volumes: \"{{ ironic_neutron_agent_default_volumes + ironic_neutron_agent_extra_volumes }}\""},{"line_number":237,"context_line":"    dimensions: \"{{ ironic_neutron_agent_dimensions }}\""},{"line_number":238,"context_line":"    healthcheck: \"{{ ironic_neutron_agent_healthcheck }}\""},{"line_number":239,"context_line":"    config_validation:"},{"line_number":240,"context_line":"      - generator: \"/neutron/etc/oslo-config-generator/neutron.conf\""},{"line_number":241,"context_line":"        config: \"/etc/neutron/neutron.conf\""},{"line_number":242,"context_line":"  neutron-tls-proxy:"},{"line_number":243,"context_line":"    container_name: neutron_tls_proxy"},{"line_number":244,"context_line":"    group: neutron-server"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"e9e8e5bd_ec927bc3","line":241,"range":{"start_line":239,"start_character":0,"end_line":241,"end_character":43},"updated":"2022-11-22 16:19:34.000000000","message":"You forgot /etc/neutron/plugins/ml2/ironic_neutron_agent.ini in this block.","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"d9441257357a38a5eec07a2a64c88a1af16255e7","unresolved":true,"context_lines":[{"line_number":236,"context_line":"    volumes: \"{{ ironic_neutron_agent_default_volumes + ironic_neutron_agent_extra_volumes }}\""},{"line_number":237,"context_line":"    dimensions: \"{{ ironic_neutron_agent_dimensions }}\""},{"line_number":238,"context_line":"    healthcheck: \"{{ ironic_neutron_agent_healthcheck }}\""},{"line_number":239,"context_line":"    config_validation:"},{"line_number":240,"context_line":"      - generator: \"/neutron/etc/oslo-config-generator/neutron.conf\""},{"line_number":241,"context_line":"        config: \"/etc/neutron/neutron.conf\""},{"line_number":242,"context_line":"  neutron-tls-proxy:"},{"line_number":243,"context_line":"    container_name: neutron_tls_proxy"},{"line_number":244,"context_line":"    group: neutron-server"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"e20de572_92a52e59","line":241,"range":{"start_line":239,"start_character":0,"end_line":241,"end_character":43},"in_reply_to":"0bf51113_1b8691e7","updated":"2022-11-25 09:54:09.000000000","message":"There is a generator file in the plugins checkout: for example, in the current yoga image, it is located at /plugins/networking-baremetal-5.1.1.dev5/tools/config/networking-baremetal-config-generator.conf\n\nHowever, you can see that the path contains a version, so this is going to be harder to use. Maybe we can have a wildcard in the generator path and use it to look up the file?","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6a77469ed04c1126bb8f77377868ef329620a2b7","unresolved":true,"context_lines":[{"line_number":236,"context_line":"    volumes: \"{{ ironic_neutron_agent_default_volumes + ironic_neutron_agent_extra_volumes }}\""},{"line_number":237,"context_line":"    dimensions: \"{{ ironic_neutron_agent_dimensions }}\""},{"line_number":238,"context_line":"    healthcheck: \"{{ ironic_neutron_agent_healthcheck }}\""},{"line_number":239,"context_line":"    config_validation:"},{"line_number":240,"context_line":"      - generator: \"/neutron/etc/oslo-config-generator/neutron.conf\""},{"line_number":241,"context_line":"        config: \"/etc/neutron/neutron.conf\""},{"line_number":242,"context_line":"  neutron-tls-proxy:"},{"line_number":243,"context_line":"    container_name: neutron_tls_proxy"},{"line_number":244,"context_line":"    group: neutron-server"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"a9ae6f81_25fa3014","line":241,"range":{"start_line":239,"start_character":0,"end_line":241,"end_character":43},"in_reply_to":"0d7c3306_5d44cd5a","updated":"2022-11-30 14:15:37.000000000","message":"Could add a comment about any missing files.","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"7c4ecddb927ef62c1c19858bd93d6373df97dcd9","unresolved":true,"context_lines":[{"line_number":236,"context_line":"    volumes: \"{{ ironic_neutron_agent_default_volumes + ironic_neutron_agent_extra_volumes }}\""},{"line_number":237,"context_line":"    dimensions: \"{{ ironic_neutron_agent_dimensions }}\""},{"line_number":238,"context_line":"    healthcheck: \"{{ ironic_neutron_agent_healthcheck }}\""},{"line_number":239,"context_line":"    config_validation:"},{"line_number":240,"context_line":"      - generator: \"/neutron/etc/oslo-config-generator/neutron.conf\""},{"line_number":241,"context_line":"        config: \"/etc/neutron/neutron.conf\""},{"line_number":242,"context_line":"  neutron-tls-proxy:"},{"line_number":243,"context_line":"    container_name: neutron_tls_proxy"},{"line_number":244,"context_line":"    group: neutron-server"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"0d7c3306_5d44cd5a","line":241,"range":{"start_line":239,"start_character":0,"end_line":241,"end_character":43},"in_reply_to":"e20de572_92a52e59","updated":"2022-11-25 16:22:56.000000000","message":"Let\u0027s ignore this issue for now and maybe fix in a follow up patch.","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"749b5dc251e6fc62637a2aa0c6576dce9f218bb0","unresolved":true,"context_lines":[{"line_number":236,"context_line":"    volumes: \"{{ ironic_neutron_agent_default_volumes + ironic_neutron_agent_extra_volumes }}\""},{"line_number":237,"context_line":"    dimensions: \"{{ ironic_neutron_agent_dimensions }}\""},{"line_number":238,"context_line":"    healthcheck: \"{{ ironic_neutron_agent_healthcheck }}\""},{"line_number":239,"context_line":"    config_validation:"},{"line_number":240,"context_line":"      - generator: \"/neutron/etc/oslo-config-generator/neutron.conf\""},{"line_number":241,"context_line":"        config: \"/etc/neutron/neutron.conf\""},{"line_number":242,"context_line":"  neutron-tls-proxy:"},{"line_number":243,"context_line":"    container_name: neutron_tls_proxy"},{"line_number":244,"context_line":"    group: neutron-server"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"0bf51113_1b8691e7","line":241,"range":{"start_line":239,"start_character":0,"end_line":241,"end_character":43},"in_reply_to":"e9e8e5bd_ec927bc3","updated":"2022-11-23 11:06:15.000000000","message":"I didn\u0027t include this as there isn\u0027t a corresponding generator file.","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6a77469ed04c1126bb8f77377868ef329620a2b7","unresolved":true,"context_lines":[{"line_number":201,"context_line":"####################"},{"line_number":202,"context_line":"# Config Validate"},{"line_number":203,"context_line":"####################"},{"line_number":204,"context_line":"config_validation:"},{"line_number":205,"context_line":"  - generator: \"/neutron/etc/oslo-config-generator/neutron.conf\""},{"line_number":206,"context_line":"    config: \"/etc/neutron/neutron.conf\""},{"line_number":207,"context_line":"  - generator: \"/neutron/etc/oslo-config-generator/neutron.conf\""}],"source_content_type":"text/x-yaml","patch_set":11,"id":"f7be2d48_67e3041e","line":204,"range":{"start_line":204,"start_character":0,"end_line":204,"end_character":17},"updated":"2022-11-30 14:15:37.000000000","message":"Probably need to use a neutron-specific variable name here, then map it to the role variable in the role import.","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"30f9b2a75bbe96cbafd069f0ee83f67b5ae8cc6c","unresolved":false,"context_lines":[{"line_number":201,"context_line":"####################"},{"line_number":202,"context_line":"# Config Validate"},{"line_number":203,"context_line":"####################"},{"line_number":204,"context_line":"config_validation:"},{"line_number":205,"context_line":"  - generator: \"/neutron/etc/oslo-config-generator/neutron.conf\""},{"line_number":206,"context_line":"    config: \"/etc/neutron/neutron.conf\""},{"line_number":207,"context_line":"  - generator: \"/neutron/etc/oslo-config-generator/neutron.conf\""}],"source_content_type":"text/x-yaml","patch_set":11,"id":"1abf4e04_ad5422cf","line":204,"range":{"start_line":204,"start_character":0,"end_line":204,"end_character":17},"in_reply_to":"f7be2d48_67e3041e","updated":"2022-12-01 15:36:37.000000000","message":"Done","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"}],"ansible/roles/service-config-validate/defaults/main.yml":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"9840d0942c69d1301a2f826e8ceafc421b9c40fd","unresolved":true,"context_lines":[{"line_number":2,"context_line":"# Common role for config-validates."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"# Dict of services."},{"line_number":5,"context_line":"config_validate_output_dir: \"/var/log/config-validate\""},{"line_number":6,"context_line":"service_config_validate_services: {}"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"ff8e4ff4_801994f4","line":5,"range":{"start_line":5,"start_character":29,"end_line":5,"end_character":53},"updated":"2022-11-22 20:24:25.000000000","message":"This should probably go under /var/log/kolla instead.","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"e967da9a788feee2d84b7552a7ac21b2394f77d9","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# Common role for config-validates."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"# Dict of services."},{"line_number":5,"context_line":"config_validate_output_dir: \"/var/log/config-validate\""},{"line_number":6,"context_line":"service_config_validate_services: {}"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"dd34a35b_511f3437","line":5,"range":{"start_line":5,"start_character":29,"end_line":5,"end_character":53},"in_reply_to":"5df801cd_aadc925e","updated":"2022-11-25 16:21:06.000000000","message":"Done","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"e5d13985f7e49647229c6d368cadd3614445bef5","unresolved":true,"context_lines":[{"line_number":2,"context_line":"# Common role for config-validates."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"# Dict of services."},{"line_number":5,"context_line":"config_validate_output_dir: \"/var/log/config-validate\""},{"line_number":6,"context_line":"service_config_validate_services: {}"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"f588e86d_162af1e9","line":5,"range":{"start_line":5,"start_character":29,"end_line":5,"end_character":53},"in_reply_to":"e360019b_57415993","updated":"2022-11-25 09:58:53.000000000","message":"What I meant is /var/log/kolla/config-validate, sorry for being unclear.\n\nWith the path as it is set currently, the output files would get generated across many directories,","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"ba05d71988f6db4f12a3e4f15c3a606dace103ae","unresolved":true,"context_lines":[{"line_number":2,"context_line":"# Common role for config-validates."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"# Dict of services."},{"line_number":5,"context_line":"config_validate_output_dir: \"/var/log/config-validate\""},{"line_number":6,"context_line":"service_config_validate_services: {}"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5df801cd_aadc925e","line":5,"range":{"start_line":5,"start_character":29,"end_line":5,"end_character":53},"in_reply_to":"f588e86d_162af1e9","updated":"2022-11-25 14:25:52.000000000","message":"Makes sense, have changed this now.","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"749b5dc251e6fc62637a2aa0c6576dce9f218bb0","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# Common role for config-validates."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"# Dict of services."},{"line_number":5,"context_line":"config_validate_output_dir: \"/var/log/config-validate\""},{"line_number":6,"context_line":"service_config_validate_services: {}"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"e360019b_57415993","line":5,"range":{"start_line":5,"start_character":29,"end_line":5,"end_character":53},"in_reply_to":"ff8e4ff4_801994f4","updated":"2022-11-23 11:06:15.000000000","message":"Done","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6a77469ed04c1126bb8f77377868ef329620a2b7","unresolved":true,"context_lines":[{"line_number":2,"context_line":"# Common role for config-validates."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"# Dict of services."},{"line_number":5,"context_line":"config_validate_output_dir: \"/var/log/kolla/config-validate\""},{"line_number":6,"context_line":"service_config_validate_services: {}"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"ecfc6908_67a0fa70","line":5,"updated":"2022-11-30 14:15:37.000000000","message":"nit: service_?","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"30f9b2a75bbe96cbafd069f0ee83f67b5ae8cc6c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# Common role for config-validates."},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"# Dict of services."},{"line_number":5,"context_line":"config_validate_output_dir: \"/var/log/kolla/config-validate\""},{"line_number":6,"context_line":"service_config_validate_services: {}"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"e63fbba7_c72ef229","line":5,"in_reply_to":"ecfc6908_67a0fa70","updated":"2022-12-01 15:36:37.000000000","message":"Done","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"}],"ansible/roles/service-config-validate/tasks/main.yml":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"4b58344f38ff8f8bbfd5cb259a863f2e9bf78b99","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  vars:"},{"line_number":4,"context_line":"    service_name: \"{{ outer_item.key }}\""},{"line_number":5,"context_line":"    service: \"{{ outer_item.value }}\""},{"line_number":6,"context_line":"    output_dir: \"{{ config_validate_output_dir }}/{{ inventory_hostname }}/{{ project_name }}/{{ service_name }}\""},{"line_number":7,"context_line":"  include_tasks: validate.yml"},{"line_number":8,"context_line":"  loop: \"{{ query(\u0027dict\u0027, service_config_validate_services) }}\""},{"line_number":9,"context_line":"  loop_control:"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"08703ce3_171c5108","line":6,"range":{"start_line":6,"start_character":50,"end_line":6,"end_character":74},"updated":"2022-11-22 16:19:34.000000000","message":"Should we avoid using the inventory hostname in the path? After all we don\u0027t have it in /etc/kolla.\n\nWe can always add it when we upload output somewhere.","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"749b5dc251e6fc62637a2aa0c6576dce9f218bb0","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  vars:"},{"line_number":4,"context_line":"    service_name: \"{{ outer_item.key }}\""},{"line_number":5,"context_line":"    service: \"{{ outer_item.value }}\""},{"line_number":6,"context_line":"    output_dir: \"{{ config_validate_output_dir }}/{{ inventory_hostname }}/{{ project_name }}/{{ service_name }}\""},{"line_number":7,"context_line":"  include_tasks: validate.yml"},{"line_number":8,"context_line":"  loop: \"{{ query(\u0027dict\u0027, service_config_validate_services) }}\""},{"line_number":9,"context_line":"  loop_control:"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"84c71bbd_4a8219f3","line":6,"range":{"start_line":6,"start_character":50,"end_line":6,"end_character":74},"in_reply_to":"08703ce3_171c5108","updated":"2022-11-23 11:06:15.000000000","message":"Done","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6a77469ed04c1126bb8f77377868ef329620a2b7","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  vars:"},{"line_number":4,"context_line":"    service_name: \"{{ outer_item.key }}\""},{"line_number":5,"context_line":"    service: \"{{ outer_item.value }}\""},{"line_number":6,"context_line":"    output_dir: \"{{ config_validate_output_dir }}/{{ project_name }}/{{ service_name }}\""},{"line_number":7,"context_line":"  include_tasks: validate.yml"},{"line_number":8,"context_line":"  loop: \"{{ query(\u0027dict\u0027, service_config_validate_services) }}\""},{"line_number":9,"context_line":"  loop_control:"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"071be31b_8943155f","line":6,"updated":"2022-11-30 14:15:37.000000000","message":"Needs to include the hostname in the path for it to work with multiple hosts.","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"89506d63ef44fb333ecb69348d0ad9da8b33f95d","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  vars:"},{"line_number":4,"context_line":"    service_name: \"{{ outer_item.key }}\""},{"line_number":5,"context_line":"    service: \"{{ outer_item.value }}\""},{"line_number":6,"context_line":"    output_dir: \"{{ config_validate_output_dir }}/{{ project_name }}/{{ service_name }}\""},{"line_number":7,"context_line":"  include_tasks: validate.yml"},{"line_number":8,"context_line":"  loop: \"{{ query(\u0027dict\u0027, service_config_validate_services) }}\""},{"line_number":9,"context_line":"  loop_control:"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"2c5f11c5_8a288ba4","line":6,"in_reply_to":"071be31b_8943155f","updated":"2022-12-01 11:56:42.000000000","message":"This is generated on each overcloud host, not on the control host. I had Matt remove the inventory hostname from the path, which was in a previous version.","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"35ace31c447331364d9807236ecb9a46aefa4a34","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  vars:"},{"line_number":4,"context_line":"    service_name: \"{{ outer_item.key }}\""},{"line_number":5,"context_line":"    service: \"{{ outer_item.value }}\""},{"line_number":6,"context_line":"    output_dir: \"{{ config_validate_output_dir }}/{{ project_name }}/{{ service_name }}\""},{"line_number":7,"context_line":"  include_tasks: validate.yml"},{"line_number":8,"context_line":"  loop: \"{{ query(\u0027dict\u0027, service_config_validate_services) }}\""},{"line_number":9,"context_line":"  loop_control:"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"b9cc6f26_7fc91631","line":6,"in_reply_to":"2c5f11c5_8a288ba4","updated":"2022-12-01 12:31:29.000000000","message":"The copy tasks have delegate_to: localhost. That seems a lot more user friendly to me.","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"84e9e0006b5198015bf62c80e61c6bcb1f594651","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  vars:"},{"line_number":4,"context_line":"    service_name: \"{{ outer_item.key }}\""},{"line_number":5,"context_line":"    service: \"{{ outer_item.value }}\""},{"line_number":6,"context_line":"    output_dir: \"{{ config_validate_output_dir }}/{{ project_name }}/{{ service_name }}\""},{"line_number":7,"context_line":"  include_tasks: validate.yml"},{"line_number":8,"context_line":"  loop: \"{{ query(\u0027dict\u0027, service_config_validate_services) }}\""},{"line_number":9,"context_line":"  loop_control:"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bb1a08ef_f9fe8827","line":6,"in_reply_to":"2ddf3e7b_595326e4","updated":"2022-12-21 17:20:31.000000000","message":"I\u0027ve added inventory_hostname back in.","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"fd6bb70486eba029bf386a9a3ebb7aa1fec50c47","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  vars:"},{"line_number":4,"context_line":"    service_name: \"{{ outer_item.key }}\""},{"line_number":5,"context_line":"    service: \"{{ outer_item.value }}\""},{"line_number":6,"context_line":"    output_dir: \"{{ config_validate_output_dir }}/{{ project_name }}/{{ service_name }}\""},{"line_number":7,"context_line":"  include_tasks: validate.yml"},{"line_number":8,"context_line":"  loop: \"{{ query(\u0027dict\u0027, service_config_validate_services) }}\""},{"line_number":9,"context_line":"  loop_control:"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"2ddf3e7b_595326e4","line":6,"in_reply_to":"b9cc6f26_7fc91631","updated":"2022-12-20 11:31:23.000000000","message":"Unresolved","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6a77469ed04c1126bb8f77377868ef329620a2b7","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    service: \"{{ outer_item.value }}\""},{"line_number":6,"context_line":"    output_dir: \"{{ config_validate_output_dir }}/{{ project_name }}/{{ service_name }}\""},{"line_number":7,"context_line":"  include_tasks: validate.yml"},{"line_number":8,"context_line":"  loop: \"{{ query(\u0027dict\u0027, service_config_validate_services) }}\""},{"line_number":9,"context_line":"  loop_control:"},{"line_number":10,"context_line":"    label: \"{{ service_name }}\""},{"line_number":11,"context_line":"    loop_var: outer_item"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5b8d5c09_3b872244","line":8,"updated":"2022-11-30 14:15:37.000000000","message":"We should only do this for services that are enabled and mapped to the host. See usage of select_services_enabled_and_mapped_to_host","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"fd6bb70486eba029bf386a9a3ebb7aa1fec50c47","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    service: \"{{ outer_item.value }}\""},{"line_number":6,"context_line":"    output_dir: \"{{ config_validate_output_dir }}/{{ project_name }}/{{ service_name }}\""},{"line_number":7,"context_line":"  include_tasks: validate.yml"},{"line_number":8,"context_line":"  loop: \"{{ query(\u0027dict\u0027, service_config_validate_services) }}\""},{"line_number":9,"context_line":"  loop_control:"},{"line_number":10,"context_line":"    label: \"{{ service_name }}\""},{"line_number":11,"context_line":"    loop_var: outer_item"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"19e2b6d2_26b60b18","line":8,"in_reply_to":"106973b7_0c000589","updated":"2022-12-20 11:31:23.000000000","message":"We still need to check if it exists - it might not be running for some reason.","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"84e9e0006b5198015bf62c80e61c6bcb1f594651","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    service: \"{{ outer_item.value }}\""},{"line_number":6,"context_line":"    output_dir: \"{{ config_validate_output_dir }}/{{ project_name }}/{{ service_name }}\""},{"line_number":7,"context_line":"  include_tasks: validate.yml"},{"line_number":8,"context_line":"  loop: \"{{ query(\u0027dict\u0027, service_config_validate_services) }}\""},{"line_number":9,"context_line":"  loop_control:"},{"line_number":10,"context_line":"    label: \"{{ service_name }}\""},{"line_number":11,"context_line":"    loop_var: outer_item"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"4fb07bb7_9704ad8f","line":8,"in_reply_to":"19e2b6d2_26b60b18","updated":"2022-12-21 17:20:31.000000000","message":"Ack","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"30f9b2a75bbe96cbafd069f0ee83f67b5ae8cc6c","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    service: \"{{ outer_item.value }}\""},{"line_number":6,"context_line":"    output_dir: \"{{ config_validate_output_dir }}/{{ project_name }}/{{ service_name }}\""},{"line_number":7,"context_line":"  include_tasks: validate.yml"},{"line_number":8,"context_line":"  loop: \"{{ query(\u0027dict\u0027, service_config_validate_services) }}\""},{"line_number":9,"context_line":"  loop_control:"},{"line_number":10,"context_line":"    label: \"{{ service_name }}\""},{"line_number":11,"context_line":"    loop_var: outer_item"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"106973b7_0c000589","line":8,"in_reply_to":"5b8d5c09_3b872244","updated":"2022-12-01 15:36:37.000000000","message":"I\u0027ve added this now. Am I right in thinking that this would mean we no longer need to check if the service container exists?","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"}],"ansible/roles/service-config-validate/tasks/validate.yml":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"4b58344f38ff8f8bbfd5cb259a863f2e9bf78b99","unresolved":true,"context_lines":[{"line_number":16,"context_line":"    - service.config_validation is defined"},{"line_number":17,"context_line":"  register: result"},{"line_number":18,"context_line":"  failed_when:"},{"line_number":19,"context_line":"    - result.rc !\u003d 0"},{"line_number":20,"context_line":"    - result.rc !\u003d 1"},{"line_number":21,"context_line":"  with_items: \"{{ service.config_validation }}\""},{"line_number":22,"context_line":"  loop_control:"},{"line_number":23,"context_line":"    label: \"{{ inner_item[\u0027config\u0027] | basename }}\""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"4cc6cf1e_13d086ed","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":20},"updated":"2022-11-22 16:19:34.000000000","message":"Can we make this, if it works:\n\nfailed_when: result.rc not in [0, 1]\n\nCan you add a comment explaining why 1 is not an error? It\u0027s implicit in next tasks but it would nice to have it described clearly.","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"749b5dc251e6fc62637a2aa0c6576dce9f218bb0","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    - service.config_validation is defined"},{"line_number":17,"context_line":"  register: result"},{"line_number":18,"context_line":"  failed_when:"},{"line_number":19,"context_line":"    - result.rc !\u003d 0"},{"line_number":20,"context_line":"    - result.rc !\u003d 1"},{"line_number":21,"context_line":"  with_items: \"{{ service.config_validation }}\""},{"line_number":22,"context_line":"  loop_control:"},{"line_number":23,"context_line":"    label: \"{{ inner_item[\u0027config\u0027] | basename }}\""}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3581aa43_314d950b","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":20},"in_reply_to":"4cc6cf1e_13d086ed","updated":"2022-11-23 11:06:15.000000000","message":"Done","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6a77469ed04c1126bb8f77377868ef329620a2b7","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- name: \"{{ project_name }} : {{ service.container_name }} | Get info on container\""},{"line_number":3,"context_line":"  become: True"},{"line_number":4,"context_line":"  docker_container_info:"},{"line_number":5,"context_line":"    name: \"{{ service.container_name }}\""},{"line_number":6,"context_line":"  register: container_info"},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9d4d6abf_b3fdab01","line":4,"range":{"start_line":4,"start_character":2,"end_line":4,"end_character":23},"updated":"2022-11-30 14:15:37.000000000","message":"This is going to be a problem when we add podman support. You can use kolla_container_facts instead","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"30f9b2a75bbe96cbafd069f0ee83f67b5ae8cc6c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- name: \"{{ project_name }} : {{ service.container_name }} | Get info on container\""},{"line_number":3,"context_line":"  become: True"},{"line_number":4,"context_line":"  docker_container_info:"},{"line_number":5,"context_line":"    name: \"{{ service.container_name }}\""},{"line_number":6,"context_line":"  register: container_info"},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":11,"id":"d44c2b18_f0ec145d","line":4,"range":{"start_line":4,"start_character":2,"end_line":4,"end_character":23},"in_reply_to":"9d4d6abf_b3fdab01","updated":"2022-12-01 15:36:37.000000000","message":"Done","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6a77469ed04c1126bb8f77377868ef329620a2b7","unresolved":true,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"- name: \"{{ project_name }} : {{ service.container_name }} | Find available configurations\""},{"line_number":9,"context_line":"  become: True"},{"line_number":10,"context_line":"  community.docker.docker_container_exec:"},{"line_number":11,"context_line":"    container: \"{{ service.container_name }}\""},{"line_number":12,"context_line":"    command: bash -c \"[[ -f {{ inner_item[\u0027generator\u0027] }} \u0026\u0026 -f {{ inner_item[\u0027config\u0027] }} ]]\""},{"line_number":13,"context_line":"    chdir: /root"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"6160ae92_19980f5f","line":10,"range":{"start_line":10,"start_character":2,"end_line":10,"end_character":40},"updated":"2022-11-30 14:15:37.000000000","message":"Similar issue, you can use command with `container_engine`","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"30f9b2a75bbe96cbafd069f0ee83f67b5ae8cc6c","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"- name: \"{{ project_name }} : {{ service.container_name }} | Find available configurations\""},{"line_number":9,"context_line":"  become: True"},{"line_number":10,"context_line":"  community.docker.docker_container_exec:"},{"line_number":11,"context_line":"    container: \"{{ service.container_name }}\""},{"line_number":12,"context_line":"    command: bash -c \"[[ -f {{ inner_item[\u0027generator\u0027] }} \u0026\u0026 -f {{ inner_item[\u0027config\u0027] }} ]]\""},{"line_number":13,"context_line":"    chdir: /root"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"1ae8254a_cccc5129","line":10,"range":{"start_line":10,"start_character":2,"end_line":10,"end_character":40},"in_reply_to":"6160ae92_19980f5f","updated":"2022-12-01 15:36:37.000000000","message":"Done","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6a77469ed04c1126bb8f77377868ef329620a2b7","unresolved":true,"context_lines":[{"line_number":9,"context_line":"  become: True"},{"line_number":10,"context_line":"  community.docker.docker_container_exec:"},{"line_number":11,"context_line":"    container: \"{{ service.container_name }}\""},{"line_number":12,"context_line":"    command: bash -c \"[[ -f {{ inner_item[\u0027generator\u0027] }} \u0026\u0026 -f {{ inner_item[\u0027config\u0027] }} ]]\""},{"line_number":13,"context_line":"    chdir: /root"},{"line_number":14,"context_line":"  when:"},{"line_number":15,"context_line":"    - container_info.exists"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bdafa48d_f5ce7170","line":12,"range":{"start_line":12,"start_character":22,"end_line":12,"end_character":61},"updated":"2022-11-30 14:15:37.000000000","message":"Let\u0027s assume this exists. If it doesn\u0027t, that\u0027s a bug.","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"30f9b2a75bbe96cbafd069f0ee83f67b5ae8cc6c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"  become: True"},{"line_number":10,"context_line":"  community.docker.docker_container_exec:"},{"line_number":11,"context_line":"    container: \"{{ service.container_name }}\""},{"line_number":12,"context_line":"    command: bash -c \"[[ -f {{ inner_item[\u0027generator\u0027] }} \u0026\u0026 -f {{ inner_item[\u0027config\u0027] }} ]]\""},{"line_number":13,"context_line":"    chdir: /root"},{"line_number":14,"context_line":"  when:"},{"line_number":15,"context_line":"    - container_info.exists"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"7e2cc99b_d7d79a57","line":12,"range":{"start_line":12,"start_character":22,"end_line":12,"end_character":61},"in_reply_to":"bdafa48d_f5ce7170","updated":"2022-12-01 15:36:37.000000000","message":"Done","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6a77469ed04c1126bb8f77377868ef329620a2b7","unresolved":true,"context_lines":[{"line_number":19,"context_line":"  with_items: \"{{ config_validation }}\""},{"line_number":20,"context_line":"  loop_control:"},{"line_number":21,"context_line":"    label: \"{{ inner_item[\u0027config\u0027] | basename }}\""},{"line_number":22,"context_line":"    loop_var: inner_item"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"- name: \"{{ project_name }} : {{ service.container_name }} | Validate configurations\""},{"line_number":25,"context_line":"  become: True"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"548a518b_37388555","line":22,"updated":"2022-11-30 14:15:37.000000000","message":"changed_when: false","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"30f9b2a75bbe96cbafd069f0ee83f67b5ae8cc6c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  with_items: \"{{ config_validation }}\""},{"line_number":20,"context_line":"  loop_control:"},{"line_number":21,"context_line":"    label: \"{{ inner_item[\u0027config\u0027] | basename }}\""},{"line_number":22,"context_line":"    loop_var: inner_item"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"- name: \"{{ project_name }} : {{ service.container_name }} | Validate configurations\""},{"line_number":25,"context_line":"  become: True"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"9bf47d26_049fb148","line":22,"in_reply_to":"548a518b_37388555","updated":"2022-12-01 15:36:37.000000000","message":"Done","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6a77469ed04c1126bb8f77377868ef329620a2b7","unresolved":true,"context_lines":[{"line_number":25,"context_line":"  become: True"},{"line_number":26,"context_line":"  community.docker.docker_container_exec:"},{"line_number":27,"context_line":"    container: \"{{ service.container_name }}\""},{"line_number":28,"context_line":"    command: bash -c \"oslo-config-validator --config-file {{ inner_item[1][\u0027generator\u0027] }} --input-file {{ inner_item[1][\u0027config\u0027] }}\""},{"line_number":29,"context_line":"    chdir: /root"},{"line_number":30,"context_line":"  when:"},{"line_number":31,"context_line":"    - container_info.exists"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"8934a848_56286c92","line":28,"range":{"start_line":28,"start_character":22,"end_line":28,"end_character":43},"updated":"2022-11-30 14:15:37.000000000","message":"Could we do this in one task when the file exists?","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"30f9b2a75bbe96cbafd069f0ee83f67b5ae8cc6c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"  become: True"},{"line_number":26,"context_line":"  community.docker.docker_container_exec:"},{"line_number":27,"context_line":"    container: \"{{ service.container_name }}\""},{"line_number":28,"context_line":"    command: bash -c \"oslo-config-validator --config-file {{ inner_item[1][\u0027generator\u0027] }} --input-file {{ inner_item[1][\u0027config\u0027] }}\""},{"line_number":29,"context_line":"    chdir: /root"},{"line_number":30,"context_line":"  when:"},{"line_number":31,"context_line":"    - container_info.exists"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"f22268ad_a249aa48","line":28,"range":{"start_line":28,"start_character":22,"end_line":28,"end_character":43},"in_reply_to":"8934a848_56286c92","updated":"2022-12-01 15:36:37.000000000","message":"Done","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6a77469ed04c1126bb8f77377868ef329620a2b7","unresolved":true,"context_lines":[{"line_number":47,"context_line":"    - container_info.exists"},{"line_number":48,"context_line":"    - inner_item.rc is defined"},{"line_number":49,"context_line":"    - inner_item.rc \u003d\u003d 1"},{"line_number":50,"context_line":"  loop: \"{{ result.results }}\""},{"line_number":51,"context_line":"  loop_control:"},{"line_number":52,"context_line":"    label: \"{{ service_name }}\""},{"line_number":53,"context_line":"    loop_var: inner_item"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"b4f551e1_590e71de","line":50,"range":{"start_line":50,"start_character":2,"end_line":50,"end_character":6},"updated":"2022-11-30 14:15:37.000000000","message":"no need for loop. Could use:\n\n when: result.results | map(attribute\u003d\u0027rc\u0027, default\u003d0) | select(\u0027equalto\u0027, 1) | list | length \u003e 0","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"30f9b2a75bbe96cbafd069f0ee83f67b5ae8cc6c","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    - container_info.exists"},{"line_number":48,"context_line":"    - inner_item.rc is defined"},{"line_number":49,"context_line":"    - inner_item.rc \u003d\u003d 1"},{"line_number":50,"context_line":"  loop: \"{{ result.results }}\""},{"line_number":51,"context_line":"  loop_control:"},{"line_number":52,"context_line":"    label: \"{{ service_name }}\""},{"line_number":53,"context_line":"    loop_var: inner_item"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"72d720d6_88e317ae","line":50,"range":{"start_line":50,"start_character":2,"end_line":50,"end_character":6},"in_reply_to":"b4f551e1_590e71de","updated":"2022-12-01 15:36:37.000000000","message":"Done","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"fd6bb70486eba029bf386a9a3ebb7aa1fec50c47","unresolved":true,"context_lines":[{"line_number":14,"context_line":"    bash -c \"[[ -f {{ inner_item[\u0027config\u0027] }} ]] \u0026\u0026 oslo-config-validator --config-file {{ inner_item[\u0027generator\u0027] }} --input-file {{ inner_item[\u0027config\u0027] }}\""},{"line_number":15,"context_line":"  when:"},{"line_number":16,"context_line":"    - container_info._containers | length \u003e 0"},{"line_number":17,"context_line":"    - service_config_validation is defined"},{"line_number":18,"context_line":"  register: result"},{"line_number":19,"context_line":"  failed_when: result.rc not in [0, 1]  # rc 1 is expected when errors are found in the config file, or when the config file doesn\u0027t exist"},{"line_number":20,"context_line":"  with_items: \"{{ service_config_validation }}\""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"ebf82a78_28e2b0fb","line":17,"range":{"start_line":17,"start_character":6,"end_line":17,"end_character":42},"updated":"2022-12-20 11:31:23.000000000","message":"Move this check to main.yml? Probably it\u0027s a programming error if not defined.","commit_id":"1944c30dafcfa5143b1489ee85bfbe68d1e12ca6"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"84e9e0006b5198015bf62c80e61c6bcb1f594651","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    bash -c \"[[ -f {{ inner_item[\u0027config\u0027] }} ]] \u0026\u0026 oslo-config-validator --config-file {{ inner_item[\u0027generator\u0027] }} --input-file {{ inner_item[\u0027config\u0027] }}\""},{"line_number":15,"context_line":"  when:"},{"line_number":16,"context_line":"    - container_info._containers | length \u003e 0"},{"line_number":17,"context_line":"    - service_config_validation is defined"},{"line_number":18,"context_line":"  register: result"},{"line_number":19,"context_line":"  failed_when: result.rc not in [0, 1]  # rc 1 is expected when errors are found in the config file, or when the config file doesn\u0027t exist"},{"line_number":20,"context_line":"  with_items: \"{{ service_config_validation }}\""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"429f987d_f2d7c40f","line":17,"range":{"start_line":17,"start_character":6,"end_line":17,"end_character":42},"in_reply_to":"ebf82a78_28e2b0fb","updated":"2022-12-21 17:20:31.000000000","message":"Done","commit_id":"1944c30dafcfa5143b1489ee85bfbe68d1e12ca6"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"fd6bb70486eba029bf386a9a3ebb7aa1fec50c47","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    path: \"{{ output_dir }}\""},{"line_number":30,"context_line":"    state: directory"},{"line_number":31,"context_line":"  when:"},{"line_number":32,"context_line":"    - result.results | map(attribute\u003d\u0027rc\u0027, default\u003d0) | select(\u0027equalto\u0027, 1) | list | length \u003e 0"},{"line_number":33,"context_line":"    - result.results | map(attribute\u003d\u0027stderr\u0027, default\u003d\"\") | select(\u0027ne\u0027, \"\") | list | length \u003e 0"},{"line_number":34,"context_line":"  delegate_to: localhost"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"ac62edce_90e1823a","line":32,"range":{"start_line":32,"start_character":6,"end_line":32,"end_character":12},"updated":"2022-12-20 11:31:23.000000000","message":"Does this work as expected when the container does not exist?","commit_id":"1944c30dafcfa5143b1489ee85bfbe68d1e12ca6"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"84e9e0006b5198015bf62c80e61c6bcb1f594651","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    path: \"{{ output_dir }}\""},{"line_number":30,"context_line":"    state: directory"},{"line_number":31,"context_line":"  when:"},{"line_number":32,"context_line":"    - result.results | map(attribute\u003d\u0027rc\u0027, default\u003d0) | select(\u0027equalto\u0027, 1) | list | length \u003e 0"},{"line_number":33,"context_line":"    - result.results | map(attribute\u003d\u0027stderr\u0027, default\u003d\"\") | select(\u0027ne\u0027, \"\") | list | length \u003e 0"},{"line_number":34,"context_line":"  delegate_to: localhost"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"65fce36d_f759676d","line":32,"range":{"start_line":32,"start_character":6,"end_line":32,"end_character":12},"in_reply_to":"ac62edce_90e1823a","updated":"2022-12-21 17:20:31.000000000","message":"Yes, when the container doesn\u0027t exist ``result.results`` is 0, so the statements evaluate to false.","commit_id":"1944c30dafcfa5143b1489ee85bfbe68d1e12ca6"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"fd6bb70486eba029bf386a9a3ebb7aa1fec50c47","unresolved":true,"context_lines":[{"line_number":43,"context_line":"    - inner_item[0].rc is defined"},{"line_number":44,"context_line":"    - inner_item[0].rc \u003d\u003d 1"},{"line_number":45,"context_line":"    - inner_item[0].stderr !\u003d \"\""},{"line_number":46,"context_line":"  loop: \"{{ result.results | zip(service_config_validation) | list }}\""},{"line_number":47,"context_line":"  loop_control:"},{"line_number":48,"context_line":"    label: \"{{ inner_item[1][\u0027config\u0027] | basename }}\""},{"line_number":49,"context_line":"    loop_var: inner_item"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"405db2c5_eca2a9df","line":46,"range":{"start_line":46,"start_character":33,"end_line":46,"end_character":58},"updated":"2022-12-20 11:31:23.000000000","message":"nit: You can access the original loop item without zipping via inner_item.item","commit_id":"1944c30dafcfa5143b1489ee85bfbe68d1e12ca6"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"84e9e0006b5198015bf62c80e61c6bcb1f594651","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    - inner_item[0].rc is defined"},{"line_number":44,"context_line":"    - inner_item[0].rc \u003d\u003d 1"},{"line_number":45,"context_line":"    - inner_item[0].stderr !\u003d \"\""},{"line_number":46,"context_line":"  loop: \"{{ result.results | zip(service_config_validation) | list }}\""},{"line_number":47,"context_line":"  loop_control:"},{"line_number":48,"context_line":"    label: \"{{ inner_item[1][\u0027config\u0027] | basename }}\""},{"line_number":49,"context_line":"    loop_var: inner_item"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"556a7ddd_2bec5773","line":46,"range":{"start_line":46,"start_character":33,"end_line":46,"end_character":58},"in_reply_to":"405db2c5_eca2a9df","updated":"2022-12-21 17:20:31.000000000","message":"Done","commit_id":"1944c30dafcfa5143b1489ee85bfbe68d1e12ca6"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"284e57475e3a8450dce8309d1ae4fe928073768a","unresolved":false,"context_lines":[{"line_number":36,"context_line":"  become: True"},{"line_number":37,"context_line":"  copy:"},{"line_number":38,"context_line":"    content: \"{{ inner_item.stderr }}\""},{"line_number":39,"context_line":"    dest: \"{{ output_dir }}/{{ inner_item.inner_item.config | basename }}.err\""},{"line_number":40,"context_line":"  when:"},{"line_number":41,"context_line":"    - container_info._containers | length \u003e 0"},{"line_number":42,"context_line":"    - inner_item.rc is defined"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"008df2fa_1f29bb6c","line":39,"range":{"start_line":39,"start_character":42,"end_line":39,"end_character":52},"updated":"2022-12-22 13:59:09.000000000","message":"oh, tricky detail - it uses loop_var.","commit_id":"6c2aace8d6e6ea97d741645a66042e02bdbffa4b"}],"releasenotes/notes/integrate-oslo-config-validator-4dc26b8753984917.yaml":[{"author":{"_account_id":15197,"name":"Pierre Riteau","email":"pierre@stackhpc.com","username":"priteau","status":"StackHPC"},"change_message_id":"4b58344f38ff8f8bbfd5cb259a863f2e9bf78b99","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Regularly, we experience issues in Kolla Ansible deployments because we use"},{"line_number":4,"context_line":"    wrong options in OpenStack configuration files. This is because OpenStack"},{"line_number":5,"context_line":"    services ignore unknown options. We also need to keep on top of deprecated"},{"line_number":6,"context_line":"    options that may be removed in the future. Integrating"},{"line_number":7,"context_line":"    oslo-config-validator into Kolla Ansible will greatly help."},{"line_number":8,"context_line":"features:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    Adds a shared role to run oslo-config-validator on each service. Takes into"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"dcb84954_2f74fc0c","line":7,"range":{"start_line":2,"start_character":0,"end_line":7,"end_character":63},"updated":"2022-11-22 16:19:34.000000000","message":"Prelude is for general comments about the whole release, not a prelude for this specific release note. You don\u0027t need this text at all in release notes. This could go in docs though (hint hint).\n\nSee https://docs.openstack.org/reno/latest/user/usage.html#editing-a-release-note","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"749b5dc251e6fc62637a2aa0c6576dce9f218bb0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Regularly, we experience issues in Kolla Ansible deployments because we use"},{"line_number":4,"context_line":"    wrong options in OpenStack configuration files. This is because OpenStack"},{"line_number":5,"context_line":"    services ignore unknown options. We also need to keep on top of deprecated"},{"line_number":6,"context_line":"    options that may be removed in the future. Integrating"},{"line_number":7,"context_line":"    oslo-config-validator into Kolla Ansible will greatly help."},{"line_number":8,"context_line":"features:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    Adds a shared role to run oslo-config-validator on each service. Takes into"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"6029ebb6_98000578","line":7,"range":{"start_line":2,"start_character":0,"end_line":7,"end_character":63},"in_reply_to":"dcb84954_2f74fc0c","updated":"2022-11-23 11:06:15.000000000","message":"Done","commit_id":"7066fad2ce69269c8117006a1d1e0def51cb0ed7"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"6a77469ed04c1126bb8f77377868ef329620a2b7","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds a shared role to run oslo-config-validator on each service. Takes into"},{"line_number":5,"context_line":"    account that services have multiple containers, and these may also use"},{"line_number":6,"context_line":"    multiple config files. Service roles are extended to use this shared role."},{"line_number":7,"context_line":"    Executed with the new command ``kolla-ansible validate-config``."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"50e9cea3_64640132","line":4,"updated":"2022-11-30 14:15:37.000000000","message":"From a user perspective, the main thing they want to know is that there is a new command, and roughly what it does. The info about roles is more implementation detail, which would be more appropriate in the commit message.","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"},{"author":{"_account_id":35263,"name":"Matt Crees","email":"mattc@stackhpc.com","username":"mattcrees"},"change_message_id":"fbba779d3b4ae449153d2c3d9ce868061824e0d3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds a shared role to run oslo-config-validator on each service. Takes into"},{"line_number":5,"context_line":"    account that services have multiple containers, and these may also use"},{"line_number":6,"context_line":"    multiple config files. Service roles are extended to use this shared role."},{"line_number":7,"context_line":"    Executed with the new command ``kolla-ansible validate-config``."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"8d359c0b_aa6ebc73","line":4,"in_reply_to":"50e9cea3_64640132","updated":"2022-12-08 14:50:00.000000000","message":"Done","commit_id":"0774ee55c526b9d7b127ab97031941478a3be72b"}]}
