)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"859ce7beaa5342afa6271d2e2975c9c4d3d1e65c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"2f158266_b16a5c4f","updated":"2026-03-25 06:49:54.000000000","message":"Removing review priority, please address reviews to get it back to review priority.","commit_id":"d4852f6053327b8c25bd30ffee2ca2ad3002c701"}],"ansible/library/kolla_container_facts.py":[{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"ab3fb8419670c33204f3316ab2a950440c0f7c5a","unresolved":true,"context_lines":[{"line_number":89,"context_line":"      kolla_container_facts:"},{"line_number":90,"context_line":"        container_engine: docker"},{"line_number":91,"context_line":"        action: get_volumes"},{"line_number":92,"context_line":"      args:"},{"line_number":93,"context_line":"        labels:"},{"line_number":94,"context_line":"          kolla_managed: \"true\""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    - name: Gather all volume facts"},{"line_number":97,"context_line":"      kolla_container_facts:"}],"source_content_type":"text/x-python","patch_set":3,"id":"186d53e9_c1365385","line":94,"range":{"start_line":92,"start_character":0,"end_line":94,"end_character":31},"updated":"2025-04-15 14:16:06.000000000","message":"```suggestion\n        args:\n          labels:\n            kolla_managed: \"true\"\n```\n\nIndentation should be one deeper.","commit_id":"25f886aca7fe55d3a6f36a51e9d03a3c02f51328"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"fdcf438e82e9ee6c93738360eb280beb3e5ff1cb","unresolved":false,"context_lines":[{"line_number":89,"context_line":"      kolla_container_facts:"},{"line_number":90,"context_line":"        container_engine: docker"},{"line_number":91,"context_line":"        action: get_volumes"},{"line_number":92,"context_line":"      args:"},{"line_number":93,"context_line":"        labels:"},{"line_number":94,"context_line":"          kolla_managed: \"true\""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    - name: Gather all volume facts"},{"line_number":97,"context_line":"      kolla_container_facts:"}],"source_content_type":"text/x-python","patch_set":3,"id":"74cc0306_7fc5e3ba","line":94,"range":{"start_line":92,"start_character":0,"end_line":94,"end_character":31},"in_reply_to":"186d53e9_c1365385","updated":"2025-04-17 07:58:23.000000000","message":"Done","commit_id":"25f886aca7fe55d3a6f36a51e9d03a3c02f51328"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"ab3fb8419670c33204f3316ab2a950440c0f7c5a","unresolved":true,"context_lines":[{"line_number":187,"context_line":"        names \u003d self.params.get(\u0027name\u0027)"},{"line_number":188,"context_line":"        labels \u003d self.params.get(\u0027args\u0027, {}).get(\u0027labels\u0027, {})"},{"line_number":189,"context_line":"        self.result[\u0027volumes\u0027] \u003d dict()"},{"line_number":190,"context_line":"        self.module.warn(f\"Labels: {labels}\")"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        if isinstance(names, str):"},{"line_number":193,"context_line":"            names \u003d [names]"}],"source_content_type":"text/x-python","patch_set":3,"id":"a97e0091_b8ab9293","line":190,"updated":"2025-04-15 14:16:06.000000000","message":"Leftover debugging?","commit_id":"25f886aca7fe55d3a6f36a51e9d03a3c02f51328"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"fdcf438e82e9ee6c93738360eb280beb3e5ff1cb","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        names \u003d self.params.get(\u0027name\u0027)"},{"line_number":188,"context_line":"        labels \u003d self.params.get(\u0027args\u0027, {}).get(\u0027labels\u0027, {})"},{"line_number":189,"context_line":"        self.result[\u0027volumes\u0027] \u003d dict()"},{"line_number":190,"context_line":"        self.module.warn(f\"Labels: {labels}\")"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        if isinstance(names, str):"},{"line_number":193,"context_line":"            names \u003d [names]"}],"source_content_type":"text/x-python","patch_set":3,"id":"33dab795_1d5ca6b3","line":190,"in_reply_to":"a97e0091_b8ab9293","updated":"2025-04-17 07:58:23.000000000","message":"Done","commit_id":"25f886aca7fe55d3a6f36a51e9d03a3c02f51328"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"ab3fb8419670c33204f3316ab2a950440c0f7c5a","unresolved":true,"context_lines":[{"line_number":192,"context_line":"        if isinstance(names, str):"},{"line_number":193,"context_line":"            names \u003d [names]"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        filters \u003d {}"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        if labels:"},{"line_number":198,"context_line":"            if isinstance(labels, dict):"}],"source_content_type":"text/x-python","patch_set":3,"id":"e38ff0db_6eb728f7","line":195,"range":{"start_line":195,"start_character":8,"end_line":195,"end_character":20},"updated":"2025-04-15 14:16:06.000000000","message":"hypothetical: When unser doesn\u0027t supply any filters, and you pass an empty dict to the list function. Will it match all volumes or no volumes?","commit_id":"25f886aca7fe55d3a6f36a51e9d03a3c02f51328"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"fdcf438e82e9ee6c93738360eb280beb3e5ff1cb","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        if isinstance(names, str):"},{"line_number":193,"context_line":"            names \u003d [names]"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        filters \u003d {}"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        if labels:"},{"line_number":198,"context_line":"            if isinstance(labels, dict):"}],"source_content_type":"text/x-python","patch_set":3,"id":"645a49e0_b99a9dde","line":195,"range":{"start_line":195,"start_character":8,"end_line":195,"end_character":20},"in_reply_to":"d6624743_1bdee14c","updated":"2025-04-17 07:58:23.000000000","message":"Ok","commit_id":"25f886aca7fe55d3a6f36a51e9d03a3c02f51328"},{"author":{"_account_id":37726,"name":"Marek Buch","display_name":"marekbuch","email":"marek.buch@tietoevry.com","username":"marekbuch"},"change_message_id":"6ae2fa980f902592b4783068abf1c117b0e79d90","unresolved":true,"context_lines":[{"line_number":192,"context_line":"        if isinstance(names, str):"},{"line_number":193,"context_line":"            names \u003d [names]"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        filters \u003d {}"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        if labels:"},{"line_number":198,"context_line":"            if isinstance(labels, dict):"}],"source_content_type":"text/x-python","patch_set":3,"id":"d6624743_1bdee14c","line":195,"range":{"start_line":195,"start_character":8,"end_line":195,"end_character":20},"in_reply_to":"e38ff0db_6eb728f7","updated":"2025-04-16 08:05:32.000000000","message":"When the user doesn\u0027t supply any filters all volumes will be matched.","commit_id":"25f886aca7fe55d3a6f36a51e9d03a3c02f51328"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"ab3fb8419670c33204f3316ab2a950440c0f7c5a","unresolved":true,"context_lines":[{"line_number":197,"context_line":"        if labels:"},{"line_number":198,"context_line":"            if isinstance(labels, dict):"},{"line_number":199,"context_line":"                filters[\u0027label\u0027] \u003d [f\"{k}\u003d{v}\" for k, v in labels.items()]"},{"line_number":200,"context_line":"            elif isinstance(labels, str):"},{"line_number":201,"context_line":"                filters[\u0027label\u0027] \u003d [labels]"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        volumes \u003d self.client.volumes.list(filters\u003dfilters)"},{"line_number":204,"context_line":"        for volume in volumes:"}],"source_content_type":"text/x-python","patch_set":3,"id":"b26e4734_84cd9cfc","line":201,"range":{"start_line":200,"start_character":0,"end_line":201,"end_character":43},"updated":"2025-04-15 14:16:06.000000000","message":"According to the `args_spec` - `labels` have to be a dict. Is the elif statement necessary then?","commit_id":"25f886aca7fe55d3a6f36a51e9d03a3c02f51328"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"fdcf438e82e9ee6c93738360eb280beb3e5ff1cb","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        if labels:"},{"line_number":198,"context_line":"            if isinstance(labels, dict):"},{"line_number":199,"context_line":"                filters[\u0027label\u0027] \u003d [f\"{k}\u003d{v}\" for k, v in labels.items()]"},{"line_number":200,"context_line":"            elif isinstance(labels, str):"},{"line_number":201,"context_line":"                filters[\u0027label\u0027] \u003d [labels]"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        volumes \u003d self.client.volumes.list(filters\u003dfilters)"},{"line_number":204,"context_line":"        for volume in volumes:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3757cdae_26e47012","line":201,"range":{"start_line":200,"start_character":0,"end_line":201,"end_character":43},"in_reply_to":"b26e4734_84cd9cfc","updated":"2025-04-17 07:58:23.000000000","message":"Done","commit_id":"25f886aca7fe55d3a6f36a51e9d03a3c02f51328"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"ab3fb8419670c33204f3316ab2a950440c0f7c5a","unresolved":true,"context_lines":[{"line_number":252,"context_line":"            required\u003dFalse,"},{"line_number":253,"context_line":"            default\u003d{},"},{"line_number":254,"context_line":"            options\u003ddict("},{"line_number":255,"context_line":"                labels\u003ddict(required\u003dFalse, type\u003d\u0027dict\u0027),"},{"line_number":256,"context_line":"            )"},{"line_number":257,"context_line":"        )"},{"line_number":258,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":3,"id":"08eddeed_9392ea07","line":255,"updated":"2025-04-15 14:16:06.000000000","message":"In the future, there might be multiple resources that can have labels, like containers or images. How about changing it to `volume_labels` ?","commit_id":"25f886aca7fe55d3a6f36a51e9d03a3c02f51328"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"fdcf438e82e9ee6c93738360eb280beb3e5ff1cb","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            required\u003dFalse,"},{"line_number":253,"context_line":"            default\u003d{},"},{"line_number":254,"context_line":"            options\u003ddict("},{"line_number":255,"context_line":"                labels\u003ddict(required\u003dFalse, type\u003d\u0027dict\u0027),"},{"line_number":256,"context_line":"            )"},{"line_number":257,"context_line":"        )"},{"line_number":258,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":3,"id":"1173498a_863a171d","line":255,"in_reply_to":"08eddeed_9392ea07","updated":"2025-04-17 07:58:23.000000000","message":"Done","commit_id":"25f886aca7fe55d3a6f36a51e9d03a3c02f51328"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"fdcf438e82e9ee6c93738360eb280beb3e5ff1cb","unresolved":true,"context_lines":[{"line_number":85,"context_line":"          - glance_api"},{"line_number":86,"context_line":"        action: get_volumes"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    - name: Gather kolla volume facts"},{"line_number":89,"context_line":"      kolla_container_facts:"},{"line_number":90,"context_line":"        container_engine: docker"},{"line_number":91,"context_line":"        action: get_volumes"}],"source_content_type":"text/x-python","patch_set":4,"id":"acb15cd8_339e31e2","line":88,"range":{"start_line":88,"start_character":4,"end_line":88,"end_character":37},"updated":"2025-04-17 07:58:23.000000000","message":"nit: Last nit, I swear :) I feel like this is not capturing what does this task do. Maybe better would be `Gather volume facts from volumes with labels kolla_managed\u003dtrue` or something similar that fits on the line.","commit_id":"c5ac5ed92fe2c8774240ed181784a8c818aae84f"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"9396cb4223c35f11fb72618635b09dbdd6e65b7a","unresolved":false,"context_lines":[{"line_number":85,"context_line":"          - glance_api"},{"line_number":86,"context_line":"        action: get_volumes"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    - name: Gather kolla volume facts"},{"line_number":89,"context_line":"      kolla_container_facts:"},{"line_number":90,"context_line":"        container_engine: docker"},{"line_number":91,"context_line":"        action: get_volumes"}],"source_content_type":"text/x-python","patch_set":4,"id":"e797947a_6b0a5e6c","line":88,"range":{"start_line":88,"start_character":4,"end_line":88,"end_character":37},"in_reply_to":"acb15cd8_339e31e2","updated":"2025-04-23 07:24:01.000000000","message":"Done","commit_id":"c5ac5ed92fe2c8774240ed181784a8c818aae84f"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"1beb87f126f0bccba72895dd04a9b7243f0d30d1","unresolved":true,"context_lines":[{"line_number":89,"context_line":"      kolla_container_facts:"},{"line_number":90,"context_line":"        container_engine: docker"},{"line_number":91,"context_line":"        action: get_volumes"},{"line_number":92,"context_line":"        args:"},{"line_number":93,"context_line":"          volume_labels:"},{"line_number":94,"context_line":"            kolla_managed: \"true\""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"c5fa380e_10d6cda2","line":92,"updated":"2025-09-17 13:24:22.000000000","message":"Is there a reason we\u0027re sticking to args: and then a sub-dict instead of exposing that directly?","commit_id":"4a19e8d348707df2b539474c3f27ba922d5303ec"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"6ea4ecac79b80f48ea8ea27284cc8d9ae1f37714","unresolved":false,"context_lines":[{"line_number":89,"context_line":"      kolla_container_facts:"},{"line_number":90,"context_line":"        container_engine: docker"},{"line_number":91,"context_line":"        action: get_volumes"},{"line_number":92,"context_line":"        args:"},{"line_number":93,"context_line":"          volume_labels:"},{"line_number":94,"context_line":"            kolla_managed: \"true\""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9dd3c632_7352c37d","line":92,"in_reply_to":"8b1cfa82_b8d9bf41","updated":"2026-01-14 09:38:02.000000000","message":"Acknowledged","commit_id":"4a19e8d348707df2b539474c3f27ba922d5303ec"},{"author":{"_account_id":37726,"name":"Marek Buch","display_name":"marekbuch","email":"marek.buch@tietoevry.com","username":"marekbuch"},"change_message_id":"46dbe88f5c0b66fa3bf5d5b7ad8eea9b2249b858","unresolved":true,"context_lines":[{"line_number":89,"context_line":"      kolla_container_facts:"},{"line_number":90,"context_line":"        container_engine: docker"},{"line_number":91,"context_line":"        action: get_volumes"},{"line_number":92,"context_line":"        args:"},{"line_number":93,"context_line":"          volume_labels:"},{"line_number":94,"context_line":"            kolla_managed: \"true\""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"8b1cfa82_b8d9bf41","line":92,"in_reply_to":"c5fa380e_10d6cda2","updated":"2025-10-08 15:05:41.000000000","message":"I\u0027ve decided to stick to args to keep things consistent with r-krcek\u0027s merged changes. [1]\nhttps://review.opendev.org/c/openstack/kolla-ansible/+/941783 [1]","commit_id":"4a19e8d348707df2b539474c3f27ba922d5303ec"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"01b0a36786f074d0dfb6aeda2cb1329409bcd51f","unresolved":true,"context_lines":[{"line_number":189,"context_line":"    def get_volumes(self):"},{"line_number":190,"context_line":"        \"\"\"Handles when module is called with action get_volumes.\"\"\""},{"line_number":191,"context_line":"        names \u003d self.params.get(\u0027name\u0027)"},{"line_number":192,"context_line":"        labels \u003d self.params.get(\u0027volume_labels\u0027) or {}"},{"line_number":193,"context_line":"        self.result[\u0027volumes\u0027] \u003d dict()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        if isinstance(names, str):"}],"source_content_type":"text/x-python","patch_set":6,"id":"eeef8c4f_8bc18e75","line":192,"range":{"start_line":192,"start_character":8,"end_line":192,"end_character":55},"updated":"2025-10-01 18:26:33.000000000","message":"Dict.get() has method to return a default value. Is the \"or\" necessary?\n\nhttps://docs.python.org/3/library/stdtypes.html#dict.get","commit_id":"9e6a0db59a43593b3803295ccd39ff73d6fc836d"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"01b0a36786f074d0dfb6aeda2cb1329409bcd51f","unresolved":true,"context_lines":[{"line_number":198,"context_line":"        filters \u003d {}"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        if labels:"},{"line_number":201,"context_line":"            filters[\u0027label\u0027] \u003d [f\"{k}\u003d{v}\" for k, v in labels.items()]"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        volumes \u003d self.client.volumes.list(filters\u003dfilters or None)"},{"line_number":204,"context_line":"        for volume in volumes:"}],"source_content_type":"text/x-python","patch_set":6,"id":"f1ac92ce_59b163c8","line":201,"range":{"start_line":201,"start_character":12,"end_line":201,"end_character":70},"updated":"2025-10-01 18:26:33.000000000","message":"Filters can be used in the two following fashions:\n```\nsudo docker volume list --filter label\u003dcom.docker.volume.anonymous\n\n -\u003e label\u003dkey\n\nsudo docker volume list --filter label\u003dkolla_managed\u003dtrue\n\n -\u003e label\u003dkey\u003dvalue\n```\n\nNotice you can find volumes that just have the label and don\u0027t need to filter by the label\u0027s value. For futureproofing, I think these cases should be both supported by the code.","commit_id":"9e6a0db59a43593b3803295ccd39ff73d6fc836d"},{"author":{"_account_id":37306,"name":"Piotr Milewski","display_name":"Piotr Milewski","email":"vurmil@gmail.com","username":"vurmil"},"change_message_id":"c1f3dac714cc47c757186c490a60603de81cc693","unresolved":true,"context_lines":[{"line_number":198,"context_line":"        filters \u003d {}"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        if labels:"},{"line_number":201,"context_line":"            filters[\u0027label\u0027] \u003d [f\"{k}\u003d{v}\" for k, v in labels.items()]"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        volumes \u003d self.client.volumes.list(filters\u003dfilters or None)"},{"line_number":204,"context_line":"        for volume in volumes:"}],"source_content_type":"text/x-python","patch_set":6,"id":"4b042aff_07feef0e","line":201,"range":{"start_line":201,"start_character":12,"end_line":201,"end_character":70},"in_reply_to":"f1ac92ce_59b163c8","updated":"2026-01-14 17:39:29.000000000","message":"I fully agree with Roman\u0027s point. To implement this \u0027futureproofing\u0027 and support both label\u003dkey and label\u003dkey\u003dvalue formats, we can modify the list comprehension in get_volumes.\n\nIf we update the logic as follows:\nif labels:\n    filters[\u0027label\u0027] \u003d [\n        f\"{k}\u003d{v}\" if v not in [None, \"\", True] else k \n        for k, v in labels.items()\n    ]\n\nIt will allow users to handle both cases via Ansible variables:\n- Filter by key only\nvolume_labels:\n  com.docker.volume.anonymous: true  # Results in: label\u003dcom.docker.volume.anonymous\n\n- Filter by key and value:\nvolume_labels:\n  kolla_managed: \"true\"  # Results in: label\u003dkolla_managed\u003dtrue\n\nThis makes the module much more flexible for administrative tasks like cleaning up unmanaged or anonymous volumes.","commit_id":"9e6a0db59a43593b3803295ccd39ff73d6fc836d"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"01b0a36786f074d0dfb6aeda2cb1329409bcd51f","unresolved":true,"context_lines":[{"line_number":200,"context_line":"        if labels:"},{"line_number":201,"context_line":"            filters[\u0027label\u0027] \u003d [f\"{k}\u003d{v}\" for k, v in labels.items()]"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        volumes \u003d self.client.volumes.list(filters\u003dfilters or None)"},{"line_number":204,"context_line":"        for volume in volumes:"},{"line_number":205,"context_line":"            if names and volume.name not in names:"},{"line_number":206,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":6,"id":"d25427df_37425636","line":203,"range":{"start_line":203,"start_character":8,"end_line":203,"end_character":67},"updated":"2025-10-01 18:26:33.000000000","message":"Is the \"or\" necessary here? If you pass in the filters\u003d{} it seems to behave sane as if you passed in no filters.\n\n```\n\u003e\u003e\u003e import docker\n\u003e\u003e\u003e client \u003d docker.from_env()\n\u003e\u003e\u003e filters \u003d {}\n\u003e\u003e\u003e client.volumes.list(filters\u003dfilters)\n[\u003cVolume: 7fe588a5c6de\u003e, \u003cVolume: b5d0ff472aaa\u003e]\n```","commit_id":"9e6a0db59a43593b3803295ccd39ff73d6fc836d"}],"tests/test_kolla_container_facts.py":[{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"84572b3dd0ba9c9f3c88d48102dbc9b301a318ad","unresolved":true,"context_lines":[{"line_number":69,"context_line":"    \u0027volumes\u0027: ["},{"line_number":70,"context_line":"        {\u0027CreatedAt\u0027: \u00272024-10-10T12:05:46+02:00\u0027,"},{"line_number":71,"context_line":"         \u0027Driver\u0027: \u0027local\u0027,"},{"line_number":72,"context_line":"         \u0027Labels\u0027: \"kolla_managed\u003dtrue\","},{"line_number":73,"context_line":"         \u0027Mountpoint\u0027: \u0027/var/lib/docker/volumes/my_volume/_data\u0027,"},{"line_number":74,"context_line":"         \u0027Name\u0027: \u0027my_volume\u0027,"},{"line_number":75,"context_line":"         \u0027Options\u0027: None,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5e643b62_605fe5b9","line":72,"updated":"2025-04-15 07:17:26.000000000","message":"nit: I think the data type of `Labels` is not proper here. When looking at `sudo docker volume inspect my_volume` I am seeing\n\n```\n    {\n        \"CreatedAt\": \"2025-04-15T07:11:57Z\",\n        \"Driver\": \"local\",\n        \"Labels\": {\n            \"kolla_managed\": \"true\"\n        },\n        \"Mountpoint\": \"/var/lib/docker/volumes/my_volume/_data\",\n        \"Name\": \"moje\",\n        \"Options\": null,\n        \"Scope\": \"local\"\n    }\n```","commit_id":"53f1d2856286921aa54b1226b24c401f9391f61a"},{"author":{"_account_id":36702,"name":"Roman Krcek","display_name":"Roman Krček","email":"roman.krcek@tietoevry.com","username":"r-krcek"},"change_message_id":"2d336d760c3864b44d0d0bc963eab1aa0e85bf4b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    \u0027volumes\u0027: ["},{"line_number":70,"context_line":"        {\u0027CreatedAt\u0027: \u00272024-10-10T12:05:46+02:00\u0027,"},{"line_number":71,"context_line":"         \u0027Driver\u0027: \u0027local\u0027,"},{"line_number":72,"context_line":"         \u0027Labels\u0027: \"kolla_managed\u003dtrue\","},{"line_number":73,"context_line":"         \u0027Mountpoint\u0027: \u0027/var/lib/docker/volumes/my_volume/_data\u0027,"},{"line_number":74,"context_line":"         \u0027Name\u0027: \u0027my_volume\u0027,"},{"line_number":75,"context_line":"         \u0027Options\u0027: None,"}],"source_content_type":"text/x-python","patch_set":2,"id":"37f0f9bd_30dc88a3","line":72,"in_reply_to":"5e643b62_605fe5b9","updated":"2025-04-28 11:03:57.000000000","message":"Done","commit_id":"53f1d2856286921aa54b1226b24c401f9391f61a"}]}
