)]}'
{"/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":"13ef4aca34b16d669741a3896931302b5ab5f542","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ee508078_2847ce07","updated":"2024-08-23 03:23:02.000000000","message":"Please add a release note indicating you fixed the bug. Otherwise lgtm","commit_id":"5ecc48db16b36b8a7bddf2463c0837165ff0c0e5"},{"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":"227a6f0234ae1fba78359666da0a9517504f25ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4934ff49_9eb933e9","updated":"2024-08-28 15:43:23.000000000","message":"\u003e 2024-08-28 15:28:49.747168 | controller | /bin/sh: 1: osv-vsctl: not found\n\nThis is really weird, something systemmatically broken?","commit_id":"0b8f52bcabc8680577e6f170fee7de7b2d47e295"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"dd121789a33d98f5442d99919f13651002450bdf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"e5694fee_05177a1a","updated":"2024-08-28 13:14:03.000000000","message":"I just can\u0027t place the reason for the failures to be related to the change. So, one final check and I will go on a little more thorough dive into the logs (though I hope not).","commit_id":"0b8f52bcabc8680577e6f170fee7de7b2d47e295"},{"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":"7fea3a93142250d7a9088b54a887d94db2a6a86e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"b0f8956f_694043fd","updated":"2024-08-28 15:50:44.000000000","message":"https://review.opendev.org/c/openstack/ironic/+/927408 fixes the misspelled ovs command; which wasn\u0027t related to the failure just information gathering afterwards","commit_id":"0b8f52bcabc8680577e6f170fee7de7b2d47e295"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"63fbbfb8edbbb66b5f6895a9b5953d7fc95f2096","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"077e814b_d3171a39","updated":"2024-08-26 11:35:04.000000000","message":"recheck - [\"tempest.lib.exceptions.TimeoutException: Request timed out\", \"die 2509 \u0027Some nodes did not finish cleaning:  dcdb***\", \"Node 7c10bbf*** reached failure state \u0027deploy failed\u0027; the last error is Timeout reached while waiting for callback for node 7c10bbf***\"]","commit_id":"0b8f52bcabc8680577e6f170fee7de7b2d47e295"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"bfe7a1f97cd79df149b4e55e84f9d24f47e346ff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"c1ca3966_e275f4f3","updated":"2024-08-28 13:14:32.000000000","message":"recheck - wget: download timed out","commit_id":"0b8f52bcabc8680577e6f170fee7de7b2d47e295"},{"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":"a88f58d6c45a4b6996f183fa4811b6776e6db3f6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"0f84b672_6972b64a","updated":"2024-08-28 15:46:56.000000000","message":"recheck the failures seem strange and random, and different from last one, can\u0027t really tell what\u0027s going on","commit_id":"0b8f52bcabc8680577e6f170fee7de7b2d47e295"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"ea239748faffb342a9785d44df5f43987abae98d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"64f5e54c_07e6ffcf","in_reply_to":"b0f8956f_694043fd","updated":"2024-09-04 13:14:03.000000000","message":"Done","commit_id":"0b8f52bcabc8680577e6f170fee7de7b2d47e295"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"79a42e9e4f35bdd332d798837228e1734c5ced69","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"84ad61e4_8f4fdcd3","updated":"2024-09-04 13:59:59.000000000","message":"Quick question attached.","commit_id":"479c07ff2895b6a40e9042e72343d60ffebfc54d"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"d36ca6311943daa31995b5ce86c29a48cf433520","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d9f5e22d_6037b200","updated":"2024-08-29 18:55:06.000000000","message":"Resolves my issues.","commit_id":"479c07ff2895b6a40e9042e72343d60ffebfc54d"}],"ironic_python_agent/hardware.py":[{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"90d48e42cc82ea281ced20aba970d81998ad66f0","unresolved":true,"context_lines":[{"line_number":2395,"context_line":"        if not self.any_ipmi_device_exists():"},{"line_number":2396,"context_line":"            LOG.warning(\u0027No IPMI device found. Skipping BMC address \u0027"},{"line_number":2397,"context_line":"                        \u0027detection.\u0027)"},{"line_number":2398,"context_line":"            return \u00270.0.0.0\u0027"},{"line_number":2399,"context_line":""},{"line_number":2400,"context_line":"        try:"},{"line_number":2401,"context_line":"            # From all the channels 0-15, only 1-11 can be assigned to"}],"source_content_type":"text/x-python","patch_set":2,"id":"82fbb06a_ae6b1913","line":2398,"updated":"2024-08-23 13:21:31.000000000","message":"So in other parts of the function when it can\u0027t get an address it returns None. Should this do the same?","commit_id":"45a15d36b61faf5b8c926cd7b8cdead9a77220fd"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"ea239748faffb342a9785d44df5f43987abae98d","unresolved":false,"context_lines":[{"line_number":2395,"context_line":"        if not self.any_ipmi_device_exists():"},{"line_number":2396,"context_line":"            LOG.warning(\u0027No IPMI device found. Skipping BMC address \u0027"},{"line_number":2397,"context_line":"                        \u0027detection.\u0027)"},{"line_number":2398,"context_line":"            return \u00270.0.0.0\u0027"},{"line_number":2399,"context_line":""},{"line_number":2400,"context_line":"        try:"},{"line_number":2401,"context_line":"            # From all the channels 0-15, only 1-11 can be assigned to"}],"source_content_type":"text/x-python","patch_set":2,"id":"7cedffd2_09093b58","line":2398,"in_reply_to":"82fbb06a_ae6b1913","updated":"2024-09-04 13:14:03.000000000","message":"Done","commit_id":"45a15d36b61faf5b8c926cd7b8cdead9a77220fd"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"90d48e42cc82ea281ced20aba970d81998ad66f0","unresolved":true,"context_lines":[{"line_number":2437,"context_line":"        if not self.any_ipmi_device_exists():"},{"line_number":2438,"context_line":"            LOG.warning(\u0027No IPMI device found. Skipping BMC MAC address \u0027"},{"line_number":2439,"context_line":"                        \u0027detection.\u0027)"},{"line_number":2440,"context_line":"            return \u002700:00:00:00:00:00\u0027"},{"line_number":2441,"context_line":""},{"line_number":2442,"context_line":"        try:"},{"line_number":2443,"context_line":"            # From all the channels 0-15, only 1-11 can be assigned to"}],"source_content_type":"text/x-python","patch_set":2,"id":"700395b9_144b3fea","line":2440,"updated":"2024-08-23 13:21:31.000000000","message":"Same question. Other parts of the code return None. Should this do that?","commit_id":"45a15d36b61faf5b8c926cd7b8cdead9a77220fd"},{"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":"86681ee07a627f4bac78320378485669484b1494","unresolved":true,"context_lines":[{"line_number":2437,"context_line":"        if not self.any_ipmi_device_exists():"},{"line_number":2438,"context_line":"            LOG.warning(\u0027No IPMI device found. Skipping BMC MAC address \u0027"},{"line_number":2439,"context_line":"                        \u0027detection.\u0027)"},{"line_number":2440,"context_line":"            return \u002700:00:00:00:00:00\u0027"},{"line_number":2441,"context_line":""},{"line_number":2442,"context_line":"        try:"},{"line_number":2443,"context_line":"            # From all the channels 0-15, only 1-11 can be assigned to"}],"source_content_type":"text/x-python","patch_set":2,"id":"81a5d3a6_efe4187b","line":2440,"in_reply_to":"700395b9_144b3fea","updated":"2024-08-23 17:01:06.000000000","message":"This is a good catch.\n\nI\u0027ll note I wonder if raising an IncompatibleHardwareMethodError is the right path, given that\u0027s how you signal that a method can\u0027t work for given hardware -- and that\u0027s 100% true here. I just don\u0027t know if in practice that\u0027ll break anything.","commit_id":"45a15d36b61faf5b8c926cd7b8cdead9a77220fd"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"90d48e42cc82ea281ced20aba970d81998ad66f0","unresolved":true,"context_lines":[{"line_number":2489,"context_line":"        if not self.any_ipmi_device_exists():"},{"line_number":2490,"context_line":"            LOG.warning(\u0027No IPMI device found. Skipping BMC IPv6 address \u0027"},{"line_number":2491,"context_line":"                        \u0027detection.\u0027)"},{"line_number":2492,"context_line":"            return \u0027::/0\u0027"},{"line_number":2493,"context_line":""},{"line_number":2494,"context_line":"        null_address_re \u003d re.compile(r\u0027^::(/\\d{1,3})*$\u0027)"},{"line_number":2495,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"214cff4c_399c9e01","line":2492,"updated":"2024-08-23 13:21:31.000000000","message":"Same question about None. Almost makes me wonder if these functions shouldn\u0027t use Python\u0027s type hinting annotation to document what they should return.","commit_id":"45a15d36b61faf5b8c926cd7b8cdead9a77220fd"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"ea239748faffb342a9785d44df5f43987abae98d","unresolved":false,"context_lines":[{"line_number":2489,"context_line":"        if not self.any_ipmi_device_exists():"},{"line_number":2490,"context_line":"            LOG.warning(\u0027No IPMI device found. Skipping BMC IPv6 address \u0027"},{"line_number":2491,"context_line":"                        \u0027detection.\u0027)"},{"line_number":2492,"context_line":"            return \u0027::/0\u0027"},{"line_number":2493,"context_line":""},{"line_number":2494,"context_line":"        null_address_re \u003d re.compile(r\u0027^::(/\\d{1,3})*$\u0027)"},{"line_number":2495,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"a83fe3f8_11a8d32c","line":2492,"in_reply_to":"214cff4c_399c9e01","updated":"2024-09-04 13:14:03.000000000","message":"Done","commit_id":"45a15d36b61faf5b8c926cd7b8cdead9a77220fd"},{"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":"46098a615ae0c6509f4cdfc72f5ced5d0f9a652d","unresolved":true,"context_lines":[{"line_number":2394,"context_line":"        :raises: IncompatibleHardwareMethodError if No IPMI device is found."},{"line_number":2395,"context_line":"        \"\"\""},{"line_number":2396,"context_line":"        if not self.any_ipmi_device_exists():"},{"line_number":2397,"context_line":"            raise errors.IncompatibleHardwareMethodError()"},{"line_number":2398,"context_line":""},{"line_number":2399,"context_line":"        try:"},{"line_number":2400,"context_line":"            # From all the channels 0-15, only 1-11 can be assigned to"}],"source_content_type":"text/x-python","patch_set":3,"id":"79f912ab_c986b185","line":2397,"updated":"2024-08-28 18:08:31.000000000","message":"looked at this and the CI failures with CID; this is what\u0027s causing the problem.\n\nIn a perfect world, we\u0027d probably be OK with an error around having no HWM method for anything in list_hardware_info, but that is a larger change and probably not worth it.","commit_id":"0b8f52bcabc8680577e6f170fee7de7b2d47e295"},{"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":"43b8d6c935c281e4b56245ce742ee2f7c48fae4e","unresolved":true,"context_lines":[{"line_number":2432,"context_line":""},{"line_number":2433,"context_line":"        :returns: MAC address of the first LAN channel or 00:00:00:00:00:00 in"},{"line_number":2434,"context_line":"                 case none of them has one or is configured properly"},{"line_number":2435,"context_line":"        :raises: IncompatibleHardwareMethodError if No IPMI device is found."},{"line_number":2436,"context_line":"        \"\"\""},{"line_number":2437,"context_line":"        if not self.any_ipmi_device_exists():"},{"line_number":2438,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":4,"id":"f716c36c_8901eca9","line":2435,"updated":"2024-08-28 20:28:53.000000000","message":"This docstring is not valid since your change (also below)","commit_id":"2375ec8b9a85f04e06846e44b2796b9b8b6fb403"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"79a42e9e4f35bdd332d798837228e1734c5ced69","unresolved":true,"context_lines":[{"line_number":109,"context_line":"MULTIPATH_ENABLED \u003d None"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"IPMI_DEVICE_LOCATIONS \u003d [\u0027/dev/ipmi0\u0027, \u0027/dev/ipmi/0\u0027, \u0027/dev/ipmidev/0\u0027]"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"def _get_device_info(dev, devclass, field):"}],"source_content_type":"text/x-python","patch_set":6,"id":"96fa8080_bf4c1744","line":112,"updated":"2024-09-04 13:59:59.000000000","message":"Out of curiosity, have we checked the ipmitool source code to see if these are hard coded, or if it could end up trying /dev/ipmi/1 or something like that.","commit_id":"479c07ff2895b6a40e9042e72343d60ffebfc54d"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"fdb40c3a4fb76f3ac65bf304e3bb44585d8036d8","unresolved":true,"context_lines":[{"line_number":109,"context_line":"MULTIPATH_ENABLED \u003d None"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"IPMI_DEVICE_LOCATIONS \u003d [\u0027/dev/ipmi0\u0027, \u0027/dev/ipmi/0\u0027, \u0027/dev/ipmidev/0\u0027]"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"def _get_device_info(dev, devclass, field):"}],"source_content_type":"text/x-python","patch_set":6,"id":"e57e40a1_392bc3e9","line":112,"in_reply_to":"96fa8080_bf4c1744","updated":"2024-09-04 15:59:38.000000000","message":"It seems the only guaranteed path is `/dev/ipmi0`; `/dev/ipmi/0` and `/dev/ipmidev/0` are like defaults, so `/dev/ipmi%d`, `/dev/ipmi/%d` and `/dev/ipmidev/%d` may exist instead.","commit_id":"479c07ff2895b6a40e9042e72343d60ffebfc54d"},{"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":"259428644aae0969eb9d0d4c500d09b3e7323ddd","unresolved":true,"context_lines":[{"line_number":109,"context_line":"MULTIPATH_ENABLED \u003d None"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"IPMI_DEVICE_LOCATIONS \u003d [\u0027/dev/ipmi0\u0027, \u0027/dev/ipmi/0\u0027, \u0027/dev/ipmidev/0\u0027]"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"def _get_device_info(dev, devclass, field):"}],"source_content_type":"text/x-python","patch_set":6,"id":"c6ca8c65_93142718","line":112,"in_reply_to":"96fa8080_bf4c1744","updated":"2024-09-04 14:18:59.000000000","message":"This is a good catch; I feel silly I didn\u0027t think of it (although \u003e1 IPMI device on a machine is mind-breaking)\n\nI\u0027d imagine the safest thing is to check /dev/ipmi*, /dev/ipmi/*, /dev/ipmidev/*? \n\nIf we check, is there two ipmitools to check; openipmi and the original one? Or is one of those dead now?","commit_id":"479c07ff2895b6a40e9042e72343d60ffebfc54d"},{"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":"6e979a6119252ea8c110c8907d333dc7377cff84","unresolved":true,"context_lines":[{"line_number":1540,"context_line":""},{"line_number":1541,"context_line":"        for device in glob.glob(\u0027/dev/ipmi*\u0027):"},{"line_number":1542,"context_line":"            if utils.is_char_device(device):"},{"line_number":1543,"context_line":"                return True"},{"line_number":1544,"context_line":""},{"line_number":1545,"context_line":"        return False"},{"line_number":1546,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"c50916b5_29ea04a4","line":1543,"updated":"2024-09-04 21:31:43.000000000","message":"Should we also check /dev/ipmi/(anything) or /dev/ipmidev/(anything)?","commit_id":"59f5aa17414f5ab12b6e5c04a2f8f07e54a34fd6"},{"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":"2b7373fb09825b97a4e32c87beb38af65ae893cc","unresolved":true,"context_lines":[{"line_number":1540,"context_line":""},{"line_number":1541,"context_line":"        for device in glob.glob(\u0027/dev/ipmi*\u0027):"},{"line_number":1542,"context_line":"            if utils.is_char_device(device):"},{"line_number":1543,"context_line":"                return True"},{"line_number":1544,"context_line":""},{"line_number":1545,"context_line":"        return False"},{"line_number":1546,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ac6917b6_8a589993","line":1543,"in_reply_to":"45051edb_8fa841c8","updated":"2024-09-04 21:51:24.000000000","message":"I don\u0027t believe so? https://gist.github.com/jayofdoom/a57d6f18578f93d7ee8b96503d584c7d it doesn\u0027t appear glob.glob traverses directories (at least by default), which matches the same behavior you\u0027d get with bash globbing.\n\nI think you need to explicitly glob for /dev/ipmi/\\* and /dev/ipmidev/\\* as well.","commit_id":"59f5aa17414f5ab12b6e5c04a2f8f07e54a34fd6"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"063852fa362567a8b87d7ccd8e89a0340412e7c4","unresolved":true,"context_lines":[{"line_number":1540,"context_line":""},{"line_number":1541,"context_line":"        for device in glob.glob(\u0027/dev/ipmi*\u0027):"},{"line_number":1542,"context_line":"            if utils.is_char_device(device):"},{"line_number":1543,"context_line":"                return True"},{"line_number":1544,"context_line":""},{"line_number":1545,"context_line":"        return False"},{"line_number":1546,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"acef1a63_b1ec678c","line":1543,"in_reply_to":"9ce87d65_c50264c1","updated":"2024-09-05 06:58:07.000000000","message":"Well, I avoided the use of the `recurive` flag so that it doesn\u0027t do more than necessary, and unit test seemed to agree I\u0027ll still enjoy the same benefit, hence the confident assertion above :D. Something like `glob.glob(\u0027/dev/**/ipmi*\u0027, recursive\u003dTrue)` would have worked (?, this time I\u0027m not sure).\n\nAnyway, I updated the patch, let me know what you think.","commit_id":"59f5aa17414f5ab12b6e5c04a2f8f07e54a34fd6"},{"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":"42eebcbece3ccff5df04227628e90f581e2cf8e6","unresolved":true,"context_lines":[{"line_number":1540,"context_line":""},{"line_number":1541,"context_line":"        for device in glob.glob(\u0027/dev/ipmi*\u0027):"},{"line_number":1542,"context_line":"            if utils.is_char_device(device):"},{"line_number":1543,"context_line":"                return True"},{"line_number":1544,"context_line":""},{"line_number":1545,"context_line":"        return False"},{"line_number":1546,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9ce87d65_c50264c1","line":1543,"in_reply_to":"ac6917b6_8a589993","updated":"2024-09-04 21:54:20.000000000","message":"I poked at this more, the docs imply it has a recursive mode, but it doesn\u0027t seem to do what we want:\n\n  \\\u003e\\\u003e\\\u003e glob.glob(\u0027/dev/v4l\\*\u0027, recursive\u003dTrue)\n  [\u0027/dev/v4l\u0027]\n  \\\u003e\\\u003e\\\u003e glob.glob(\u0027/dev/v4l\\*\\*\u0027)\n  [\u0027/dev/v4l\u0027]\n  \\\u003e\\\u003e\\\u003e glob.glob(\u0027/dev/v4l\\*\\*\u0027, recursive\u003dTrue)\n  [\u0027/dev/v4l\u0027]","commit_id":"59f5aa17414f5ab12b6e5c04a2f8f07e54a34fd6"},{"author":{"_account_id":36770,"name":"cid","display_name":"cid","email":"cid@gr-oss.io","username":"cidelight","status":"@gr-oss upstream: Doing good IRONIC things..."},"change_message_id":"36f436def669c28be15d14773ef71581be41ac05","unresolved":true,"context_lines":[{"line_number":1540,"context_line":""},{"line_number":1541,"context_line":"        for device in glob.glob(\u0027/dev/ipmi*\u0027):"},{"line_number":1542,"context_line":"            if utils.is_char_device(device):"},{"line_number":1543,"context_line":"                return True"},{"line_number":1544,"context_line":""},{"line_number":1545,"context_line":"        return False"},{"line_number":1546,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"45051edb_8fa841c8","line":1543,"in_reply_to":"c50916b5_29ea04a4","updated":"2024-09-04 21:40:28.000000000","message":"I\u0027m almost certain the current implementation catches that too.","commit_id":"59f5aa17414f5ab12b6e5c04a2f8f07e54a34fd6"}]}
