)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"4d04d94aa798522a606df2d1effbfc07b7955110","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"58ee29ba_ea5323b4","updated":"2026-02-17 09:38:57.000000000","message":"I cant\u0027t seem to get it right.\n\n\nI am not sure the config files are mounted in the correct directory.\n\n1. The keystone-httpd container logs seem to be empty.\n2. The logs/kolla_configs/keystone_httpd/config.json seems weird to me imho.\n\nAny takes on this?","commit_id":"14c5125301a1ab2db89c58af4bfcec0b7731977c"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"cf109feb30360b37bc221ee97ef5129163e833d7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"f5a90b36_d7a35480","updated":"2026-02-17 08:57:50.000000000","message":"This breaks horizon testinfra tests, they at least need to be improved to add coverage for federation scenario","commit_id":"14c5125301a1ab2db89c58af4bfcec0b7731977c"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"37ba21b3dd7e47034543e848c2e65dfc9edc3d2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"ceaa9bb0_7a4c8ab5","in_reply_to":"1da16748_9fdb8c30","updated":"2026-02-26 17:57:20.000000000","message":"Done","commit_id":"14c5125301a1ab2db89c58af4bfcec0b7731977c"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"618e266db0db885435e41cb0b4bff969a593e4bd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"bcadf4e8_709b3e8c","in_reply_to":"58ee29ba_ea5323b4","updated":"2026-02-17 15:35:52.000000000","message":"I got this figured out. Seems the federation folder needed to be created beforehand. As bind mounting a directory to a RO filesystem (another bind mounted ro filesystem) would try to create the federation directory, as it was not present.","commit_id":"14c5125301a1ab2db89c58af4bfcec0b7731977c"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"8b708152d83271d15c4da7d9c9f23ccf324b89d5","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"1da16748_9fdb8c30","in_reply_to":"6d55845c_e6c2f378","updated":"2026-02-17 15:37:09.000000000","message":"OK trying to add horizon tests aswell!","commit_id":"14c5125301a1ab2db89c58af4bfcec0b7731977c"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"7f56a80450d0f6dfad5625f31ea66ecb673c1b61","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"6d55845c_e6c2f378","in_reply_to":"f5a90b36_d7a35480","updated":"2026-02-17 09:43:16.000000000","message":"Could you link the horizon testinfra tests to me, so I know what to edit ?","commit_id":"14c5125301a1ab2db89c58af4bfcec0b7731977c"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"8b708152d83271d15c4da7d9c9f23ccf324b89d5","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":17,"id":"7392876c_4b0b98ff","updated":"2026-02-17 15:37:09.000000000","message":"Ok, trying to add horizon tests aswell!","commit_id":"fefaf2fa083392ced50b02f607e2488922d2f108"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"37ba21b3dd7e47034543e848c2e65dfc9edc3d2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"a9e7b385_50ae992e","in_reply_to":"7392876c_4b0b98ff","updated":"2026-02-26 17:57:20.000000000","message":"Done","commit_id":"fefaf2fa083392ced50b02f607e2488922d2f108"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"37ba21b3dd7e47034543e848c2e65dfc9edc3d2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":59,"id":"ce98d996_577324af","updated":"2026-02-26 17:57:20.000000000","message":"1. Got the horizon federation tests working.\n2. Seems I got the hang of kolla-toolbox and migrated to use openstack.cloud ansible module for federation config.\n\nSome things to note:\n\nThe CI is still flaky, so any tips on linters and whatnot are appriciated. But the important thing is that federation tests are passing with this new inclusion.","commit_id":"ec3bc334233502d23453c1668b2fb34e71d9db45"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"f1ebdbcb7d7a68fb3043f8a8b09f15fdb275af1c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":64,"id":"29dc687d_76c8d721","updated":"2026-03-08 09:36:25.000000000","message":"Testing out fix from patch https://review.opendev.org/c/openstack/kolla-ansible/+/978999\n\nWith the proper CI in this branch, if the fix is valid, then the CI should finish for federation use case.","commit_id":"aa9a2b078aa8355964f9a97f8fcca0a9257fa551"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"6e5874e5010dd6fff483281fa5ffefb1ba5c34e8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":80,"id":"e500fced_dd381f07","updated":"2026-03-18 07:54:31.000000000","message":"overall LGTM, good work - I\u0027ll add +2 after fixing the other comment","commit_id":"4c05949664c21dd97a09a4162eacd3c9071d6268"},{"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":"72e333056c173b738242499b12a1d165211a26b0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":83,"id":"33d9dfc3_32d1791e","updated":"2026-03-19 19:45:22.000000000","message":"The core work (modernizing to openstack.cloud.* modules, the path fix, CI coverage) is good. Once the blocking are addressed this should be mergeable.","commit_id":"2c13714609261f9c778735ede5b397a00322dd11"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"a175865e8fe915a910528ab8d352743fc99932fb","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":93,"id":"53c51793_84fbcd42","updated":"2026-03-25 07:09:09.000000000","message":"This will break keystone_wsgi_provider: \"apache\"","commit_id":"46878607332c3ded5bf029c70f31ac47cce410b8"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"f6183450853c34c0f5e6442a0dbb09b285dfcb70","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":93,"id":"4d0d80c0_4a1ed03a","in_reply_to":"27127f4f_748299d0","updated":"2026-03-25 07:57:07.000000000","message":"OK, so for running keystone_wsgi_provider: apache the keystone-httpd container will not be created, am I correct?","commit_id":"46878607332c3ded5bf029c70f31ac47cce410b8"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"5cc8572dc1c160f3e2b1b4cba1864cd7d6b58344","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":93,"id":"7181e929_25c6b21d","in_reply_to":"4d0d80c0_4a1ed03a","updated":"2026-04-05 18:21:22.000000000","message":"Done","commit_id":"46878607332c3ded5bf029c70f31ac47cce410b8"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"6eb4408f4a06e3cc89267449cf6837b63ec5f8ca","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":93,"id":"27127f4f_748299d0","in_reply_to":"53c51793_84fbcd42","updated":"2026-03-25 07:50:47.000000000","message":"OK. Did you find this in CI or is this part not covered?","commit_id":"46878607332c3ded5bf029c70f31ac47cce410b8"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"f463e1d389731a211dfb94f6fb4f628e604143c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":104,"id":"9ae629a4_2f0a4867","updated":"2026-03-27 18:40:33.000000000","message":"recheck: nova-scheduler fail in rocky","commit_id":"ae05e1814d9ec79e5b12f8e1146f59734fe02b78"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"6af120a3d9e46314b6cf2b557553d952973beadd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":116,"id":"91d68e0e_8acf6744","updated":"2026-04-01 14:50:44.000000000","message":"wsgi-keystone.conf.j2\n\n{% if kolla_base_distro \u003d\u003d \"ubuntu\" %}\n     OIDCHTMLErrorTemplate /var/www/html/modoidc-error-page.html\n{% endif %}\n\nkeystone-httpd.json.j2 - also path ubuntu?\n{\n    \"source\": \"{{ container_config_directory }}/federation/modoidc-error-page.html\",\n    \"dest\": \"/var/www/html/modoidc-error-page.html\",\n    ...\n}\n\n\nThe path is hardcoded, but what about distributions other than Ubuntu?","commit_id":"1976262502c899b927885ac7b7a05bfa62b42161"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"b3b962c00ba0bb580b69f537df17ecd69d28d474","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":116,"id":"13d07cbb_8e812793","in_reply_to":"4b915eed_815af399","updated":"2026-04-01 15:38:39.000000000","message":"I don\u0027t know how it works, but I just noticed it. The decision is up to the core reviewers.","commit_id":"1976262502c899b927885ac7b7a05bfa62b42161"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"9bc33a360a990052848738c4f9d5e8ef88588488","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":116,"id":"4b915eed_815af399","in_reply_to":"91d68e0e_8acf6744","updated":"2026-04-01 15:26:56.000000000","message":"I took this from the patch where it was introduced here: https://review.opendev.org/c/openstack/kolla-ansible/+/832806. In keystone-httpd container the content is never mounted. The template seems to be present only in the apache wsgi container.\n\nIn current master and 2025.2 platforms (rocky 10, debian 13) the template does not work and results in the apache service not coming up. Ubuntu Noble is the only one that supports it.\n\nDo you wish me to add this to keystone-httpd container aswell for noble? I can do that.","commit_id":"1976262502c899b927885ac7b7a05bfa62b42161"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"6ab13f6f70483af347138a5350346b0e594bb4d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":129,"id":"41ca7fb9_59cc6c37","updated":"2026-04-09 09:12:41.000000000","message":"looks very good, I think we\u0027re almost there!","commit_id":"bb7f0da626d467f738b90b8812868567477308ac"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"5cc8572dc1c160f3e2b1b4cba1864cd7d6b58344","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":129,"id":"3b37cb39_cfec8e0e","updated":"2026-04-05 18:21:22.000000000","message":"recheck: spurious failure for noble and mariadb upgrade","commit_id":"bb7f0da626d467f738b90b8812868567477308ac"},{"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":"01babe8847514efd57be378962faa4cdec039c6c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":131,"id":"5d71ba73_a3e118bc","updated":"2026-04-12 08:46:30.000000000","message":"This is getting very close to perfect imo, few nits and test fragility, but otherwise 👍","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"54b0a33319978615ca0949fbcf6b8faa68e08da4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":131,"id":"f7cd8269_38b8f674","updated":"2026-04-11 10:54:38.000000000","message":"recheck: unrelated mariadb failure","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"},{"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":"83df309cd45695d9713d591a80d765c6b0301e34","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":133,"id":"13bca4d2_7d5404f2","updated":"2026-04-12 19:20:17.000000000","message":"recheck looks unrelated","commit_id":"32d09436482c84a63bdc9c08c86c84d135f5c304"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"e4f44664a491719d1d9319ba0844fbccd58f6f73","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":133,"id":"29efd371_2a9fcbc9","updated":"2026-04-13 06:50:43.000000000","message":"recheck: gerrit upgrade","commit_id":"32d09436482c84a63bdc9c08c86c84d135f5c304"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"c61fb67b2b6e232e25722a54f78af2fad1ad883d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":134,"id":"c66ce9d1_5ba0ae70","updated":"2026-04-14 11:51:51.000000000","message":"Reading the code, when the introduction of uwsgi was executed, the processes to configure IdP stopped working as the default is not Apache HTTPD anymore, is that correct?\n\nBTW, the custom error page, is it possible to use it with uwsgi as we did in Apache HTTPD?","commit_id":"b3300261d17459e7dd04f60877e0fa8558f4ccb4"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"e6c1ac38c5a4f58df0d4d44347f2fdc77f5d9b0b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":134,"id":"870bbae0_cec31eff","in_reply_to":"460533d2_475e45d2","updated":"2026-04-14 12:22:27.000000000","message":"BTW would you have any idea how to update this for the future? The docs here say to use native Error Pages and in those pages the specific variables are available. https://github.com/OpenIDC/mod_auth_openidc/wiki#19-how-do-i-customize-the-user-facing-error-pages\n\nI had the idea to use ErrorDocument 401 /var/www/html/modoidc-error-page.html and in that page you can use the new variables available after 2.4.14 release.\n\nThe problem is, what is the error number thatthe previous page was trying to resolve, as you said it was regarding authentication, is 401 the correct one? Would it redirect all of the errors to that page and was the old template better, as it only matched specific OIDC errors?","commit_id":"b3300261d17459e7dd04f60877e0fa8558f4ccb4"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"81d88f2b87f8e2e65997fabb0499b20977e1f8b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":134,"id":"460533d2_475e45d2","in_reply_to":"c66ce9d1_5ba0ae70","updated":"2026-04-14 12:13:19.000000000","message":"If you mean your previous patch: https://review.opendev.org/c/openstack/kolla-ansible/+/832806\n\nThen inherently this patch is broken for newer releases, as the OIDCHTMLErrorTemplate was removed in mod_oidc plugin 2.4.14 release which was released in 2024 august.\n\nSo releases:\n\nRocky 10\nDebian Trixie\nUbuntu 26.04\n\n^ these relesaes will no longer have this option\n\nReleases\n\nRocky 9\nDebian bookworm\nUbuntu 24.04\n\n^ these still have the code for the template\n\nIn the master branch of kolla-ansible, it was recently limited to only ubuntu https://opendev.org/openstack/kolla-ansible/commit/da3a11ce94b48611335c5bb21bbe3a864755e95c\n\nIf the keystone-httpd container needs to have this custom error page in 2025.2 release I recommend doing a patch to add this option to the file https://opendev.org/openstack/kolla-ansible/src/branch/master/ansible/roles/keystone/templates/httpd-keystone.conf.j2\n\nAs you did the previous patch. I have a question, does the template need to be present in the keystone master apache2 config or in the apache2 that serves federation? If the case is the latter then this change was probably missed and needs to be added to the file I linked.","commit_id":"b3300261d17459e7dd04f60877e0fa8558f4ccb4"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"e7e4fe63a795910ed1f1b2a18f5bd67bc8cf48f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":138,"id":"be881d9b_cba0b803","updated":"2026-04-15 13:24:00.000000000","message":"nice work Tafkamax!","commit_id":"1264c46c67690abb900d74552d100746fcfa921e"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"3f82728be1af61d2c9ec28fb184ee391ac9e5d9b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":138,"id":"5898e583_742f9905","updated":"2026-04-15 17:34:54.000000000","message":"recheck bookworm upgrade usual fail","commit_id":"1264c46c67690abb900d74552d100746fcfa921e"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"aee3d37cb024a65dce8906c133b30575aa92a0fe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":138,"id":"160827f4_e4780246","in_reply_to":"be881d9b_cba0b803","updated":"2026-04-15 16:06:20.000000000","message":"Thanks! Sure took a long time...","commit_id":"1264c46c67690abb900d74552d100746fcfa921e"}],"ansible/library/kolla_toolbox.py":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"61e2d29056e4707118ff107a6d0b0587df57738f","unresolved":true,"context_lines":[{"line_number":101,"context_line":"            password: password"},{"line_number":102,"context_line":"            project_name: \"admin\""},{"line_number":103,"context_line":"            domain_name: \"default\""},{"line_number":104,"context_line":"    - name: \u003e"},{"line_number":105,"context_line":"        Add a list object as a module_arg."},{"line_number":106,"context_line":"        Note how to work with list objects."},{"line_number":107,"context_line":"      kolla_toolbox:"}],"source_content_type":"text/x-python","patch_set":71,"id":"2ad29117_027054a9","line":104,"updated":"2026-03-16 12:04:35.000000000","message":"That\u0027s not related to this patch, if you want to post it - create a separate patch for this","commit_id":"39e955e8b653c14166a14879a4b778cc81cb1d7f"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"f1453935d1802bb100dc6ec1d25bda6800f8318e","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            password: password"},{"line_number":102,"context_line":"            project_name: \"admin\""},{"line_number":103,"context_line":"            domain_name: \"default\""},{"line_number":104,"context_line":"    - name: \u003e"},{"line_number":105,"context_line":"        Add a list object as a module_arg."},{"line_number":106,"context_line":"        Note how to work with list objects."},{"line_number":107,"context_line":"      kolla_toolbox:"}],"source_content_type":"text/x-python","patch_set":71,"id":"1b0efb90_7b0a1fb0","line":104,"in_reply_to":"2ad29117_027054a9","updated":"2026-03-16 16:55:47.000000000","message":"Acknowledged, removed this info, will create separate suggestion later on.","commit_id":"39e955e8b653c14166a14879a4b778cc81cb1d7f"}],"ansible/roles/keystone/defaults/main.yml":[{"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":"01babe8847514efd57be378962faa4cdec039c6c","unresolved":true,"context_lines":[{"line_number":46,"context_line":"  keystone-httpd:"},{"line_number":47,"context_line":"    container_name: \"keystone_httpd\""},{"line_number":48,"context_line":"    group: \"keystone\""},{"line_number":49,"context_line":"    enabled: \"{{ enable_keystone_federation | bool and keystone_wsgi_provider !\u003d \u0027apache\u0027 }}\""},{"line_number":50,"context_line":"    image: \"{{ keystone_httpd_image_full }}\""},{"line_number":51,"context_line":"    volumes: \"{{ keystone_httpd_default_volumes + keystone_httpd_extra_volumes }}\""},{"line_number":52,"context_line":"    dimensions: \"{{ keystone_httpd_dimensions }}\""}],"source_content_type":"text/x-yaml","patch_set":131,"id":"c118a664_35739429","line":49,"range":{"start_line":49,"start_character":51,"end_line":49,"end_character":89},"updated":"2026-04-12 08:46:30.000000000","message":"Maybe we make the check stricter for uwsgi rather than not apache ? similar to `keystone_host_federation_base_folder` \n\n\n```suggestion\n    enabled: \"{{ enable_keystone_federation | bool and keystone_wsgi_provider \u003d\u003d \u0027uwsgi\u0027 }}\"\n```","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"ca6a34af305fbc9f580758d39ebe6ced3bf67b52","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  keystone-httpd:"},{"line_number":47,"context_line":"    container_name: \"keystone_httpd\""},{"line_number":48,"context_line":"    group: \"keystone\""},{"line_number":49,"context_line":"    enabled: \"{{ enable_keystone_federation | bool and keystone_wsgi_provider !\u003d \u0027apache\u0027 }}\""},{"line_number":50,"context_line":"    image: \"{{ keystone_httpd_image_full }}\""},{"line_number":51,"context_line":"    volumes: \"{{ keystone_httpd_default_volumes + keystone_httpd_extra_volumes }}\""},{"line_number":52,"context_line":"    dimensions: \"{{ keystone_httpd_dimensions }}\""}],"source_content_type":"text/x-yaml","patch_set":131,"id":"514abedf_1de1e6ce","line":49,"range":{"start_line":49,"start_character":51,"end_line":49,"end_character":89},"in_reply_to":"c118a664_35739429","updated":"2026-04-12 15:38:51.000000000","message":"Done","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"}],"ansible/roles/keystone/tasks/register_identity_providers.yml":[{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"f5649472b52cdf9a7a81943ce8608fcf6728dd8f","unresolved":true,"context_lines":[{"line_number":60,"context_line":"      interface: \"{{ openstack_interface }}\""},{"line_number":61,"context_line":"      ca_cert: \"{% if openstack_cacert !\u003d \u0027\u0027 %}{{ openstack_cacert }}{% else %}{{ omit }}{% endif %}\""},{"line_number":62,"context_line":"      name: \"{{ item.name }}\""},{"line_number":63,"context_line":"      rules: \"{{ \u0027{{ keystone_identity_mapping_rules }}\u0027 }}\""},{"line_number":64,"context_line":"      state: present"},{"line_number":65,"context_line":"    module_extra_vars:"},{"line_number":66,"context_line":"      keystone_identity_mapping_rules: \"{{ lookup(\u0027ansible.builtin.file\u0027, item.file) | from_json }}\""}],"source_content_type":"text/x-yaml","patch_set":48,"id":"d17f5c7a_d11bad07","line":63,"updated":"2026-02-23 11:01:15.000000000","message":"maybe | from_json running in kolla_toolbox context would work better, than in module_extra_vars\n\nlike so:\n\n  rules: \"{{ \u0027{{ keystone_identity_mapping_rules | from_json }}\u0027 }}\"\n  state: present\nmodule_extra_vars:\n  keystone_identity_mapping_rules: \"{{ lookup(\u0027ansible.builtin.file\u0027, item.file) }}\"","commit_id":"ca297128c751128fd7ae25eb9513ef07807b6fd7"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"24d419430962f254524542d6f3815e1f94671ac0","unresolved":false,"context_lines":[{"line_number":60,"context_line":"      interface: \"{{ openstack_interface }}\""},{"line_number":61,"context_line":"      ca_cert: \"{% if openstack_cacert !\u003d \u0027\u0027 %}{{ openstack_cacert }}{% else %}{{ omit }}{% endif %}\""},{"line_number":62,"context_line":"      name: \"{{ item.name }}\""},{"line_number":63,"context_line":"      rules: \"{{ \u0027{{ keystone_identity_mapping_rules }}\u0027 }}\""},{"line_number":64,"context_line":"      state: present"},{"line_number":65,"context_line":"    module_extra_vars:"},{"line_number":66,"context_line":"      keystone_identity_mapping_rules: \"{{ lookup(\u0027ansible.builtin.file\u0027, item.file) | from_json }}\""}],"source_content_type":"text/x-yaml","patch_set":48,"id":"df7fafa3_1ce95df6","line":63,"in_reply_to":"d17f5c7a_d11bad07","updated":"2026-02-23 13:11:25.000000000","message":"Acknowledged","commit_id":"ca297128c751128fd7ae25eb9513ef07807b6fd7"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"f5649472b52cdf9a7a81943ce8608fcf6728dd8f","unresolved":true,"context_lines":[{"line_number":113,"context_line":"      ca_cert: \"{% if openstack_cacert !\u003d \u0027\u0027 %}{{ openstack_cacert }}{% else %}{{ omit }}{% endif %}\""},{"line_number":114,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":115,"context_line":"      remote_ids:"},{"line_number":116,"context_line":"        - \"{{ item.identifier }}\""},{"line_number":117,"context_line":"      domain_id: \"{{ item.openstack_domain }}\""},{"line_number":118,"context_line":"      name: \"{{ item.name }}\""},{"line_number":119,"context_line":"      state: present"}],"source_content_type":"text/x-yaml","patch_set":48,"id":"1bf50476_0af8947e","line":116,"updated":"2026-02-23 11:01:15.000000000","message":"adding \"\" in list will probably add \u0027 to the values and keystone may not like it","commit_id":"ca297128c751128fd7ae25eb9513ef07807b6fd7"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"24d419430962f254524542d6f3815e1f94671ac0","unresolved":true,"context_lines":[{"line_number":113,"context_line":"      ca_cert: \"{% if openstack_cacert !\u003d \u0027\u0027 %}{{ openstack_cacert }}{% else %}{{ omit }}{% endif %}\""},{"line_number":114,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":115,"context_line":"      remote_ids:"},{"line_number":116,"context_line":"        - \"{{ item.identifier }}\""},{"line_number":117,"context_line":"      domain_id: \"{{ item.openstack_domain }}\""},{"line_number":118,"context_line":"      name: \"{{ item.name }}\""},{"line_number":119,"context_line":"      state: present"}],"source_content_type":"text/x-yaml","patch_set":48,"id":"7cf858dc_9585a39c","line":116,"in_reply_to":"1bf50476_0af8947e","updated":"2026-02-23 13:11:25.000000000","message":"OK will try without.","commit_id":"ca297128c751128fd7ae25eb9513ef07807b6fd7"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"ade54121c6ea7b0bb8b2f0884d0c52078e48c984","unresolved":true,"context_lines":[{"line_number":113,"context_line":"      ca_cert: \"{% if openstack_cacert !\u003d \u0027\u0027 %}{{ openstack_cacert }}{% else %}{{ omit }}{% endif %}\""},{"line_number":114,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":115,"context_line":"      remote_ids:"},{"line_number":116,"context_line":"        - \"{{ item.identifier }}\""},{"line_number":117,"context_line":"      domain_id: \"{{ item.openstack_domain }}\""},{"line_number":118,"context_line":"      name: \"{{ item.name }}\""},{"line_number":119,"context_line":"      state: present"}],"source_content_type":"text/x-yaml","patch_set":48,"id":"bf1bdbf6_d518c5c5","line":116,"in_reply_to":"5e8e4758_492c611b","updated":"2026-02-25 14:01:16.000000000","message":"Seems that it does like it. BUT it is wrong. List in list.\n\n    \"identity_provider\": {\n        \"description\": \"Example Provider\",\n        \"domain_id\": \"default\",\n        \"id\": \"example_provider\",\n        \"is_enabled\": false,\n        \"name\": \"example_provider\",\n        \"remote_ids\": [\n            \"[\u0027https://idp.example.org/realms/example\u0027]\"\n        ]\n    },","commit_id":"ca297128c751128fd7ae25eb9513ef07807b6fd7"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"650eb45f0bffdf84dd31422585867ef0c471e899","unresolved":true,"context_lines":[{"line_number":113,"context_line":"      ca_cert: \"{% if openstack_cacert !\u003d \u0027\u0027 %}{{ openstack_cacert }}{% else %}{{ omit }}{% endif %}\""},{"line_number":114,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":115,"context_line":"      remote_ids:"},{"line_number":116,"context_line":"        - \"{{ item.identifier }}\""},{"line_number":117,"context_line":"      domain_id: \"{{ item.openstack_domain }}\""},{"line_number":118,"context_line":"      name: \"{{ item.name }}\""},{"line_number":119,"context_line":"      state: present"}],"source_content_type":"text/x-yaml","patch_set":48,"id":"5e8e4758_492c611b","line":116,"in_reply_to":"7cf858dc_9585a39c","updated":"2026-02-25 11:49:52.000000000","message":"Hmm, I changed the code to be without quotes, but this will trigger the no-quotes error.\n\n[ERROR]: YAML parsing failed: This may be an issue with missing quotes around a template block.\nOrigin: /home/zuul/kolla-ansible-venv/share/kolla-ansible/ansible/roles/keystone/tasks/register_identity_providers.yml:116:11\n\n114       description: \"{{ item.public_name }}\"\n115       remote_ids:\n116         - {{ item.identifier }}\n              ^ column 11\n\n\nFor example:\n\n    raw: {{ some_var }}\n\nShould be:\n\n    raw: \"{{ some_var }}\"\n\nAny thoughts on how to resolve this, without just adding quotes?","commit_id":"ca297128c751128fd7ae25eb9513ef07807b6fd7"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"c4482bb03dc186b74fe71afff20dc32ebeb7f258","unresolved":false,"context_lines":[{"line_number":113,"context_line":"      ca_cert: \"{% if openstack_cacert !\u003d \u0027\u0027 %}{{ openstack_cacert }}{% else %}{{ omit }}{% endif %}\""},{"line_number":114,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":115,"context_line":"      remote_ids:"},{"line_number":116,"context_line":"        - \"{{ item.identifier }}\""},{"line_number":117,"context_line":"      domain_id: \"{{ item.openstack_domain }}\""},{"line_number":118,"context_line":"      name: \"{{ item.name }}\""},{"line_number":119,"context_line":"      state: present"}],"source_content_type":"text/x-yaml","patch_set":48,"id":"4c93d3d5_9e6c55b7","line":116,"in_reply_to":"bf1bdbf6_d518c5c5","updated":"2026-02-26 13:45:49.000000000","message":"\"identity_provider\": {\n        \"description\": \"Example Provider\",\n        \"domain_id\": \"default\",\n        \"id\": \"example_provider\",\n        \"is_enabled\": false,\n        \"name\": \"example_provider\",\n        \"remote_ids\": [\n            \"https://idp.example.org/realms/example\"\n        ]\n    },\n\nI have mastered the syntax. for Kolla toolbox you need to wrap the list object as a json object and the unjson it. Then we can avoid double list object.","commit_id":"ca297128c751128fd7ae25eb9513ef07807b6fd7"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"f5649472b52cdf9a7a81943ce8608fcf6728dd8f","unresolved":true,"context_lines":[{"line_number":114,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":115,"context_line":"      remote_ids:"},{"line_number":116,"context_line":"        - \"{{ item.identifier }}\""},{"line_number":117,"context_line":"      domain_id: \"{{ item.openstack_domain }}\""},{"line_number":118,"context_line":"      name: \"{{ item.name }}\""},{"line_number":119,"context_line":"      state: present"},{"line_number":120,"context_line":"  run_once: true"}],"source_content_type":"text/x-yaml","patch_set":48,"id":"0aba1a9e_3582f585","line":117,"updated":"2026-02-23 11:01:15.000000000","message":"is this item is domain_id ?","commit_id":"ca297128c751128fd7ae25eb9513ef07807b6fd7"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"24d419430962f254524542d6f3815e1f94671ac0","unresolved":true,"context_lines":[{"line_number":114,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":115,"context_line":"      remote_ids:"},{"line_number":116,"context_line":"        - \"{{ item.identifier }}\""},{"line_number":117,"context_line":"      domain_id: \"{{ item.openstack_domain }}\""},{"line_number":118,"context_line":"      name: \"{{ item.name }}\""},{"line_number":119,"context_line":"      state: present"},{"line_number":120,"context_line":"  run_once: true"}],"source_content_type":"text/x-yaml","patch_set":48,"id":"8086addd_0eaff542","line":117,"in_reply_to":"0aba1a9e_3582f585","updated":"2026-02-23 13:11:25.000000000","message":"Yes, the openstack.cloud.federation_idp wants domain_id\n\nhttps://docs.ansible.com/projects/ansible/latest/collections/openstack/cloud/federation_idp_module.html#parameter-domain_id\n\nitem.openstack_domain should be the ID of the domain imho.\n\nIn the docs it is not fully clarified though if this is the name or the ID. https://docs.openstack.org/kolla-ansible/latest/reference/shared-services/keystone-guide.html#openstack-domain","commit_id":"ca297128c751128fd7ae25eb9513ef07807b6fd7"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"37ba21b3dd7e47034543e848c2e65dfc9edc3d2a","unresolved":false,"context_lines":[{"line_number":114,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":115,"context_line":"      remote_ids:"},{"line_number":116,"context_line":"        - \"{{ item.identifier }}\""},{"line_number":117,"context_line":"      domain_id: \"{{ item.openstack_domain }}\""},{"line_number":118,"context_line":"      name: \"{{ item.name }}\""},{"line_number":119,"context_line":"      state: present"},{"line_number":120,"context_line":"  run_once: true"}],"source_content_type":"text/x-yaml","patch_set":48,"id":"c84b662e_5a22c5e8","line":117,"in_reply_to":"8086addd_0eaff542","updated":"2026-02-26 17:57:20.000000000","message":"Done","commit_id":"ca297128c751128fd7ae25eb9513ef07807b6fd7"},{"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":"72e333056c173b738242499b12a1d165211a26b0","unresolved":true,"context_lines":[{"line_number":113,"context_line":"      ca_cert: \"{{ openstack_cacert if openstack_cacert !\u003d \u0027\u0027 else omit }}\""},{"line_number":114,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":115,"context_line":"      remote_ids: \"{{ \u0027{{ keystone_identity_provider_remote_ids | from_json }}\u0027 }}\""},{"line_number":116,"context_line":"      domain_id: \"{{ item.openstack_domain }}\""},{"line_number":117,"context_line":"      name: \"{{ item.name }}\""},{"line_number":118,"context_line":"      state: present"},{"line_number":119,"context_line":"    module_extra_vars:"}],"source_content_type":"text/x-yaml","patch_set":83,"id":"d8cb9331_76d6897f","line":116,"range":{"start_line":116,"start_character":6,"end_line":116,"end_character":46},"updated":"2026-03-19 19:45:22.000000000","message":"This is a hack because default domain id is \"default\", but it won\u0027t work for any other domain.\n\nI\u0027d look up the actual domain id\n\nOr at least document it.","commit_id":"2c13714609261f9c778735ede5b397a00322dd11"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"fd2b659221e1f4ccf6d141cfbfeb824f9f04dcda","unresolved":false,"context_lines":[{"line_number":113,"context_line":"      ca_cert: \"{{ openstack_cacert if openstack_cacert !\u003d \u0027\u0027 else omit }}\""},{"line_number":114,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":115,"context_line":"      remote_ids: \"{{ \u0027{{ keystone_identity_provider_remote_ids | from_json }}\u0027 }}\""},{"line_number":116,"context_line":"      domain_id: \"{{ item.openstack_domain }}\""},{"line_number":117,"context_line":"      name: \"{{ item.name }}\""},{"line_number":118,"context_line":"      state: present"},{"line_number":119,"context_line":"    module_extra_vars:"}],"source_content_type":"text/x-yaml","patch_set":83,"id":"9c6143cb_8d1efca5","line":116,"range":{"start_line":116,"start_character":6,"end_line":116,"end_character":46},"in_reply_to":"0b1941d9_936da3ef","updated":"2026-03-21 10:42:01.000000000","message":"Done","commit_id":"2c13714609261f9c778735ede5b397a00322dd11"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"5adb5cf118b5c28c053b8e32c5415ccf1bb69401","unresolved":true,"context_lines":[{"line_number":113,"context_line":"      ca_cert: \"{{ openstack_cacert if openstack_cacert !\u003d \u0027\u0027 else omit }}\""},{"line_number":114,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":115,"context_line":"      remote_ids: \"{{ \u0027{{ keystone_identity_provider_remote_ids | from_json }}\u0027 }}\""},{"line_number":116,"context_line":"      domain_id: \"{{ item.openstack_domain }}\""},{"line_number":117,"context_line":"      name: \"{{ item.name }}\""},{"line_number":118,"context_line":"      state: present"},{"line_number":119,"context_line":"    module_extra_vars:"}],"source_content_type":"text/x-yaml","patch_set":83,"id":"0b1941d9_936da3ef","line":116,"range":{"start_line":116,"start_character":6,"end_line":116,"end_character":46},"in_reply_to":"d8cb9331_76d6897f","updated":"2026-03-21 09:39:50.000000000","message":"Hmm, so how would I change this?\n\n1. Use the same module to find an openstack domain with the item.openstack_domain. Then if it exists, extract the domain_id from there?\n\nAs all of these are loops, then I would need to create another sub_task for looping over the keystone_identity_providers and doing what I proposed. Then include the subtask using include_tasks.\n\nWould this be OK? Then it shouldn\u0027t break existing logic. The other way would be to document this LOUDLY.","commit_id":"2c13714609261f9c778735ede5b397a00322dd11"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"749b87af6ec89b8fc2e8cd47e0c50641590ab5b7","unresolved":true,"context_lines":[{"line_number":114,"context_line":"  run_once: true"},{"line_number":115,"context_line":"  no_log: false"},{"line_number":116,"context_line":"  register: existing_identity_domains"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"- name: Register Identity Providers in OpenStack"},{"line_number":119,"context_line":"  become: true"},{"line_number":120,"context_line":"  kolla_toolbox:"}],"source_content_type":"text/x-yaml","patch_set":116,"id":"10abb32b_385aea87","line":117,"updated":"2026-04-01 14:45:11.000000000","message":"protection in the code? to make it more readable?\n\n- name: Verify that required Identity Domains exist\n  ansible.builtin.fail:\n    msg: \u003e\n      Domain \u0027{{ item.openstack_domain }}\u0027 was not found in OpenStack.\n      Please create it first or check your keystone_identity_providers configuration.\n  run_once: true\n  with_items: \"{{ keystone_identity_providers }}\"\n  when: \u003e\n    existing_identity_domains.domains | \n    selectattr(\u0027name\u0027, \u0027equalto\u0027, item.openstack_domain) | \n    list | length \u003d\u003d 0","commit_id":"1976262502c899b927885ac7b7a05bfa62b42161"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"9bc33a360a990052848738c4f9d5e8ef88588488","unresolved":false,"context_lines":[{"line_number":114,"context_line":"  run_once: true"},{"line_number":115,"context_line":"  no_log: false"},{"line_number":116,"context_line":"  register: existing_identity_domains"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"- name: Register Identity Providers in OpenStack"},{"line_number":119,"context_line":"  become: true"},{"line_number":120,"context_line":"  kolla_toolbox:"}],"source_content_type":"text/x-yaml","patch_set":116,"id":"00db7120_540674b8","line":117,"in_reply_to":"10abb32b_385aea87","updated":"2026-04-01 15:26:56.000000000","message":"Done","commit_id":"1976262502c899b927885ac7b7a05bfa62b42161"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"749b87af6ec89b8fc2e8cd47e0c50641590ab5b7","unresolved":true,"context_lines":[{"line_number":128,"context_line":"      ca_cert: \"{{ openstack_cacert if openstack_cacert !\u003d \u0027\u0027 else omit }}\""},{"line_number":129,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":130,"context_line":"      remote_ids: \"{{ \u0027{{ keystone_identity_provider_remote_ids | from_json }}\u0027 }}\""},{"line_number":131,"context_line":"      domain_id: \"{{ existing_identity_domains.domains | selectattr(\u0027name\u0027, \u0027equalto\u0027, item.openstack_domain) | map(attribute\u003d\u0027id\u0027) | first }}\""},{"line_number":132,"context_line":"      name: \"{{ item.name }}\""},{"line_number":133,"context_line":"      is_enabled: true"},{"line_number":134,"context_line":"      state: present"}],"source_content_type":"text/x-yaml","patch_set":116,"id":"aac1325a_09f83c23","line":131,"range":{"start_line":131,"start_character":0,"end_line":131,"end_character":143},"updated":"2026-04-01 14:45:11.000000000","message":"default ?","commit_id":"1976262502c899b927885ac7b7a05bfa62b42161"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"5cc8572dc1c160f3e2b1b4cba1864cd7d6b58344","unresolved":false,"context_lines":[{"line_number":128,"context_line":"      ca_cert: \"{{ openstack_cacert if openstack_cacert !\u003d \u0027\u0027 else omit }}\""},{"line_number":129,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":130,"context_line":"      remote_ids: \"{{ \u0027{{ keystone_identity_provider_remote_ids | from_json }}\u0027 }}\""},{"line_number":131,"context_line":"      domain_id: \"{{ existing_identity_domains.domains | selectattr(\u0027name\u0027, \u0027equalto\u0027, item.openstack_domain) | map(attribute\u003d\u0027id\u0027) | first }}\""},{"line_number":132,"context_line":"      name: \"{{ item.name }}\""},{"line_number":133,"context_line":"      is_enabled: true"},{"line_number":134,"context_line":"      state: present"}],"source_content_type":"text/x-yaml","patch_set":116,"id":"47066939_40c56066","line":131,"range":{"start_line":131,"start_character":0,"end_line":131,"end_character":143},"in_reply_to":"404e6381_195ba5cd","updated":"2026-04-05 18:21:22.000000000","message":"Done","commit_id":"1976262502c899b927885ac7b7a05bfa62b42161"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"b3b962c00ba0bb580b69f537df17ecd69d28d474","unresolved":true,"context_lines":[{"line_number":128,"context_line":"      ca_cert: \"{{ openstack_cacert if openstack_cacert !\u003d \u0027\u0027 else omit }}\""},{"line_number":129,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":130,"context_line":"      remote_ids: \"{{ \u0027{{ keystone_identity_provider_remote_ids | from_json }}\u0027 }}\""},{"line_number":131,"context_line":"      domain_id: \"{{ existing_identity_domains.domains | selectattr(\u0027name\u0027, \u0027equalto\u0027, item.openstack_domain) | map(attribute\u003d\u0027id\u0027) | first }}\""},{"line_number":132,"context_line":"      name: \"{{ item.name }}\""},{"line_number":133,"context_line":"      is_enabled: true"},{"line_number":134,"context_line":"      state: present"}],"source_content_type":"text/x-yaml","patch_set":116,"id":"404e6381_195ba5cd","line":131,"range":{"start_line":131,"start_character":0,"end_line":131,"end_character":143},"in_reply_to":"a2557145_e474d210","updated":"2026-04-01 15:38:39.000000000","message":"Now that you’ve added the check, it can stay like this, previously, if it hadn’t found anything, an error would have occurred here.","commit_id":"1976262502c899b927885ac7b7a05bfa62b42161"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"9bc33a360a990052848738c4f9d5e8ef88588488","unresolved":true,"context_lines":[{"line_number":128,"context_line":"      ca_cert: \"{{ openstack_cacert if openstack_cacert !\u003d \u0027\u0027 else omit }}\""},{"line_number":129,"context_line":"      description: \"{{ item.public_name }}\""},{"line_number":130,"context_line":"      remote_ids: \"{{ \u0027{{ keystone_identity_provider_remote_ids | from_json }}\u0027 }}\""},{"line_number":131,"context_line":"      domain_id: \"{{ existing_identity_domains.domains | selectattr(\u0027name\u0027, \u0027equalto\u0027, item.openstack_domain) | map(attribute\u003d\u0027id\u0027) | first }}\""},{"line_number":132,"context_line":"      name: \"{{ item.name }}\""},{"line_number":133,"context_line":"      is_enabled: true"},{"line_number":134,"context_line":"      state: present"}],"source_content_type":"text/x-yaml","patch_set":116,"id":"a2557145_e474d210","line":131,"range":{"start_line":131,"start_character":0,"end_line":131,"end_character":143},"in_reply_to":"aac1325a_09f83c23","updated":"2026-04-01 15:26:56.000000000","message":"Do you mean that I should add an `| default(\u003cvalue\u003e)` filter?","commit_id":"1976262502c899b927885ac7b7a05bfa62b42161"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"6ab13f6f70483af347138a5350346b0e594bb4d7","unresolved":true,"context_lines":[{"line_number":40,"context_line":"    module_args:"},{"line_number":41,"context_line":"      auth: \"{{ openstack_auth }}\""},{"line_number":42,"context_line":"      cloud: \"{{ openstack_auth_cloud }}\""},{"line_number":43,"context_line":"      endpoint_type: \"{{ openstack_interface }}\""},{"line_number":44,"context_line":"      region_name: \"{{ openstack_region_name }}\""},{"line_number":45,"context_line":"      interface: \"{{ openstack_interface }}\""},{"line_number":46,"context_line":"      ca_cert: \"{{ openstack_cacert if openstack_cacert !\u003d \u0027\u0027 else omit }}\""}],"source_content_type":"text/x-yaml","patch_set":129,"id":"29448052_d2aa002f","line":43,"updated":"2026-04-09 09:12:41.000000000","message":"NIT: endpoint_type is an alias for interface - https://docs.ansible.com/projects/ansible/latest/collections/openstack/cloud/federation_idp_info_module.html#parameter-interface\n\nTASK [keystone : Create unexisting domains] ************************************\ntask path: /home/zuul/kolla-ansible-venv/share/kolla-ansible/ansible/roles/keystone/tasks/register_identity_providers.yml:35\nSunday 05 April 2026  19:05:37 +0000 (0:00:00.070)       0:04:53.096 ********** \n[WARNING]: Both option interface and its alias endpoint_type are set.\n\nlet\u0027s leave one","commit_id":"bb7f0da626d467f738b90b8812868567477308ac"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"66b3350fa5814776e651475a44c719cfcf63b677","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    module_args:"},{"line_number":41,"context_line":"      auth: \"{{ openstack_auth }}\""},{"line_number":42,"context_line":"      cloud: \"{{ openstack_auth_cloud }}\""},{"line_number":43,"context_line":"      endpoint_type: \"{{ openstack_interface }}\""},{"line_number":44,"context_line":"      region_name: \"{{ openstack_region_name }}\""},{"line_number":45,"context_line":"      interface: \"{{ openstack_interface }}\""},{"line_number":46,"context_line":"      ca_cert: \"{{ openstack_cacert if openstack_cacert !\u003d \u0027\u0027 else omit }}\""}],"source_content_type":"text/x-yaml","patch_set":129,"id":"2bc846b0_39efc1ad","line":43,"in_reply_to":"29448052_d2aa002f","updated":"2026-04-11 08:23:38.000000000","message":"I don\u0027t know which one is more often used. I suppose interface? I will use that, as I have used it in other modules aswell.","commit_id":"bb7f0da626d467f738b90b8812868567477308ac"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"6ab13f6f70483af347138a5350346b0e594bb4d7","unresolved":true,"context_lines":[{"line_number":67,"context_line":"      keystone_identity_mapping_rules: \"{{ lookup(\u0027ansible.builtin.file\u0027, item.file) }}\""},{"line_number":68,"context_line":"  run_once: true"},{"line_number":69,"context_line":"  when:"},{"line_number":70,"context_line":"    - item.name not in existing_mappings"},{"line_number":71,"context_line":"  with_items: \"{{ keystone_identity_mappings }}\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"- name: List configured IdPs"}],"source_content_type":"text/x-yaml","patch_set":129,"id":"952f4e54_bda06b79","line":70,"updated":"2026-04-09 09:12:41.000000000","message":"look at comment in line 155","commit_id":"bb7f0da626d467f738b90b8812868567477308ac"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"66b3350fa5814776e651475a44c719cfcf63b677","unresolved":false,"context_lines":[{"line_number":67,"context_line":"      keystone_identity_mapping_rules: \"{{ lookup(\u0027ansible.builtin.file\u0027, item.file) }}\""},{"line_number":68,"context_line":"  run_once: true"},{"line_number":69,"context_line":"  when:"},{"line_number":70,"context_line":"    - item.name not in existing_mappings"},{"line_number":71,"context_line":"  with_items: \"{{ keystone_identity_mappings }}\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"- name: List configured IdPs"}],"source_content_type":"text/x-yaml","patch_set":129,"id":"bb91d4b8_776ec077","line":70,"in_reply_to":"952f4e54_bda06b79","updated":"2026-04-11 08:23:38.000000000","message":"Done","commit_id":"bb7f0da626d467f738b90b8812868567477308ac"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"6ab13f6f70483af347138a5350346b0e594bb4d7","unresolved":true,"context_lines":[{"line_number":152,"context_line":"      keystone_identity_provider_remote_ids: \"{{ [item.identifier] | to_json }}\""},{"line_number":153,"context_line":"  run_once: true"},{"line_number":154,"context_line":"  when:"},{"line_number":155,"context_line":"    - item.name not in existing_idps"},{"line_number":156,"context_line":"  with_items: \"{{ keystone_identity_providers }}\""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"- name: Configure attribute mappings for each Identity Provider. (We expect the mappings to be configured by the operator)"}],"source_content_type":"text/x-yaml","patch_set":129,"id":"bfe35579_a0be213c","line":155,"updated":"2026-04-09 09:12:41.000000000","message":"This when looks incorrect, looking at reconfigure logs register tasks were not skipped:\n\nhttps://storage.bhs.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_768/openstack/768eaf94134548ec864a0c3b9a59e12d/primary/logs/ansible/reconfigure\n\nbecause list task output existing_idps is a full identity_providers dict:\n\nTASK [keystone : List configured IdPs] *****************************************\n...\n\nok: [primary] \u003d\u003e {\n    \"changed\": false,\n    \"identity_providers\": [\n        {\n            \"description\": \"Example Provider\",\n            \"domain_id\": \"default\",\n            \"id\": \"example_provider\",\n            \"is_enabled\": true,\n            \"name\": \"example_provider\",\n            \"remote_ids\": [\n                \"https://idp.example.org/realms/example\"\n            ]\n        }\n    ],\n\n\nI think we should remove this when and leave module to do the work and do the updates if needed. This when made sense with CLI, with module not so much I think.\n\nsimilar for existing_mappings, comparing with full dict - so we can remove this when in line 70 as well\n\n    \"mappings\": [\n        {\n            \"id\": \"sso_oidc_mapping\",\n            \"name\": \"sso_oidc_mapping\",\n            \"rules\": [\n                {\n                    \"local\": [\n...","commit_id":"bb7f0da626d467f738b90b8812868567477308ac"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"66b3350fa5814776e651475a44c719cfcf63b677","unresolved":false,"context_lines":[{"line_number":152,"context_line":"      keystone_identity_provider_remote_ids: \"{{ [item.identifier] | to_json }}\""},{"line_number":153,"context_line":"  run_once: true"},{"line_number":154,"context_line":"  when:"},{"line_number":155,"context_line":"    - item.name not in existing_idps"},{"line_number":156,"context_line":"  with_items: \"{{ keystone_identity_providers }}\""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"- name: Configure attribute mappings for each Identity Provider. (We expect the mappings to be configured by the operator)"}],"source_content_type":"text/x-yaml","patch_set":129,"id":"922a2048_edeb5c1e","line":155,"in_reply_to":"bfe35579_a0be213c","updated":"2026-04-11 08:23:38.000000000","message":"Done","commit_id":"bb7f0da626d467f738b90b8812868567477308ac"},{"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":"01babe8847514efd57be378962faa4cdec039c6c","unresolved":true,"context_lines":[{"line_number":112,"context_line":"      interface: \"{{ openstack_interface }}\""},{"line_number":113,"context_line":"      ca_cert: \"{{ openstack_cacert if openstack_cacert !\u003d \u0027\u0027 else omit }}\""},{"line_number":114,"context_line":"  run_once: true"},{"line_number":115,"context_line":"  no_log: false"},{"line_number":116,"context_line":"  register: existing_identity_domains"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":131,"id":"58239ef3_1b4e02b7","line":115,"range":{"start_line":115,"start_character":2,"end_line":115,"end_character":15},"updated":"2026-04-12 08:46:30.000000000","message":"isn\u0027t this the default ? I think you can remove it","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"ca6a34af305fbc9f580758d39ebe6ced3bf67b52","unresolved":false,"context_lines":[{"line_number":112,"context_line":"      interface: \"{{ openstack_interface }}\""},{"line_number":113,"context_line":"      ca_cert: \"{{ openstack_cacert if openstack_cacert !\u003d \u0027\u0027 else omit }}\""},{"line_number":114,"context_line":"  run_once: true"},{"line_number":115,"context_line":"  no_log: false"},{"line_number":116,"context_line":"  register: existing_identity_domains"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":131,"id":"abc4c69f_593a353e","line":115,"range":{"start_line":115,"start_character":2,"end_line":115,"end_character":15},"in_reply_to":"58239ef3_1b4e02b7","updated":"2026-04-12 15:38:51.000000000","message":"Done","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"c61fb67b2b6e232e25722a54f78af2fad1ad883d","unresolved":true,"context_lines":[{"line_number":148,"context_line":"  run_once: true"},{"line_number":149,"context_line":"  with_items: \"{{ keystone_identity_providers }}\""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"- name: Configure attribute mappings for each Identity Provider. (We expect the mappings to be configured by the operator)"},{"line_number":152,"context_line":"  become: true"},{"line_number":153,"context_line":"  kolla_toolbox:"},{"line_number":154,"context_line":"    container_engine: \"{{ kolla_container_engine }}\""}],"source_content_type":"text/x-yaml","patch_set":134,"id":"bf35bbfb_622dd0d2","line":151,"updated":"2026-04-14 11:51:51.000000000","message":"Is this process here going to update the data on the already registered IdPs ?\n\nI mean, for instance, if somebody changes the attribute mapping?","commit_id":"b3300261d17459e7dd04f60877e0fa8558f4ccb4"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"81d88f2b87f8e2e65997fabb0499b20977e1f8b5","unresolved":true,"context_lines":[{"line_number":148,"context_line":"  run_once: true"},{"line_number":149,"context_line":"  with_items: \"{{ keystone_identity_providers }}\""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"- name: Configure attribute mappings for each Identity Provider. (We expect the mappings to be configured by the operator)"},{"line_number":152,"context_line":"  become: true"},{"line_number":153,"context_line":"  kolla_toolbox:"},{"line_number":154,"context_line":"    container_engine: \"{{ kolla_container_engine }}\""}],"source_content_type":"text/x-yaml","patch_set":134,"id":"7047eca9_bad4aa75","line":151,"in_reply_to":"bf35bbfb_622dd0d2","updated":"2026-04-14 12:13:19.000000000","message":"I think so yeah. It will loop over the IDP-s that are configured in keystone_identity_providers. \n\nIn the module docs: https://docs.ansible.com/projects/ansible/latest/collections/openstack/cloud/federation_idp_module.html#ansible-collections-openstack-cloud-federation-idp-module\n\nI suppose if something changes it will update the IDP yes that is correct. E.g. do a PUT operation.","commit_id":"b3300261d17459e7dd04f60877e0fa8558f4ccb4"}],"ansible/roles/keystone/templates/keystone.json.j2":[{"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":"72e333056c173b738242499b12a1d165211a26b0","unresolved":true,"context_lines":[{"line_number":73,"context_line":"            \"perm\": \"0600\","},{"line_number":74,"context_line":"            \"merge\": true"},{"line_number":75,"context_line":"        },"},{"line_number":76,"context_line":"        {"},{"line_number":77,"context_line":"            \"source\": \"{{ container_config_directory }}/federation/modoidc-error-page.html\","},{"line_number":78,"context_line":"            \"dest\": \"/var/www/html/modoidc-error-page.html\","},{"line_number":79,"context_line":"            \"owner\": \"{{ apache_user }}:{{ apache_user }}\","},{"line_number":80,"context_line":"            \"perm\": \"0600\""},{"line_number":81,"context_line":"        }"},{"line_number":82,"context_line":"        {% endif %}{% if kolla_copy_ca_into_containers | bool %},"},{"line_number":83,"context_line":"        {"},{"line_number":84,"context_line":"            \"source\": \"{{ container_config_directory }}/ca-certificates\","}],"source_content_type":"text/x-jinja2","patch_set":83,"id":"6a9641d9_78beacfe","side":"PARENT","line":81,"range":{"start_line":76,"start_character":0,"end_line":81,"end_character":9},"updated":"2026-03-19 19:45:22.000000000","message":"`wsgi-keystone.conf.j2:70` (OIDCHTMLErrorTemplate /var/www/html/modoidc-error-page.html) still tries to serve this file in its config, which will fail because it\u0027s never mounted.\n\nI think you need to add it into keystone-httpd.json.j2 to be served.","commit_id":"f8ee8dcca3e852df3fd5561a7ad78559470d9821"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"5adb5cf118b5c28c053b8e32c5415ccf1bb69401","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            \"perm\": \"0600\","},{"line_number":74,"context_line":"            \"merge\": true"},{"line_number":75,"context_line":"        },"},{"line_number":76,"context_line":"        {"},{"line_number":77,"context_line":"            \"source\": \"{{ container_config_directory }}/federation/modoidc-error-page.html\","},{"line_number":78,"context_line":"            \"dest\": \"/var/www/html/modoidc-error-page.html\","},{"line_number":79,"context_line":"            \"owner\": \"{{ apache_user }}:{{ apache_user }}\","},{"line_number":80,"context_line":"            \"perm\": \"0600\""},{"line_number":81,"context_line":"        }"},{"line_number":82,"context_line":"        {% endif %}{% if kolla_copy_ca_into_containers | bool %},"},{"line_number":83,"context_line":"        {"},{"line_number":84,"context_line":"            \"source\": \"{{ container_config_directory }}/ca-certificates\","}],"source_content_type":"text/x-jinja2","patch_set":83,"id":"789fa808_b6751a48","side":"PARENT","line":81,"range":{"start_line":76,"start_character":0,"end_line":81,"end_character":9},"in_reply_to":"6a9641d9_78beacfe","updated":"2026-03-21 09:39:50.000000000","message":"Done","commit_id":"f8ee8dcca3e852df3fd5561a7ad78559470d9821"}],"ansible/roles/keystone/templates/wsgi-keystone.conf.j2":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"52f50de6c21f7dd51c3b4dc82237caece54f8706","unresolved":true,"context_lines":[{"line_number":69,"context_line":"{%     endif %}"},{"line_number":70,"context_line":"{# NOTE(TafkaMax) OIDCHTMLErrorTemplate was dropped in newer versions of apache modoidc packages. "},{"line_number":71,"context_line":"It is still present in Ubuntu Noble so we can leave it in here #}"},{"line_number":72,"context_line":"{% if kolla_base_distro \u003d\u003d \"ubuntu\" %}"},{"line_number":73,"context_line":"    OIDCHTMLErrorTemplate /var/www/html/modoidc-error-page.html"},{"line_number":74,"context_line":"{% endif %}"},{"line_number":75,"context_line":"{%     if keystone_federation_openid_certificate_key_ids | length \u003e 0 %}"}],"source_content_type":"text/x-jinja2","patch_set":120,"id":"0adf7ae2_111f1af9","line":72,"updated":"2026-04-10 14:41:29.000000000","message":"That was already merged in","commit_id":"209822ca409011ac88636da29af4e12d5d9f094d"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"66b3350fa5814776e651475a44c719cfcf63b677","unresolved":false,"context_lines":[{"line_number":69,"context_line":"{%     endif %}"},{"line_number":70,"context_line":"{# NOTE(TafkaMax) OIDCHTMLErrorTemplate was dropped in newer versions of apache modoidc packages. "},{"line_number":71,"context_line":"It is still present in Ubuntu Noble so we can leave it in here #}"},{"line_number":72,"context_line":"{% if kolla_base_distro \u003d\u003d \"ubuntu\" %}"},{"line_number":73,"context_line":"    OIDCHTMLErrorTemplate /var/www/html/modoidc-error-page.html"},{"line_number":74,"context_line":"{% endif %}"},{"line_number":75,"context_line":"{%     if keystone_federation_openid_certificate_key_ids | length \u003e 0 %}"}],"source_content_type":"text/x-jinja2","patch_set":120,"id":"a1edcaa3_d1ce4197","line":72,"in_reply_to":"0adf7ae2_111f1af9","updated":"2026-04-11 08:23:38.000000000","message":"I think you are looking at some old commit. The Diff for the latest patchset does not show that change in wsgi-keystone.conf.j2","commit_id":"209822ca409011ac88636da29af4e12d5d9f094d"}],"releasenotes/notes/bug-2134455-idp-fixes-aa7064473be5e44d.yaml":[{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"749b87af6ec89b8fc2e8cd47e0c50641590ab5b7","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Remove option to set OIDCHTMLErrorTemplate in Debian 13 and Rocky 10."},{"line_number":5,"context_line":"    As this option was removed in 2.4.14 version of modoidc auth plugin."},{"line_number":6,"context_line":"    It is still present in Ubuntu Noble and can me used there. This applies"},{"line_number":7,"context_line":"    only when using `keystone_wsgi_provider: apache`, which is not the default."},{"line_number":8,"context_line":"fixes:"},{"line_number":9,"context_line":"  - |"}],"source_content_type":"text/x-yaml","patch_set":116,"id":"df54e08a_87612e28","line":6,"range":{"start_line":6,"start_character":40,"end_line":6,"end_character":61},"updated":"2026-04-01 14:45:11.000000000","message":"*can be used there","commit_id":"1976262502c899b927885ac7b7a05bfa62b42161"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"9bc33a360a990052848738c4f9d5e8ef88588488","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Remove option to set OIDCHTMLErrorTemplate in Debian 13 and Rocky 10."},{"line_number":5,"context_line":"    As this option was removed in 2.4.14 version of modoidc auth plugin."},{"line_number":6,"context_line":"    It is still present in Ubuntu Noble and can me used there. This applies"},{"line_number":7,"context_line":"    only when using `keystone_wsgi_provider: apache`, which is not the default."},{"line_number":8,"context_line":"fixes:"},{"line_number":9,"context_line":"  - |"}],"source_content_type":"text/x-yaml","patch_set":116,"id":"b068481e_14072654","line":6,"range":{"start_line":6,"start_character":40,"end_line":6,"end_character":61},"in_reply_to":"df54e08a_87612e28","updated":"2026-04-01 15:26:56.000000000","message":"Done","commit_id":"1976262502c899b927885ac7b7a05bfa62b42161"},{"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":"01babe8847514efd57be378962faa4cdec039c6c","unresolved":true,"context_lines":[{"line_number":12,"context_line":"    migration to the uwsgi container the federation logic remained in"},{"line_number":13,"context_line":"    the keystone-httpd container, but the federation files were never"},{"line_number":14,"context_line":"    mounted there."},{"line_number":15,"context_line":"    `LP#2134455 https://launchpad.net/bugs/2134455`"},{"line_number":16,"context_line":"other:"},{"line_number":17,"context_line":"  - |"},{"line_number":18,"context_line":"    Add more CI coverage for Federation codepath. Migrate ansible to use"}],"source_content_type":"text/x-yaml","patch_set":131,"id":"8567095f_64ee96f1","line":15,"range":{"start_line":15,"start_character":4,"end_line":15,"end_character":51},"updated":"2026-04-12 08:46:30.000000000","message":"I don\u0027t think this will render hyperlink correctly ? I think it should have \u003curl\u003e__ format ? Not a rst expert tho so I might be wrong.\n\n```suggestion\n    `LP#2134455 \u003chttps://launchpad.net/bugs/2134455\u003e`__\n```","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"ca6a34af305fbc9f580758d39ebe6ced3bf67b52","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    migration to the uwsgi container the federation logic remained in"},{"line_number":13,"context_line":"    the keystone-httpd container, but the federation files were never"},{"line_number":14,"context_line":"    mounted there."},{"line_number":15,"context_line":"    `LP#2134455 https://launchpad.net/bugs/2134455`"},{"line_number":16,"context_line":"other:"},{"line_number":17,"context_line":"  - |"},{"line_number":18,"context_line":"    Add more CI coverage for Federation codepath. Migrate ansible to use"}],"source_content_type":"text/x-yaml","patch_set":131,"id":"08f76f05_26767073","line":15,"range":{"start_line":15,"start_character":4,"end_line":15,"end_character":51},"in_reply_to":"8567095f_64ee96f1","updated":"2026-04-12 15:38:51.000000000","message":"Done","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"}],"roles/kolla-ansible-test-dashboard/tasks/main.yml":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"61e2d29056e4707118ff107a6d0b0587df57738f","unresolved":true,"context_lines":[{"line_number":95,"context_line":"          py.test"},{"line_number":96,"context_line":"          --junit-xml /home/zuul/testinfra/testinfra-junit.xml -o junit_family\u003dxunit1"},{"line_number":97,"context_line":"          --html\u003d/home/zuul/testinfra/test-results-testinfra.html --self-contained-html"},{"line_number":98,"context_line":"          {% if scenario !\u003d \"federation\" %}--ignore tests/testinfra/federation{% endif %}"},{"line_number":99,"context_line":"          -v tests/testinfra"},{"line_number":100,"context_line":"        chdir: \"{{ zuul.project.src_dir }}\""},{"line_number":101,"context_line":"      changed_when: false"}],"source_content_type":"text/x-yaml","patch_set":71,"id":"e142c658_970e6c57","line":98,"updated":"2026-03-16 12:04:35.000000000","message":"Use https://testdriven.io/tips/d7e8ec35-4dc2-48da-b42a-2b5bb3217fec/","commit_id":"39e955e8b653c14166a14879a4b778cc81cb1d7f"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"0986b54698715418ed1b216100165b403481e48e","unresolved":false,"context_lines":[{"line_number":95,"context_line":"          py.test"},{"line_number":96,"context_line":"          --junit-xml /home/zuul/testinfra/testinfra-junit.xml -o junit_family\u003dxunit1"},{"line_number":97,"context_line":"          --html\u003d/home/zuul/testinfra/test-results-testinfra.html --self-contained-html"},{"line_number":98,"context_line":"          {% if scenario !\u003d \"federation\" %}--ignore tests/testinfra/federation{% endif %}"},{"line_number":99,"context_line":"          -v tests/testinfra"},{"line_number":100,"context_line":"        chdir: \"{{ zuul.project.src_dir }}\""},{"line_number":101,"context_line":"      changed_when: false"}],"source_content_type":"text/x-yaml","patch_set":71,"id":"507fbc8c_54d8ba20","line":98,"in_reply_to":"3218b3ae_e209aecc","updated":"2026-03-17 12:49:56.000000000","message":"Seems to work. Federation test output is as follows.\n\n\n2026-03-17 11:28:47.654855 | TASK [kolla-ansible-test-dashboard : Run testinfra tests]\n2026-03-17 11:28:48.596882 | primary | \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d test session starts \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n2026-03-17 11:28:48.596970 | primary | platform linux -- Python 3.13.5, pytest-9.0.2, pluggy-1.6.0 -- /home/zuul/kolla-ansible-venv/bin/python3\n2026-03-17 11:28:48.596991 | primary | cachedir: .pytest_cache\n2026-03-17 11:28:48.597011 | primary | metadata: {\u0027Python\u0027: \u00273.13.5\u0027, \u0027Platform\u0027: \u0027Linux-6.12.73+deb13-amd64-x86_64-with-glibc2.41\u0027, \u0027Packages\u0027: {\u0027pytest\u0027: \u00279.0.2\u0027, \u0027pluggy\u0027: \u00271.6.0\u0027}, \u0027Plugins\u0027: {\u0027metadata\u0027: \u00273.1.1\u0027, \u0027html\u0027: \u00274.2.0\u0027, \u0027testinfra\u0027: \u002710.2.2\u0027}}\n2026-03-17 11:28:48.597022 | primary | rootdir: /home/zuul/src/opendev.org/openstack/kolla-ansible\n2026-03-17 11:28:48.597030 | primary | plugins: metadata-3.1.1, html-4.2.0, testinfra-10.2.2\n2026-03-17 11:28:48.786519 | primary | collecting ... collected 3 items\n2026-03-17 11:28:48.786556 | primary |\n2026-03-17 11:29:00.611611 | primary | tests/testinfra/test_horizon.py::test_horizon_screenshot[local] PASSED   [ 33%]\n2026-03-17 11:29:20.211412 | primary | tests/testinfra/test_horizon.py::test_horizon_login[local] PASSED        [ 66%]\n2026-03-17 11:29:24.906881 | primary | tests/testinfra/test_horizon.py::test_horizon_login_federation[local] PASSED [100%]\n2026-03-17 11:29:24.906933 | primary |\n2026-03-17 11:29:24.906940 | primary | --------- generated xml file: /home/zuul/testinfra/testinfra-junit.xml ---------\n2026-03-17 11:29:24.906947 | primary | - Generated html report: file:///home/zuul/testinfra/test-results-testinfra.html -\n2026-03-17 11:29:24.906953 | primary | \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d 3 passed in 36.23s \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n2026-03-17 11:29:25.351311 | primary | ok: Runtime: 0:00:36.813582\n\nAnd for non-federation\n\n\n2026-03-17 11:22:10.775691 | TASK [kolla-ansible-test-dashboard : Run testinfra tests]\n2026-03-17 11:22:11.685321 | primary | \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d test session starts \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n2026-03-17 11:22:11.685374 | primary | platform linux -- Python 3.13.5, pytest-9.0.2, pluggy-1.6.0 -- /home/zuul/kolla-ansible-venv/bin/python3\n2026-03-17 11:22:11.685383 | primary | cachedir: .pytest_cache\n2026-03-17 11:22:11.685393 | primary | metadata: {\u0027Python\u0027: \u00273.13.5\u0027, \u0027Platform\u0027: \u0027Linux-6.12.73+deb13-amd64-x86_64-with-glibc2.41\u0027, \u0027Packages\u0027: {\u0027pytest\u0027: \u00279.0.2\u0027, \u0027pluggy\u0027: \u00271.6.0\u0027}, \u0027Plugins\u0027: {\u0027metadata\u0027: \u00273.1.1\u0027, \u0027html\u0027: \u00274.2.0\u0027, \u0027testinfra\u0027: \u002710.2.2\u0027}}\n2026-03-17 11:22:11.685399 | primary | rootdir: /home/zuul/src/opendev.org/openstack/kolla-ansible\n2026-03-17 11:22:11.685403 | primary | plugins: metadata-3.1.1, html-4.2.0, testinfra-10.2.2\n2026-03-17 11:22:11.811034 | primary | collecting ... collected 3 items\n2026-03-17 11:22:11.811057 | primary |\n2026-03-17 11:22:21.078254 | primary | tests/testinfra/test_horizon.py::test_horizon_screenshot[local] PASSED   [ 33%]\n2026-03-17 11:22:40.238510 | primary | tests/testinfra/test_horizon.py::test_horizon_login[local] PASSED        [ 66%]\n2026-03-17 11:22:40.303626 | primary | tests/testinfra/test_horizon.py::test_horizon_login_federation[local] SKIPPED [100%]\n2026-03-17 11:22:40.303654 | primary |\n2026-03-17 11:22:40.303659 | primary | --------- generated xml file: /home/zuul/testinfra/testinfra-junit.xml ---------\n2026-03-17 11:22:40.303663 | primary | - Generated html report: file:///home/zuul/testinfra/test-results-testinfra.html -\n2026-03-17 11:22:40.303666 | primary | \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d 2 passed, 1 skipped in 28.57s \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n2026-03-17 11:22:40.495418 | primary | ok: Runtime: 0:00:28.966020","commit_id":"39e955e8b653c14166a14879a4b778cc81cb1d7f"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"61fc953a1f60cf2614b14be0add82f337b1df160","unresolved":true,"context_lines":[{"line_number":95,"context_line":"          py.test"},{"line_number":96,"context_line":"          --junit-xml /home/zuul/testinfra/testinfra-junit.xml -o junit_family\u003dxunit1"},{"line_number":97,"context_line":"          --html\u003d/home/zuul/testinfra/test-results-testinfra.html --self-contained-html"},{"line_number":98,"context_line":"          {% if scenario !\u003d \"federation\" %}--ignore tests/testinfra/federation{% endif %}"},{"line_number":99,"context_line":"          -v tests/testinfra"},{"line_number":100,"context_line":"        chdir: \"{{ zuul.project.src_dir }}\""},{"line_number":101,"context_line":"      changed_when: false"}],"source_content_type":"text/x-yaml","patch_set":71,"id":"3218b3ae_e209aecc","line":98,"in_reply_to":"657451b0_d3d2b723","updated":"2026-03-16 21:36:57.000000000","message":"So the os.environ output is as follows. Seems I need to set pass the federation boolean then.\n\n2026-03-16 17:06:09.596384 | primary | environ({\u0027USER\u0027: \u0027zuul\u0027, \u0027SSH_CLIENT\u0027: \u0027104.239.142.60 37498 22\u0027, \u0027XDG_SESSION_TYPE\u0027: \u0027tty\u0027, \u0027SHLVL\u0027: \u00270\u0027, \u0027MOTD_SHOWN\u0027: \u0027pam\u0027, \u0027HOME\u0027: \u0027/home/zuul\u0027, \u0027PS1\u0027: \u0027(kolla-ansible-venv) $ \u0027, \u0027DBUS_SESSION_BUS_ADDRESS\u0027: \u0027unix:path\u003d/run/user/1000/bus\u0027, \u0027LOGNAME\u0027: \u0027zuul\u0027, \u0027_\u0027: \u0027/bin/sh\u0027, \u0027XDG_SESSION_CLASS\u0027: \u0027user\u0027, \u0027XDG_SESSION_ID\u0027: \u00271\u0027, \u0027HORIZON_PROTO\u0027: \u0027https\u0027, \u0027PATH\u0027: \u0027/home/zuul/kolla-ansible-venv/bin:/usr/local/bin:/usr/bin:/bin:/usr/games\u0027, \u0027XDG_RUNTIME_DIR\u0027: \u0027/run/user/1000\u0027, \u0027SELENIUM_REMOTE_URL\u0027: \u0027http://localhost:4500/wd/hub\u0027, \u0027LANG\u0027: \u0027C.UTF-8\u0027, \u0027VIRTUAL_ENV_PROMPT\u0027: \u0027kolla-ansible-venv\u0027, \u0027SHELL\u0027: \u0027/bin/bash\u0027, \u0027VIRTUAL_ENV\u0027: \u0027/home/zuul/kolla-ansible-venv\u0027, \u0027PWD\u0027: \u0027/home/zuul/src/opendev.org/openstack/kolla-ansible\u0027, \u0027LC_ALL\u0027: \u0027C.UTF-8\u0027, \u0027SSH_CONNECTION\u0027: \u0027104.239.142.60 37498 199.19.213.102 22\u0027, \u0027PYTEST_VERSION\u0027: \u00279.0.2\u0027, \u0027PYTEST_CURRENT_TEST\u0027: \u0027tests/testinfra/federation/test_horizon_federation.py::test_horizon_login_federation[local] (call)\u0027})","commit_id":"39e955e8b653c14166a14879a4b778cc81cb1d7f"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"f1453935d1802bb100dc6ec1d25bda6800f8318e","unresolved":true,"context_lines":[{"line_number":95,"context_line":"          py.test"},{"line_number":96,"context_line":"          --junit-xml /home/zuul/testinfra/testinfra-junit.xml -o junit_family\u003dxunit1"},{"line_number":97,"context_line":"          --html\u003d/home/zuul/testinfra/test-results-testinfra.html --self-contained-html"},{"line_number":98,"context_line":"          {% if scenario !\u003d \"federation\" %}--ignore tests/testinfra/federation{% endif %}"},{"line_number":99,"context_line":"          -v tests/testinfra"},{"line_number":100,"context_line":"        chdir: \"{{ zuul.project.src_dir }}\""},{"line_number":101,"context_line":"      changed_when: false"}],"source_content_type":"text/x-yaml","patch_set":71,"id":"657451b0_d3d2b723","line":98,"in_reply_to":"e142c658_970e6c57","updated":"2026-03-16 16:55:47.000000000","message":"Hmm, so if I use the pytest marker utility I could actually put the federation tests into the same file as the normal horizon tests. They just wouldn\u0027t get called. Good idea, I will try to get this to work. I will start with seeing what is available in os.environ","commit_id":"39e955e8b653c14166a14879a4b778cc81cb1d7f"}],"tests/templates/keystone-federation/attribute_mapping.json":[{"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":"01babe8847514efd57be378962faa4cdec039c6c","unresolved":true,"context_lines":[{"line_number":1,"context_line":"["},{"line_number":2,"context_line":"  {"},{"line_number":3,"context_line":"      \"local\": ["},{"line_number":4,"context_line":"          {"},{"line_number":5,"context_line":"              \"user\": {"},{"line_number":6,"context_line":"                  \"name\": \"{0}\","},{"line_number":7,"context_line":"                  \"email\": \"{1}\","},{"line_number":8,"context_line":"                  \"domain\": {"},{"line_number":9,"context_line":"                      \"name\": \"{2}\""},{"line_number":10,"context_line":"                  }"},{"line_number":11,"context_line":"              },"},{"line_number":12,"context_line":"              \"domain\": {"},{"line_number":13,"context_line":"                      \"name\": \"{2}\""},{"line_number":14,"context_line":"                  },"},{"line_number":15,"context_line":"              \"projects\": ["},{"line_number":16,"context_line":"                  {"},{"line_number":17,"context_line":"                      \"name\": \"{3}\","},{"line_number":18,"context_line":"                      \"roles\": ["},{"line_number":19,"context_line":"                          {"},{"line_number":20,"context_line":"                              \"name\": \"member\""},{"line_number":21,"context_line":"                          }"},{"line_number":22,"context_line":"                      ]"},{"line_number":23,"context_line":"                  }"},{"line_number":24,"context_line":"              ]"},{"line_number":25,"context_line":"          }"},{"line_number":26,"context_line":"      ],"},{"line_number":27,"context_line":"      \"remote\": ["},{"line_number":28,"context_line":"          {"},{"line_number":29,"context_line":"              \"type\": \"OIDC-preferred_username\""},{"line_number":30,"context_line":"          },"},{"line_number":31,"context_line":"          {"},{"line_number":32,"context_line":"              \"type\": \"OIDC-email\""},{"line_number":33,"context_line":"          },"},{"line_number":34,"context_line":"          {"},{"line_number":35,"context_line":"              \"type\": \"OIDC-openstack-user-domain\""},{"line_number":36,"context_line":"          },"},{"line_number":37,"context_line":"          {"},{"line_number":38,"context_line":"              \"type\": \"OIDC-openstack-default-project\""},{"line_number":39,"context_line":"          }"},{"line_number":40,"context_line":"      ]"},{"line_number":41,"context_line":"  }"},{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""}],"source_content_type":"application/json","patch_set":131,"id":"591f1750_4bf09abb","line":43,"range":{"start_line":1,"start_character":0,"end_line":43,"end_character":1},"updated":"2026-04-12 08:46:30.000000000","message":"Nit: inconsistent formatting (:","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"ca6a34af305fbc9f580758d39ebe6ced3bf67b52","unresolved":true,"context_lines":[{"line_number":1,"context_line":"["},{"line_number":2,"context_line":"  {"},{"line_number":3,"context_line":"      \"local\": ["},{"line_number":4,"context_line":"          {"},{"line_number":5,"context_line":"              \"user\": {"},{"line_number":6,"context_line":"                  \"name\": \"{0}\","},{"line_number":7,"context_line":"                  \"email\": \"{1}\","},{"line_number":8,"context_line":"                  \"domain\": {"},{"line_number":9,"context_line":"                      \"name\": \"{2}\""},{"line_number":10,"context_line":"                  }"},{"line_number":11,"context_line":"              },"},{"line_number":12,"context_line":"              \"domain\": {"},{"line_number":13,"context_line":"                      \"name\": \"{2}\""},{"line_number":14,"context_line":"                  },"},{"line_number":15,"context_line":"              \"projects\": ["},{"line_number":16,"context_line":"                  {"},{"line_number":17,"context_line":"                      \"name\": \"{3}\","},{"line_number":18,"context_line":"                      \"roles\": ["},{"line_number":19,"context_line":"                          {"},{"line_number":20,"context_line":"                              \"name\": \"member\""},{"line_number":21,"context_line":"                          }"},{"line_number":22,"context_line":"                      ]"},{"line_number":23,"context_line":"                  }"},{"line_number":24,"context_line":"              ]"},{"line_number":25,"context_line":"          }"},{"line_number":26,"context_line":"      ],"},{"line_number":27,"context_line":"      \"remote\": ["},{"line_number":28,"context_line":"          {"},{"line_number":29,"context_line":"              \"type\": \"OIDC-preferred_username\""},{"line_number":30,"context_line":"          },"},{"line_number":31,"context_line":"          {"},{"line_number":32,"context_line":"              \"type\": \"OIDC-email\""},{"line_number":33,"context_line":"          },"},{"line_number":34,"context_line":"          {"},{"line_number":35,"context_line":"              \"type\": \"OIDC-openstack-user-domain\""},{"line_number":36,"context_line":"          },"},{"line_number":37,"context_line":"          {"},{"line_number":38,"context_line":"              \"type\": \"OIDC-openstack-default-project\""},{"line_number":39,"context_line":"          }"},{"line_number":40,"context_line":"      ]"},{"line_number":41,"context_line":"  }"},{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""}],"source_content_type":"application/json","patch_set":131,"id":"c18e2388_bddbb4cf","line":43,"range":{"start_line":1,"start_character":0,"end_line":43,"end_character":1},"in_reply_to":"591f1750_4bf09abb","updated":"2026-04-12 15:38:51.000000000","message":"I copied this from somewhere from Openstack docs as an example. I can\u0027t find it right now. What do you mean by inconsisten formatting exactly?","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"},{"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":"ac63e85d32c50776d9a8a6dd1ef0e3b95915bea0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"["},{"line_number":2,"context_line":"  {"},{"line_number":3,"context_line":"      \"local\": ["},{"line_number":4,"context_line":"          {"},{"line_number":5,"context_line":"              \"user\": {"},{"line_number":6,"context_line":"                  \"name\": \"{0}\","},{"line_number":7,"context_line":"                  \"email\": \"{1}\","},{"line_number":8,"context_line":"                  \"domain\": {"},{"line_number":9,"context_line":"                      \"name\": \"{2}\""},{"line_number":10,"context_line":"                  }"},{"line_number":11,"context_line":"              },"},{"line_number":12,"context_line":"              \"domain\": {"},{"line_number":13,"context_line":"                      \"name\": \"{2}\""},{"line_number":14,"context_line":"                  },"},{"line_number":15,"context_line":"              \"projects\": ["},{"line_number":16,"context_line":"                  {"},{"line_number":17,"context_line":"                      \"name\": \"{3}\","},{"line_number":18,"context_line":"                      \"roles\": ["},{"line_number":19,"context_line":"                          {"},{"line_number":20,"context_line":"                              \"name\": \"member\""},{"line_number":21,"context_line":"                          }"},{"line_number":22,"context_line":"                      ]"},{"line_number":23,"context_line":"                  }"},{"line_number":24,"context_line":"              ]"},{"line_number":25,"context_line":"          }"},{"line_number":26,"context_line":"      ],"},{"line_number":27,"context_line":"      \"remote\": ["},{"line_number":28,"context_line":"          {"},{"line_number":29,"context_line":"              \"type\": \"OIDC-preferred_username\""},{"line_number":30,"context_line":"          },"},{"line_number":31,"context_line":"          {"},{"line_number":32,"context_line":"              \"type\": \"OIDC-email\""},{"line_number":33,"context_line":"          },"},{"line_number":34,"context_line":"          {"},{"line_number":35,"context_line":"              \"type\": \"OIDC-openstack-user-domain\""},{"line_number":36,"context_line":"          },"},{"line_number":37,"context_line":"          {"},{"line_number":38,"context_line":"              \"type\": \"OIDC-openstack-default-project\""},{"line_number":39,"context_line":"          }"},{"line_number":40,"context_line":"      ]"},{"line_number":41,"context_line":"  }"},{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""}],"source_content_type":"application/json","patch_set":131,"id":"2fa8ee22_c1aa6fe6","line":43,"range":{"start_line":1,"start_character":0,"end_line":43,"end_character":1},"in_reply_to":"7a7930bc_43bbe66e","updated":"2026-04-12 16:27:58.000000000","message":"Yeah I was reffering to the indentation in the file. this looks much better.","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"f254143117bbaedcdd18410dd9f7115fdd6003d6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"["},{"line_number":2,"context_line":"  {"},{"line_number":3,"context_line":"      \"local\": ["},{"line_number":4,"context_line":"          {"},{"line_number":5,"context_line":"              \"user\": {"},{"line_number":6,"context_line":"                  \"name\": \"{0}\","},{"line_number":7,"context_line":"                  \"email\": \"{1}\","},{"line_number":8,"context_line":"                  \"domain\": {"},{"line_number":9,"context_line":"                      \"name\": \"{2}\""},{"line_number":10,"context_line":"                  }"},{"line_number":11,"context_line":"              },"},{"line_number":12,"context_line":"              \"domain\": {"},{"line_number":13,"context_line":"                      \"name\": \"{2}\""},{"line_number":14,"context_line":"                  },"},{"line_number":15,"context_line":"              \"projects\": ["},{"line_number":16,"context_line":"                  {"},{"line_number":17,"context_line":"                      \"name\": \"{3}\","},{"line_number":18,"context_line":"                      \"roles\": ["},{"line_number":19,"context_line":"                          {"},{"line_number":20,"context_line":"                              \"name\": \"member\""},{"line_number":21,"context_line":"                          }"},{"line_number":22,"context_line":"                      ]"},{"line_number":23,"context_line":"                  }"},{"line_number":24,"context_line":"              ]"},{"line_number":25,"context_line":"          }"},{"line_number":26,"context_line":"      ],"},{"line_number":27,"context_line":"      \"remote\": ["},{"line_number":28,"context_line":"          {"},{"line_number":29,"context_line":"              \"type\": \"OIDC-preferred_username\""},{"line_number":30,"context_line":"          },"},{"line_number":31,"context_line":"          {"},{"line_number":32,"context_line":"              \"type\": \"OIDC-email\""},{"line_number":33,"context_line":"          },"},{"line_number":34,"context_line":"          {"},{"line_number":35,"context_line":"              \"type\": \"OIDC-openstack-user-domain\""},{"line_number":36,"context_line":"          },"},{"line_number":37,"context_line":"          {"},{"line_number":38,"context_line":"              \"type\": \"OIDC-openstack-default-project\""},{"line_number":39,"context_line":"          }"},{"line_number":40,"context_line":"      ]"},{"line_number":41,"context_line":"  }"},{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""}],"source_content_type":"application/json","patch_set":131,"id":"7a7930bc_43bbe66e","line":43,"range":{"start_line":1,"start_character":0,"end_line":43,"end_character":1},"in_reply_to":"c18e2388_bddbb4cf","updated":"2026-04-12 16:10:12.000000000","message":"I made all identations in the json 4 spaces wide.","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"}],"tests/templates/keystone-federation/attribute_mapping.json.j2":[{"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":"72e333056c173b738242499b12a1d165211a26b0","unresolved":true,"context_lines":[{"line_number":1,"context_line":"["},{"line_number":2,"context_line":"  {"},{"line_number":3,"context_line":"      \"local\": ["},{"line_number":4,"context_line":"          {"},{"line_number":5,"context_line":"              \"user\": {"},{"line_number":6,"context_line":"                  \"name\": \"{0}\","},{"line_number":7,"context_line":"                  \"email\": \"{1}\","},{"line_number":8,"context_line":"                  \"domain\": {"},{"line_number":9,"context_line":"                      \"name\": \"{2}\""},{"line_number":10,"context_line":"                  }"},{"line_number":11,"context_line":"              },"},{"line_number":12,"context_line":"              \"domain\": {"},{"line_number":13,"context_line":"                      \"name\": \"{2}\""},{"line_number":14,"context_line":"                  },"},{"line_number":15,"context_line":"              \"projects\": ["},{"line_number":16,"context_line":"                  {"},{"line_number":17,"context_line":"                      \"name\": \"{3}\","},{"line_number":18,"context_line":"                      \"roles\": ["},{"line_number":19,"context_line":"                          {"},{"line_number":20,"context_line":"                              \"name\": \"member\""},{"line_number":21,"context_line":"                          }"},{"line_number":22,"context_line":"                      ]"},{"line_number":23,"context_line":"                  }"},{"line_number":24,"context_line":"              ]"},{"line_number":25,"context_line":"          }"},{"line_number":26,"context_line":"      ],"},{"line_number":27,"context_line":"      \"remote\": ["},{"line_number":28,"context_line":"          {"},{"line_number":29,"context_line":"              \"type\": \"OIDC-preferred_username\""},{"line_number":30,"context_line":"          },"},{"line_number":31,"context_line":"          {"},{"line_number":32,"context_line":"              \"type\": \"OIDC-email\""},{"line_number":33,"context_line":"          },"},{"line_number":34,"context_line":"          {"},{"line_number":35,"context_line":"              \"type\": \"OIDC-openstack-user-domain\""},{"line_number":36,"context_line":"          },"},{"line_number":37,"context_line":"          {"},{"line_number":38,"context_line":"              \"type\": \"OIDC-openstack-default-project\""},{"line_number":39,"context_line":"          }"},{"line_number":40,"context_line":"      ]"},{"line_number":41,"context_line":"  }"},{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-jinja2","patch_set":83,"id":"2c913ffd_844d764c","line":43,"range":{"start_line":1,"start_character":0,"end_line":43,"end_character":1},"updated":"2026-03-19 19:45:22.000000000","message":"Nit, this isn\u0027t a jinja template, so we can drop the j2 extension ? :^)","commit_id":"2c13714609261f9c778735ede5b397a00322dd11"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"5adb5cf118b5c28c053b8e32c5415ccf1bb69401","unresolved":false,"context_lines":[{"line_number":1,"context_line":"["},{"line_number":2,"context_line":"  {"},{"line_number":3,"context_line":"      \"local\": ["},{"line_number":4,"context_line":"          {"},{"line_number":5,"context_line":"              \"user\": {"},{"line_number":6,"context_line":"                  \"name\": \"{0}\","},{"line_number":7,"context_line":"                  \"email\": \"{1}\","},{"line_number":8,"context_line":"                  \"domain\": {"},{"line_number":9,"context_line":"                      \"name\": \"{2}\""},{"line_number":10,"context_line":"                  }"},{"line_number":11,"context_line":"              },"},{"line_number":12,"context_line":"              \"domain\": {"},{"line_number":13,"context_line":"                      \"name\": \"{2}\""},{"line_number":14,"context_line":"                  },"},{"line_number":15,"context_line":"              \"projects\": ["},{"line_number":16,"context_line":"                  {"},{"line_number":17,"context_line":"                      \"name\": \"{3}\","},{"line_number":18,"context_line":"                      \"roles\": ["},{"line_number":19,"context_line":"                          {"},{"line_number":20,"context_line":"                              \"name\": \"member\""},{"line_number":21,"context_line":"                          }"},{"line_number":22,"context_line":"                      ]"},{"line_number":23,"context_line":"                  }"},{"line_number":24,"context_line":"              ]"},{"line_number":25,"context_line":"          }"},{"line_number":26,"context_line":"      ],"},{"line_number":27,"context_line":"      \"remote\": ["},{"line_number":28,"context_line":"          {"},{"line_number":29,"context_line":"              \"type\": \"OIDC-preferred_username\""},{"line_number":30,"context_line":"          },"},{"line_number":31,"context_line":"          {"},{"line_number":32,"context_line":"              \"type\": \"OIDC-email\""},{"line_number":33,"context_line":"          },"},{"line_number":34,"context_line":"          {"},{"line_number":35,"context_line":"              \"type\": \"OIDC-openstack-user-domain\""},{"line_number":36,"context_line":"          },"},{"line_number":37,"context_line":"          {"},{"line_number":38,"context_line":"              \"type\": \"OIDC-openstack-default-project\""},{"line_number":39,"context_line":"          }"},{"line_number":40,"context_line":"      ]"},{"line_number":41,"context_line":"  }"},{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-jinja2","patch_set":83,"id":"1674ef31_dac97c0b","line":43,"range":{"start_line":1,"start_character":0,"end_line":43,"end_character":1},"in_reply_to":"2c913ffd_844d764c","updated":"2026-03-21 09:39:50.000000000","message":"OK, as this is an test file, this is OK, will remove it. I was thinking if it would be an operator operated file, they might want to add variables here for jinja.","commit_id":"2c13714609261f9c778735ede5b397a00322dd11"}],"tests/testinfra/test_horizon.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":"01babe8847514efd57be378962faa4cdec039c6c","unresolved":true,"context_lines":[{"line_number":167,"context_line":"            else:"},{"line_number":168,"context_line":"                raise  # Re-raise if it failed for an unexpected reason"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        assert \"Server Not Found\" in driver.title  # nosec B101"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    except TimeoutException as e:"},{"line_number":173,"context_line":"        raise e"}],"source_content_type":"text/x-python","patch_set":131,"id":"eb4d2ebc_e6078ca2","line":170,"range":{"start_line":170,"start_character":8,"end_line":170,"end_character":49},"updated":"2026-04-12 08:46:30.000000000","message":"This feels fragile no ? \n\nWould this suggestion work ?\n\n```suggestion\n        assert \"idp.example.org\" in driver.current_url  # nosec B101\n```","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"29ae54e1b3d4ccc057c5c1b35fbd1b4468f12952","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            else:"},{"line_number":168,"context_line":"                raise  # Re-raise if it failed for an unexpected reason"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        assert \"Server Not Found\" in driver.title  # nosec B101"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    except TimeoutException as e:"},{"line_number":173,"context_line":"        raise e"}],"source_content_type":"text/x-python","patch_set":131,"id":"230086a7_40fa8418","line":170,"range":{"start_line":170,"start_character":8,"end_line":170,"end_character":49},"in_reply_to":"1b34ac11_7e36fb27","updated":"2026-04-13 09:27:45.000000000","message":"Seems this change worked. Thank for tip.","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"ca6a34af305fbc9f580758d39ebe6ced3bf67b52","unresolved":true,"context_lines":[{"line_number":167,"context_line":"            else:"},{"line_number":168,"context_line":"                raise  # Re-raise if it failed for an unexpected reason"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        assert \"Server Not Found\" in driver.title  # nosec B101"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    except TimeoutException as e:"},{"line_number":173,"context_line":"        raise e"}],"source_content_type":"text/x-python","patch_set":131,"id":"1b34ac11_7e36fb27","line":170,"range":{"start_line":170,"start_character":8,"end_line":170,"end_character":49},"in_reply_to":"eb4d2ebc_e6078ca2","updated":"2026-04-12 15:38:51.000000000","message":"Let\u0027s try. \n\nI have seen spurious failures indeed with driver.title logic.","commit_id":"78e3bcd128aea659492f907cc673736197d5a7f3"}],"zuul.d/scenarios/keystone-federation.yaml":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"6e5874e5010dd6fff483281fa5ffefb1ba5c34e8","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    files: !inherit"},{"line_number":7,"context_line":"      - ^ansible/group_vars/all/keystone.yml"},{"line_number":8,"context_line":"      - ^ansible/roles/keystone/"},{"line_number":9,"context_line":"      - ^tests/templates/keystone-federation/"},{"line_number":10,"context_line":"    vars:"},{"line_number":11,"context_line":"      scenario: federation"},{"line_number":12,"context_line":"      scenario_images_extra:"}],"source_content_type":"text/x-yaml","patch_set":80,"id":"cc1090f0_2a96bc5a","line":9,"updated":"2026-03-18 07:54:31.000000000","message":"Add - ^tests/testinfra/test_horizon.py here","commit_id":"4c05949664c21dd97a09a4162eacd3c9071d6268"},{"author":{"_account_id":38651,"name":"Taavi Ansper","display_name":"TafkaMax","email":"taaviansperr@gmail.com","username":"taaviansper"},"change_message_id":"db9b56dc2745e3b0c0646bc4b10ac1a34018d116","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    files: !inherit"},{"line_number":7,"context_line":"      - ^ansible/group_vars/all/keystone.yml"},{"line_number":8,"context_line":"      - ^ansible/roles/keystone/"},{"line_number":9,"context_line":"      - ^tests/templates/keystone-federation/"},{"line_number":10,"context_line":"    vars:"},{"line_number":11,"context_line":"      scenario: federation"},{"line_number":12,"context_line":"      scenario_images_extra:"}],"source_content_type":"text/x-yaml","patch_set":80,"id":"99c5c7bd_c8a1d61e","line":9,"in_reply_to":"cc1090f0_2a96bc5a","updated":"2026-03-18 08:16:59.000000000","message":"Done. Any Reno needed here? I am not introducing any new behavior imho.","commit_id":"4c05949664c21dd97a09a4162eacd3c9071d6268"}]}
