)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"45157a1049c769fcac1d93fa36136713d243bc46","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"b730e7c4_dc3e16b2","updated":"2025-03-12 21:53:21.000000000","message":"recheck unable to reproduce unit test failures","commit_id":"512301f7a76da70c856d56ce253bdc971de3f60a"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"ddb3a084b5ccc0ed93b3cfe017abd15623a68354","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"b87383fb_f7df27f8","updated":"2025-03-14 20:28:52.000000000","message":"Given this is the first step in a suite of related features; it may be wise to not workflow this until after 2025.1 is cut.","commit_id":"daebb4950d84287058be2a7cb837b1f8cdbd5ca4"}],"ironic_python_agent/hardware_managers/container.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"562fd498ba6dba41664d1c27ac22c4ad39fdb3ca","unresolved":true,"context_lines":[{"line_number":117,"context_line":"        \"\"\"Clean up containers and related resources.\"\"\""},{"line_number":118,"context_line":"        try:"},{"line_number":119,"context_line":"            LOG.debug(\"Cleaning up via container...\")"},{"line_number":120,"context_line":"            subprocess.run("},{"line_number":121,"context_line":"                ["},{"line_number":122,"context_line":"                    \"podman\","},{"line_number":123,"context_line":"                    \"pull\","}],"source_content_type":"text/x-python","patch_set":6,"id":"e543ac71_5d4e4d9c","line":120,"updated":"2025-02-24 20:40:18.000000000","message":"I think https://opendev.org/openstack/ironic-python-agent/src/branch/master/ironic_python_agent/utils.py#L77 with log_stdout\u003dTrue is likely what you want to use, it should improve your experience and give you more logs","commit_id":"78d602003524a485e91731692a2f276179de57c2"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"b045af4eff189e8041282a4871d3d9376a31021c","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        \"\"\"Clean up containers and related resources.\"\"\""},{"line_number":118,"context_line":"        try:"},{"line_number":119,"context_line":"            LOG.debug(\"Cleaning up via container...\")"},{"line_number":120,"context_line":"            subprocess.run("},{"line_number":121,"context_line":"                ["},{"line_number":122,"context_line":"                    \"podman\","},{"line_number":123,"context_line":"                    \"pull\","}],"source_content_type":"text/x-python","patch_set":6,"id":"ac887634_94abf287","line":120,"in_reply_to":"e543ac71_5d4e4d9c","updated":"2025-02-25 17:30:59.000000000","message":"Done","commit_id":"78d602003524a485e91731692a2f276179de57c2"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"b045af4eff189e8041282a4871d3d9376a31021c","unresolved":true,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# All the helper methods should be kept outside of the HardwareManager"},{"line_number":25,"context_line":"# so they\u0027ll never get accidentally called by dispatch_to_managers()"},{"line_number":26,"context_line":"def _initialize_hardware():"},{"line_number":27,"context_line":"    \"\"\"Example method for initializing hardware.\"\"\""},{"line_number":28,"context_line":"    # Perform any operations here that are required to initialize your"},{"line_number":29,"context_line":"    # hardware."}],"source_content_type":"text/x-python","patch_set":7,"id":"5fb6d6d5_ec0a4b4c","line":26,"updated":"2025-02-25 17:30:59.000000000","message":"probably time to remove some of the example boilerplate now?","commit_id":"7d5e0bda10a8a768420c5e6ef7736ee85b320368"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"1c97e04719f92482694ec9b7dd4140bf04602e32","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# All the helper methods should be kept outside of the HardwareManager"},{"line_number":25,"context_line":"# so they\u0027ll never get accidentally called by dispatch_to_managers()"},{"line_number":26,"context_line":"def _initialize_hardware():"},{"line_number":27,"context_line":"    \"\"\"Example method for initializing hardware.\"\"\""},{"line_number":28,"context_line":"    # Perform any operations here that are required to initialize your"},{"line_number":29,"context_line":"    # hardware."}],"source_content_type":"text/x-python","patch_set":7,"id":"05bfdd98_b6f3409f","line":26,"in_reply_to":"5fb6d6d5_ec0a4b4c","updated":"2025-02-27 00:28:45.000000000","message":"Done","commit_id":"7d5e0bda10a8a768420c5e6ef7736ee85b320368"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"b045af4eff189e8041282a4871d3d9376a31021c","unresolved":true,"context_lines":[{"line_number":68,"context_line":"        _initialize_hardware()"},{"line_number":69,"context_line":"        if _detect_hardware():"},{"line_number":70,"context_line":"            LOG.debug(\"Found example device, returning SERVICE_PROVIDER\")"},{"line_number":71,"context_line":"            return hardware.HardwareSupport.SERVICE_PROVIDER"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        LOG.debug(\"No example devices found, returning NONE\")"},{"line_number":74,"context_line":"        return hardware.HardwareSupport.NONE"}],"source_content_type":"text/x-python","patch_set":7,"id":"0ab1b2f2_92ef8541","line":71,"updated":"2025-02-25 17:30:59.000000000","message":"We have two choices:\n- unconditionally return mainline\n- look for an available container runtime binary; only return mainline if it exists and none otherwise","commit_id":"7d5e0bda10a8a768420c5e6ef7736ee85b320368"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"1c97e04719f92482694ec9b7dd4140bf04602e32","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        _initialize_hardware()"},{"line_number":69,"context_line":"        if _detect_hardware():"},{"line_number":70,"context_line":"            LOG.debug(\"Found example device, returning SERVICE_PROVIDER\")"},{"line_number":71,"context_line":"            return hardware.HardwareSupport.SERVICE_PROVIDER"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        LOG.debug(\"No example devices found, returning NONE\")"},{"line_number":74,"context_line":"        return hardware.HardwareSupport.NONE"}],"source_content_type":"text/x-python","patch_set":7,"id":"2f25a6a6_8157dc83","line":71,"in_reply_to":"0ab1b2f2_92ef8541","updated":"2025-02-27 00:28:45.000000000","message":"Done","commit_id":"7d5e0bda10a8a768420c5e6ef7736ee85b320368"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"b045af4eff189e8041282a4871d3d9376a31021c","unresolved":true,"context_lines":[{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        return ["},{"line_number":86,"context_line":"            {"},{"line_number":87,"context_line":"                \"step\": \"upgrade_example_device_model1234_firmware\","},{"line_number":88,"context_line":"                \"priority\": 37,"},{"line_number":89,"context_line":"                \"interface\": \"deploy\","},{"line_number":90,"context_line":"                \"reboot_requested\": True,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5334735c_0a5b22ef","line":87,"updated":"2025-02-25 17:30:59.000000000","message":"example step can be removed","commit_id":"7d5e0bda10a8a768420c5e6ef7736ee85b320368"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"1c97e04719f92482694ec9b7dd4140bf04602e32","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \"\"\""},{"line_number":85,"context_line":"        return ["},{"line_number":86,"context_line":"            {"},{"line_number":87,"context_line":"                \"step\": \"upgrade_example_device_model1234_firmware\","},{"line_number":88,"context_line":"                \"priority\": 37,"},{"line_number":89,"context_line":"                \"interface\": \"deploy\","},{"line_number":90,"context_line":"                \"reboot_requested\": True,"}],"source_content_type":"text/x-python","patch_set":7,"id":"8ec972c6_7de63cb7","line":87,"in_reply_to":"5334735c_0a5b22ef","updated":"2025-02-27 00:28:45.000000000","message":"Done","commit_id":"7d5e0bda10a8a768420c5e6ef7736ee85b320368"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"292bd2cabaf7107017546aa5aab8fddcf8047788","unresolved":true,"context_lines":[{"line_number":67,"context_line":"    def evaluate_hardware_support(self):"},{"line_number":68,"context_line":"        \"\"\"Determine if container runner exists and return support level.\"\"\""},{"line_number":69,"context_line":"        stdout, _ \u003d utils.execute("},{"line_number":70,"context_line":"            \"which\", CONF.container.runner, check_exit_code\u003dFalse)"},{"line_number":71,"context_line":"        if stdout.strip():"},{"line_number":72,"context_line":"            LOG.debug(\"Found %s, returning MAINLINE\", CONF.container.runner)"},{"line_number":73,"context_line":"            return hardware.HardwareSupport.MAINLINE"}],"source_content_type":"text/x-python","patch_set":13,"id":"1dbf0f0d_5e1ecd9e","line":70,"updated":"2025-03-04 23:33:50.000000000","message":"To simplify this, remove check_exit_code\u003dFalse -- which will exit 1 in cases where the file doesn\u0027t exist.","commit_id":"82268e752173ae654b485286294fd354295fa9b9"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"010bfcb1f3150f8e109aa7235eafaa8a6902f426","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    def evaluate_hardware_support(self):"},{"line_number":68,"context_line":"        \"\"\"Determine if container runner exists and return support level.\"\"\""},{"line_number":69,"context_line":"        stdout, _ \u003d utils.execute("},{"line_number":70,"context_line":"            \"which\", CONF.container.runner, check_exit_code\u003dFalse)"},{"line_number":71,"context_line":"        if stdout.strip():"},{"line_number":72,"context_line":"            LOG.debug(\"Found %s, returning MAINLINE\", CONF.container.runner)"},{"line_number":73,"context_line":"            return hardware.HardwareSupport.MAINLINE"}],"source_content_type":"text/x-python","patch_set":13,"id":"112d2ce8_e8888934","line":70,"in_reply_to":"1dbf0f0d_5e1ecd9e","updated":"2025-03-11 19:18:27.000000000","message":"Done","commit_id":"82268e752173ae654b485286294fd354295fa9b9"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"67adf5df303e9cf9935b83622a57bb5a35b7a101","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Rackspace, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":20,"id":"862ab12d_25e8c443","line":1,"updated":"2025-03-26 18:56:32.000000000","message":"it\u0027s not 2015 and you don\u0027t work for rackspace :D","commit_id":"daebb4950d84287058be2a7cb837b1f8cdbd5ca4"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"ee6aae7c35c52fbd6269fb1a03bc5253300f1214","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Rackspace, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":20,"id":"aad23a82_5d8081eb","line":1,"in_reply_to":"314092fd_e570271f","updated":"2025-03-26 20:11:38.000000000","message":"Done","commit_id":"daebb4950d84287058be2a7cb837b1f8cdbd5ca4"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"e4c88c465138a155c10e9b16bf5285684243bca8","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Rackspace, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":20,"id":"314092fd_e570271f","line":1,"in_reply_to":"862ab12d_25e8c443","updated":"2025-03-26 19:12:30.000000000","message":"Do I just need to remove the line?","commit_id":"daebb4950d84287058be2a7cb837b1f8cdbd5ca4"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"064f26cb4491c1c98c9cf0ded2b5887e2f933441","unresolved":true,"context_lines":[{"line_number":69,"context_line":"        LOG.debug(\"No container runner found, returning NONE\")"},{"line_number":70,"context_line":"        return hardware.HardwareSupport.NONE"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def get_clean_steps(self, node, ports):"},{"line_number":73,"context_line":"        \"\"\"Dynamically generate cleaning steps.\"\"\""},{"line_number":74,"context_line":"        steps \u003d []"},{"line_number":75,"context_line":"        for step in self.STEPS:"}],"source_content_type":"text/x-python","patch_set":21,"id":"d3375de3_07d549dd","line":72,"updated":"2025-03-26 22:09:00.000000000","message":"it doesn\u0027t have to be in this change -- it probably /explicitly/ should be in a different change, but we need a method that generically takes container information as arguments. This will enable people using manual cleaning, servicing, or deploy templates to use the no-need-for-config form of this feature.","commit_id":"a3a2b835947f96f963ef3659592e9d9068e3f9f7"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"fee8ba6641b83e666c65eddb50eec21547f4564a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        LOG.debug(\"No container runner found, returning NONE\")"},{"line_number":70,"context_line":"        return hardware.HardwareSupport.NONE"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def get_clean_steps(self, node, ports):"},{"line_number":73,"context_line":"        \"\"\"Dynamically generate cleaning steps.\"\"\""},{"line_number":74,"context_line":"        steps \u003d []"},{"line_number":75,"context_line":"        for step in self.STEPS:"}],"source_content_type":"text/x-python","patch_set":21,"id":"0fe5f6bc_d1a3c922","line":72,"in_reply_to":"d3375de3_07d549dd","updated":"2025-03-26 23:29:13.000000000","message":"Sure, I can try that.","commit_id":"a3a2b835947f96f963ef3659592e9d9068e3f9f7"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"10e8aa6577cc148bea9df0e8ef0a79dfd1322532","unresolved":true,"context_lines":[{"line_number":83,"context_line":"                }"},{"line_number":84,"context_line":"            )"},{"line_number":85,"context_line":"        return steps"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _create_cleanup_method(self, step):"},{"line_number":88,"context_line":"        \"\"\"Return a function that runs the container with the given image.\"\"\""},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"6c2e63ca_9cfc3a59","line":86,"updated":"2025-03-27 17:44:14.000000000","message":"add a method here:\n\ndef container_clean_step(self, node, ports, image, pull_options, run_options):\n   utils.execute...()\n\n\n^^^ this can be used for manual cleaning/servicing\n\ndef _create_cleanup_method:\n   return functools.partial(container_clean_step(image\u003dimage, pull_options\u003dpull_options, run_options\u003drun_options)\n\n^^^ can be reused to make the cleanup methods simpler","commit_id":"a3a2b835947f96f963ef3659592e9d9068e3f9f7"}],"setup.cfg":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"292bd2cabaf7107017546aa5aab8fddcf8047788","unresolved":true,"context_lines":[{"line_number":52,"context_line":"    mlnx \u003d ironic_python_agent.hardware_managers.mlnx:MellanoxDeviceHardwareManager"},{"line_number":53,"context_line":"    cna \u003d ironic_python_agent.hardware_managers.cna:IntelCnaHardwareManager"},{"line_number":54,"context_line":"    container \u003d ironic_python_agent.hardware_managers.container:ContainerHardwareManager"},{"line_number":55,"context_line":"ironic_python_agent.inspector.collectors \u003d"},{"line_number":56,"context_line":"    default \u003d ironic_python_agent.inspector:collect_default"},{"line_number":57,"context_line":"    logs \u003d ironic_python_agent.inspector:collect_logs"},{"line_number":58,"context_line":"    extra-hardware \u003d ironic_python_agent.inspector:collect_extra_hardware"}],"source_content_type":"text/x-ttcn-cfg","patch_set":13,"id":"f101e579_7eedab21","line":55,"updated":"2025-03-04 23:33:50.000000000","message":"please replace the whitespace","commit_id":"82268e752173ae654b485286294fd354295fa9b9"},{"author":{"_account_id":37707,"name":"Satoshi Shirosaka","display_name":"Satoshi S.","email":"satoss1108@gmail.com","username":"satoshi-sh"},"change_message_id":"010bfcb1f3150f8e109aa7235eafaa8a6902f426","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    mlnx \u003d ironic_python_agent.hardware_managers.mlnx:MellanoxDeviceHardwareManager"},{"line_number":53,"context_line":"    cna \u003d ironic_python_agent.hardware_managers.cna:IntelCnaHardwareManager"},{"line_number":54,"context_line":"    container \u003d ironic_python_agent.hardware_managers.container:ContainerHardwareManager"},{"line_number":55,"context_line":"ironic_python_agent.inspector.collectors \u003d"},{"line_number":56,"context_line":"    default \u003d ironic_python_agent.inspector:collect_default"},{"line_number":57,"context_line":"    logs \u003d ironic_python_agent.inspector:collect_logs"},{"line_number":58,"context_line":"    extra-hardware \u003d ironic_python_agent.inspector:collect_extra_hardware"}],"source_content_type":"text/x-ttcn-cfg","patch_set":13,"id":"06403bae_2718041d","line":55,"in_reply_to":"f101e579_7eedab21","updated":"2025-03-11 19:18:27.000000000","message":"Done","commit_id":"82268e752173ae654b485286294fd354295fa9b9"}]}
