)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"3bfea2bee9db91d9e827bf66073d88e3e10cbbc9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6c335118_b6c02b68","updated":"2025-06-09 08:26:29.000000000","message":"We need some docs about it in doc/source/admin/image-building.html, otherwise LGTM","commit_id":"99403d1e93bf316912428a08b7f9af9f5722cceb"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"4a75fd6f824602c3889bf10dd20fc2189b76620c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"899c74b0_6967dc90","in_reply_to":"6c335118_b6c02b68","updated":"2025-10-27 17:30:25.000000000","message":"Done","commit_id":"99403d1e93bf316912428a08b7f9af9f5722cceb"},{"author":{"_account_id":14200,"name":"Maksim Malchuk","email":"maksim.malchuk@gmail.com","username":"mmalchuk"},"change_message_id":"dae9fabd9f2c6acc6fc996c662adca822dab3f58","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"f98c6b1d_48787260","updated":"2025-10-28 14:49:55.000000000","message":"Why is DockerHub mentioned here? Do we need a default registry?","commit_id":"2ad48ed769fa7e85b703bfa90d91e06d8ada926c"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"bcde02376744544e7eae91de8587e1f033ff38db","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"6359110a_55b1c442","updated":"2025-10-28 12:05:15.000000000","message":"recheck - node failure","commit_id":"2ad48ed769fa7e85b703bfa90d91e06d8ada926c"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"2dab8d91763e3fb06c2e0ccc1b29050677258d8f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"8e828e0d_07f7a47f","updated":"2025-12-17 00:31:53.000000000","message":"Small question inline.","commit_id":"48a4e77df240be651e8ba22800a17cc7d10191db"}],"kolla/common/config.py":[{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"2dab8d91763e3fb06c2e0ccc1b29050677258d8f","unresolved":true,"context_lines":[{"line_number":280,"context_line":"    cfg.StrOpt(\u0027auth_email\u0027,"},{"line_number":281,"context_line":"               help\u003d\u0027Email for registry login\u0027),"},{"line_number":282,"context_line":"]"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"_BASE_OPTS \u003d ["},{"line_number":285,"context_line":"    cfg.StrOpt(\u0027maintainer\u0027,"},{"line_number":286,"context_line":"               default\u003d\u0027Kolla Project (https://launchpad.net/kolla)\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1e72c921_6eab9661","line":283,"updated":"2025-12-17 00:31:53.000000000","message":"I think this change is good because it will simplify my life, but I do think that having to pass the registry auth in two places (here and in globals.yml) isn\u0027t great. I understand they\u0027re really separate systems, but is there a way we could define this sort of thing just once?","commit_id":"48a4e77df240be651e8ba22800a17cc7d10191db"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"9bf60b5e0c089ae18d30d8735c4c1d7ddeaf4be0","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    cfg.StrOpt(\u0027auth_email\u0027,"},{"line_number":281,"context_line":"               help\u003d\u0027Email for registry login\u0027),"},{"line_number":282,"context_line":"]"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"_BASE_OPTS \u003d ["},{"line_number":285,"context_line":"    cfg.StrOpt(\u0027maintainer\u0027,"},{"line_number":286,"context_line":"               default\u003d\u0027Kolla Project (https://launchpad.net/kolla)\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"857c4368_d9890945","line":283,"in_reply_to":"1e72c921_6eab9661","updated":"2025-12-17 13:52:11.000000000","message":"globals.yml is in Kolla-Ansible, this is Kolla (used for building the images)","commit_id":"48a4e77df240be651e8ba22800a17cc7d10191db"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"0f42c7950d1749daa36895e233e9848728f7e4f9","unresolved":false,"context_lines":[{"line_number":280,"context_line":"    cfg.StrOpt(\u0027auth_email\u0027,"},{"line_number":281,"context_line":"               help\u003d\u0027Email for registry login\u0027),"},{"line_number":282,"context_line":"]"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"_BASE_OPTS \u003d ["},{"line_number":285,"context_line":"    cfg.StrOpt(\u0027maintainer\u0027,"},{"line_number":286,"context_line":"               default\u003d\u0027Kolla Project (https://launchpad.net/kolla)\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"23069a94_d4a2bf41","line":283,"in_reply_to":"857c4368_d9890945","updated":"2025-12-17 18:01:00.000000000","message":"I understand that, but I wonder if its time for some amount of shared configuration for these sort of things? Or do you consider building images to be super rare and most people are pulling from public archives?","commit_id":"48a4e77df240be651e8ba22800a17cc7d10191db"}],"kolla/image/tasks.py":[{"author":{"_account_id":14200,"name":"Maksim Malchuk","email":"maksim.malchuk@gmail.com","username":"mmalchuk"},"change_message_id":"bd9f4652ff8a70e2e5dc8478ed9325dde7d8e6ae","unresolved":true,"context_lines":[{"line_number":124,"context_line":"                username\u003dself.conf.auth_username,"},{"line_number":125,"context_line":"                password\u003dself.conf.auth_password,"},{"line_number":126,"context_line":"                registry\u003dself.conf.auth_registry,"},{"line_number":127,"context_line":"                email\u003dself.conf.auth_email"},{"line_number":128,"context_line":"            )"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        kwargs \u003d dict(stream\u003dTrue, decode\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"33ab6aca_94f0f7e1","line":127,"range":{"start_line":127,"start_character":0,"end_line":127,"end_character":42},"updated":"2025-06-10 14:26:23.000000000","message":"If email is optional, we should check it before using it.","commit_id":"99403d1e93bf316912428a08b7f9af9f5722cceb"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"e17e0958d49b577a9de1cb704ee197f9284d1bf8","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                username\u003dself.conf.auth_username,"},{"line_number":125,"context_line":"                password\u003dself.conf.auth_password,"},{"line_number":126,"context_line":"                registry\u003dself.conf.auth_registry,"},{"line_number":127,"context_line":"                email\u003dself.conf.auth_email"},{"line_number":128,"context_line":"            )"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        kwargs \u003d dict(stream\u003dTrue, decode\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"e63fef63_34e4bfbe","line":127,"range":{"start_line":127,"start_character":0,"end_line":127,"end_character":42},"in_reply_to":"33ab6aca_94f0f7e1","updated":"2025-10-27 17:29:59.000000000","message":"it\u0027s None if not defined, so it\u0027s fine","commit_id":"99403d1e93bf316912428a08b7f9af9f5722cceb"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"fa060b0b798ad539676dce7f9651aeb54fb15eff","unresolved":true,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def push_image(self, image):"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        if self.conf.auth_username:"},{"line_number":123,"context_line":"            self.engine_client.login("},{"line_number":124,"context_line":"                username\u003dself.conf.auth_username,"},{"line_number":125,"context_line":"                password\u003dself.conf.auth_password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7353833a_602c1d15","line":122,"updated":"2025-07-03 09:12:52.000000000","message":"I\u0027d say we need both username and password unless the error message is clear that password is unset? Would like to avoid throwing a python backtrace on the user.","commit_id":"51a8b8ae8c786850727fef44da8826a51ff586fc"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"d339f6d93b8411d6dbb030ab5d9f3c706b8c43b2","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def push_image(self, image):"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        if self.conf.auth_username:"},{"line_number":123,"context_line":"            self.engine_client.login("},{"line_number":124,"context_line":"                username\u003dself.conf.auth_username,"},{"line_number":125,"context_line":"                password\u003dself.conf.auth_password,"}],"source_content_type":"text/x-python","patch_set":2,"id":"de9cfa4a_731b3e14","line":122,"in_reply_to":"7353833a_602c1d15","updated":"2025-10-27 17:30:11.000000000","message":"Done","commit_id":"51a8b8ae8c786850727fef44da8826a51ff586fc"},{"author":{"_account_id":23084,"name":"Bartosz Bezak","email":"bartosz@stackhpc.com","username":"b.bezak"},"change_message_id":"efa0c85d0480619cdce952c9a3202289eb79b551","unresolved":true,"context_lines":[{"line_number":123,"context_line":"            self.engine_client.login("},{"line_number":124,"context_line":"                username\u003dself.conf.auth_username,"},{"line_number":125,"context_line":"                password\u003dself.conf.auth_password,"},{"line_number":126,"context_line":"                registry\u003dself.conf.auth_registry,"},{"line_number":127,"context_line":"                email\u003dself.conf.auth_email"},{"line_number":128,"context_line":"            )"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"6a310f20_c2db9ea0","line":126,"updated":"2025-10-28 14:36:05.000000000","message":"how does that relate to conf.registry ? if somebody won\u0027t set it and set auth_registry it will login to auth_registry and try to push to dockerhub?\n\nand the other way around people tend to use conf.registry now, so login will be don\u0027t to dockerhub currently?\n\ndo we need some intermediate var like?\n\nlogin_registry \u003d (\n    self.conf.auth_registry or\n    self.conf.registry","commit_id":"2ad48ed769fa7e85b703bfa90d91e06d8ada926c"}],"kolla/tests/test_build.py":[{"author":{"_account_id":14200,"name":"Maksim Malchuk","email":"maksim.malchuk@gmail.com","username":"mmalchuk"},"change_message_id":"bd9f4652ff8a70e2e5dc8478ed9325dde7d8e6ae","unresolved":true,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @mock.patch.dict(os.environ, clear\u003dTrue)"},{"line_number":99,"context_line":"    @mock.patch(engine_client)"},{"line_number":100,"context_line":"    def test_push_image_login(self, mock_client):"},{"line_number":101,"context_line":"        image \u003d FAKE_IMAGE.copy()"},{"line_number":102,"context_line":"        pusher \u003d tasks.PushTask(self.conf, image)"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1958a1d6_f586465e","line":100,"range":{"start_line":100,"start_character":8,"end_line":100,"end_character":29},"updated":"2025-06-10 14:26:23.000000000","message":"There is a need another one test without email.","commit_id":"99403d1e93bf316912428a08b7f9af9f5722cceb"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"e17e0958d49b577a9de1cb704ee197f9284d1bf8","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @mock.patch.dict(os.environ, clear\u003dTrue)"},{"line_number":99,"context_line":"    @mock.patch(engine_client)"},{"line_number":100,"context_line":"    def test_push_image_login(self, mock_client):"},{"line_number":101,"context_line":"        image \u003d FAKE_IMAGE.copy()"},{"line_number":102,"context_line":"        pusher \u003d tasks.PushTask(self.conf, image)"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"142f9453_2797ca23","line":100,"range":{"start_line":100,"start_character":8,"end_line":100,"end_character":29},"in_reply_to":"1958a1d6_f586465e","updated":"2025-10-27 17:29:59.000000000","message":"Done","commit_id":"99403d1e93bf316912428a08b7f9af9f5722cceb"}]}
