)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"70d0d15d34ae4f77e2d17177ed27f2ac409923f3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"758cd662_2193605c","updated":"2025-05-22 09:18:04.000000000","message":"Please, focus on swift, don\u0027t add ceph specific stuff, goal is to have simple as it can be..\n\nOr, is it needed ? I reviewed by an eyes ..but I don\u0027t think we need bluestore stuff and osds...","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"02d9c324057cfd61605ed3495ebf3252b12a1dfb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0ce6914a_859fabea","updated":"2025-05-22 09:20:02.000000000","message":"wondering - If we need find_disks.py as a module. Can be this galaxy collection ? Or ?","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b115c6ee8423d71b7d848cd576d4bfc6f9c8a12c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"7ea4be45_15a38c93","updated":"2025-08-06 13:21:47.000000000","message":"-1 for posterity and igniting a discussion around find_disks.py","commit_id":"db990229b1b574dfcaaf5d6a192a687498e5661e"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"9f8f3538cd37e39967003b3b1879bfe52a3604c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"f5312827_079d8a8e","updated":"2025-08-06 12:54:53.000000000","message":"Hi reviewers,\n\nThis patch set is now ready for its initial review. The primary goal is to restore Swift support.\n\nThis is part of a two-patch series. The core logic is complete and I\u0027m currently working on addressing the Zuul functional tests.\n\nLooking forward to your feedback and suggestions.\n\nThanks!","commit_id":"db990229b1b574dfcaaf5d6a192a687498e5661e"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"1d2ecd9e0046627fba64adf7f8c69b4d671b058a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"22368943_8ac9ec59","in_reply_to":"9561d233_1cdd34c8","updated":"2025-08-10 07:44:36.000000000","message":"Got it. The Zuul tests have been green on this patch set. The CI is currently blocked by a Docker registry push issue, which is unrelated to these changes.","commit_id":"db990229b1b574dfcaaf5d6a192a687498e5661e"},{"author":{"_account_id":14200,"name":"Maksim Malchuk","email":"maksim.malchuk@gmail.com","username":"mmalchuk"},"change_message_id":"9a3fecccfe55457461133d91fcefc522748959b6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"9561d233_1cdd34c8","in_reply_to":"f5312827_079d8a8e","updated":"2025-08-06 13:07:11.000000000","message":"ok, but it should pass the CI first","commit_id":"db990229b1b574dfcaaf5d6a192a687498e5661e"}],"docker/kolla-toolbox/Dockerfile.j2":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"b115c6ee8423d71b7d848cd576d4bfc6f9c8a12c","unresolved":true,"context_lines":[{"line_number":120,"context_line":"ENV ANSIBLE_LIBRARY /usr/share/ansible:$ANSIBLE_LIBRARY"},{"line_number":121,"context_line":"{% endblock %}"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"COPY find_disks.py /usr/share/ansible/"},{"line_number":124,"context_line":"COPY ansible.cfg /etc/ansible/ansible.cfg"},{"line_number":125,"context_line":"COPY ansible_sudoers /etc/sudoers.d/kolla_ansible_sudoers"},{"line_number":126,"context_line":"COPY extend_start.sh /usr/local/bin/kolla_extend_start"}],"source_content_type":"text/x-jinja2","patch_set":8,"id":"210001c1_6ccd0833","line":123,"updated":"2025-08-06 13:21:47.000000000","message":"Can we work out a better method of bootstrapping storage for Swift?","commit_id":"db990229b1b574dfcaaf5d6a192a687498e5661e"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"3136b134bfa5bb3b43a939e674ea4a7c49936b8b","unresolved":true,"context_lines":[{"line_number":120,"context_line":"ENV ANSIBLE_LIBRARY /usr/share/ansible:$ANSIBLE_LIBRARY"},{"line_number":121,"context_line":"{% endblock %}"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"COPY find_disks.py /usr/share/ansible/"},{"line_number":124,"context_line":"COPY ansible.cfg /etc/ansible/ansible.cfg"},{"line_number":125,"context_line":"COPY ansible_sudoers /etc/sudoers.d/kolla_ansible_sudoers"},{"line_number":126,"context_line":"COPY extend_start.sh /usr/local/bin/kolla_extend_start"}],"source_content_type":"text/x-jinja2","patch_set":8,"id":"8de611be_9793a70f","line":123,"in_reply_to":"210001c1_6ccd0833","updated":"2025-08-06 13:28:53.000000000","message":"Sure, I\u0027ll work on that.","commit_id":"db990229b1b574dfcaaf5d6a192a687498e5661e"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"53a7fff02b3ab4e9fd80cfe52d3206d3418a8cf5","unresolved":false,"context_lines":[{"line_number":120,"context_line":"ENV ANSIBLE_LIBRARY /usr/share/ansible:$ANSIBLE_LIBRARY"},{"line_number":121,"context_line":"{% endblock %}"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"COPY find_disks.py /usr/share/ansible/"},{"line_number":124,"context_line":"COPY ansible.cfg /etc/ansible/ansible.cfg"},{"line_number":125,"context_line":"COPY ansible_sudoers /etc/sudoers.d/kolla_ansible_sudoers"},{"line_number":126,"context_line":"COPY extend_start.sh /usr/local/bin/kolla_extend_start"}],"source_content_type":"text/x-jinja2","patch_set":8,"id":"6255c27b_7cc939a7","line":123,"in_reply_to":"7ae8e9cd_f35792a6","updated":"2025-09-07 10:07:34.000000000","message":"Acknowledged","commit_id":"db990229b1b574dfcaaf5d6a192a687498e5661e"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"fb4681c206f5793637a22b8c8b2bfd3d2d00edea","unresolved":true,"context_lines":[{"line_number":120,"context_line":"ENV ANSIBLE_LIBRARY /usr/share/ansible:$ANSIBLE_LIBRARY"},{"line_number":121,"context_line":"{% endblock %}"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"COPY find_disks.py /usr/share/ansible/"},{"line_number":124,"context_line":"COPY ansible.cfg /etc/ansible/ansible.cfg"},{"line_number":125,"context_line":"COPY ansible_sudoers /etc/sudoers.d/kolla_ansible_sudoers"},{"line_number":126,"context_line":"COPY extend_start.sh /usr/local/bin/kolla_extend_start"}],"source_content_type":"text/x-jinja2","patch_set":8,"id":"7ae8e9cd_f35792a6","line":123,"in_reply_to":"8de611be_9793a70f","updated":"2025-08-10 13:47:07.000000000","message":"Hi Michael,\n\nI agree that the current approach to building rings and finding disks in Kolla Ansible could be improved. Could you share more details about the issues you see with the current implementation? I’d like to better understand your concerns and what you have in mind for a “better method” of bootstrapping Swift storage.\n\nI also reviewed the Kayobe project, and the current code structure seems aligned with its approach, so I don’t see major structural problems. We could still consider a refactor or moving the script if it would make things clearer or easier to maintain.","commit_id":"db990229b1b574dfcaaf5d6a192a687498e5661e"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"a46a4a9d626b4ac1095ad5caf3ccad6dc37cc0c6","unresolved":true,"context_lines":[{"line_number":122,"context_line":"ENV ANSIBLE_LIBRARY /usr/share/ansible:$ANSIBLE_LIBRARY"},{"line_number":123,"context_line":"{% endblock %}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"COPY find_disks.py /usr/share/ansible/"},{"line_number":126,"context_line":"COPY ansible.cfg /etc/ansible/ansible.cfg"},{"line_number":127,"context_line":"COPY ansible_sudoers /etc/sudoers.d/kolla_ansible_sudoers"},{"line_number":128,"context_line":"COPY extend_start.sh /usr/local/bin/kolla_extend_start"}],"source_content_type":"text/x-jinja2","patch_set":10,"id":"30d4f871_9932e1ba","line":125,"updated":"2025-09-08 07:04:49.000000000","message":"As mentioned, I\u0027d prefer to have a different approach - if we really need that, it should be handled in kolla-ansible - especially it\u0027s already written as an Ansible module","commit_id":"e3c4a6c11137f6a86ab4bd35ddf46b83c8add4c2"},{"author":{"_account_id":37509,"name":"Mostafa Salari","display_name":"Mosal","email":"msgm68@gmail.com","username":"msgm68"},"change_message_id":"63fd4f93f22bb6b47c27ee8f8e12ca382845b2e1","unresolved":true,"context_lines":[{"line_number":122,"context_line":"ENV ANSIBLE_LIBRARY /usr/share/ansible:$ANSIBLE_LIBRARY"},{"line_number":123,"context_line":"{% endblock %}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"COPY find_disks.py /usr/share/ansible/"},{"line_number":126,"context_line":"COPY ansible.cfg /etc/ansible/ansible.cfg"},{"line_number":127,"context_line":"COPY ansible_sudoers /etc/sudoers.d/kolla_ansible_sudoers"},{"line_number":128,"context_line":"COPY extend_start.sh /usr/local/bin/kolla_extend_start"}],"source_content_type":"text/x-jinja2","patch_set":10,"id":"8056c2cb_9457d6e2","line":125,"in_reply_to":"30d4f871_9932e1ba","updated":"2025-09-08 08:39:31.000000000","message":"A simplifying view: two things shouldn’t be in kolla-ansible scope, but prepared beforehand — disk setup (format + mount) and ring building. They’re related. Deprecated swift role didn’t build rings (just checked); same for disks, it didn’t format but it had find_disks for mounting. That approach isn’t ideal, since it doesn’t really remove the need for pre-deploy steps anyway.\n\nDo you agree that mounting disks should also happen before 4 kolla_actions, at the same time as other disk/ring prep? If so, simple bash scripts can be written for it.","commit_id":"e3c4a6c11137f6a86ab4bd35ddf46b83c8add4c2"},{"author":{"_account_id":38032,"name":"Sara Khosravi","display_name":"Sarah","email":"sarah.kh09@gmail.com","username":"Sarah.Kh"},"change_message_id":"b0aa5df5ac792463fb55ac7c753ca6a8db435061","unresolved":true,"context_lines":[{"line_number":122,"context_line":"ENV ANSIBLE_LIBRARY /usr/share/ansible:$ANSIBLE_LIBRARY"},{"line_number":123,"context_line":"{% endblock %}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"COPY find_disks.py /usr/share/ansible/"},{"line_number":126,"context_line":"COPY ansible.cfg /etc/ansible/ansible.cfg"},{"line_number":127,"context_line":"COPY ansible_sudoers /etc/sudoers.d/kolla_ansible_sudoers"},{"line_number":128,"context_line":"COPY extend_start.sh /usr/local/bin/kolla_extend_start"}],"source_content_type":"text/x-jinja2","patch_set":10,"id":"e5671694_68e44ffc","line":125,"in_reply_to":"8056c2cb_9457d6e2","updated":"2025-09-08 10:22:59.000000000","message":"In my opinion, the find_disk script can be removed from the kolla-toolbox source code and refactored into a standalone Ansible collection. Once properly packaged, it can be referenced in docker/kolla-toolbox/requirements.yml like any other collection and installed inside the toolbox container.","commit_id":"e3c4a6c11137f6a86ab4bd35ddf46b83c8add4c2"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"e77abd4345d5765f437ad3f669f6337312b5c7ee","unresolved":false,"context_lines":[{"line_number":122,"context_line":"ENV ANSIBLE_LIBRARY /usr/share/ansible:$ANSIBLE_LIBRARY"},{"line_number":123,"context_line":"{% endblock %}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"COPY find_disks.py /usr/share/ansible/"},{"line_number":126,"context_line":"COPY ansible.cfg /etc/ansible/ansible.cfg"},{"line_number":127,"context_line":"COPY ansible_sudoers /etc/sudoers.d/kolla_ansible_sudoers"},{"line_number":128,"context_line":"COPY extend_start.sh /usr/local/bin/kolla_extend_start"}],"source_content_type":"text/x-jinja2","patch_set":10,"id":"f5912ec7_d835e17d","line":125,"in_reply_to":"9948943a_296137a6","updated":"2025-12-15 08:30:55.000000000","message":"after further discussion, we’ve agreed to defer the HA-related work for Swift to a separate, future patchset.\nFor now, this change will focus on the current scope, and the dedicated HA/load-balancer improvements will be developed and proposed independently once the design is finalized.\n\nThanks everyone for the constructive discussion and input.","commit_id":"e3c4a6c11137f6a86ab4bd35ddf46b83c8add4c2"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"2d91c407ec2114257933fa61f0d4ce044616aafa","unresolved":false,"context_lines":[{"line_number":122,"context_line":"ENV ANSIBLE_LIBRARY /usr/share/ansible:$ANSIBLE_LIBRARY"},{"line_number":123,"context_line":"{% endblock %}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"COPY find_disks.py /usr/share/ansible/"},{"line_number":126,"context_line":"COPY ansible.cfg /etc/ansible/ansible.cfg"},{"line_number":127,"context_line":"COPY ansible_sudoers /etc/sudoers.d/kolla_ansible_sudoers"},{"line_number":128,"context_line":"COPY extend_start.sh /usr/local/bin/kolla_extend_start"}],"source_content_type":"text/x-jinja2","patch_set":10,"id":"9948943a_296137a6","line":125,"in_reply_to":"e5671694_68e44ffc","updated":"2025-12-15 08:01:31.000000000","message":"Acknowledged","commit_id":"e3c4a6c11137f6a86ab4bd35ddf46b83c8add4c2"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"a46a4a9d626b4ac1095ad5caf3ccad6dc37cc0c6","unresolved":true,"context_lines":[{"line_number":128,"context_line":"COPY extend_start.sh /usr/local/bin/kolla_extend_start"},{"line_number":129,"context_line":"COPY kolla_toolbox.sh /usr/local/bin/kolla_toolbox"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"RUN chmod 644 /usr/share/ansible/find_disks.py \\"},{"line_number":132,"context_line":"              /etc/ansible/ansible.cfg \\"},{"line_number":133,"context_line":"              /usr/local/bin/kolla_extend_start \\"},{"line_number":134,"context_line":"    \u0026\u0026 chmod 755 /usr/local/bin/kolla_toolbox \\"}],"source_content_type":"text/x-jinja2","patch_set":10,"id":"02a34ac3_3a03ed1d","line":131,"updated":"2025-09-08 07:04:49.000000000","message":"ditto","commit_id":"e3c4a6c11137f6a86ab4bd35ddf46b83c8add4c2"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"2d91c407ec2114257933fa61f0d4ce044616aafa","unresolved":false,"context_lines":[{"line_number":128,"context_line":"COPY extend_start.sh /usr/local/bin/kolla_extend_start"},{"line_number":129,"context_line":"COPY kolla_toolbox.sh /usr/local/bin/kolla_toolbox"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"RUN chmod 644 /usr/share/ansible/find_disks.py \\"},{"line_number":132,"context_line":"              /etc/ansible/ansible.cfg \\"},{"line_number":133,"context_line":"              /usr/local/bin/kolla_extend_start \\"},{"line_number":134,"context_line":"    \u0026\u0026 chmod 755 /usr/local/bin/kolla_toolbox \\"}],"source_content_type":"text/x-jinja2","patch_set":10,"id":"f3af30b4_262bf9d2","line":131,"in_reply_to":"02a34ac3_3a03ed1d","updated":"2025-12-15 08:01:31.000000000","message":"Acknowledged","commit_id":"e3c4a6c11137f6a86ab4bd35ddf46b83c8add4c2"}],"docker/kolla-toolbox/find_disks.py":[{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"70d0d15d34ae4f77e2d17177ed27f2ac409923f3","unresolved":true,"context_lines":[{"line_number":189,"context_line":"    yield kwargs"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"def extract_disk_info_bs(ct, dev, name, use_udev):"},{"line_number":193,"context_line":"    if not dev:"},{"line_number":194,"context_line":"        return"},{"line_number":195,"context_line":"    kwargs \u003d dict(bs_blk_label\u003d\u0027\u0027, bs_blk_device\u003d\u0027\u0027, bs_db_label\u003d\u0027\u0027,"},{"line_number":196,"context_line":"                  bs_db_device\u003d\u0027\u0027, bs_wal_label\u003d\u0027\u0027, bs_wal_device\u003d\u0027\u0027,"},{"line_number":197,"context_line":"                  bs_wal_partition_num\u003d\u0027\u0027, bs_db_partition_num\u003d\u0027\u0027,"},{"line_number":198,"context_line":"                  bs_blk_partition_num\u003d\u0027\u0027, partition\u003d\u0027\u0027, partition_label\u003d\u0027\u0027,"},{"line_number":199,"context_line":"                  partition_num\u003d\u0027\u0027, device\u003d\u0027\u0027, partition_usage\u003d\u0027\u0027)"},{"line_number":200,"context_line":"    kwargs[\u0027fs_uuid\u0027] \u003d get_id_fs_uuid(dev, use_udev)"},{"line_number":201,"context_line":"    kwargs[\u0027fs_label\u0027] \u003d dev.get(\u0027ID_FS_LABEL\u0027, \u0027\u0027)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    if dev.get(\u0027DEVTYPE\u0027, \u0027\u0027) \u003d\u003d \u0027partition\u0027:"},{"line_number":204,"context_line":"        actual_name \u003d get_id_part_entry_name(dev, use_udev)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        if ((\u0027BOOTSTRAP_BS\u0027 in name or \u0027DATA_BS\u0027 in name)"},{"line_number":207,"context_line":"                and name in actual_name):"},{"line_number":208,"context_line":"            if actual_name.endswith(\"_B\"):"},{"line_number":209,"context_line":"                kwargs[\u0027partition_usage\u0027] \u003d \u0027block\u0027"},{"line_number":210,"context_line":"                kwargs[\u0027bs_blk_partition_num\u0027] \u003d \\"},{"line_number":211,"context_line":"                    re.sub(r\u0027.*[^\\d]\u0027, \u0027\u0027, dev.device_node)"},{"line_number":212,"context_line":"                kwargs[\u0027bs_blk_device\u0027] \u003d dev.find_parent(\u0027block\u0027).device_node"},{"line_number":213,"context_line":"                kwargs[\u0027bs_blk_label\u0027] \u003d actual_name"},{"line_number":214,"context_line":"                return kwargs"},{"line_number":215,"context_line":"            if actual_name.endswith(\"_D\"):"},{"line_number":216,"context_line":"                kwargs[\u0027partition_usage\u0027] \u003d \u0027block.db\u0027"},{"line_number":217,"context_line":"                kwargs[\u0027bs_db_partition_num\u0027] \u003d \\"},{"line_number":218,"context_line":"                    re.sub(r\u0027.*[^\\d]\u0027, \u0027\u0027, dev.device_node)"},{"line_number":219,"context_line":"                kwargs[\u0027bs_db_device\u0027] \u003d dev.find_parent(\u0027block\u0027).device_node"},{"line_number":220,"context_line":"                kwargs[\u0027bs_db_label\u0027] \u003d actual_name"},{"line_number":221,"context_line":"                return kwargs"},{"line_number":222,"context_line":"            if actual_name.endswith(\"_W\"):"},{"line_number":223,"context_line":"                kwargs[\u0027partition_usage\u0027] \u003d \u0027block.wal\u0027"},{"line_number":224,"context_line":"                kwargs[\u0027bs_wal_partition_num\u0027] \u003d \\"},{"line_number":225,"context_line":"                    re.sub(r\u0027.*[^\\d]\u0027, \u0027\u0027, dev.device_node)"},{"line_number":226,"context_line":"                kwargs[\u0027bs_wal_device\u0027] \u003d dev.find_parent(\u0027block\u0027).device_node"},{"line_number":227,"context_line":"                kwargs[\u0027bs_wal_label\u0027] \u003d actual_name"},{"line_number":228,"context_line":"                return kwargs"},{"line_number":229,"context_line":"            if \u0027_BS\u0027 in actual_name:"},{"line_number":230,"context_line":"                kwargs[\u0027partition_usage\u0027] \u003d \u0027osd\u0027"},{"line_number":231,"context_line":"                kwargs[\u0027partition\u0027] \u003d dev.find_parent(\u0027block\u0027).device_node"},{"line_number":232,"context_line":"                kwargs[\u0027partition_label\u0027] \u003d actual_name"},{"line_number":233,"context_line":"                kwargs[\u0027partition_num\u0027] \u003d \\"},{"line_number":234,"context_line":"                    re.sub(r\u0027.*[^\\d]\u0027, \u0027\u0027, dev.device_node)"},{"line_number":235,"context_line":"                kwargs[\u0027device\u0027] \u003d dev.find_parent(\u0027block\u0027).device_node"},{"line_number":236,"context_line":"                return kwargs"},{"line_number":237,"context_line":"    return 0"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"def nb_of_osd(disks):"}],"source_content_type":"text/x-python","patch_set":2,"id":"775f3211_78a2f75e","line":237,"range":{"start_line":192,"start_character":0,"end_line":237,"end_character":12},"updated":"2025-05-22 09:18:04.000000000","message":"We probably don\u0027t need this as this is specific for ceph, kolla will not add ceph support to kolla-ansible again as widely used cephadm is working and kolla supports external ceph support.","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"55080b12e006ccdeb5f4caa646c9df767bef0e2e","unresolved":false,"context_lines":[{"line_number":189,"context_line":"    yield kwargs"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"def extract_disk_info_bs(ct, dev, name, use_udev):"},{"line_number":193,"context_line":"    if not dev:"},{"line_number":194,"context_line":"        return"},{"line_number":195,"context_line":"    kwargs \u003d dict(bs_blk_label\u003d\u0027\u0027, bs_blk_device\u003d\u0027\u0027, bs_db_label\u003d\u0027\u0027,"},{"line_number":196,"context_line":"                  bs_db_device\u003d\u0027\u0027, bs_wal_label\u003d\u0027\u0027, bs_wal_device\u003d\u0027\u0027,"},{"line_number":197,"context_line":"                  bs_wal_partition_num\u003d\u0027\u0027, bs_db_partition_num\u003d\u0027\u0027,"},{"line_number":198,"context_line":"                  bs_blk_partition_num\u003d\u0027\u0027, partition\u003d\u0027\u0027, partition_label\u003d\u0027\u0027,"},{"line_number":199,"context_line":"                  partition_num\u003d\u0027\u0027, device\u003d\u0027\u0027, partition_usage\u003d\u0027\u0027)"},{"line_number":200,"context_line":"    kwargs[\u0027fs_uuid\u0027] \u003d get_id_fs_uuid(dev, use_udev)"},{"line_number":201,"context_line":"    kwargs[\u0027fs_label\u0027] \u003d dev.get(\u0027ID_FS_LABEL\u0027, \u0027\u0027)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    if dev.get(\u0027DEVTYPE\u0027, \u0027\u0027) \u003d\u003d \u0027partition\u0027:"},{"line_number":204,"context_line":"        actual_name \u003d get_id_part_entry_name(dev, use_udev)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        if ((\u0027BOOTSTRAP_BS\u0027 in name or \u0027DATA_BS\u0027 in name)"},{"line_number":207,"context_line":"                and name in actual_name):"},{"line_number":208,"context_line":"            if actual_name.endswith(\"_B\"):"},{"line_number":209,"context_line":"                kwargs[\u0027partition_usage\u0027] \u003d \u0027block\u0027"},{"line_number":210,"context_line":"                kwargs[\u0027bs_blk_partition_num\u0027] \u003d \\"},{"line_number":211,"context_line":"                    re.sub(r\u0027.*[^\\d]\u0027, \u0027\u0027, dev.device_node)"},{"line_number":212,"context_line":"                kwargs[\u0027bs_blk_device\u0027] \u003d dev.find_parent(\u0027block\u0027).device_node"},{"line_number":213,"context_line":"                kwargs[\u0027bs_blk_label\u0027] \u003d actual_name"},{"line_number":214,"context_line":"                return kwargs"},{"line_number":215,"context_line":"            if actual_name.endswith(\"_D\"):"},{"line_number":216,"context_line":"                kwargs[\u0027partition_usage\u0027] \u003d \u0027block.db\u0027"},{"line_number":217,"context_line":"                kwargs[\u0027bs_db_partition_num\u0027] \u003d \\"},{"line_number":218,"context_line":"                    re.sub(r\u0027.*[^\\d]\u0027, \u0027\u0027, dev.device_node)"},{"line_number":219,"context_line":"                kwargs[\u0027bs_db_device\u0027] \u003d dev.find_parent(\u0027block\u0027).device_node"},{"line_number":220,"context_line":"                kwargs[\u0027bs_db_label\u0027] \u003d actual_name"},{"line_number":221,"context_line":"                return kwargs"},{"line_number":222,"context_line":"            if actual_name.endswith(\"_W\"):"},{"line_number":223,"context_line":"                kwargs[\u0027partition_usage\u0027] \u003d \u0027block.wal\u0027"},{"line_number":224,"context_line":"                kwargs[\u0027bs_wal_partition_num\u0027] \u003d \\"},{"line_number":225,"context_line":"                    re.sub(r\u0027.*[^\\d]\u0027, \u0027\u0027, dev.device_node)"},{"line_number":226,"context_line":"                kwargs[\u0027bs_wal_device\u0027] \u003d dev.find_parent(\u0027block\u0027).device_node"},{"line_number":227,"context_line":"                kwargs[\u0027bs_wal_label\u0027] \u003d actual_name"},{"line_number":228,"context_line":"                return kwargs"},{"line_number":229,"context_line":"            if \u0027_BS\u0027 in actual_name:"},{"line_number":230,"context_line":"                kwargs[\u0027partition_usage\u0027] \u003d \u0027osd\u0027"},{"line_number":231,"context_line":"                kwargs[\u0027partition\u0027] \u003d dev.find_parent(\u0027block\u0027).device_node"},{"line_number":232,"context_line":"                kwargs[\u0027partition_label\u0027] \u003d actual_name"},{"line_number":233,"context_line":"                kwargs[\u0027partition_num\u0027] \u003d \\"},{"line_number":234,"context_line":"                    re.sub(r\u0027.*[^\\d]\u0027, \u0027\u0027, dev.device_node)"},{"line_number":235,"context_line":"                kwargs[\u0027device\u0027] \u003d dev.find_parent(\u0027block\u0027).device_node"},{"line_number":236,"context_line":"                return kwargs"},{"line_number":237,"context_line":"    return 0"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"def nb_of_osd(disks):"}],"source_content_type":"text/x-python","patch_set":2,"id":"72c5b2e6_0ae1b0a4","line":237,"range":{"start_line":192,"start_character":0,"end_line":237,"end_character":12},"in_reply_to":"775f3211_78a2f75e","updated":"2025-05-24 09:06:58.000000000","message":"Acknowledged","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"70d0d15d34ae4f77e2d17177ed27f2ac409923f3","unresolved":true,"context_lines":[{"line_number":237,"context_line":"    return 0"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"def nb_of_osd(disks):"},{"line_number":241,"context_line":"    osd_info \u003d dict()"},{"line_number":242,"context_line":"    osd_info[\u0027block_label\u0027] \u003d list()"},{"line_number":243,"context_line":"    nb_of_osds \u003d 0"},{"line_number":244,"context_line":"    for item in disks:"},{"line_number":245,"context_line":"        if item[\u0027partition_usage\u0027] \u003d\u003d \u0027osd\u0027:"},{"line_number":246,"context_line":"            osd_info[\u0027block_label\u0027].append(item[\u0027partition_label\u0027])"},{"line_number":247,"context_line":"            nb_of_osds +\u003d 1"},{"line_number":248,"context_line":"    osd_info[\u0027nb_of_osd\u0027] \u003d nb_of_osds"},{"line_number":249,"context_line":"    return osd_info"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"def combine_info(disks):"}],"source_content_type":"text/x-python","patch_set":2,"id":"99108199_c0d61bf7","line":249,"range":{"start_line":240,"start_character":0,"end_line":249,"end_character":19},"updated":"2025-05-22 09:18:04.000000000","message":"ditto","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"ae807783d812ef77af8a188f904477d31726ba6a","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    return 0"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"def nb_of_osd(disks):"},{"line_number":241,"context_line":"    osd_info \u003d dict()"},{"line_number":242,"context_line":"    osd_info[\u0027block_label\u0027] \u003d list()"},{"line_number":243,"context_line":"    nb_of_osds \u003d 0"},{"line_number":244,"context_line":"    for item in disks:"},{"line_number":245,"context_line":"        if item[\u0027partition_usage\u0027] \u003d\u003d \u0027osd\u0027:"},{"line_number":246,"context_line":"            osd_info[\u0027block_label\u0027].append(item[\u0027partition_label\u0027])"},{"line_number":247,"context_line":"            nb_of_osds +\u003d 1"},{"line_number":248,"context_line":"    osd_info[\u0027nb_of_osd\u0027] \u003d nb_of_osds"},{"line_number":249,"context_line":"    return osd_info"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"def combine_info(disks):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dd3579fe_911c290b","line":249,"range":{"start_line":240,"start_character":0,"end_line":249,"end_character":19},"in_reply_to":"99108199_c0d61bf7","updated":"2025-05-24 09:06:50.000000000","message":"Acknowledged","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"70d0d15d34ae4f77e2d17177ed27f2ac409923f3","unresolved":true,"context_lines":[{"line_number":249,"context_line":"    return osd_info"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"def combine_info(disks):"},{"line_number":253,"context_line":"    info \u003d list()"},{"line_number":254,"context_line":"    osds \u003d nb_of_osd(disks)"},{"line_number":255,"context_line":"    osd_id \u003d 0"},{"line_number":256,"context_line":"    while osd_id \u003c osds[\u0027nb_of_osd\u0027]:"},{"line_number":257,"context_line":"        final \u003d dict()"},{"line_number":258,"context_line":"        idx \u003d 0"},{"line_number":259,"context_line":"        idx_osd \u003d idx_blk \u003d idx_wal \u003d idx_db \u003d -1"},{"line_number":260,"context_line":"        for item in disks:"},{"line_number":261,"context_line":"            if (item[\u0027partition_usage\u0027] \u003d\u003d \u0027osd\u0027 and"},{"line_number":262,"context_line":"                    item[\u0027partition_label\u0027] \u003d\u003d osds[\u0027block_label\u0027][osd_id]):"},{"line_number":263,"context_line":"                idx_osd \u003d idx"},{"line_number":264,"context_line":"            elif (item[\u0027partition_usage\u0027] \u003d\u003d \u0027block\u0027 and"},{"line_number":265,"context_line":"                    item[\u0027bs_blk_label\u0027] \u003d\u003d"},{"line_number":266,"context_line":"                    osds[\u0027block_label\u0027][osd_id] + \"_B\"):"},{"line_number":267,"context_line":"                idx_blk \u003d idx"},{"line_number":268,"context_line":"            elif (item[\u0027partition_usage\u0027] \u003d\u003d \u0027block.wal\u0027 and"},{"line_number":269,"context_line":"                    item[\u0027bs_wal_label\u0027] \u003d\u003d"},{"line_number":270,"context_line":"                    osds[\u0027block_label\u0027][osd_id] + \"_W\"):"},{"line_number":271,"context_line":"                idx_wal \u003d idx"},{"line_number":272,"context_line":"            elif (item[\u0027partition_usage\u0027] \u003d\u003d \u0027block.db\u0027 and"},{"line_number":273,"context_line":"                    item[\u0027bs_db_label\u0027] \u003d\u003d"},{"line_number":274,"context_line":"                    osds[\u0027block_label\u0027][osd_id] + \"_D\"):"},{"line_number":275,"context_line":"                idx_db \u003d idx"},{"line_number":276,"context_line":"            idx \u003d idx + 1"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        # write the information of block.db and block.wal to block item"},{"line_number":279,"context_line":"        # if block.db and block.wal are found"},{"line_number":280,"context_line":"        if idx_blk !\u003d -1:"},{"line_number":281,"context_line":"            disks[idx_osd][\u0027bs_blk_device\u0027] \u003d disks[idx_blk][\u0027bs_blk_device\u0027]"},{"line_number":282,"context_line":"            disks[idx_osd][\u0027bs_blk_label\u0027] \u003d disks[idx_blk][\u0027bs_blk_label\u0027]"},{"line_number":283,"context_line":"            disks[idx_osd][\u0027bs_blk_partition_num\u0027] \u003d \\"},{"line_number":284,"context_line":"                disks[idx_blk][\u0027bs_blk_partition_num\u0027]"},{"line_number":285,"context_line":"            disks[idx_blk][\u0027partition_usage\u0027] \u003d \u0027\u0027"},{"line_number":286,"context_line":"        if idx_wal !\u003d -1:"},{"line_number":287,"context_line":"            disks[idx_osd][\u0027bs_wal_device\u0027] \u003d disks[idx_wal][\u0027bs_wal_device\u0027]"},{"line_number":288,"context_line":"            disks[idx_osd][\u0027bs_wal_partition_num\u0027] \u003d \\"},{"line_number":289,"context_line":"                disks[idx_wal][\u0027bs_wal_partition_num\u0027]"},{"line_number":290,"context_line":"            disks[idx_osd][\u0027bs_wal_label\u0027] \u003d disks[idx_wal][\u0027bs_wal_label\u0027]"},{"line_number":291,"context_line":"            disks[idx_wal][\u0027partition_usage\u0027] \u003d \u0027\u0027"},{"line_number":292,"context_line":"        if idx_db !\u003d -1:"},{"line_number":293,"context_line":"            disks[idx_osd][\u0027bs_db_device\u0027] \u003d disks[idx_db][\u0027bs_db_device\u0027]"},{"line_number":294,"context_line":"            disks[idx_osd][\u0027bs_db_partition_num\u0027] \u003d \\"},{"line_number":295,"context_line":"                disks[idx_db][\u0027bs_db_partition_num\u0027]"},{"line_number":296,"context_line":"            disks[idx_osd][\u0027bs_db_label\u0027] \u003d disks[idx_db][\u0027bs_db_label\u0027]"},{"line_number":297,"context_line":"            disks[idx_db][\u0027partition_usage\u0027] \u003d \u0027\u0027"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        final[\u0027fs_uuid\u0027] \u003d disks[idx_osd][\u0027fs_uuid\u0027]"},{"line_number":300,"context_line":"        final[\u0027fs_label\u0027] \u003d disks[idx_osd][\u0027fs_label\u0027]"},{"line_number":301,"context_line":"        final[\u0027bs_blk_device\u0027] \u003d disks[idx_osd][\u0027bs_blk_device\u0027]"},{"line_number":302,"context_line":"        final[\u0027bs_blk_label\u0027] \u003d disks[idx_osd][\u0027bs_blk_label\u0027]"},{"line_number":303,"context_line":"        final[\u0027bs_blk_partition_num\u0027] \u003d disks[idx_osd][\u0027bs_blk_partition_num\u0027]"},{"line_number":304,"context_line":"        final[\u0027bs_db_device\u0027] \u003d disks[idx_osd][\u0027bs_db_device\u0027]"},{"line_number":305,"context_line":"        final[\u0027bs_db_partition_num\u0027] \u003d disks[idx_osd][\u0027bs_db_partition_num\u0027]"},{"line_number":306,"context_line":"        final[\u0027bs_db_label\u0027] \u003d disks[idx_osd][\u0027bs_db_label\u0027]"},{"line_number":307,"context_line":"        final[\u0027bs_wal_device\u0027] \u003d disks[idx_osd][\u0027bs_wal_device\u0027]"},{"line_number":308,"context_line":"        final[\u0027bs_wal_partition_num\u0027] \u003d disks[idx_osd][\u0027bs_wal_partition_num\u0027]"},{"line_number":309,"context_line":"        final[\u0027bs_wal_label\u0027] \u003d disks[idx_osd][\u0027bs_wal_label\u0027]"},{"line_number":310,"context_line":"        final[\u0027device\u0027] \u003d disks[idx_osd][\u0027device\u0027]"},{"line_number":311,"context_line":"        final[\u0027partition\u0027] \u003d disks[idx_osd][\u0027partition\u0027]"},{"line_number":312,"context_line":"        final[\u0027partition_label\u0027] \u003d disks[idx_osd][\u0027partition_label\u0027]"},{"line_number":313,"context_line":"        final[\u0027partition_num\u0027] \u003d disks[idx_osd][\u0027partition_num\u0027]"},{"line_number":314,"context_line":"        final[\u0027external_journal\u0027] \u003d False"},{"line_number":315,"context_line":"        final[\u0027journal\u0027] \u003d \u0027\u0027"},{"line_number":316,"context_line":"        final[\u0027journal_device\u0027] \u003d \u0027\u0027"},{"line_number":317,"context_line":"        final[\u0027journal_num\u0027] \u003d 0"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        info.append(final)"},{"line_number":320,"context_line":"        disks[idx_osd][\u0027partition_usage\u0027] \u003d \u0027\u0027"},{"line_number":321,"context_line":"        osd_id +\u003d 1"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    return info"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":2,"id":"6ce9bd99_e4384cc5","line":323,"range":{"start_line":252,"start_character":0,"end_line":323,"end_character":15},"updated":"2025-05-22 09:18:04.000000000","message":"ditto","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"f17725be12721daf655f84c178d0c4322197c1e5","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    return osd_info"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"def combine_info(disks):"},{"line_number":253,"context_line":"    info \u003d list()"},{"line_number":254,"context_line":"    osds \u003d nb_of_osd(disks)"},{"line_number":255,"context_line":"    osd_id \u003d 0"},{"line_number":256,"context_line":"    while osd_id \u003c osds[\u0027nb_of_osd\u0027]:"},{"line_number":257,"context_line":"        final \u003d dict()"},{"line_number":258,"context_line":"        idx \u003d 0"},{"line_number":259,"context_line":"        idx_osd \u003d idx_blk \u003d idx_wal \u003d idx_db \u003d -1"},{"line_number":260,"context_line":"        for item in disks:"},{"line_number":261,"context_line":"            if (item[\u0027partition_usage\u0027] \u003d\u003d \u0027osd\u0027 and"},{"line_number":262,"context_line":"                    item[\u0027partition_label\u0027] \u003d\u003d osds[\u0027block_label\u0027][osd_id]):"},{"line_number":263,"context_line":"                idx_osd \u003d idx"},{"line_number":264,"context_line":"            elif (item[\u0027partition_usage\u0027] \u003d\u003d \u0027block\u0027 and"},{"line_number":265,"context_line":"                    item[\u0027bs_blk_label\u0027] \u003d\u003d"},{"line_number":266,"context_line":"                    osds[\u0027block_label\u0027][osd_id] + \"_B\"):"},{"line_number":267,"context_line":"                idx_blk \u003d idx"},{"line_number":268,"context_line":"            elif (item[\u0027partition_usage\u0027] \u003d\u003d \u0027block.wal\u0027 and"},{"line_number":269,"context_line":"                    item[\u0027bs_wal_label\u0027] \u003d\u003d"},{"line_number":270,"context_line":"                    osds[\u0027block_label\u0027][osd_id] + \"_W\"):"},{"line_number":271,"context_line":"                idx_wal \u003d idx"},{"line_number":272,"context_line":"            elif (item[\u0027partition_usage\u0027] \u003d\u003d \u0027block.db\u0027 and"},{"line_number":273,"context_line":"                    item[\u0027bs_db_label\u0027] \u003d\u003d"},{"line_number":274,"context_line":"                    osds[\u0027block_label\u0027][osd_id] + \"_D\"):"},{"line_number":275,"context_line":"                idx_db \u003d idx"},{"line_number":276,"context_line":"            idx \u003d idx + 1"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        # write the information of block.db and block.wal to block item"},{"line_number":279,"context_line":"        # if block.db and block.wal are found"},{"line_number":280,"context_line":"        if idx_blk !\u003d -1:"},{"line_number":281,"context_line":"            disks[idx_osd][\u0027bs_blk_device\u0027] \u003d disks[idx_blk][\u0027bs_blk_device\u0027]"},{"line_number":282,"context_line":"            disks[idx_osd][\u0027bs_blk_label\u0027] \u003d disks[idx_blk][\u0027bs_blk_label\u0027]"},{"line_number":283,"context_line":"            disks[idx_osd][\u0027bs_blk_partition_num\u0027] \u003d \\"},{"line_number":284,"context_line":"                disks[idx_blk][\u0027bs_blk_partition_num\u0027]"},{"line_number":285,"context_line":"            disks[idx_blk][\u0027partition_usage\u0027] \u003d \u0027\u0027"},{"line_number":286,"context_line":"        if idx_wal !\u003d -1:"},{"line_number":287,"context_line":"            disks[idx_osd][\u0027bs_wal_device\u0027] \u003d disks[idx_wal][\u0027bs_wal_device\u0027]"},{"line_number":288,"context_line":"            disks[idx_osd][\u0027bs_wal_partition_num\u0027] \u003d \\"},{"line_number":289,"context_line":"                disks[idx_wal][\u0027bs_wal_partition_num\u0027]"},{"line_number":290,"context_line":"            disks[idx_osd][\u0027bs_wal_label\u0027] \u003d disks[idx_wal][\u0027bs_wal_label\u0027]"},{"line_number":291,"context_line":"            disks[idx_wal][\u0027partition_usage\u0027] \u003d \u0027\u0027"},{"line_number":292,"context_line":"        if idx_db !\u003d -1:"},{"line_number":293,"context_line":"            disks[idx_osd][\u0027bs_db_device\u0027] \u003d disks[idx_db][\u0027bs_db_device\u0027]"},{"line_number":294,"context_line":"            disks[idx_osd][\u0027bs_db_partition_num\u0027] \u003d \\"},{"line_number":295,"context_line":"                disks[idx_db][\u0027bs_db_partition_num\u0027]"},{"line_number":296,"context_line":"            disks[idx_osd][\u0027bs_db_label\u0027] \u003d disks[idx_db][\u0027bs_db_label\u0027]"},{"line_number":297,"context_line":"            disks[idx_db][\u0027partition_usage\u0027] \u003d \u0027\u0027"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        final[\u0027fs_uuid\u0027] \u003d disks[idx_osd][\u0027fs_uuid\u0027]"},{"line_number":300,"context_line":"        final[\u0027fs_label\u0027] \u003d disks[idx_osd][\u0027fs_label\u0027]"},{"line_number":301,"context_line":"        final[\u0027bs_blk_device\u0027] \u003d disks[idx_osd][\u0027bs_blk_device\u0027]"},{"line_number":302,"context_line":"        final[\u0027bs_blk_label\u0027] \u003d disks[idx_osd][\u0027bs_blk_label\u0027]"},{"line_number":303,"context_line":"        final[\u0027bs_blk_partition_num\u0027] \u003d disks[idx_osd][\u0027bs_blk_partition_num\u0027]"},{"line_number":304,"context_line":"        final[\u0027bs_db_device\u0027] \u003d disks[idx_osd][\u0027bs_db_device\u0027]"},{"line_number":305,"context_line":"        final[\u0027bs_db_partition_num\u0027] \u003d disks[idx_osd][\u0027bs_db_partition_num\u0027]"},{"line_number":306,"context_line":"        final[\u0027bs_db_label\u0027] \u003d disks[idx_osd][\u0027bs_db_label\u0027]"},{"line_number":307,"context_line":"        final[\u0027bs_wal_device\u0027] \u003d disks[idx_osd][\u0027bs_wal_device\u0027]"},{"line_number":308,"context_line":"        final[\u0027bs_wal_partition_num\u0027] \u003d disks[idx_osd][\u0027bs_wal_partition_num\u0027]"},{"line_number":309,"context_line":"        final[\u0027bs_wal_label\u0027] \u003d disks[idx_osd][\u0027bs_wal_label\u0027]"},{"line_number":310,"context_line":"        final[\u0027device\u0027] \u003d disks[idx_osd][\u0027device\u0027]"},{"line_number":311,"context_line":"        final[\u0027partition\u0027] \u003d disks[idx_osd][\u0027partition\u0027]"},{"line_number":312,"context_line":"        final[\u0027partition_label\u0027] \u003d disks[idx_osd][\u0027partition_label\u0027]"},{"line_number":313,"context_line":"        final[\u0027partition_num\u0027] \u003d disks[idx_osd][\u0027partition_num\u0027]"},{"line_number":314,"context_line":"        final[\u0027external_journal\u0027] \u003d False"},{"line_number":315,"context_line":"        final[\u0027journal\u0027] \u003d \u0027\u0027"},{"line_number":316,"context_line":"        final[\u0027journal_device\u0027] \u003d \u0027\u0027"},{"line_number":317,"context_line":"        final[\u0027journal_num\u0027] \u003d 0"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        info.append(final)"},{"line_number":320,"context_line":"        disks[idx_osd][\u0027partition_usage\u0027] \u003d \u0027\u0027"},{"line_number":321,"context_line":"        osd_id +\u003d 1"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    return info"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":2,"id":"588f5b9e_52d640bb","line":323,"range":{"start_line":252,"start_character":0,"end_line":323,"end_character":15},"in_reply_to":"6ce9bd99_e4384cc5","updated":"2025-05-24 09:06:32.000000000","message":"Acknowledged","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"}],"docker/swift/swift-account/extend_start.sh":[{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"8b40e9c26620ceb29a8ec54a43acbf17c04a0967","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"exec sudo --chown swift:swift find /srv/node/ -maxdepth 1 -type d -execdir chown swift:swift {} \\;"}],"source_content_type":"text/x-sh","patch_set":2,"id":"4c25b6ef_dc10e1a4","line":3,"range":{"start_line":1,"start_character":0,"end_line":3,"end_character":98},"updated":"2025-05-22 09:26:17.000000000","message":"Why is this needed ? if swift in container is running under swift user ?","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"f3b5092ff214b83b868562b69ac550842d6ef4a8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"exec sudo --chown swift:swift find /srv/node/ -maxdepth 1 -type d -execdir chown swift:swift {} \\;"}],"source_content_type":"text/x-sh","patch_set":2,"id":"36044714_2e592536","line":3,"range":{"start_line":1,"start_character":0,"end_line":3,"end_character":98},"in_reply_to":"4c25b6ef_dc10e1a4","updated":"2025-05-24 09:05:41.000000000","message":"Acknowledged","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"}],"docker/swift/swift-base/Dockerfile.j2":[{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"8b40e9c26620ceb29a8ec54a43acbf17c04a0967","unresolved":true,"context_lines":[{"line_number":19,"context_line":"{% endif %}"},{"line_number":20,"context_line":"{{ macros.install_packages(swift_pkgs | customizable(\"packages\")) }}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"COPY --chown\u003dswift:swift swift-base-archive/ /swift-base-source"},{"line_number":23,"context_line":"COPY --chmod\u003d440 swift_sudoers /etc/sudoers.d/kolla_swift_sudoers"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"{% set swift_pip \u003d [\u0027/swift\u0027] %}"}],"source_content_type":"text/x-jinja2","patch_set":2,"id":"754650c2_72fe86c9","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":63},"updated":"2025-05-22 09:26:17.000000000","message":"why swift user ?","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"a750be1f0b738f57c8d896fc5176638278b022bb","unresolved":false,"context_lines":[{"line_number":19,"context_line":"{% endif %}"},{"line_number":20,"context_line":"{{ macros.install_packages(swift_pkgs | customizable(\"packages\")) }}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"COPY --chown\u003dswift:swift swift-base-archive/ /swift-base-source"},{"line_number":23,"context_line":"COPY --chmod\u003d440 swift_sudoers /etc/sudoers.d/kolla_swift_sudoers"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"{% set swift_pip \u003d [\u0027/swift\u0027] %}"}],"source_content_type":"text/x-jinja2","patch_set":2,"id":"ae0a64d1_7ff7691b","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":63},"in_reply_to":"754650c2_72fe86c9","updated":"2025-05-24 09:05:50.000000000","message":"Acknowledged","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"8b40e9c26620ceb29a8ec54a43acbf17c04a0967","unresolved":true,"context_lines":[{"line_number":23,"context_line":"COPY --chmod\u003d440 swift_sudoers /etc/sudoers.d/kolla_swift_sudoers"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"{% set swift_pip \u003d [\u0027/swift\u0027] %}"},{"line_number":26,"context_line":"{{ macros.install_pip(swift_pip | customizable(\"pip_packages\")) }}"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"RUN ln -s swift-base-source/* swift \\"},{"line_number":29,"context_line":"    \u0026\u0026 mkdir -p /etc/swift /opt/swift /var/cache/swift /var/lock/swift /var/lib/swift/lock /var/log/kolla/swift \\"}],"source_content_type":"text/x-jinja2","patch_set":2,"id":"3b23e27b_74741854","line":26,"updated":"2025-05-22 09:26:17.000000000","message":"ditto","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"8b40e9c26620ceb29a8ec54a43acbf17c04a0967","unresolved":true,"context_lines":[{"line_number":23,"context_line":"COPY --chmod\u003d440 swift_sudoers /etc/sudoers.d/kolla_swift_sudoers"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"{% set swift_pip \u003d [\u0027/swift\u0027] %}"},{"line_number":26,"context_line":"{{ macros.install_pip(swift_pip | customizable(\"pip_packages\")) }}"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"RUN ln -s swift-base-source/* swift \\"},{"line_number":29,"context_line":"    \u0026\u0026 mkdir -p /etc/swift /opt/swift /var/cache/swift /var/lock/swift /var/lib/swift/lock /var/log/kolla/swift \\"}],"source_content_type":"text/x-jinja2","patch_set":2,"id":"4c279548_0e9296d6","line":26,"range":{"start_line":26,"start_character":22,"end_line":26,"end_character":31},"updated":"2025-05-22 09:26:17.000000000","message":"swift_base_pip_packages ?","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"d5c82fffb5646d3e990905b234af458b187ac94a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"COPY --chmod\u003d440 swift_sudoers /etc/sudoers.d/kolla_swift_sudoers"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"{% set swift_pip \u003d [\u0027/swift\u0027] %}"},{"line_number":26,"context_line":"{{ macros.install_pip(swift_pip | customizable(\"pip_packages\")) }}"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"RUN ln -s swift-base-source/* swift \\"},{"line_number":29,"context_line":"    \u0026\u0026 mkdir -p /etc/swift /opt/swift /var/cache/swift /var/lock/swift /var/lib/swift/lock /var/log/kolla/swift \\"}],"source_content_type":"text/x-jinja2","patch_set":2,"id":"ac22a2f1_1c05cbc6","line":26,"in_reply_to":"3b23e27b_74741854","updated":"2025-05-24 09:05:59.000000000","message":"Acknowledged","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"7683e740efb006af85b0e6f5e77ff6ecc458539e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"COPY --chmod\u003d440 swift_sudoers /etc/sudoers.d/kolla_swift_sudoers"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"{% set swift_pip \u003d [\u0027/swift\u0027] %}"},{"line_number":26,"context_line":"{{ macros.install_pip(swift_pip | customizable(\"pip_packages\")) }}"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"RUN ln -s swift-base-source/* swift \\"},{"line_number":29,"context_line":"    \u0026\u0026 mkdir -p /etc/swift /opt/swift /var/cache/swift /var/lock/swift /var/lib/swift/lock /var/log/kolla/swift \\"}],"source_content_type":"text/x-jinja2","patch_set":2,"id":"4a1a327e_45499ea0","line":26,"range":{"start_line":26,"start_character":22,"end_line":26,"end_character":31},"in_reply_to":"4c279548_0e9296d6","updated":"2025-05-24 09:06:06.000000000","message":"Acknowledged","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"d2b0881f7058ac8856825baf69f8685d97464c3f","unresolved":true,"context_lines":[{"line_number":15,"context_line":"ADD swift-base-archive /swift-base-source"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"{% if base_package_type \u003d\u003d \u0027rpm\u0027 %}"},{"line_number":18,"context_line":"  {% set swift_base_packages \u003d [\u0027liberasurecode-devel\u0027, \u0027nmap-ncat\u0027, \u0027rsync\u0027] %}"},{"line_number":19,"context_line":"{% else %}"},{"line_number":20,"context_line":"  {% set swift_base_packages \u003d [\u0027liberasurecode-dev\u0027, \u0027netcat-openbsd\u0027, \u0027rsync\u0027] %}"},{"line_number":21,"context_line":"{% endif %}"}],"source_content_type":"text/x-jinja2","patch_set":14,"id":"266db4a2_f224f7d8","line":18,"updated":"2025-10-24 15:24:32.000000000","message":"Don\u0027t you need that for EC?","commit_id":"a097d9bc9b00497fd899b3d12386f6b35abea54c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"3e438af08cb7db6e46cd32bc50aacd78b8c6f88f","unresolved":true,"context_lines":[{"line_number":15,"context_line":"ADD swift-base-archive /swift-base-source"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"{% if base_package_type \u003d\u003d \u0027rpm\u0027 %}"},{"line_number":18,"context_line":"  {% set swift_base_packages \u003d [\u0027liberasurecode-devel\u0027, \u0027nmap-ncat\u0027, \u0027rsync\u0027] %}"},{"line_number":19,"context_line":"{% else %}"},{"line_number":20,"context_line":"  {% set swift_base_packages \u003d [\u0027liberasurecode-dev\u0027, \u0027netcat-openbsd\u0027, \u0027rsync\u0027] %}"},{"line_number":21,"context_line":"{% endif %}"}],"source_content_type":"text/x-jinja2","patch_set":14,"id":"8bbae645_78694169","line":18,"in_reply_to":"266db4a2_f224f7d8","updated":"2025-10-24 16:59:25.000000000","message":"Hi Michal\n\nThanks for pointing that out. I checked and it looks like liberasurecode-devel is not currently available in the official repos for Rocky Linux 10 (or RHEL10) at the moment.\n\nSince our target build on Rocky 10 is more important right now, I’ve temporarily ignored the package in the RPM branch so that the build for Rocky 10 can proceed.\n\nIf we decide we still need EC support for RHEL/Rocky10, we can instead use the upstream source from liberasurecode (https://github.com/openstack/liberasurecode\n) and build it manually in the Dockerfile rather than relying on a repo package.\n\nDo you have any better recommendation / preferred approach for RHEL/Rocky10 for EC support?","commit_id":"a097d9bc9b00497fd899b3d12386f6b35abea54c"},{"author":{"_account_id":37509,"name":"Mostafa Salari","display_name":"Mosal","email":"msgm68@gmail.com","username":"msgm68"},"change_message_id":"3ca9efa9489879679b6b395594d757720b27c794","unresolved":true,"context_lines":[{"line_number":15,"context_line":"ADD swift-base-archive /swift-base-source"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"{% if base_package_type \u003d\u003d \u0027rpm\u0027 %}"},{"line_number":18,"context_line":"  {% set swift_base_packages \u003d [\u0027liberasurecode-devel\u0027, \u0027nmap-ncat\u0027, \u0027rsync\u0027] %}"},{"line_number":19,"context_line":"{% else %}"},{"line_number":20,"context_line":"  {% set swift_base_packages \u003d [\u0027liberasurecode-dev\u0027, \u0027netcat-openbsd\u0027, \u0027rsync\u0027] %}"},{"line_number":21,"context_line":"{% endif %}"}],"source_content_type":"text/x-jinja2","patch_set":14,"id":"e1ba9fc7_c0a5c566","line":18,"in_reply_to":"8bbae645_78694169","updated":"2025-11-01 11:39:08.000000000","message":"Dear Michal\nPlease Note that both the deprecated swift role (and the current one) does not support erasure coding.\nsupporting EC requires to:\n* config and start object-reconstructor \n#(Recall: the deprecated swift role did not support 4 services, ine of them was object-reconstructor)\n* Adding variables,... for swift storage policy \n* Making swift.conf.j2 suitable for taht\n* ...\n\nWe are considering adding  EC support after the first merge of the role.","commit_id":"a097d9bc9b00497fd899b3d12386f6b35abea54c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"2d56eb5ffb9a71747383bbe499acfbe7cb40c336","unresolved":false,"context_lines":[{"line_number":15,"context_line":"ADD swift-base-archive /swift-base-source"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"{% if base_package_type \u003d\u003d \u0027rpm\u0027 %}"},{"line_number":18,"context_line":"  {% set swift_base_packages \u003d [\u0027liberasurecode-devel\u0027, \u0027nmap-ncat\u0027, \u0027rsync\u0027] %}"},{"line_number":19,"context_line":"{% else %}"},{"line_number":20,"context_line":"  {% set swift_base_packages \u003d [\u0027liberasurecode-dev\u0027, \u0027netcat-openbsd\u0027, \u0027rsync\u0027] %}"},{"line_number":21,"context_line":"{% endif %}"}],"source_content_type":"text/x-jinja2","patch_set":14,"id":"b08c358d_1cfd234e","line":18,"in_reply_to":"e1ba9fc7_c0a5c566","updated":"2025-12-11 08:01:00.000000000","message":"Acknowledged","commit_id":"a097d9bc9b00497fd899b3d12386f6b35abea54c"}],"docker/swift/swift-base/swift_sudoers":[{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"8b40e9c26620ceb29a8ec54a43acbf17c04a0967","unresolved":true,"context_lines":[{"line_number":1,"context_line":"swift ALL\u003d(root) NOPASSWD: /bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"},{"line_number":2,"context_line":"swift ALL\u003d(root) NOPASSWD: /usr/bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"4bdce9b7_01e865d4","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":99},"updated":"2025-05-22 09:26:17.000000000","message":"do we need this ? if all container processes runs under swfit user ? why /srv/node/FILES are saved as different user ?","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"131ac23c59fc1f8387c9905fe1b03503f4e8c428","unresolved":true,"context_lines":[{"line_number":1,"context_line":"swift ALL\u003d(root) NOPASSWD: /bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"},{"line_number":2,"context_line":"swift ALL\u003d(root) NOPASSWD: /usr/bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1339bdf5_8295f3cd","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":99},"in_reply_to":"0a3649bd_c105c2ee","updated":"2025-05-24 08:41:45.000000000","message":"yeah, but in kolla-ansible you can use config.json to set permissions inside the container using kolla-set-configs, can\u0027t you ? \n\nhttps://github.com/openstack/kolla/blob/master/docker/base/sudoers\n\nis additional sudoer file for swift really needed ?","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"42871a3ff5fabd5692a45bf89e842cca305817e7","unresolved":true,"context_lines":[{"line_number":1,"context_line":"swift ALL\u003d(root) NOPASSWD: /bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"},{"line_number":2,"context_line":"swift ALL\u003d(root) NOPASSWD: /usr/bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"d034a927_d5e1221c","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":99},"in_reply_to":"1339bdf5_8295f3cd","updated":"2025-05-24 09:35:52.000000000","message":"I\u0027ve seen config.json used in Kolla-Ansible, mostly for setting permissions on config and log files. Given that Swift needs to chown disk data at runtime, wouldn\u0027t a sudo rule be more reliable in this case? Or do you still recommend using kolla-set-config instead?","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"c0d17fd18bca5c9ccfe0ee40d0023b02bd28284c","unresolved":true,"context_lines":[{"line_number":1,"context_line":"swift ALL\u003d(root) NOPASSWD: /bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"},{"line_number":2,"context_line":"swift ALL\u003d(root) NOPASSWD: /usr/bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"93406a6e_e794b1c6","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":99},"in_reply_to":"16dfd3d8_d00c082e","updated":"2025-05-24 11:45:37.000000000","message":"Thanks a lot for the review! I\u0027ve addressed your comments and uploaded a new patchset. Really appreciate your time.","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"e7425f8883a283d0e83905d15b10ce083bac5ad3","unresolved":true,"context_lines":[{"line_number":1,"context_line":"swift ALL\u003d(root) NOPASSWD: /bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"},{"line_number":2,"context_line":"swift ALL\u003d(root) NOPASSWD: /usr/bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"1caba542_b0b5898b","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":99},"in_reply_to":"16e42914_7ac52acd","updated":"2025-05-24 10:35:11.000000000","message":"The /srv/node path contains the actual disks used by Swift. These directories are often prepared manually by the admin on the host and are typically not owned by the swift user (UID 42445) by default. That’s why Swift containers need to take ownership of the disk data at runtime — to ensure they have proper read/write access during operation.","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"228189c2ad0ac72da2c835556f20c92825fcb038","unresolved":true,"context_lines":[{"line_number":1,"context_line":"swift ALL\u003d(root) NOPASSWD: /bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"},{"line_number":2,"context_line":"swift ALL\u003d(root) NOPASSWD: /usr/bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"16dfd3d8_d00c082e","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":99},"in_reply_to":"1caba542_b0b5898b","updated":"2025-05-24 10:56:29.000000000","message":"okay, I got it now, thanks","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"bb3fd32127a6be328965e950c06f1362771d55ae","unresolved":true,"context_lines":[{"line_number":1,"context_line":"swift ALL\u003d(root) NOPASSWD: /bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"},{"line_number":2,"context_line":"swift ALL\u003d(root) NOPASSWD: /usr/bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"0a3649bd_c105c2ee","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":99},"in_reply_to":"4bdce9b7_01e865d4","updated":"2025-05-24 08:26:28.000000000","message":"In the swift_sudoers file, the swift user is granted permission to run a specific sudo command—changing ownership of directories under /srv/node/—without a password.\n\nSince /srv/node/ resides on the host and may be owned by root, the swift user inside the container may lack the necessary permissions to modify it. This ownership change is essential for Swift to function properly.\n\nAs noted in Kolla Ansible\u0027s security.rst, it\u0027s acceptable to allow limited sudo access for specific operations like this, without granting full root privileges. This is a controlled and secure way to handle host-mounted paths.","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"f41750e40711b60e6ce9fb3f6a391dad6ddf9dd5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"swift ALL\u003d(root) NOPASSWD: /bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"},{"line_number":2,"context_line":"swift ALL\u003d(root) NOPASSWD: /usr/bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"81faaf7c_fcba37cf","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":99},"in_reply_to":"93406a6e_e794b1c6","updated":"2025-05-24 11:45:57.000000000","message":"Acknowledged","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"97652d58019aebc6362febdafbb07330e3b4f217","unresolved":true,"context_lines":[{"line_number":1,"context_line":"swift ALL\u003d(root) NOPASSWD: /bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"},{"line_number":2,"context_line":"swift ALL\u003d(root) NOPASSWD: /usr/bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"16e42914_7ac52acd","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":99},"in_reply_to":"d034a927_d5e1221c","updated":"2025-05-24 09:47:31.000000000","message":"I just think it\u0027s unnecessary—after all, you can create /srv inside the container already with the correct swift:swift ownership... and inside, Swift can do whatever it wants...\n\nAlternatively, if you need to modify permissions after the container starts, you can use something like:\n\nFor example, for RabbitMQ:\n\n```\n\"permissions\": [\n    {\n        \"path\": \"/var/lib/rabbitmq\",\n        \"owner\": \"rabbitmq:rabbitmq\",\n        \"recurse\": true\n    },\n    {\n        \"path\": \"/var/log/kolla/rabbitmq\",\n        \"owner\": \"rabbitmq:rabbitmq\",\n        \"recurse\": true\n    }\n]\n```\n\nOr for cinder:\n\n```\n\"permissions\": [\n    {\n        \"path\": \"/var/lib/cinder\",\n        \"owner\": \"cinder:cinder\",\n        \"recurse\": true\n    },\n    {\n        \"path\": \"/var/log/kolla/cinder\",\n        \"owner\": \"cinder:cinder\",\n        \"recurse\": true\n    }\n]\n```\n\n...and others:\n\n```\nroot@controller1:/home/kolla# grep -Ri recurse /etc/kolla/\n/etc/kolla/cinder-scheduler/config.json:            \"recurse\": true\n/etc/kolla/cinder-scheduler/config.json:            \"recurse\": true\n/etc/kolla/nova-api/config.json:            \"recurse\": true\n/etc/kolla/nova-metadata/config.json:            \"recurse\": true\n/etc/kolla/ovn-controller/config.json:            \"recurse\": true\n/etc/kolla/nova-novncproxy/config.json:            \"recurse\": true\n/etc/kolla/fluentd/config.json:            \"recurse\": true\n/etc/kolla/fluentd/config.json:            \"recurse\": true\n/etc/kolla/fluentd/config.json:            \"recurse\": true\n/etc/kolla/ovn-nb-db/config.json:            \"recurse\": true\n/etc/kolla/nova-conductor/config.json:            \"recurse\": true\n/etc/kolla/placement-api/config.json:            \"recurse\": true\n/etc/kolla/ovn-northd/config.json:            \"recurse\": true\n/etc/kolla/redis/config.json:            \"recurse\": true\n/etc/kolla/nova-scheduler/config.json:            \"recurse\": true\n/etc/kolla/ovn-sb-db-relay-1/config.json:            \"recurse\": true\n/etc/kolla/glance-api/config.json:            \"recurse\": true\n/etc/kolla/glance-api/config.json:            \"recurse\": true\n/etc/kolla/neutron-server/config.json:            \"recurse\": true\n/etc/kolla/ovn-sb-db/config.json:            \"recurse\": true\n/etc/kolla/rabbitmq/config.json:            \"recurse\": true\n/etc/kolla/rabbitmq/config.json:            \"recurse\": true\n/etc/kolla/heat-engine/config.json:            \"recurse\": true\n/etc/kolla/cinder-api/config.json:            \"recurse\": true\n/etc/kolla/cinder-api/config.json:            \"recurse\": true\n/etc/kolla/octavia-api/config.json:            \"recurse\": true\n/etc/kolla/cinder-volume/config.json:            \"recurse\": true\n/etc/kolla/cinder-volume/config.json:            \"recurse\": true\n/etc/kolla/heat-api/config.json:            \"recurse\": true\n/etc/kolla/redis-sentinel/config.json:            \"recurse\": true\n/etc/kolla/mariadb/config.json:            \"recurse\": true\n/etc/kolla/mariadb/config.json:            \"recurse\": true\n/etc/kolla/heat-api-cfn/config.json:            \"recurse\": true\n/etc/kolla/neutron-ovn-metadata-agent/config.json:            \"recurse\": true\n/etc/kolla/neutron-ovn-metadata-agent/config.json:            \"recurse\": true\n```\n\nIf Swift already has /srv owned by swift:swift at the container level, and Swift is the only process writing there—why waste time with chown? What\u0027s the point? I don’t know Swift that well—I\u0027m asking you for arguments, I\u0027ve given mine.","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"a46a4a9d626b4ac1095ad5caf3ccad6dc37cc0c6","unresolved":true,"context_lines":[{"line_number":1,"context_line":"swift ALL\u003d(root) NOPASSWD: /bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"},{"line_number":2,"context_line":"swift ALL\u003d(root) NOPASSWD: /usr/bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"b83607df_ce517538","line":2,"updated":"2025-09-08 07:04:49.000000000","message":"missing newline at the end","commit_id":"e3c4a6c11137f6a86ab4bd35ddf46b83c8add4c2"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"a980708f9faf47d744f34e8c3b276327604ed96f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"swift ALL\u003d(root) NOPASSWD: /bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"},{"line_number":2,"context_line":"swift ALL\u003d(root) NOPASSWD: /usr/bin/find /srv/node/ -maxdepth 1 -type d -execdir chown swift\\:swift {} \\\\+"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"ff71af2f_7f5c6889","line":2,"in_reply_to":"b83607df_ce517538","updated":"2025-09-22 12:32:14.000000000","message":"Acknowledged","commit_id":"e3c4a6c11137f6a86ab4bd35ddf46b83c8add4c2"}],"docker/swift/swift-container/extend_start.sh":[{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"8b40e9c26620ceb29a8ec54a43acbf17c04a0967","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"exec sudo --chown swift:swift find /srv/node/ -maxdepth 1 -type d -execdir chown swift:swift {} \\;"}],"source_content_type":"text/x-sh","patch_set":2,"id":"087e8a31_9a6ae529","line":3,"range":{"start_line":1,"start_character":0,"end_line":3,"end_character":98},"updated":"2025-05-22 09:26:17.000000000","message":"ditto","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"aaee1ed05e482c83a535185fee8a77e86476ea0a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"exec sudo --chown swift:swift find /srv/node/ -maxdepth 1 -type d -execdir chown swift:swift {} \\;"}],"source_content_type":"text/x-sh","patch_set":2,"id":"bfe77441_6892c6c9","line":3,"range":{"start_line":1,"start_character":0,"end_line":3,"end_character":98},"in_reply_to":"087e8a31_9a6ae529","updated":"2025-05-24 09:06:20.000000000","message":"Acknowledged","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"}],"docker/swift/swift-object-expirer/extend_start.sh":[{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"8b40e9c26620ceb29a8ec54a43acbf17c04a0967","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"exec sudo --chown swift:swift find /srv/node/ -maxdepth 1 -type d -execdir chown swift:swift {} \\;"}],"source_content_type":"text/x-sh","patch_set":2,"id":"ee243c55_15123dc2","line":3,"range":{"start_line":1,"start_character":0,"end_line":3,"end_character":98},"updated":"2025-05-22 09:26:17.000000000","message":"ditto","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"84b197c96d68b7c91f4c4010731d82993e47efa4","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"exec sudo --chown swift:swift find /srv/node/ -maxdepth 1 -type d -execdir chown swift:swift {} \\;"}],"source_content_type":"text/x-sh","patch_set":2,"id":"1137a76c_16a52546","line":3,"range":{"start_line":1,"start_character":0,"end_line":3,"end_character":98},"in_reply_to":"ee243c55_15123dc2","updated":"2025-05-24 09:06:13.000000000","message":"Acknowledged","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"}],"docker/swift/swift-object/extend_start.sh":[{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"8b40e9c26620ceb29a8ec54a43acbf17c04a0967","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"exec sudo --chown swift:swift find /srv/node/ -maxdepth 1 -type d -execdir chown swift:swift {} \\;"}],"source_content_type":"text/x-sh","patch_set":2,"id":"df240675_84047187","line":3,"range":{"start_line":1,"start_character":0,"end_line":3,"end_character":98},"updated":"2025-05-22 09:26:17.000000000","message":"ditto","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"fae0f943f43c621605140079fd9b7908893afdb2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"exec sudo --chown swift:swift find /srv/node/ -maxdepth 1 -type d -execdir chown swift:swift {} \\;"}],"source_content_type":"text/x-sh","patch_set":2,"id":"fac7a978_5c8e20c3","line":3,"range":{"start_line":1,"start_character":0,"end_line":3,"end_character":98},"in_reply_to":"df240675_84047187","updated":"2025-05-24 09:07:04.000000000","message":"Acknowledged","commit_id":"828cf0f3aec0a6951d1a1c17a4c4aa04363f181c"}],"docker/swift/swift-rsyncd/Dockerfile.j2":[{"author":{"_account_id":37509,"name":"Mostafa Salari","display_name":"Mosal","email":"msgm68@gmail.com","username":"msgm68"},"change_message_id":"e076a0936b1162abcd51ec96ac5cd9642659524e","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"{% block footer %}{% endblock %}"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"USER root"}],"source_content_type":"text/x-jinja2","patch_set":11,"id":"53932c93_3824ced0","line":21,"updated":"2025-09-24 05:56:25.000000000","message":"Why do we have to use the root user? Is there no other way?","commit_id":"0942142369600feb1b80b2b479e42ecd79839a63"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"4112edbdf52c66360e9a3b264b9fc48fdf6a6520","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"{% block footer %}{% endblock %}"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"USER root"}],"source_content_type":"text/x-jinja2","patch_set":11,"id":"6afad9f7_9cc8dbf2","line":21,"in_reply_to":"53932c93_3824ced0","updated":"2025-12-09 13:08:08.000000000","message":"Fixed","commit_id":"0942142369600feb1b80b2b479e42ecd79839a63"}],"docker/swift/swift-rsyncd/extend_start.sh":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"a46a4a9d626b4ac1095ad5caf3ccad6dc37cc0c6","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"sudo find /srv/node/ -maxdepth 1 -type d -execdir chown swift:swift {} \\+"}],"source_content_type":"text/x-sh","patch_set":10,"id":"572096f4_17ad2486","line":3,"updated":"2025-09-08 07:04:49.000000000","message":"Do we really need that? if there are a lot of files in /srv/node - it\u0027s going to take ages","commit_id":"e3c4a6c11137f6a86ab4bd35ddf46b83c8add4c2"},{"author":{"_account_id":37509,"name":"Mostafa Salari","display_name":"Mosal","email":"msgm68@gmail.com","username":"msgm68"},"change_message_id":"af290fe217cb547874c6f35bc1a15f143dbf9997","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"sudo find /srv/node/ -maxdepth 1 -type d -execdir chown swift:swift {} \\+"}],"source_content_type":"text/x-sh","patch_set":10,"id":"7727a463_b41b1019","line":3,"in_reply_to":"572096f4_17ad2486","updated":"2025-09-08 08:27:36.000000000","message":"You’re right, this operation would indeed be time-consuming if the Swift disks are already full of data.\nThe intention behind this was to fix cases where those disks might have previously been owned by wrong user (e.g., if a different Swift deployment was in place earlier, or if ownership was accidentally set to root,...).\n\nHowever, it seems better to only perform a simple check in the \"precheck\" step: if the top-level directories are not owned by correct user, just fail with a proper error instead of trying to recursively change ownership.","commit_id":"e3c4a6c11137f6a86ab4bd35ddf46b83c8add4c2"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"6e9f724254c8b6912d1e2a8fa05c6d2bce36321e","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"sudo find /srv/node/ -maxdepth 1 -type d -execdir chown swift:swift {} \\+"}],"source_content_type":"text/x-sh","patch_set":10,"id":"bdafff06_dae90fc8","line":3,"in_reply_to":"7727a463_b41b1019","updated":"2025-09-22 12:30:28.000000000","message":"I appreciate the caution. I\u0027ve re-evaluated the command and can confirm it\u0027s safe.\n\nThe key is (-maxdepth 1), which makes the find command non-recursive. It only changes ownership of the top-level directories (the mount points) under /srv/node/, not the millions of files inside them. The operation is nearly instantaneous and prevents ownership issues.","commit_id":"e3c4a6c11137f6a86ab4bd35ddf46b83c8add4c2"},{"author":{"_account_id":37855,"name":"Amir Hossein Ahmadi","display_name":"Amir Hossein","email":"sahahmadi96@gmail.com","username":"amir58118"},"change_message_id":"01ff2afd6baa906735875523c4d2f9f4f986c09c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/bash"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"sudo find /srv/node/ -maxdepth 1 -type d -execdir chown swift:swift {} \\+"}],"source_content_type":"text/x-sh","patch_set":10,"id":"a2c3fc81_e27cbe6d","line":3,"in_reply_to":"bdafff06_dae90fc8","updated":"2025-09-23 13:24:49.000000000","message":"Acknowledged","commit_id":"e3c4a6c11137f6a86ab4bd35ddf46b83c8add4c2"}]}
