)]}'
{"/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":"5833dccda2c54d7b1c781ee49f7809534569214a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f7353c33_2d343d36","updated":"2024-04-29 21:49:32.000000000","message":"Once CI is happy, I am","commit_id":"03b4a75e7b0505f69c09997b722438fe3b4ceb0d"},{"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":"0693d6f8b311ed6ea1d8899cca87f1ba2e73300e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"6e9873f3_834e3f89","updated":"2024-05-08 16:36:27.000000000","message":"Some of these tests may be redundant, not sure (?)","commit_id":"483509ec8509cdfa26449752fb33bcea090a0c66"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9b969f449bc59e90bbe44b6f3509e2345bfd19b7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"80a24fe5_15a2352e","updated":"2024-05-14 22:52:58.000000000","message":"Do we want to put a change in so at least one ipmi job runs with this configuration?","commit_id":"00c0509425c894dc1cc0d37d74fa9d8596924331"},{"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":"7959b0e57b9d48453ac32f8bb761d75e48a1b6f2","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"66c9e2f2_a4569f2d","updated":"2024-05-14 22:53:35.000000000","message":"Have we put this flag on a node in devstack and ensure it still deploys? As long as someone has tested this, LGTM.","commit_id":"00c0509425c894dc1cc0d37d74fa9d8596924331"},{"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":"340b9e03372e4cfd39c69367684326531fa9de5b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"85a9a555_ad52ef61","in_reply_to":"80a24fe5_15a2352e","updated":"2024-05-14 22:53:56.000000000","message":"++ This is what we should do","commit_id":"00c0509425c894dc1cc0d37d74fa9d8596924331"},{"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":"ae473b4c0498ccd96dd0e0faa47499d8ffb2bace","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"8899fbd9_65349f39","updated":"2024-05-23 16:18:29.000000000","message":"Getting there, but still some lingering issues.","commit_id":"ed4e8bdf02e1a62074fd15032006e5cc646dced6"},{"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":"9c5d66bb64e88cf33ee539c1829c8137e6339e52","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"368e7cd5_f22c1f0d","updated":"2024-05-27 15:19:21.000000000","message":"The pep8 failure is independent of this change and the codespell failure has been solved in a pending commit.","commit_id":"df3e80f89b1e86aa6e21d6c4ccc6bbd51fc96ca2"},{"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":"bf69a8749a1ab1ecffa85d37f67e1bc6e52dadeb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"d20eb0de_794bffde","updated":"2024-05-28 09:42:05.000000000","message":"https://review.opendev.org/c/openstack/ironic/+/920365 should clean up pep8/codespell issues","commit_id":"df3e80f89b1e86aa6e21d6c4ccc6bbd51fc96ca2"},{"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":"eceeb2fe1a64f188b9d1c26c2e175b892e4add21","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":23,"id":"e1e719cd_c54f7d44","updated":"2024-05-30 15:32:19.000000000","message":"note: I didn\u0027t review unit tests very strictly as they aren\u0027t passing yet","commit_id":"370b374d1fff327fc21caf1a71959174dd9a9d35"},{"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":"390be61840fef17233bb7516ff405b3ffdb02549","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":23,"id":"49f2ac54_3f90236c","updated":"2024-05-30 15:31:32.000000000","message":"very close","commit_id":"370b374d1fff327fc21caf1a71959174dd9a9d35"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0dbc6000596fb03c335f3e886a0d3583e7f449fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"ec49c3ea_899f530c","updated":"2024-06-17 08:52:06.000000000","message":"Looking mostly good, but the console change is wrong - please see inline.","commit_id":"0fb40ed245fa441500b6f81c44933960435cc0e9"},{"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":"e894aaa931047c6c95a47728502c17b2ccc055ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"a8a62845_64825de2","updated":"2024-06-17 21:24:50.000000000","message":"CI failures seem to be related to known issues (metal3 + snmp)","commit_id":"ab6982f2d83f5fd8034b30f9355fa4807fbce446"},{"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":"10eee8f1354ca5778afecf7c457623ab800740bd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"d1b8966f_d9ed5750","updated":"2024-06-19 19:12:14.000000000","message":"recheck, zuul job fixed","commit_id":"ab6982f2d83f5fd8034b30f9355fa4807fbce446"}],"doc/source/admin/drivers/ipmitool.rst":[{"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":"5833dccda2c54d7b1c781ee49f7809534569214a","unresolved":true,"context_lines":[{"line_number":101,"context_line":"        --driver-info ipmi_password\u003d\u003cpassword\u003e \\"},{"line_number":102,"context_line":"        --driver-info ipmi_store_cred_in_env\u003dTrue"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"And to swtich back to file-based temporary persistence:"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    baremetal node create --driver ipmi \\"},{"line_number":107,"context_line":"        --driver-info ipmi_address\u003d\u003caddress\u003e \\"}],"source_content_type":"text/x-rst","patch_set":4,"id":"95212a9f_a82a7c36","line":104,"updated":"2024-04-29 21:49:32.000000000","message":"this is your CI failure: ./doc/source/admin/drivers/ipmitool.rst:104: swtich \u003d\u003d\u003e switch","commit_id":"03b4a75e7b0505f69c09997b722438fe3b4ceb0d"},{"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":"0693d6f8b311ed6ea1d8899cca87f1ba2e73300e","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        --driver-info ipmi_password\u003d\u003cpassword\u003e \\"},{"line_number":102,"context_line":"        --driver-info ipmi_store_cred_in_env\u003dTrue"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"And to swtich back to file-based temporary persistence:"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    baremetal node create --driver ipmi \\"},{"line_number":107,"context_line":"        --driver-info ipmi_address\u003d\u003caddress\u003e \\"}],"source_content_type":"text/x-rst","patch_set":4,"id":"de66c482_78dc8fda","line":104,"in_reply_to":"95212a9f_a82a7c36","updated":"2024-05-08 16:36:27.000000000","message":"Acknowledged","commit_id":"03b4a75e7b0505f69c09997b722438fe3b4ceb0d"},{"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":"5833dccda2c54d7b1c781ee49f7809534569214a","unresolved":true,"context_lines":[{"line_number":109,"context_line":"        --driver-info ipmi_password\u003d\u003cpassword\u003e \\"},{"line_number":110,"context_line":"        --driver-info ipmi_store_cred_in_env\u003dFalse"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Advanced configuration"},{"line_number":114,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"57eb2144_7afc4bf2","line":112,"updated":"2024-04-29 21:49:32.000000000","message":"nit: Might want to add a use case here -- e.g. \"Long lived IPMI sessions, such as those for console support, leave files with credentials on the conductor disk for the duration of the session.\"\n\nAlso, for \"switching back\", lets document just not setting the value.\n\nCan be done as a follow-up","commit_id":"03b4a75e7b0505f69c09997b722438fe3b4ceb0d"},{"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":"0693d6f8b311ed6ea1d8899cca87f1ba2e73300e","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        --driver-info ipmi_password\u003d\u003cpassword\u003e \\"},{"line_number":110,"context_line":"        --driver-info ipmi_store_cred_in_env\u003dFalse"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Advanced configuration"},{"line_number":114,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fbdb670a_b2eaf95e","line":112,"in_reply_to":"57eb2144_7afc4bf2","updated":"2024-05-08 16:36:27.000000000","message":"Acknowledged","commit_id":"03b4a75e7b0505f69c09997b722438fe3b4ceb0d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5dd2ce9ecd7e4346b2b6fe28056c31fc87400319","unresolved":false,"context_lines":[{"line_number":86,"context_line":"Changing The Default IPMI Credential Persistence Method"},{"line_number":87,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"- ``ipmi_store_cred_in_env``: IPMI password persistence method;"},{"line_number":90,"context_line":"  defaults to *False*."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"The `ipmi_store_cred_in_env` configuration option allow users to switch"}],"source_content_type":"text/x-rst","patch_set":12,"id":"19cd9451_dc690df5","line":89,"updated":"2024-05-19 15:32:27.000000000","message":"nit: boolean is not a method","commit_id":"391e452850eb08a5be5e1d29739fb6293533e320"},{"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":"a0ae3dd13dd6aa967af33061f67775ab19549bce","unresolved":true,"context_lines":[{"line_number":86,"context_line":"Changing The Default IPMI Credential Persistence Method"},{"line_number":87,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"- ``ipmi_store_cred_in_env``: IPMI password persistence method;"},{"line_number":90,"context_line":"  defaults to *False*."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"The `ipmi_store_cred_in_env` configuration option allow users to switch"}],"source_content_type":"text/x-rst","patch_set":12,"id":"8d1a02cf_ed338fd5","line":89,"in_reply_to":"19cd9451_dc690df5","updated":"2024-05-21 19:08:48.000000000","message":"ack","commit_id":"391e452850eb08a5be5e1d29739fb6293533e320"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5dd2ce9ecd7e4346b2b6fe28056c31fc87400319","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        --driver-info ipmi_address\u003d\u003caddress\u003e \\"},{"line_number":107,"context_line":"        --driver-info ipmi_username\u003d\u003cusername\u003e \\"},{"line_number":108,"context_line":"        --driver-info ipmi_password\u003d\u003cpassword\u003e \\"},{"line_number":109,"context_line":"        --driver-info ipmi_store_cred_in_env\u003dTrue"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"To revert to file-based temporary persistence, either remove the"},{"line_number":112,"context_line":"``ipmi_store_cred_in_env`` parameter or set it to ``False``."}],"source_content_type":"text/x-rst","patch_set":12,"id":"34e31566_8ffb9835","line":109,"updated":"2024-05-19 15:32:27.000000000","message":"What the user case behind allowing users to change this option? I\u0027d expect this to be an option in the configuration.\n\nAny reasons not to do it by default?","commit_id":"391e452850eb08a5be5e1d29739fb6293533e320"},{"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":"a0ae3dd13dd6aa967af33061f67775ab19549bce","unresolved":true,"context_lines":[{"line_number":106,"context_line":"        --driver-info ipmi_address\u003d\u003caddress\u003e \\"},{"line_number":107,"context_line":"        --driver-info ipmi_username\u003d\u003cusername\u003e \\"},{"line_number":108,"context_line":"        --driver-info ipmi_password\u003d\u003cpassword\u003e \\"},{"line_number":109,"context_line":"        --driver-info ipmi_store_cred_in_env\u003dTrue"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"To revert to file-based temporary persistence, either remove the"},{"line_number":112,"context_line":"``ipmi_store_cred_in_env`` parameter or set it to ``False``."}],"source_content_type":"text/x-rst","patch_set":12,"id":"e0ed46b0_ecd9d956","line":109,"in_reply_to":"34e31566_8ffb9835","updated":"2024-05-21 19:08:48.000000000","message":"It\u0027s indeed an option in the configuration (will fix that).\n\nAlso, I don\u0027t see why it can\u0027t be default.\n\nBut giving that the initial implementation preferred temporary file, I can\u0027t really tell.","commit_id":"391e452850eb08a5be5e1d29739fb6293533e320"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0dbc6000596fb03c335f3e886a0d3583e7f449fd","unresolved":true,"context_lines":[{"line_number":87,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"- ``store_cred_in_env``: Boolean flag to determine IPMI password"},{"line_number":90,"context_line":"  persistence method; defaults to *False*."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"The `store_cred_in_env` configuration option allow users to switch"},{"line_number":93,"context_line":"between file-based and environment variable persistence methods for"}],"source_content_type":"text/x-rst","patch_set":26,"id":"18f73bea_03866574","line":90,"updated":"2024-06-17 08:52:06.000000000","message":"nit: you can like to auto-generated documentation of config options like :oslo.config:`ipmi.store_cred_in_env`. Better than duplicating the description.","commit_id":"0fb40ed245fa441500b6f81c44933960435cc0e9"},{"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":"c7091ab8e9e386ca9cfe56ad1b55601868f8161f","unresolved":true,"context_lines":[{"line_number":87,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"- ``store_cred_in_env``: Boolean flag to determine IPMI password"},{"line_number":90,"context_line":"  persistence method; defaults to *False*."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"The `store_cred_in_env` configuration option allow users to switch"},{"line_number":93,"context_line":"between file-based and environment variable persistence methods for"}],"source_content_type":"text/x-rst","patch_set":26,"id":"5040aa51_7e2f3eb4","line":90,"in_reply_to":"18f73bea_03866574","updated":"2024-06-19 21:01:13.000000000","message":"TIL about this trick.","commit_id":"0fb40ed245fa441500b6f81c44933960435cc0e9"}],"ironic/drivers/modules/ipmitool.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a38bc873013a18a1f1b9de46586512a5179278e2","unresolved":true,"context_lines":[{"line_number":71,"context_line":"}"},{"line_number":72,"context_line":"OPTIONAL_PROPERTIES \u003d {"},{"line_number":73,"context_line":"    \u0027ipmi_password\u0027: _(\"password. Optional.\"),"},{"line_number":74,"context_line":"    \u0027ipmi_password_handling_flag\u0027: _(\"Determines how IPMI credentials are \""},{"line_number":75,"context_line":"                                     \"stored during execution: either as \""},{"line_number":76,"context_line":"                                     \"a temporary file (\\\"-f\\\") or as an \""},{"line_number":77,"context_line":"                                     \"environment variable (\\\"-E\\\"). \""}],"source_content_type":"text/x-python","patch_set":2,"id":"050e23cb_9a1e468c","line":74,"updated":"2024-04-27 01:17:40.000000000","message":"perhaps \"ipmi_use_environment_for_auth\" or something short. I guess I\u0027m thinking something so we\u0027re dealing with more a boolean value as opposed to a explicit option passed through.","commit_id":"a302f1be80ad904b836c9b8314a0b13fc7b1b21a"},{"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":"0693d6f8b311ed6ea1d8899cca87f1ba2e73300e","unresolved":false,"context_lines":[{"line_number":71,"context_line":"}"},{"line_number":72,"context_line":"OPTIONAL_PROPERTIES \u003d {"},{"line_number":73,"context_line":"    \u0027ipmi_password\u0027: _(\"password. Optional.\"),"},{"line_number":74,"context_line":"    \u0027ipmi_password_handling_flag\u0027: _(\"Determines how IPMI credentials are \""},{"line_number":75,"context_line":"                                     \"stored during execution: either as \""},{"line_number":76,"context_line":"                                     \"a temporary file (\\\"-f\\\") or as an \""},{"line_number":77,"context_line":"                                     \"environment variable (\\\"-E\\\"). \""}],"source_content_type":"text/x-python","patch_set":2,"id":"9317b3cb_4afb7ec2","line":74,"in_reply_to":"050e23cb_9a1e468c","updated":"2024-05-08 16:36:27.000000000","message":"Acknowledged","commit_id":"a302f1be80ad904b836c9b8314a0b13fc7b1b21a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a38bc873013a18a1f1b9de46586512a5179278e2","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                \"Cipher suites cannot be used with IPMI 1.5\"))"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    if password_handling_flag not in [\u0027-f\u0027, \u0027-E\u0027]:"},{"line_number":449,"context_line":"        raise exception.InvalidParameterValue(_("},{"line_number":450,"context_line":"            \"Invalid password persistence type flag \u0027%s\u0027. \""},{"line_number":451,"context_line":"            \"Expected one of [\u0027-f\u0027, \u0027-E\u0027].\" % password_handling_flag))"},{"line_number":452,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7fb220fc_318f1fd2","line":449,"updated":"2024-04-27 01:17:40.000000000","message":"Smart!","commit_id":"a302f1be80ad904b836c9b8314a0b13fc7b1b21a"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"23ccffb8e08e1ee53e0450d58e07fa75b7d66fe9","unresolved":true,"context_lines":[{"line_number":71,"context_line":"}"},{"line_number":72,"context_line":"OPTIONAL_PROPERTIES \u003d {"},{"line_number":73,"context_line":"    \u0027ipmi_password\u0027: _(\"password. Optional.\"),"},{"line_number":74,"context_line":"    \u0027ipmi_store_cred_in_env\u0027: _(\"Determines how IPMI credentials are stored \""},{"line_number":75,"context_line":"                                \"during execution; either as a temporary file \""},{"line_number":76,"context_line":"                                \"(the default) or as an environment variable. \""},{"line_number":77,"context_line":"                                \"Default is False. Optional.\"),"}],"source_content_type":"text/x-python","patch_set":12,"id":"3897bda4_56701901","line":74,"range":{"start_line":74,"start_character":5,"end_line":74,"end_character":27},"updated":"2024-05-20 14:53:51.000000000","message":"this param seems like too detailed, actually I think maybe we can make this as a default behavior, ideas?","commit_id":"391e452850eb08a5be5e1d29739fb6293533e320"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6bec35d71b0b3b27f3180ac9ba43990e44341497","unresolved":true,"context_lines":[{"line_number":71,"context_line":"}"},{"line_number":72,"context_line":"OPTIONAL_PROPERTIES \u003d {"},{"line_number":73,"context_line":"    \u0027ipmi_password\u0027: _(\"password. Optional.\"),"},{"line_number":74,"context_line":"    \u0027ipmi_store_cred_in_env\u0027: _(\"Determines how IPMI credentials are stored \""},{"line_number":75,"context_line":"                                \"during execution; either as a temporary file \""},{"line_number":76,"context_line":"                                \"(the default) or as an environment variable. \""},{"line_number":77,"context_line":"                                \"Default is False. Optional.\"),"}],"source_content_type":"text/x-python","patch_set":12,"id":"c12d91c6_de204016","line":74,"range":{"start_line":74,"start_character":5,"end_line":74,"end_character":27},"in_reply_to":"3897bda4_56701901","updated":"2024-05-20 16:20:20.000000000","message":"I\u0027m not sure which is best, since the purpose of environment variable was to avoid /tmp with a user restricted file, where as any all someone needs to go look at /proc/\u003cpid\u003e/environ, basically open to the same sort of issue regardless.","commit_id":"391e452850eb08a5be5e1d29739fb6293533e320"},{"author":{"_account_id":24828,"name":"Kaifeng Wang","email":"kaifeng.w@gmail.com","username":"wangkf"},"change_message_id":"435b70d00d7314b747d1a0ffdb21646d8c3bce73","unresolved":true,"context_lines":[{"line_number":71,"context_line":"}"},{"line_number":72,"context_line":"OPTIONAL_PROPERTIES \u003d {"},{"line_number":73,"context_line":"    \u0027ipmi_password\u0027: _(\"password. Optional.\"),"},{"line_number":74,"context_line":"    \u0027ipmi_store_cred_in_env\u0027: _(\"Determines how IPMI credentials are stored \""},{"line_number":75,"context_line":"                                \"during execution; either as a temporary file \""},{"line_number":76,"context_line":"                                \"(the default) or as an environment variable. \""},{"line_number":77,"context_line":"                                \"Default is False. Optional.\"),"}],"source_content_type":"text/x-python","patch_set":12,"id":"cb886488_0611c242","line":74,"range":{"start_line":74,"start_character":5,"end_line":74,"end_character":27},"in_reply_to":"c12d91c6_de204016","updated":"2024-05-21 14:18:53.000000000","message":"I agree, security never be an easy thing, the proc needs root privilege while tmp .. is too obvious to be exploited.","commit_id":"391e452850eb08a5be5e1d29739fb6293533e320"},{"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":"a0ae3dd13dd6aa967af33061f67775ab19549bce","unresolved":true,"context_lines":[{"line_number":71,"context_line":"}"},{"line_number":72,"context_line":"OPTIONAL_PROPERTIES \u003d {"},{"line_number":73,"context_line":"    \u0027ipmi_password\u0027: _(\"password. Optional.\"),"},{"line_number":74,"context_line":"    \u0027ipmi_store_cred_in_env\u0027: _(\"Determines how IPMI credentials are stored \""},{"line_number":75,"context_line":"                                \"during execution; either as a temporary file \""},{"line_number":76,"context_line":"                                \"(the default) or as an environment variable. \""},{"line_number":77,"context_line":"                                \"Default is False. Optional.\"),"}],"source_content_type":"text/x-python","patch_set":12,"id":"fbd73081_338ab8ea","line":74,"range":{"start_line":74,"start_character":5,"end_line":74,"end_character":27},"in_reply_to":"cb886488_0611c242","updated":"2024-05-21 19:08:48.000000000","message":"Kaifeng Wang: I\u0027m open to ideas for the variable name; sometimes I just struggle to come up with good variable names :D.","commit_id":"391e452850eb08a5be5e1d29739fb6293533e320"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5dd2ce9ecd7e4346b2b6fe28056c31fc87400319","unresolved":false,"context_lines":[{"line_number":512,"context_line":"    if driver_info[\u0027store_cred_in_env\u0027]:"},{"line_number":513,"context_line":"        password \u003d driver_info.get(\u0027password\u0027)"},{"line_number":514,"context_line":"        if password:"},{"line_number":515,"context_line":"            os.environ[\u0027IPMI_PASSWORD\u0027] \u003d password"},{"line_number":516,"context_line":"        return \u0027-E\u0027, \u0027\u0027"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    path \u003d _console_pwfile_path(driver_info[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"296b0cb6_ecff6965","line":515,"updated":"2024-05-19 15:32:27.000000000","message":"This modifies environment for the whole Ironic process and is racy. What happens when do nodes with different passwords are deployed at the same time? I think you need to pass the updated environment only to the actual calls.","commit_id":"391e452850eb08a5be5e1d29739fb6293533e320"},{"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":"a0ae3dd13dd6aa967af33061f67775ab19549bce","unresolved":true,"context_lines":[{"line_number":512,"context_line":"    if driver_info[\u0027store_cred_in_env\u0027]:"},{"line_number":513,"context_line":"        password \u003d driver_info.get(\u0027password\u0027)"},{"line_number":514,"context_line":"        if password:"},{"line_number":515,"context_line":"            os.environ[\u0027IPMI_PASSWORD\u0027] \u003d password"},{"line_number":516,"context_line":"        return \u0027-E\u0027, \u0027\u0027"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    path \u003d _console_pwfile_path(driver_info[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"4c0c1626_f9402994","line":515,"in_reply_to":"296b0cb6_ecff6965","updated":"2024-05-21 19:08:48.000000000","message":"Great call !","commit_id":"391e452850eb08a5be5e1d29739fb6293533e320"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6bec35d71b0b3b27f3180ac9ba43990e44341497","unresolved":true,"context_lines":[{"line_number":512,"context_line":"    if driver_info[\u0027store_cred_in_env\u0027]:"},{"line_number":513,"context_line":"        password \u003d driver_info.get(\u0027password\u0027)"},{"line_number":514,"context_line":"        if password:"},{"line_number":515,"context_line":"            os.environ[\u0027IPMI_PASSWORD\u0027] \u003d password"},{"line_number":516,"context_line":"        return \u0027-E\u0027, \u0027\u0027"},{"line_number":517,"context_line":""},{"line_number":518,"context_line":"    path \u003d _console_pwfile_path(driver_info[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"14990875_3688beec","line":515,"in_reply_to":"296b0cb6_ecff6965","updated":"2024-05-20 16:20:20.000000000","message":"This is a bit concerning, I agree with Dmtiry. I think the right path is to invoke the oslo.concurrency.processutils.execute() method with a \"env_variables\" parameter. \n\nhttps://github.com/openstack/oslo.concurrency/blob/master/oslo_concurrency/processutils.py#L217-L219","commit_id":"391e452850eb08a5be5e1d29739fb6293533e320"},{"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":"ae473b4c0498ccd96dd0e0faa47499d8ffb2bace","unresolved":true,"context_lines":[{"line_number":289,"context_line":"             temporary file"},{"line_number":290,"context_line":"    \"\"\""},{"line_number":291,"context_line":"    if driver_info[\u0027store_cred_in_env\u0027]:"},{"line_number":292,"context_line":"        yield _persist_ipmi_password(driver_info)"},{"line_number":293,"context_line":"    else:"},{"line_number":294,"context_line":"        f \u003d None"},{"line_number":295,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":16,"id":"e0d6853f_383a3b83","line":292,"updated":"2024-05-23 16:18:29.000000000","message":"If we\u0027re going to handle both cases inside this method, we should no longer call it _make_password_path() since it\u0027s not just working with files/paths anymore. An alternate response to this feedback would be moving the branching of env / file methods up the call stack.","commit_id":"ed4e8bdf02e1a62074fd15032006e5cc646dced6"},{"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":"1a894c675078986115fa4ce6bcd4b034a4548a7a","unresolved":false,"context_lines":[{"line_number":289,"context_line":"             temporary file"},{"line_number":290,"context_line":"    \"\"\""},{"line_number":291,"context_line":"    if driver_info[\u0027store_cred_in_env\u0027]:"},{"line_number":292,"context_line":"        yield _persist_ipmi_password(driver_info)"},{"line_number":293,"context_line":"    else:"},{"line_number":294,"context_line":"        f \u003d None"},{"line_number":295,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa161089_2544f674","line":292,"in_reply_to":"e0d6853f_383a3b83","updated":"2024-05-27 13:39:35.000000000","message":"Acknowledged","commit_id":"ed4e8bdf02e1a62074fd15032006e5cc646dced6"},{"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":"ae473b4c0498ccd96dd0e0faa47499d8ffb2bace","unresolved":true,"context_lines":[{"line_number":446,"context_line":"        \u0027dest_port\u0027: dest_port,"},{"line_number":447,"context_line":"        \u0027username\u0027: username,"},{"line_number":448,"context_line":"        \u0027password\u0027: password,"},{"line_number":449,"context_line":"        \u0027store_cred_in_env\u0027: CONF.ipmi.store_cred_in_env,"},{"line_number":450,"context_line":"        \u0027hex_kg_key\u0027: hex_kg_key,"},{"line_number":451,"context_line":"        \u0027port\u0027: port,"},{"line_number":452,"context_line":"        \u0027uuid\u0027: node.uuid,"}],"source_content_type":"text/x-python","patch_set":16,"id":"f4c18eca_941207f6","line":449,"updated":"2024-05-23 16:18:29.000000000","message":"Since this is no longer being supported as a per-node change, we should not be putting this value in driver_info. Downstream code should be able to check CONF.ipmi.store_cred_in_env as needed without having it passed through driver_info.","commit_id":"ed4e8bdf02e1a62074fd15032006e5cc646dced6"},{"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":"1a894c675078986115fa4ce6bcd4b034a4548a7a","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        \u0027dest_port\u0027: dest_port,"},{"line_number":447,"context_line":"        \u0027username\u0027: username,"},{"line_number":448,"context_line":"        \u0027password\u0027: password,"},{"line_number":449,"context_line":"        \u0027store_cred_in_env\u0027: CONF.ipmi.store_cred_in_env,"},{"line_number":450,"context_line":"        \u0027hex_kg_key\u0027: hex_kg_key,"},{"line_number":451,"context_line":"        \u0027port\u0027: port,"},{"line_number":452,"context_line":"        \u0027uuid\u0027: node.uuid,"}],"source_content_type":"text/x-python","patch_set":16,"id":"fd5f9a31_125e5b3a","line":449,"in_reply_to":"f4c18eca_941207f6","updated":"2024-05-27 13:39:35.000000000","message":"Acknowledged","commit_id":"ed4e8bdf02e1a62074fd15032006e5cc646dced6"},{"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":"ae473b4c0498ccd96dd0e0faa47499d8ffb2bace","unresolved":true,"context_lines":[{"line_number":671,"context_line":"        with _make_password_path(driver_info) as (flag, env_path):"},{"line_number":672,"context_line":"            cmd_args.append(flag)"},{"line_number":673,"context_line":"            if env_path:"},{"line_number":674,"context_line":"                if isinstance(env_path, dict):"},{"line_number":675,"context_line":"                    extra_args[\u0027env_variables\u0027] \u003d env_path"},{"line_number":676,"context_line":"                else:"},{"line_number":677,"context_line":"                    cmd_args.append(env_path)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9fc7d855_4ae587c2","line":674,"updated":"2024-05-23 16:18:29.000000000","message":"Using the type to dictate behavior here is OK, but if you moved the if statement around store_cred_in_env to this level, you could avoid that pattern and not have to rely on the type.","commit_id":"ed4e8bdf02e1a62074fd15032006e5cc646dced6"},{"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":"1a894c675078986115fa4ce6bcd4b034a4548a7a","unresolved":false,"context_lines":[{"line_number":671,"context_line":"        with _make_password_path(driver_info) as (flag, env_path):"},{"line_number":672,"context_line":"            cmd_args.append(flag)"},{"line_number":673,"context_line":"            if env_path:"},{"line_number":674,"context_line":"                if isinstance(env_path, dict):"},{"line_number":675,"context_line":"                    extra_args[\u0027env_variables\u0027] \u003d env_path"},{"line_number":676,"context_line":"                else:"},{"line_number":677,"context_line":"                    cmd_args.append(env_path)"}],"source_content_type":"text/x-python","patch_set":16,"id":"f5580d30_51085ef1","line":674,"in_reply_to":"9fc7d855_4ae587c2","updated":"2024-05-27 13:39:35.000000000","message":"Acknowledged","commit_id":"ed4e8bdf02e1a62074fd15032006e5cc646dced6"},{"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":"ae473b4c0498ccd96dd0e0faa47499d8ffb2bace","unresolved":true,"context_lines":[{"line_number":1572,"context_line":"                 created"},{"line_number":1573,"context_line":"        :raises: ConsoleSubprocessFailed when invoking the subprocess failed"},{"line_number":1574,"context_line":"        \"\"\""},{"line_number":1575,"context_line":"        _, path \u003d _persist_ipmi_password(driver_info)"},{"line_number":1576,"context_line":"        ipmi_cmd \u003d self._get_ipmi_cmd(driver_info, pw_file\u003dpath)"},{"line_number":1577,"context_line":"        ipmi_cmd +\u003d \u0027 sol activate\u0027"},{"line_number":1578,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"b6ef9b91_79688bba","line":1575,"updated":"2024-05-23 16:18:29.000000000","message":"Unless there\u0027s a good reason it\u0027s not, we should switch this code to use _exec_ipmitool -- it\u0027s the only code that\u0027s independently managing credentials.","commit_id":"ed4e8bdf02e1a62074fd15032006e5cc646dced6"},{"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":"bf69a8749a1ab1ecffa85d37f67e1bc6e52dadeb","unresolved":true,"context_lines":[{"line_number":1572,"context_line":"                 created"},{"line_number":1573,"context_line":"        :raises: ConsoleSubprocessFailed when invoking the subprocess failed"},{"line_number":1574,"context_line":"        \"\"\""},{"line_number":1575,"context_line":"        _, path \u003d _persist_ipmi_password(driver_info)"},{"line_number":1576,"context_line":"        ipmi_cmd \u003d self._get_ipmi_cmd(driver_info, pw_file\u003dpath)"},{"line_number":1577,"context_line":"        ipmi_cmd +\u003d \u0027 sol activate\u0027"},{"line_number":1578,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"daf59bd0_ee02b331","line":1575,"in_reply_to":"60dfb0f0_98cd7691","updated":"2024-05-28 09:42:05.000000000","message":"We should make sure to followup on this, or put it in this patch anyway. I\u0027m not surprised the unit test mocks would have to change for this to work. I suspect you\u0027d have to mock out _exec_ipmitool or utils.execute instead of some other method like it done in other tests (e.g. https://opendev.org/openstack/ironic/src/branch/master/ironic/tests/unit/drivers/modules/test_ipmitool.py#L900 ) .","commit_id":"ed4e8bdf02e1a62074fd15032006e5cc646dced6"},{"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":"1a894c675078986115fa4ce6bcd4b034a4548a7a","unresolved":true,"context_lines":[{"line_number":1572,"context_line":"                 created"},{"line_number":1573,"context_line":"        :raises: ConsoleSubprocessFailed when invoking the subprocess failed"},{"line_number":1574,"context_line":"        \"\"\""},{"line_number":1575,"context_line":"        _, path \u003d _persist_ipmi_password(driver_info)"},{"line_number":1576,"context_line":"        ipmi_cmd \u003d self._get_ipmi_cmd(driver_info, pw_file\u003dpath)"},{"line_number":1577,"context_line":"        ipmi_cmd +\u003d \u0027 sol activate\u0027"},{"line_number":1578,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"60dfb0f0_98cd7691","line":1575,"in_reply_to":"b6ef9b91_79688bba","updated":"2024-05-27 13:39:35.000000000","message":"This switch causes an ``Exception: Don\u0027t call ironic_lib.utils.execute() / processutils.execute() or similar functions in tests!``\n\nI assume it has to do with mocking. A possible follow!","commit_id":"ed4e8bdf02e1a62074fd15032006e5cc646dced6"},{"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":"390be61840fef17233bb7516ff405b3ffdb02549","unresolved":true,"context_lines":[{"line_number":707,"context_line":"                                    \u0027\"%(cmd)s\" for node %(node)s. \u0027"},{"line_number":708,"context_line":"                                    \u0027Error: %(error)s\u0027,"},{"line_number":709,"context_line":"                                    {\u0027node\u0027: driver_info[\u0027uuid\u0027],"},{"line_number":710,"context_line":"                                        \u0027cmd\u0027: e.cmd, \u0027error\u0027: e})"},{"line_number":711,"context_line":"            finally:"},{"line_number":712,"context_line":"                LAST_CMD_TIME[driver_info[\u0027address\u0027]] \u003d time.time()"},{"line_number":713,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"be77d32d_3aa24aa3","line":710,"updated":"2024-05-30 15:31:32.000000000","message":"extra whitespace?","commit_id":"370b374d1fff327fc21caf1a71959174dd9a9d35"},{"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":"d08113f953c5f3c8f16cdf6d136a26f1d36f1983","unresolved":false,"context_lines":[{"line_number":707,"context_line":"                                    \u0027\"%(cmd)s\" for node %(node)s. \u0027"},{"line_number":708,"context_line":"                                    \u0027Error: %(error)s\u0027,"},{"line_number":709,"context_line":"                                    {\u0027node\u0027: driver_info[\u0027uuid\u0027],"},{"line_number":710,"context_line":"                                        \u0027cmd\u0027: e.cmd, \u0027error\u0027: e})"},{"line_number":711,"context_line":"            finally:"},{"line_number":712,"context_line":"                LAST_CMD_TIME[driver_info[\u0027address\u0027]] \u003d time.time()"},{"line_number":713,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"bf495525_4314365e","line":710,"in_reply_to":"be77d32d_3aa24aa3","updated":"2024-06-04 12:00:16.000000000","message":"Acknowledged","commit_id":"370b374d1fff327fc21caf1a71959174dd9a9d35"},{"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":"390be61840fef17233bb7516ff405b3ffdb02549","unresolved":true,"context_lines":[{"line_number":1572,"context_line":"                 created"},{"line_number":1573,"context_line":"        :raises: ConsoleSubprocessFailed when invoking the subprocess failed"},{"line_number":1574,"context_line":"        \"\"\""},{"line_number":1575,"context_line":"        cmd \u003d \u0027sol activate\u0027"},{"line_number":1576,"context_line":"        ipmi_cmd \u003d self._get_ipmi_cmd(driver_info, pw_file\u003dNone)"},{"line_number":1577,"context_line":"        ipmi_cmd +\u003d cmd"},{"line_number":1578,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":23,"id":"db7deca4_527699ed","line":1575,"updated":"2024-05-30 15:31:32.000000000","message":"I think this needs a prepended space? At least it had one before...","commit_id":"370b374d1fff327fc21caf1a71959174dd9a9d35"},{"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":"390be61840fef17233bb7516ff405b3ffdb02549","unresolved":true,"context_lines":[{"line_number":1579,"context_line":"            out, err \u003d _exec_ipmitool(driver_info, cmd)"},{"line_number":1580,"context_line":"            start_method(driver_info[\u0027uuid\u0027], driver_info[\u0027port\u0027], ipmi_cmd)"},{"line_number":1581,"context_line":"        except (exception.ConsoleError, exception.ConsoleSubprocessFailed):"},{"line_number":1582,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1583,"context_line":"                pass"},{"line_number":1584,"context_line":""},{"line_number":1585,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"58595cbf_cd9c48d4","line":1582,"updated":"2024-05-30 15:31:32.000000000","message":"This likely needs a LOG.exception() message indicating why things failed (as best as we can tell).","commit_id":"370b374d1fff327fc21caf1a71959174dd9a9d35"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0dbc6000596fb03c335f3e886a0d3583e7f449fd","unresolved":true,"context_lines":[{"line_number":707,"context_line":"                                    \u0027\"%(cmd)s\" for node %(node)s. \u0027"},{"line_number":708,"context_line":"                                    \u0027Error: %(error)s\u0027,"},{"line_number":709,"context_line":"                                    {\u0027node\u0027: driver_info[\u0027uuid\u0027],"},{"line_number":710,"context_line":"                                        \u0027cmd\u0027: e.cmd, \u0027error\u0027: e})"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"            finally:"},{"line_number":713,"context_line":"                LAST_CMD_TIME[driver_info[\u0027address\u0027]] \u003d time.time()"}],"source_content_type":"text/x-python","patch_set":26,"id":"3142d582_903f4692","line":710,"updated":"2024-06-17 08:52:06.000000000","message":"nit: this is not a valid whitespace change, I don\u0027t quite get why pep8 allows it","commit_id":"0fb40ed245fa441500b6f81c44933960435cc0e9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0dbc6000596fb03c335f3e886a0d3583e7f449fd","unresolved":true,"context_lines":[{"line_number":1576,"context_line":""},{"line_number":1577,"context_line":"        cmd \u003d \u0027 sol activate\u0027"},{"line_number":1578,"context_line":"        try:"},{"line_number":1579,"context_line":"            out, err \u003d _exec_ipmitool(driver_info, cmd)"},{"line_number":1580,"context_line":""},{"line_number":1581,"context_line":"            cmd \u003d self._get_ipmi_cmd(driver_info, pw_file\u003dNone) + cmd"},{"line_number":1582,"context_line":"            start_method(driver_info[\u0027uuid\u0027], driver_info[\u0027port\u0027], cmd)"}],"source_content_type":"text/x-python","patch_set":26,"id":"f1210ce7_3343b08c","line":1579,"updated":"2024-06-17 08:52:06.000000000","message":"This should not be here, you end up running the same command twice (the command is run another time inside of start_method - probably without your environment variable addition).","commit_id":"0fb40ed245fa441500b6f81c44933960435cc0e9"}],"ironic/tests/unit/drivers/modules/test_ipmitool.py":[{"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":"a0ae3dd13dd6aa967af33061f67775ab19549bce","unresolved":true,"context_lines":[{"line_number":1889,"context_line":"        self.assertEqual([\u0027-R\u0027, \u00277\u0027, \u0027-N\u0027, \u00271\u0027], ipmi._ipmitool_timing_args())"},{"line_number":1890,"context_line":""},{"line_number":1891,"context_line":""},{"line_number":1892,"context_line":"class IPMIToolPrivateMethodOnEnvPersistenceTestCase("},{"line_number":1893,"context_line":"        Base,"},{"line_number":1894,"context_line":"        metaclass\u003dIPMIToolPrivateMethodTestCaseMeta):"},{"line_number":1895,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"47858565_ac4b0e67","line":1892,"range":{"start_line":1892,"start_character":6,"end_line":1892,"end_character":51},"updated":"2024-05-21 19:08:48.000000000","message":"Do we need this many new tests?","commit_id":"00c0509425c894dc1cc0d37d74fa9d8596924331"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0dbc6000596fb03c335f3e886a0d3583e7f449fd","unresolved":true,"context_lines":[{"line_number":1889,"context_line":"        self.assertEqual([\u0027-R\u0027, \u00277\u0027, \u0027-N\u0027, \u00271\u0027], ipmi._ipmitool_timing_args())"},{"line_number":1890,"context_line":""},{"line_number":1891,"context_line":""},{"line_number":1892,"context_line":"class IPMIToolPrivateMethodOnEnvPersistenceTestCase("},{"line_number":1893,"context_line":"        Base,"},{"line_number":1894,"context_line":"        metaclass\u003dIPMIToolPrivateMethodTestCaseMeta):"},{"line_number":1895,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"611ec51b_ada5c937","line":1892,"range":{"start_line":1892,"start_character":6,"end_line":1892,"end_character":51},"in_reply_to":"47858565_ac4b0e67","updated":"2024-06-17 08:52:06.000000000","message":"I would say, you don\u0027t need to duplicate all tests, most of them don\u0027t care about the credentials passing. You need ones for general case and for console.","commit_id":"00c0509425c894dc1cc0d37d74fa9d8596924331"},{"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":"390be61840fef17233bb7516ff405b3ffdb02549","unresolved":true,"context_lines":[{"line_number":490,"context_line":"                                                \u0027ipmitool-shellinabox\u0027,"},{"line_number":491,"context_line":"                                                \u0027no-console\u0027])"},{"line_number":492,"context_line":"        self.config(debug\u003dTrue, group\u003d\"ipmi\")"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        self.node \u003d obj_utils.create_test_node("},{"line_number":495,"context_line":"            self.context,"},{"line_number":496,"context_line":"            console_interface\u003d\u0027ipmitool-socat\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"c1dc8931_cfdb08c5","line":493,"updated":"2024-05-30 15:31:32.000000000","message":"unrelated whitespace addition?","commit_id":"370b374d1fff327fc21caf1a71959174dd9a9d35"},{"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":"b09bb7fa6a2d985a2518486eb48693f2cfb9e736","unresolved":false,"context_lines":[{"line_number":490,"context_line":"                                                \u0027ipmitool-shellinabox\u0027,"},{"line_number":491,"context_line":"                                                \u0027no-console\u0027])"},{"line_number":492,"context_line":"        self.config(debug\u003dTrue, group\u003d\"ipmi\")"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        self.node \u003d obj_utils.create_test_node("},{"line_number":495,"context_line":"            self.context,"},{"line_number":496,"context_line":"            console_interface\u003d\u0027ipmitool-socat\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"a3cbd574_00ee17d8","line":493,"in_reply_to":"c1dc8931_cfdb08c5","updated":"2024-06-04 12:09:30.000000000","message":"Acknowledged","commit_id":"370b374d1fff327fc21caf1a71959174dd9a9d35"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0dbc6000596fb03c335f3e886a0d3583e7f449fd","unresolved":true,"context_lines":[{"line_number":4145,"context_line":"        mock_exec.assert_called_once_with("},{"line_number":4146,"context_line":"            driver_info, \u0027sol deactivate\u0027, check_exit_code\u003d[0, 1])"},{"line_number":4147,"context_line":""},{"line_number":4148,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027, autospec\u003dTrue)"},{"line_number":4149,"context_line":"    @mock.patch.object(ipmi.IPMIConsole, \u0027_get_ipmi_cmd\u0027, autospec\u003dTrue)"},{"line_number":4150,"context_line":"    @mock.patch.object(console_utils, \u0027start_shellinabox_console\u0027,"},{"line_number":4151,"context_line":"                       autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":26,"id":"3e61c7c7_b523904b","line":4148,"updated":"2024-06-17 08:52:06.000000000","message":"Should not be here (see my other comment)","commit_id":"0fb40ed245fa441500b6f81c44933960435cc0e9"}]}
