)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0cd0ed7794c6f9364bdff529aae35f4bfe099e12","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"f5bffce1_e30346b6","updated":"2023-06-29 06:22:25.000000000","message":"This is going to be useful, thanks","commit_id":"918816781ecb73accf1162087f0a56d406ddd2a6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"ff9e91d9_40cc4c98","updated":"2023-06-29 16:34:25.000000000","message":"Addressing part of comments","commit_id":"63c33135cfe78f13744744bb1c59378982cb60db"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"a65aeea5207357193cadeb89e154559397d361ab","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":25,"id":"f72d17c7_04528c1a","updated":"2023-06-30 13:01:57.000000000","message":"Added a couple of changes needed for capm3 workflow. Not addressed the unresolved comments yet.","commit_id":"1ed3c98b02ebe93da07f3c521ad811e53943b5d7"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"884e8096a85b5b9d65cb5d3aa1e861295174d971","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"0c49f0ea_0cc03a76","in_reply_to":"f72d17c7_04528c1a","updated":"2024-03-19 13:17:35.000000000","message":"Acknowledged","commit_id":"1ed3c98b02ebe93da07f3c521ad811e53943b5d7"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"2a6f5fd6ceae99cc5ad3387ea4930c20058870c2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"d329fa50_3fed2ed8","updated":"2023-08-04 12:21:34.000000000","message":"I have addressed most of the comments. Some improvement other improvement either question to understand better or needed refactoring many files here I suggested to merge the first working code as it was tested with 1k nodes and I can do the other improvements as a follow up changes","commit_id":"1ec79590762bd30bf4e6f8930b176ef862eaf1a7"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":38,"id":"4ada8c88_14695973","updated":"2023-12-04 10:13:18.000000000","message":"comment addressed please check","commit_id":"2a4eecc6d877b10f17ff6c1d6a855f073ddec467"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":39,"id":"071cd5c4_9ac08b32","updated":"2024-01-26 16:19:59.000000000","message":"I think this is a huge improvement, thank you! A few more comments inline.","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"b4f280c5a73e5eed79e89d7e4462b0a7f27896e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"f357e6cf_c44f7607","updated":"2024-02-16 14:00:10.000000000","message":"-1 to highlight some outstanding comments","commit_id":"e4c5d519be943394226c259f9b47688e99574c58"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"2dcbdc80_fdae099b","updated":"2024-02-06 13:30:24.000000000","message":"Thanks for the reviews I addressed the comments","commit_id":"e4c5d519be943394226c259f9b47688e99574c58"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"7419de75_c08e3ee0","updated":"2024-02-21 10:53:10.000000000","message":"resolved done comments","commit_id":"e4c5d519be943394226c259f9b47688e99574c58"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9640fc6e02e419e2cf7eed2d2816e4fc1d801649","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":48,"id":"470786c2_206dc7a1","updated":"2024-04-01 14:15:25.000000000","message":"A few things. For what it is worth, it might help to have an invocation script or tie this into a test job. That doesn\u0027t need to be in this patch, but one of the net patches it might be helpful.","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4df1a3d363b86c0eae5daaaaee84028d9c0e9c30","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":48,"id":"f19afaef_d69febe5","updated":"2024-04-04 14:03:07.000000000","message":"Comments addressed can you please check again","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"7d963b9b1ff2d9d09ae2377c525a218735731888","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":51,"id":"995148d3_bdac6c83","updated":"2024-04-24 04:24:51.000000000","message":"ACK resolved comments","commit_id":"72957ac1f9ec47aee548b35c8f7f0a80b97e5278"}],"requirements.txt":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"25a93cda51c20ab2cd166aaa8933a57284eb5b32","unresolved":true,"context_lines":[{"line_number":11,"context_line":"requests\u003e\u003d2.14.2 # Apache-2.0"},{"line_number":12,"context_line":"tenacity\u003e\u003d6.2.0 # Apache-2.0"},{"line_number":13,"context_line":"ironic-lib\u003e\u003d4.6.1 # Apache-2.0"},{"line_number":14,"context_line":"oslo.service\u003e\u003d3.1.1 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":5,"id":"2f469a34_79e84ad6","line":14,"updated":"2023-03-02 08:40:04.000000000","message":"Please don\u0027t pull any oslo stuff in this project, we\u0027re trying to avoid openstack dependencies.","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"6c85aa251355723797b0a0760819c24785794531","unresolved":true,"context_lines":[{"line_number":11,"context_line":"requests\u003e\u003d2.14.2 # Apache-2.0"},{"line_number":12,"context_line":"tenacity\u003e\u003d6.2.0 # Apache-2.0"},{"line_number":13,"context_line":"ironic-lib\u003e\u003d4.6.1 # Apache-2.0"},{"line_number":14,"context_line":"oslo.service\u003e\u003d3.1.1 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":5,"id":"b56a036d_43dd84ff","line":14,"in_reply_to":"2f469a34_79e84ad6","updated":"2023-03-02 14:21:21.000000000","message":"I will avoid that, What about openstacksdk?","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"5b3ca7c5cdf3bd5eecf3be2e4f90718ee0178561","unresolved":false,"context_lines":[{"line_number":11,"context_line":"requests\u003e\u003d2.14.2 # Apache-2.0"},{"line_number":12,"context_line":"tenacity\u003e\u003d6.2.0 # Apache-2.0"},{"line_number":13,"context_line":"ironic-lib\u003e\u003d4.6.1 # Apache-2.0"},{"line_number":14,"context_line":"oslo.service\u003e\u003d3.1.1 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":5,"id":"06bb91ce_5b44c6ae","line":14,"in_reply_to":"b56a036d_43dd84ff","updated":"2023-05-26 14:49:52.000000000","message":"Done","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":11,"context_line":"requests\u003e\u003d2.14.2 # Apache-2.0"},{"line_number":12,"context_line":"tenacity\u003e\u003d6.2.0 # Apache-2.0"},{"line_number":13,"context_line":"ironic-lib\u003e\u003d4.6.1 # Apache-2.0"},{"line_number":14,"context_line":"oslo.log\u003e\u003d4.3.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":22,"id":"b597739b_c0c34af9","line":14,"updated":"2023-06-28 15:00:53.000000000","message":"Please no oslo.log here. We\u0027re keeping this project clear of openstack dependencies.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"requests\u003e\u003d2.14.2 # Apache-2.0"},{"line_number":12,"context_line":"tenacity\u003e\u003d6.2.0 # Apache-2.0"},{"line_number":13,"context_line":"ironic-lib\u003e\u003d4.6.1 # Apache-2.0"},{"line_number":14,"context_line":"oslo.log\u003e\u003d4.3.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":22,"id":"5ff45a5f_0d5ad12b","line":14,"in_reply_to":"b597739b_c0c34af9","updated":"2023-06-29 16:34:25.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"}],"setup.cfg":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    sushy-static \u003d sushy_tools.static.main:main"},{"line_number":31,"context_line":"    sushy-fake-ipa \u003d sushy_tools.fake_ipa.main:main"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"ironic_python_agent.extensions \u003d"},{"line_number":34,"context_line":"    standby \u003d sushy_tools.fake_ipa.standby:StandbyExtension"},{"line_number":35,"context_line":"    clean \u003d sushy_tools.fake_ipa.clean:CleanExtension"},{"line_number":36,"context_line":"    deploy \u003d sushy_tools.fake_ipa.deploy:DeployExtension"}],"source_content_type":"text/x-ttcn-cfg","patch_set":18,"id":"7eb915a8_fdf9abd4","line":33,"updated":"2023-04-27 08:24:09.000000000","message":"You cannot use the same entrypoint as IPA, it\u0027s a potential conflict.\n\nBut you also do not need extensions here since it\u0027s not a real IPA.","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"174fc3db595dea5ad1cd7e3f258fa47b15979a2c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    sushy-static \u003d sushy_tools.static.main:main"},{"line_number":31,"context_line":"    sushy-fake-ipa \u003d sushy_tools.fake_ipa.main:main"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"ironic_python_agent.extensions \u003d"},{"line_number":34,"context_line":"    standby \u003d sushy_tools.fake_ipa.standby:StandbyExtension"},{"line_number":35,"context_line":"    clean \u003d sushy_tools.fake_ipa.clean:CleanExtension"},{"line_number":36,"context_line":"    deploy \u003d sushy_tools.fake_ipa.deploy:DeployExtension"}],"source_content_type":"text/x-ttcn-cfg","patch_set":18,"id":"257cacc4_ce4e7726","line":33,"in_reply_to":"7eb915a8_fdf9abd4","updated":"2023-05-26 14:48:33.000000000","message":"If possible to keep the same structure like real IPA I will just change the name from ironic_python_agent to fake_ironic_python_agent","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    sushy-static \u003d sushy_tools.static.main:main"},{"line_number":31,"context_line":"    sushy-fake-ipa \u003d sushy_tools.fake_ipa.main:main"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"ironic_python_agent.extensions \u003d"},{"line_number":34,"context_line":"    standby \u003d sushy_tools.fake_ipa.standby:StandbyExtension"},{"line_number":35,"context_line":"    clean \u003d sushy_tools.fake_ipa.clean:CleanExtension"},{"line_number":36,"context_line":"    deploy \u003d sushy_tools.fake_ipa.deploy:DeployExtension"}],"source_content_type":"text/x-ttcn-cfg","patch_set":22,"id":"e62abeff_9b390594","line":33,"updated":"2023-06-28 15:00:53.000000000","message":"There is no need for extensions here (and this name will conflict with IPA).","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"e1952da8d7e1ea7d2ad2f97276f3490a014da6d1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    sushy-static \u003d sushy_tools.static.main:main"},{"line_number":31,"context_line":"    sushy-fake-ipa \u003d sushy_tools.fake_ipa.main:main"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"ironic_python_agent.extensions \u003d"},{"line_number":34,"context_line":"    standby \u003d sushy_tools.fake_ipa.standby:StandbyExtension"},{"line_number":35,"context_line":"    clean \u003d sushy_tools.fake_ipa.clean:CleanExtension"},{"line_number":36,"context_line":"    deploy \u003d sushy_tools.fake_ipa.deploy:DeployExtension"}],"source_content_type":"text/x-ttcn-cfg","patch_set":22,"id":"a81d827b_e812fcae","line":33,"in_reply_to":"216c608d_a48e178f","updated":"2023-08-04 08:51:21.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    sushy-static \u003d sushy_tools.static.main:main"},{"line_number":31,"context_line":"    sushy-fake-ipa \u003d sushy_tools.fake_ipa.main:main"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"ironic_python_agent.extensions \u003d"},{"line_number":34,"context_line":"    standby \u003d sushy_tools.fake_ipa.standby:StandbyExtension"},{"line_number":35,"context_line":"    clean \u003d sushy_tools.fake_ipa.clean:CleanExtension"},{"line_number":36,"context_line":"    deploy \u003d sushy_tools.fake_ipa.deploy:DeployExtension"}],"source_content_type":"text/x-ttcn-cfg","patch_set":22,"id":"216c608d_a48e178f","line":33,"in_reply_to":"e62abeff_9b390594","updated":"2023-06-29 16:34:25.000000000","message":"changed the name to sushy_tools.fake_ipa","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"}],"sushy_tools/emulator/resources/systems/fake_ipa/__init__.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"25a93cda51c20ab2cd166aaa8933a57284eb5b32","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ea0d1341_a2f24346","updated":"2023-03-02 08:40:04.000000000","message":"These files are misplaces: emulator/resources/systems is a path specifically for the systems parts of the emulator. If you\u0027re planning on a new WSGI entry point, you need to put it under sushy_tools directly.","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"99a49071d7d5fb116e933f1c1b70af805afb4f1d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7ad5ca58_e777001f","in_reply_to":"1814ddda_81f8ed3c","updated":"2023-05-26 14:49:25.000000000","message":"Done","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"6c85aa251355723797b0a0760819c24785794531","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1814ddda_81f8ed3c","in_reply_to":"ea0d1341_a2f24346","updated":"2023-03-02 14:21:21.000000000","message":"was not yet sure where to place fake_ipa module it can be split into api that can be entry point and fakeboot including (fake inspection , lookup and heartbeater) that runs in thread after turning on a fake_node with fake_ipa enabled","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"}],"sushy_tools/emulator/resources/systems/fake_ipa/fake_ipa_api.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"25a93cda51c20ab2cd166aaa8933a57284eb5b32","unresolved":true,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_log import log"},{"line_number":19,"context_line":"from oslo_service import wsgi"},{"line_number":20,"context_line":"import werkzeug"},{"line_number":21,"context_line":"from werkzeug import exceptions as http_exc"},{"line_number":22,"context_line":"from werkzeug import routing"}],"source_content_type":"text/x-python","patch_set":5,"id":"5d6e85af_7d092483","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":29},"updated":"2023-03-02 08:40:04.000000000","message":"I\u0027d prefer you use flask as everything else here.","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"6c85aa251355723797b0a0760819c24785794531","unresolved":true,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_log import log"},{"line_number":19,"context_line":"from oslo_service import wsgi"},{"line_number":20,"context_line":"import werkzeug"},{"line_number":21,"context_line":"from werkzeug import exceptions as http_exc"},{"line_number":22,"context_line":"from werkzeug import routing"}],"source_content_type":"text/x-python","patch_set":5,"id":"61f1dd10_8179b9eb","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":29},"in_reply_to":"5d6e85af_7d092483","updated":"2023-03-02 14:21:21.000000000","message":"+1 to use flask, In this WIP I am just extracting what I need from IPA as a step to understand the original code in lightweight env:\nCurrently trying to understand how the commands are executed as in fake_ipa we manage multiple nodes, we have to identify the target node for each request for example `get_clean_steps` it can use the `uuid` from `params` to select the node but after `execute_clean_step` runs async and return results_id not yet sure how ironic will follow the status but it seems it will not include uuid or token then not sure how to identify the node to get its command results.\n\nbasically this part is still WIP trying to have something working then refactor using flask","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"99a49071d7d5fb116e933f1c1b70af805afb4f1d","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_log import log"},{"line_number":19,"context_line":"from oslo_service import wsgi"},{"line_number":20,"context_line":"import werkzeug"},{"line_number":21,"context_line":"from werkzeug import exceptions as http_exc"},{"line_number":22,"context_line":"from werkzeug import routing"}],"source_content_type":"text/x-python","patch_set":5,"id":"345d88f5_99d591a4","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":29},"in_reply_to":"61f1dd10_8179b9eb","updated":"2023-05-26 14:49:25.000000000","message":"Done","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"}],"sushy_tools/emulator/resources/systems/fake_ipa/ironic_api_client.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"25a93cda51c20ab2cd166aaa8933a57284eb5b32","unresolved":true,"context_lines":[{"line_number":31,"context_line":"        cls._logger \u003d logger"},{"line_number":32,"context_line":"        return cls"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def __init__(self, node, api_url):"},{"line_number":35,"context_line":"        self.api_url \u003d api_url.rstrip(\u0027/\u0027)"},{"line_number":36,"context_line":"        self.node \u003d node"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"d5e4b9a9_e78bcc59","line":34,"updated":"2023-03-02 08:40:04.000000000","message":"Rather than copying this from IPA, you\u0027ll be better off just using openstacksdk.","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"99a49071d7d5fb116e933f1c1b70af805afb4f1d","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        cls._logger \u003d logger"},{"line_number":32,"context_line":"        return cls"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def __init__(self, node, api_url):"},{"line_number":35,"context_line":"        self.api_url \u003d api_url.rstrip(\u0027/\u0027)"},{"line_number":36,"context_line":"        self.node \u003d node"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"038eb78f_4217e22b","line":34,"in_reply_to":"84191cc1_5682cf4d","updated":"2023-05-26 14:49:25.000000000","message":"Done","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"},{"author":{"_account_id":35813,"name":"Furkat","display_name":"Furkat Gofurov","email":"furkat.gofurov@est.tech","username":"fgofurov"},"change_message_id":"7c314cb700fdf74692c35c971bae2ae2237a4217","unresolved":true,"context_lines":[{"line_number":31,"context_line":"        cls._logger \u003d logger"},{"line_number":32,"context_line":"        return cls"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def __init__(self, node, api_url):"},{"line_number":35,"context_line":"        self.api_url \u003d api_url.rstrip(\u0027/\u0027)"},{"line_number":36,"context_line":"        self.node \u003d node"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"84191cc1_5682cf4d","line":34,"in_reply_to":"ad1292ca_efd8d157","updated":"2023-03-15 11:43:22.000000000","message":"@dtantsur, what does it really take to make use of openstacksdk here? or what do we want to get rid of here and instead use openstacksdk?","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"6c85aa251355723797b0a0760819c24785794531","unresolved":true,"context_lines":[{"line_number":31,"context_line":"        cls._logger \u003d logger"},{"line_number":32,"context_line":"        return cls"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def __init__(self, node, api_url):"},{"line_number":35,"context_line":"        self.api_url \u003d api_url.rstrip(\u0027/\u0027)"},{"line_number":36,"context_line":"        self.node \u003d node"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ad1292ca_efd8d157","line":34,"in_reply_to":"d5e4b9a9_e78bcc59","updated":"2023-03-02 14:21:21.000000000","message":"Cool not familiar with openstacksdk I will check it","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"}],"sushy_tools/emulator/resources/systems/fakedriver.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"25a93cda51c20ab2cd166aaa8933a57284eb5b32","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        ])"},{"line_number":46,"context_line":"        cls._config \u003d config"},{"line_number":47,"context_line":"        cls._logger \u003d logger"},{"line_number":48,"context_line":"        FakeIronicPythonAgent.initialize(None, logger)"},{"line_number":49,"context_line":"        return cls"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"6462f47b_1d4c5c90","line":48,"updated":"2023-03-02 08:40:04.000000000","message":"The last thing we discussed was the idea to start fake IPA in a separate process. Has it been cancelled?","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"6c85aa251355723797b0a0760819c24785794531","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        ])"},{"line_number":46,"context_line":"        cls._config \u003d config"},{"line_number":47,"context_line":"        cls._logger \u003d logger"},{"line_number":48,"context_line":"        FakeIronicPythonAgent.initialize(None, logger)"},{"line_number":49,"context_line":"        return cls"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"c132da9f_de7094f8","line":48,"in_reply_to":"6462f47b_1d4c5c90","updated":"2023-03-02 14:21:21.000000000","message":"In favor of the original idea (extending fake system) I thought it is easier to setup and share drafts and get a quick feedback. I believe running fakeipa outside sushytools (later) will use the same implementation + api interface to communicate and some way to run fakeipa in container supposing sushy and fakeipa use same image\nI postpone these discussion as last steps rather now I want something easy for reviewers to setup and run.","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"5b3ca7c5cdf3bd5eecf3be2e4f90718ee0178561","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        ])"},{"line_number":46,"context_line":"        cls._config \u003d config"},{"line_number":47,"context_line":"        cls._logger \u003d logger"},{"line_number":48,"context_line":"        FakeIronicPythonAgent.initialize(None, logger)"},{"line_number":49,"context_line":"        return cls"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"103eeca9_0f4b3f5c","line":48,"in_reply_to":"c132da9f_de7094f8","updated":"2023-05-26 14:49:52.000000000","message":"Done","commit_id":"137572a673799cb57034cdb160814c7f7aba62ee"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"8296b1cd7f39a77de41344dc5586d17ec15a5da4","unresolved":true,"context_lines":[{"line_number":122,"context_line":"                            fake_ipa: %s]\u0027,"},{"line_number":123,"context_line":"                           system.get(\u0027name\u0027), power_state, fake_ipa)"},{"line_number":124,"context_line":"        # if fake_ipa is in booting state boot fake_ipa then set it to enabled."},{"line_number":125,"context_line":"        if power_state in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027booting\u0027:"},{"line_number":126,"context_line":"            self._boot_ipa(system)"},{"line_number":127,"context_line":"        return power_state"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"097c6658_7310b2ef","line":125,"range":{"start_line":125,"start_character":23,"end_line":125,"end_character":25},"updated":"2023-03-28 08:07:02.000000000","message":"\u003d\u003d","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"8296b1cd7f39a77de41344dc5586d17ec15a5da4","unresolved":true,"context_lines":[{"line_number":122,"context_line":"                            fake_ipa: %s]\u0027,"},{"line_number":123,"context_line":"                           system.get(\u0027name\u0027), power_state, fake_ipa)"},{"line_number":124,"context_line":"        # if fake_ipa is in booting state boot fake_ipa then set it to enabled."},{"line_number":125,"context_line":"        if power_state in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027booting\u0027:"},{"line_number":126,"context_line":"            self._boot_ipa(system)"},{"line_number":127,"context_line":"        return power_state"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"d43811ee_d7234750","line":125,"range":{"start_line":125,"start_character":44,"end_line":125,"end_character":59},"updated":"2023-03-28 08:07:02.000000000","message":"\u003d\u003d","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"5b3ca7c5cdf3bd5eecf3be2e4f90718ee0178561","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                            fake_ipa: %s]\u0027,"},{"line_number":123,"context_line":"                           system.get(\u0027name\u0027), power_state, fake_ipa)"},{"line_number":124,"context_line":"        # if fake_ipa is in booting state boot fake_ipa then set it to enabled."},{"line_number":125,"context_line":"        if power_state in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027booting\u0027:"},{"line_number":126,"context_line":"            self._boot_ipa(system)"},{"line_number":127,"context_line":"        return power_state"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"970cbc70_2d95b3dc","line":125,"range":{"start_line":125,"start_character":23,"end_line":125,"end_character":25},"in_reply_to":"097c6658_7310b2ef","updated":"2023-05-26 14:49:52.000000000","message":"Done","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"99a49071d7d5fb116e933f1c1b70af805afb4f1d","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                            fake_ipa: %s]\u0027,"},{"line_number":123,"context_line":"                           system.get(\u0027name\u0027), power_state, fake_ipa)"},{"line_number":124,"context_line":"        # if fake_ipa is in booting state boot fake_ipa then set it to enabled."},{"line_number":125,"context_line":"        if power_state in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027booting\u0027:"},{"line_number":126,"context_line":"            self._boot_ipa(system)"},{"line_number":127,"context_line":"        return power_state"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"0941b4d4_5fd067eb","line":125,"range":{"start_line":125,"start_character":44,"end_line":125,"end_character":59},"in_reply_to":"d43811ee_d7234750","updated":"2023-05-26 14:49:25.000000000","message":"Done","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"8296b1cd7f39a77de41344dc5586d17ec15a5da4","unresolved":true,"context_lines":[{"line_number":150,"context_line":"        if system[\u0027power_state\u0027] !\u003d pending_state:"},{"line_number":151,"context_line":"            # Check if powering off and fake_ipa is enabled then"},{"line_number":152,"context_line":"            # remove the node from heartbeater threads"},{"line_number":153,"context_line":"            if state not in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027enabled\u0027:"},{"line_number":154,"context_line":"                self._logger.info(\u0027Remove the node from heartbeater threads\u0027)"},{"line_number":155,"context_line":"                self._remove_from_heartbeater(system[\u0027uuid\u0027])"},{"line_number":156,"context_line":"            self._update(system, pending_power\u003d{"}],"source_content_type":"text/x-python","patch_set":15,"id":"54affe20_e1430922","line":153,"range":{"start_line":153,"start_character":21,"end_line":153,"end_character":27},"updated":"2023-03-28 08:07:02.000000000","message":"!\u003d","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"8296b1cd7f39a77de41344dc5586d17ec15a5da4","unresolved":true,"context_lines":[{"line_number":150,"context_line":"        if system[\u0027power_state\u0027] !\u003d pending_state:"},{"line_number":151,"context_line":"            # Check if powering off and fake_ipa is enabled then"},{"line_number":152,"context_line":"            # remove the node from heartbeater threads"},{"line_number":153,"context_line":"            if state not in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027enabled\u0027:"},{"line_number":154,"context_line":"                self._logger.info(\u0027Remove the node from heartbeater threads\u0027)"},{"line_number":155,"context_line":"                self._remove_from_heartbeater(system[\u0027uuid\u0027])"},{"line_number":156,"context_line":"            self._update(system, pending_power\u003d{"}],"source_content_type":"text/x-python","patch_set":15,"id":"226b3ccd_0e85215a","line":153,"range":{"start_line":153,"start_character":46,"end_line":153,"end_character":61},"updated":"2023-03-28 08:07:02.000000000","message":"\u003d\u003d","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"5b3ca7c5cdf3bd5eecf3be2e4f90718ee0178561","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        if system[\u0027power_state\u0027] !\u003d pending_state:"},{"line_number":151,"context_line":"            # Check if powering off and fake_ipa is enabled then"},{"line_number":152,"context_line":"            # remove the node from heartbeater threads"},{"line_number":153,"context_line":"            if state not in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027enabled\u0027:"},{"line_number":154,"context_line":"                self._logger.info(\u0027Remove the node from heartbeater threads\u0027)"},{"line_number":155,"context_line":"                self._remove_from_heartbeater(system[\u0027uuid\u0027])"},{"line_number":156,"context_line":"            self._update(system, pending_power\u003d{"}],"source_content_type":"text/x-python","patch_set":15,"id":"838a3414_18c282bf","line":153,"range":{"start_line":153,"start_character":46,"end_line":153,"end_character":61},"in_reply_to":"226b3ccd_0e85215a","updated":"2023-05-26 14:49:52.000000000","message":"Done","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"99a49071d7d5fb116e933f1c1b70af805afb4f1d","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        if system[\u0027power_state\u0027] !\u003d pending_state:"},{"line_number":151,"context_line":"            # Check if powering off and fake_ipa is enabled then"},{"line_number":152,"context_line":"            # remove the node from heartbeater threads"},{"line_number":153,"context_line":"            if state not in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027enabled\u0027:"},{"line_number":154,"context_line":"                self._logger.info(\u0027Remove the node from heartbeater threads\u0027)"},{"line_number":155,"context_line":"                self._remove_from_heartbeater(system[\u0027uuid\u0027])"},{"line_number":156,"context_line":"            self._update(system, pending_power\u003d{"}],"source_content_type":"text/x-python","patch_set":15,"id":"87004658_0c647adf","line":153,"range":{"start_line":153,"start_character":21,"end_line":153,"end_character":27},"in_reply_to":"54affe20_e1430922","updated":"2023-05-26 14:49:25.000000000","message":"Done","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                \u0027uuid\u0027: DEFAULT_UUID,"},{"line_number":35,"context_line":"                \u0027name\u0027: \u0027fake\u0027,"},{"line_number":36,"context_line":"                \u0027power_state\u0027: \u0027Off\u0027,"},{"line_number":37,"context_line":"                \u0027fake_ipa\u0027: \u0027disabled\u0027,"},{"line_number":38,"context_line":"                \u0027nics\u0027: ["},{"line_number":39,"context_line":"                    {"},{"line_number":40,"context_line":"                        \u0027mac\u0027: \u002700:5c:52:31:3a:9c\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a3460dd_4d058fdf","line":37,"updated":"2023-04-27 08:24:09.000000000","message":"nit: better use boolean False","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"174fc3db595dea5ad1cd7e3f258fa47b15979a2c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                \u0027uuid\u0027: DEFAULT_UUID,"},{"line_number":35,"context_line":"                \u0027name\u0027: \u0027fake\u0027,"},{"line_number":36,"context_line":"                \u0027power_state\u0027: \u0027Off\u0027,"},{"line_number":37,"context_line":"                \u0027fake_ipa\u0027: \u0027disabled\u0027,"},{"line_number":38,"context_line":"                \u0027nics\u0027: ["},{"line_number":39,"context_line":"                    {"},{"line_number":40,"context_line":"                        \u0027mac\u0027: \u002700:5c:52:31:3a:9c\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ffd4fbfd_a302c555","line":37,"in_reply_to":"9a3460dd_4d058fdf","updated":"2023-05-26 14:48:33.000000000","message":"for fake_ipa I am using 3 values:\ndisabled : will never boot fipa\nenabled : fake ipa is configued to boot but the node did not rebooted yet so once the node is on we boot fipa\nbooting: fipa is booting so if the node turned of we need to remove node from heartbeats","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                \u0027fake_ipa\u0027: \u0027disabled\u0027,"},{"line_number":38,"context_line":"                \u0027nics\u0027: ["},{"line_number":39,"context_line":"                    {"},{"line_number":40,"context_line":"                        \u0027mac\u0027: \u002700:5c:52:31:3a:9c\u0027,"},{"line_number":41,"context_line":"                        \u0027ip\u0027: \u0027172.22.0.100\u0027"},{"line_number":42,"context_line":"                    }"},{"line_number":43,"context_line":"                ]"}],"source_content_type":"text/x-python","patch_set":18,"id":"ac1839c4_45f10623","line":40,"updated":"2023-04-27 08:24:09.000000000","message":"Please don\u0027t rename existing fields, they\u0027re used in existing configuration","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"174fc3db595dea5ad1cd7e3f258fa47b15979a2c","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                \u0027fake_ipa\u0027: \u0027disabled\u0027,"},{"line_number":38,"context_line":"                \u0027nics\u0027: ["},{"line_number":39,"context_line":"                    {"},{"line_number":40,"context_line":"                        \u0027mac\u0027: \u002700:5c:52:31:3a:9c\u0027,"},{"line_number":41,"context_line":"                        \u0027ip\u0027: \u0027172.22.0.100\u0027"},{"line_number":42,"context_line":"                    }"},{"line_number":43,"context_line":"                ]"}],"source_content_type":"text/x-python","patch_set":18,"id":"a0c8eb6d_0adc6107","line":40,"in_reply_to":"ac1839c4_45f10623","updated":"2023-05-26 14:48:33.000000000","message":"I added this field previously this variable is just for internal use external uses you will find in the function get_nics changing this will not break anything","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                            fake_ipa: %s]\u0027,"},{"line_number":123,"context_line":"                           system.get(\u0027name\u0027), power_state, fake_ipa)"},{"line_number":124,"context_line":"        # if fake_ipa is in booting state boot fake_ipa then set it to enabled."},{"line_number":125,"context_line":"        if power_state in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027booting\u0027:"},{"line_number":126,"context_line":"            self._boot_ipa(system)"},{"line_number":127,"context_line":"        return power_state"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"97cf1b58_e8dce421","line":125,"updated":"2023-04-27 08:24:09.000000000","message":"Why is this logic in get_power_state? I think it belongs in set_power_state only","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"174fc3db595dea5ad1cd7e3f258fa47b15979a2c","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                            fake_ipa: %s]\u0027,"},{"line_number":123,"context_line":"                           system.get(\u0027name\u0027), power_state, fake_ipa)"},{"line_number":124,"context_line":"        # if fake_ipa is in booting state boot fake_ipa then set it to enabled."},{"line_number":125,"context_line":"        if power_state in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027booting\u0027:"},{"line_number":126,"context_line":"            self._boot_ipa(system)"},{"line_number":127,"context_line":"        return power_state"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"77ab25a4_94396f75","line":125,"in_reply_to":"97cf1b58_e8dce421","updated":"2023-05-26 14:48:33.000000000","message":"since reboot is not immediate cannot boot ipa and start inspection just because set_power_state changed I need to wait until we get the powered on state from get_power_state then trigger ipa boot","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                f\u0027Power state {state} is not supported\u0027)"},{"line_number":146,"context_line":"        fake_ipa \u003d system.get(\u0027fake_ipa\u0027)"},{"line_number":147,"context_line":"        if pending_state in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027enabled\u0027:"},{"line_number":148,"context_line":"            self._logger.info(\u0027Set fake_ipa state to booting\u0027)"},{"line_number":149,"context_line":"            self._update(system, fake_ipa\u003d\u0027booting\u0027)"},{"line_number":150,"context_line":"        if system[\u0027power_state\u0027] !\u003d pending_state:"},{"line_number":151,"context_line":"            # Check if powering off and fake_ipa is enabled then"}],"source_content_type":"text/x-python","patch_set":18,"id":"9d314053_051fcefd","line":148,"updated":"2023-04-27 08:24:09.000000000","message":"if you keep these logging records, please add system name","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"174fc3db595dea5ad1cd7e3f258fa47b15979a2c","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                f\u0027Power state {state} is not supported\u0027)"},{"line_number":146,"context_line":"        fake_ipa \u003d system.get(\u0027fake_ipa\u0027)"},{"line_number":147,"context_line":"        if pending_state in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027enabled\u0027:"},{"line_number":148,"context_line":"            self._logger.info(\u0027Set fake_ipa state to booting\u0027)"},{"line_number":149,"context_line":"            self._update(system, fake_ipa\u003d\u0027booting\u0027)"},{"line_number":150,"context_line":"        if system[\u0027power_state\u0027] !\u003d pending_state:"},{"line_number":151,"context_line":"            # Check if powering off and fake_ipa is enabled then"}],"source_content_type":"text/x-python","patch_set":18,"id":"5e994d51_2e4a9def","line":148,"in_reply_to":"9d314053_051fcefd","updated":"2023-05-26 14:48:33.000000000","message":"done","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    def set_boot_device(self, identity, boot_source):"},{"line_number":165,"context_line":"        self._logger.info(\u0027Enabling fake_ipa after set boot device: %s\u0027,"},{"line_number":166,"context_line":"                          boot_source)"},{"line_number":167,"context_line":"        if (boot_source in constants.DEVICE_TYPE_HDD):"},{"line_number":168,"context_line":"            self._update(identity, fake_ipa\u003d\u0027disabled\u0027)"},{"line_number":169,"context_line":"        else:"},{"line_number":170,"context_line":"            self._update(identity, fake_ipa\u003d\u0027enabled\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"8f1ae833_cfe1d585","line":167,"updated":"2023-04-27 08:24:09.000000000","message":"nit: redundant brackets","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"174fc3db595dea5ad1cd7e3f258fa47b15979a2c","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    def set_boot_device(self, identity, boot_source):"},{"line_number":165,"context_line":"        self._logger.info(\u0027Enabling fake_ipa after set boot device: %s\u0027,"},{"line_number":166,"context_line":"                          boot_source)"},{"line_number":167,"context_line":"        if (boot_source in constants.DEVICE_TYPE_HDD):"},{"line_number":168,"context_line":"            self._update(identity, fake_ipa\u003d\u0027disabled\u0027)"},{"line_number":169,"context_line":"        else:"},{"line_number":170,"context_line":"            self._update(identity, fake_ipa\u003d\u0027enabled\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"fb9db899_b5dc36d9","line":167,"in_reply_to":"8f1ae833_cfe1d585","updated":"2023-05-26 14:48:33.000000000","message":"done","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                for nic in nics]"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def _boot_ipa(self, system):"},{"line_number":202,"context_line":"        fake_ipa_url \u003d \u0027http://192.168.111.1:9999/boot\u0027"},{"line_number":203,"context_line":"        resp \u003d requests.post(fake_ipa_url, json\u003dsystem,"},{"line_number":204,"context_line":"                             headers\u003d{\u0027Content-type\u0027: \u0027application/json\u0027})"},{"line_number":205,"context_line":"        if resp.status_code \u003e\u003d 400:"}],"source_content_type":"text/x-python","patch_set":18,"id":"292d3a42_744a02a0","line":202,"updated":"2023-04-27 08:24:09.000000000","message":"The IP should come from configuration, you can default to localhost though","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    def _boot_ipa(self, system):"},{"line_number":202,"context_line":"        fake_ipa_url \u003d \u0027http://192.168.111.1:9999/boot\u0027"},{"line_number":203,"context_line":"        resp \u003d requests.post(fake_ipa_url, json\u003dsystem,"},{"line_number":204,"context_line":"                             headers\u003d{\u0027Content-type\u0027: \u0027application/json\u0027})"},{"line_number":205,"context_line":"        if resp.status_code \u003e\u003d 400:"},{"line_number":206,"context_line":"            self._logger.error(\u0027Fake ipa (%s) request error %d: %s\u0027,"},{"line_number":207,"context_line":"                               fake_ipa_url,"}],"source_content_type":"text/x-python","patch_set":18,"id":"aff16fdb_d1e9eeac","line":204,"updated":"2023-04-27 08:24:09.000000000","message":"nit: I don\u0027t think you need this header when providing a \u0027json\u0027 argument","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"174fc3db595dea5ad1cd7e3f258fa47b15979a2c","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    def _boot_ipa(self, system):"},{"line_number":202,"context_line":"        fake_ipa_url \u003d \u0027http://192.168.111.1:9999/boot\u0027"},{"line_number":203,"context_line":"        resp \u003d requests.post(fake_ipa_url, json\u003dsystem,"},{"line_number":204,"context_line":"                             headers\u003d{\u0027Content-type\u0027: \u0027application/json\u0027})"},{"line_number":205,"context_line":"        if resp.status_code \u003e\u003d 400:"},{"line_number":206,"context_line":"            self._logger.error(\u0027Fake ipa (%s) request error %d: %s\u0027,"},{"line_number":207,"context_line":"                               fake_ipa_url,"}],"source_content_type":"text/x-python","patch_set":18,"id":"b8f7536b_710c960e","line":204,"in_reply_to":"aff16fdb_d1e9eeac","updated":"2023-05-26 14:48:33.000000000","message":"I will confirm that and remove it if not needed","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self._update(system, fake_ipa\u003d\u0027enabled\u0027)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def _remove_from_heartbeater(self, uuid):"},{"line_number":214,"context_line":"        delete_url \u003d \u0027http://192.168.111.1:9999/remove/{}\u0027.format(uuid)"},{"line_number":215,"context_line":"        resp \u003d requests.delete(delete_url)"},{"line_number":216,"context_line":"        if resp.status_code \u003e\u003d 400:"},{"line_number":217,"context_line":"            self._logger.error(\u0027Fake ipa (%s) request error %d: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9cdf6660_ea31a04a","line":214,"updated":"2023-04-27 08:24:09.000000000","message":"For a proper restful design, it should be\n\n PUT /fake_ipa/{uuid}  \u003c-- to add/update\n DELETE /fake_ipa/{uuid}  \u003c-- to remove\n\nYou definitely do not need to repeat \"remove\", and I\u0027d prefer to have fake IPA in the URL.","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"174fc3db595dea5ad1cd7e3f258fa47b15979a2c","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self._update(system, fake_ipa\u003d\u0027enabled\u0027)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def _remove_from_heartbeater(self, uuid):"},{"line_number":214,"context_line":"        delete_url \u003d \u0027http://192.168.111.1:9999/remove/{}\u0027.format(uuid)"},{"line_number":215,"context_line":"        resp \u003d requests.delete(delete_url)"},{"line_number":216,"context_line":"        if resp.status_code \u003e\u003d 400:"},{"line_number":217,"context_line":"            self._logger.error(\u0027Fake ipa (%s) request error %d: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"2e006394_c51452be","line":214,"in_reply_to":"9cdf6660_ea31a04a","updated":"2023-05-26 14:48:33.000000000","message":"done","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        if resp.status_code \u003e\u003d 400:"},{"line_number":217,"context_line":"            self._logger.error(\u0027Fake ipa (%s) request error %d: %s\u0027,"},{"line_number":218,"context_line":"                               uuid,"},{"line_number":219,"context_line":"                               resp.status_code, resp.content.decode(\u0027utf-8\u0027))"}],"source_content_type":"text/x-python","patch_set":18,"id":"02b5d785_09b04157","line":219,"updated":"2023-04-27 08:24:09.000000000","message":"nit: I think there is resp.text for this case","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"174fc3db595dea5ad1cd7e3f258fa47b15979a2c","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        if resp.status_code \u003e\u003d 400:"},{"line_number":217,"context_line":"            self._logger.error(\u0027Fake ipa (%s) request error %d: %s\u0027,"},{"line_number":218,"context_line":"                               uuid,"},{"line_number":219,"context_line":"                               resp.status_code, resp.content.decode(\u0027utf-8\u0027))"}],"source_content_type":"text/x-python","patch_set":18,"id":"41fb3dd6_39185ffe","line":219,"in_reply_to":"02b5d785_09b04157","updated":"2023-05-26 14:48:33.000000000","message":"done","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":123,"context_line":"                           system.get(\u0027name\u0027), power_state, fake_ipa)"},{"line_number":124,"context_line":"        # if fake_ipa is in booting state boot fake_ipa then set it to enabled."},{"line_number":125,"context_line":"        if power_state in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027booting\u0027:"},{"line_number":126,"context_line":"            self._boot_ipa(system)"},{"line_number":127,"context_line":"        return power_state"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def set_power_state(self, identity, state):"}],"source_content_type":"text/x-python","patch_set":22,"id":"0be74c9c_f058145e","line":126,"updated":"2023-06-28 15:00:53.000000000","message":"I\u0027d rather not put any actions into get_power_state. If you want to implement a delay before heartbeating, just do it in fake IPA itself.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":true,"context_lines":[{"line_number":123,"context_line":"                           system.get(\u0027name\u0027), power_state, fake_ipa)"},{"line_number":124,"context_line":"        # if fake_ipa is in booting state boot fake_ipa then set it to enabled."},{"line_number":125,"context_line":"        if power_state in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027booting\u0027:"},{"line_number":126,"context_line":"            self._boot_ipa(system)"},{"line_number":127,"context_line":"        return power_state"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def set_power_state(self, identity, state):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3411bafe_6ea9bf3c","line":126,"in_reply_to":"0be74c9c_f058145e","updated":"2023-06-29 16:34:25.000000000","message":"is not the node is locked until it is on ? if power_state here was delayed more than time needed for fake ipa to send back inspection it will fail","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"e1952da8d7e1ea7d2ad2f97276f3490a014da6d1","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                           system.get(\u0027name\u0027), power_state, fake_ipa)"},{"line_number":124,"context_line":"        # if fake_ipa is in booting state boot fake_ipa then set it to enabled."},{"line_number":125,"context_line":"        if power_state in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027booting\u0027:"},{"line_number":126,"context_line":"            self._boot_ipa(system)"},{"line_number":127,"context_line":"        return power_state"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def set_power_state(self, identity, state):"}],"source_content_type":"text/x-python","patch_set":22,"id":"c8f3eb8b_16e3c3b8","line":126,"in_reply_to":"3411bafe_6ea9bf3c","updated":"2023-08-04 08:51:21.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":144,"context_line":"            raise error.NotSupportedError("},{"line_number":145,"context_line":"                f\u0027Power state {state} is not supported\u0027)"},{"line_number":146,"context_line":"        fake_ipa \u003d system.get(\u0027fake_ipa\u0027)"},{"line_number":147,"context_line":"        if pending_state in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027enabled\u0027:"},{"line_number":148,"context_line":"            self._logger.info("},{"line_number":149,"context_line":"                \u0027Set fake_ipa state to booting in node %s\u0027, system.get(\u0027name\u0027))"},{"line_number":150,"context_line":"            self._update(system, fake_ipa\u003d\u0027booting\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fba9ca16_1b37cce5","line":147,"updated":"2023-06-28 15:00:53.000000000","message":"\"fake_ipa in \u0027enabled\u0027\" - just use a boolean flag, no need to store a string.\n\n(definitely do not compare strings with \"in\" operator)","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"e1952da8d7e1ea7d2ad2f97276f3490a014da6d1","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            raise error.NotSupportedError("},{"line_number":145,"context_line":"                f\u0027Power state {state} is not supported\u0027)"},{"line_number":146,"context_line":"        fake_ipa \u003d system.get(\u0027fake_ipa\u0027)"},{"line_number":147,"context_line":"        if pending_state in \u0027On\u0027 and fake_ipa and fake_ipa in \u0027enabled\u0027:"},{"line_number":148,"context_line":"            self._logger.info("},{"line_number":149,"context_line":"                \u0027Set fake_ipa state to booting in node %s\u0027, system.get(\u0027name\u0027))"},{"line_number":150,"context_line":"            self._update(system, fake_ipa\u003d\u0027booting\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"2cc2dee3_97d4acdc","line":147,"in_reply_to":"fba9ca16_1b37cce5","updated":"2023-08-04 08:51:21.000000000","message":"done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def set_boot_device(self, identity, boot_source):"},{"line_number":168,"context_line":"        system \u003d self._get(identity)"},{"line_number":169,"context_line":"        self._logger.info(\u0027Enabling fake_ipa after set boot device: %s \\"},{"line_number":170,"context_line":"                          in node %s\u0027, boot_source, system.get(\u0027name\u0027))"},{"line_number":171,"context_line":"        if boot_source in constants.DEVICE_TYPE_HDD:"},{"line_number":172,"context_line":"            self._update(identity, fake_ipa\u003d\u0027disabled\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"6707891a_3f1fb39c","line":169,"updated":"2023-06-28 15:00:53.000000000","message":"You don\u0027t know if you\u0027re enabling it or disabling it","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def set_boot_device(self, identity, boot_source):"},{"line_number":168,"context_line":"        system \u003d self._get(identity)"},{"line_number":169,"context_line":"        self._logger.info(\u0027Enabling fake_ipa after set boot device: %s \\"},{"line_number":170,"context_line":"                          in node %s\u0027, boot_source, system.get(\u0027name\u0027))"},{"line_number":171,"context_line":"        if boot_source in constants.DEVICE_TYPE_HDD:"},{"line_number":172,"context_line":"            self._update(identity, fake_ipa\u003d\u0027disabled\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"bc116e63_9649b224","line":169,"in_reply_to":"6707891a_3f1fb39c","updated":"2023-06-29 16:34:25.000000000","message":"moved inside the conditions","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":168,"context_line":"        system \u003d self._get(identity)"},{"line_number":169,"context_line":"        self._logger.info(\u0027Enabling fake_ipa after set boot device: %s \\"},{"line_number":170,"context_line":"                          in node %s\u0027, boot_source, system.get(\u0027name\u0027))"},{"line_number":171,"context_line":"        if boot_source in constants.DEVICE_TYPE_HDD:"},{"line_number":172,"context_line":"            self._update(identity, fake_ipa\u003d\u0027disabled\u0027)"},{"line_number":173,"context_line":"        else:"},{"line_number":174,"context_line":"            self._update(identity, fake_ipa\u003d\u0027enabled\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"6902f963_f19f3b6c","line":171,"updated":"2023-06-28 15:00:53.000000000","message":"s/in/\u003d\u003d/","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        system \u003d self._get(identity)"},{"line_number":169,"context_line":"        self._logger.info(\u0027Enabling fake_ipa after set boot device: %s \\"},{"line_number":170,"context_line":"                          in node %s\u0027, boot_source, system.get(\u0027name\u0027))"},{"line_number":171,"context_line":"        if boot_source in constants.DEVICE_TYPE_HDD:"},{"line_number":172,"context_line":"            self._update(identity, fake_ipa\u003d\u0027disabled\u0027)"},{"line_number":173,"context_line":"        else:"},{"line_number":174,"context_line":"            self._update(identity, fake_ipa\u003d\u0027enabled\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"a7623e4e_5cd393e5","line":171,"in_reply_to":"6902f963_f19f3b6c","updated":"2023-06-29 16:34:25.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":171,"context_line":"        if boot_source in constants.DEVICE_TYPE_HDD:"},{"line_number":172,"context_line":"            self._update(identity, fake_ipa\u003d\u0027disabled\u0027)"},{"line_number":173,"context_line":"        else:"},{"line_number":174,"context_line":"            self._update(identity, fake_ipa\u003d\u0027enabled\u0027)"},{"line_number":175,"context_line":"        self._update(identity, boot_device\u003dboot_source)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def get_boot_mode(self, identity):"}],"source_content_type":"text/x-python","patch_set":22,"id":"656ddda1_05fcaa56","line":174,"updated":"2023-06-28 15:00:53.000000000","message":"Not everyone will have fake IPA running, I assume we need some global flag to enable it.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"e1952da8d7e1ea7d2ad2f97276f3490a014da6d1","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        if boot_source in constants.DEVICE_TYPE_HDD:"},{"line_number":172,"context_line":"            self._update(identity, fake_ipa\u003d\u0027disabled\u0027)"},{"line_number":173,"context_line":"        else:"},{"line_number":174,"context_line":"            self._update(identity, fake_ipa\u003d\u0027enabled\u0027)"},{"line_number":175,"context_line":"        self._update(identity, boot_device\u003dboot_source)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def get_boot_mode(self, identity):"}],"source_content_type":"text/x-python","patch_set":22,"id":"a6efab17_a6b94b46","line":174,"in_reply_to":"656ddda1_05fcaa56","updated":"2023-08-04 08:51:21.000000000","message":"done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":203,"context_line":"                for nic in nics]"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _boot_ipa(self, system):"},{"line_number":206,"context_line":"        self._config.setdefault(\u0027FAKE_IPA_URL\u0027,"},{"line_number":207,"context_line":"                                \u0027http://192.168.111.1:9999\u0027)"},{"line_number":208,"context_line":"        fake_ipa_url \u003d self._config[\u0027FAKE_IPA_URL\u0027]"},{"line_number":209,"context_line":"        boot_url \u003d \u0027{}/\u0027.format(fake_ipa_url)"}],"source_content_type":"text/x-python","patch_set":22,"id":"334b8f97_3a352859","line":206,"updated":"2023-06-28 15:00:53.000000000","message":"nit: setdefault returns the resulting value, you can assign it to fake_ipa_url right away.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                for nic in nics]"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _boot_ipa(self, system):"},{"line_number":206,"context_line":"        self._config.setdefault(\u0027FAKE_IPA_URL\u0027,"},{"line_number":207,"context_line":"                                \u0027http://192.168.111.1:9999\u0027)"},{"line_number":208,"context_line":"        fake_ipa_url \u003d self._config[\u0027FAKE_IPA_URL\u0027]"},{"line_number":209,"context_line":"        boot_url \u003d \u0027{}/\u0027.format(fake_ipa_url)"}],"source_content_type":"text/x-python","patch_set":22,"id":"404b6206_f9e9e6e3","line":206,"in_reply_to":"334b8f97_3a352859","updated":"2023-06-29 16:34:25.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _boot_ipa(self, system):"},{"line_number":206,"context_line":"        self._config.setdefault(\u0027FAKE_IPA_URL\u0027,"},{"line_number":207,"context_line":"                                \u0027http://192.168.111.1:9999\u0027)"},{"line_number":208,"context_line":"        fake_ipa_url \u003d self._config[\u0027FAKE_IPA_URL\u0027]"},{"line_number":209,"context_line":"        boot_url \u003d \u0027{}/\u0027.format(fake_ipa_url)"},{"line_number":210,"context_line":"        resp \u003d requests.put(boot_url, json\u003dsystem,"}],"source_content_type":"text/x-python","patch_set":22,"id":"eb3637ea_6824c0f0","line":207,"updated":"2023-06-28 15:00:53.000000000","message":"I\u0027d prefer to use localhost by default, this IP may be invalid.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _boot_ipa(self, system):"},{"line_number":206,"context_line":"        self._config.setdefault(\u0027FAKE_IPA_URL\u0027,"},{"line_number":207,"context_line":"                                \u0027http://192.168.111.1:9999\u0027)"},{"line_number":208,"context_line":"        fake_ipa_url \u003d self._config[\u0027FAKE_IPA_URL\u0027]"},{"line_number":209,"context_line":"        boot_url \u003d \u0027{}/\u0027.format(fake_ipa_url)"},{"line_number":210,"context_line":"        resp \u003d requests.put(boot_url, json\u003dsystem,"}],"source_content_type":"text/x-python","patch_set":22,"id":"81d55511_eafd30ff","line":207,"in_reply_to":"eb3637ea_6824c0f0","updated":"2023-06-29 16:34:25.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":206,"context_line":"        self._config.setdefault(\u0027FAKE_IPA_URL\u0027,"},{"line_number":207,"context_line":"                                \u0027http://192.168.111.1:9999\u0027)"},{"line_number":208,"context_line":"        fake_ipa_url \u003d self._config[\u0027FAKE_IPA_URL\u0027]"},{"line_number":209,"context_line":"        boot_url \u003d \u0027{}/\u0027.format(fake_ipa_url)"},{"line_number":210,"context_line":"        resp \u003d requests.put(boot_url, json\u003dsystem,"},{"line_number":211,"context_line":"                            headers\u003d{\u0027Content-type\u0027: \u0027application/json\u0027})"},{"line_number":212,"context_line":"        if resp.status_code \u003e\u003d 400:"}],"source_content_type":"text/x-python","patch_set":22,"id":"ab7cdb5d_f53dab15","line":209,"updated":"2023-06-28 15:00:53.000000000","message":"Seems unnecessary","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        self._config.setdefault(\u0027FAKE_IPA_URL\u0027,"},{"line_number":207,"context_line":"                                \u0027http://192.168.111.1:9999\u0027)"},{"line_number":208,"context_line":"        fake_ipa_url \u003d self._config[\u0027FAKE_IPA_URL\u0027]"},{"line_number":209,"context_line":"        boot_url \u003d \u0027{}/\u0027.format(fake_ipa_url)"},{"line_number":210,"context_line":"        resp \u003d requests.put(boot_url, json\u003dsystem,"},{"line_number":211,"context_line":"                            headers\u003d{\u0027Content-type\u0027: \u0027application/json\u0027})"},{"line_number":212,"context_line":"        if resp.status_code \u003e\u003d 400:"}],"source_content_type":"text/x-python","patch_set":22,"id":"baf072e0_6ad47b68","line":209,"in_reply_to":"ab7cdb5d_f53dab15","updated":"2023-06-29 16:34:25.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"874f0c13438ea84f5cb3906f5b196ace2034e3af","unresolved":true,"context_lines":[{"line_number":123,"context_line":"        apply_time \u003d int(time.time()) + random.randint(1, 11)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        system \u003d self._get(identity)"},{"line_number":126,"context_line":"        fake_ipa \u003d system.get(\u0027fake_ipa\u0027)"},{"line_number":127,"context_line":"        self._logger.info(\u0027Setting power state \"%s\" in node %s\u0027,"},{"line_number":128,"context_line":"                          state, system.get(\u0027name\u0027))"},{"line_number":129,"context_line":"        if \u0027On\u0027 in state:"}],"source_content_type":"text/x-python","patch_set":35,"id":"8c823755_bbf140a9","line":126,"range":{"start_line":126,"start_character":19,"end_line":126,"end_character":41},"updated":"2023-09-13 11:25:17.000000000","message":"system.get(\u0027fake_ipa\u0027, False)","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e18429c545b1fd7171a124b72147e34fe8c78334","unresolved":true,"context_lines":[{"line_number":123,"context_line":"        apply_time \u003d int(time.time()) + random.randint(1, 11)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        system \u003d self._get(identity)"},{"line_number":126,"context_line":"        fake_ipa \u003d system.get(\u0027fake_ipa\u0027)"},{"line_number":127,"context_line":"        self._logger.info(\u0027Setting power state \"%s\" in node %s\u0027,"},{"line_number":128,"context_line":"                          state, system.get(\u0027name\u0027))"},{"line_number":129,"context_line":"        if \u0027On\u0027 in state:"}],"source_content_type":"text/x-python","patch_set":35,"id":"ad7503c1_68aa458c","line":126,"range":{"start_line":126,"start_character":19,"end_line":126,"end_character":41},"in_reply_to":"8c823755_bbf140a9","updated":"2024-03-08 13:50:03.000000000","message":"Not necessary, get() returns None by default.","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"884e8096a85b5b9d65cb5d3aa1e861295174d971","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        apply_time \u003d int(time.time()) + random.randint(1, 11)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        system \u003d self._get(identity)"},{"line_number":126,"context_line":"        fake_ipa \u003d system.get(\u0027fake_ipa\u0027)"},{"line_number":127,"context_line":"        self._logger.info(\u0027Setting power state \"%s\" in node %s\u0027,"},{"line_number":128,"context_line":"                          state, system.get(\u0027name\u0027))"},{"line_number":129,"context_line":"        if \u0027On\u0027 in state:"}],"source_content_type":"text/x-python","patch_set":35,"id":"d5d4dd41_cfc5507b","line":126,"range":{"start_line":126,"start_character":19,"end_line":126,"end_character":41},"in_reply_to":"ad7503c1_68aa458c","updated":"2024-03-19 13:17:35.000000000","message":"Done","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"874f0c13438ea84f5cb3906f5b196ace2034e3af","unresolved":true,"context_lines":[{"line_number":126,"context_line":"        fake_ipa \u003d system.get(\u0027fake_ipa\u0027)"},{"line_number":127,"context_line":"        self._logger.info(\u0027Setting power state \"%s\" in node %s\u0027,"},{"line_number":128,"context_line":"                          state, system.get(\u0027name\u0027))"},{"line_number":129,"context_line":"        if \u0027On\u0027 in state:"},{"line_number":130,"context_line":"            pending_state \u003d \u0027On\u0027"},{"line_number":131,"context_line":"        elif state in (\u0027ForceOff\u0027, \u0027GracefulShutdown\u0027):"},{"line_number":132,"context_line":"            pending_state \u003d \u0027Off\u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"2efdcd01_b759f5b2","line":129,"range":{"start_line":129,"start_character":11,"end_line":129,"end_character":24},"updated":"2023-09-13 11:25:17.000000000","message":"state \u003d\u003d \"On\"","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":126,"context_line":"        fake_ipa \u003d system.get(\u0027fake_ipa\u0027)"},{"line_number":127,"context_line":"        self._logger.info(\u0027Setting power state \"%s\" in node %s\u0027,"},{"line_number":128,"context_line":"                          state, system.get(\u0027name\u0027))"},{"line_number":129,"context_line":"        if \u0027On\u0027 in state:"},{"line_number":130,"context_line":"            pending_state \u003d \u0027On\u0027"},{"line_number":131,"context_line":"        elif state in (\u0027ForceOff\u0027, \u0027GracefulShutdown\u0027):"},{"line_number":132,"context_line":"            pending_state \u003d \u0027Off\u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"d2a62c59_2a1df2e9","line":129,"range":{"start_line":129,"start_character":11,"end_line":129,"end_character":24},"in_reply_to":"0850f496_cbcaa8ad","updated":"2023-12-04 10:13:18.000000000","message":"resolved then","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":126,"context_line":"        fake_ipa \u003d system.get(\u0027fake_ipa\u0027)"},{"line_number":127,"context_line":"        self._logger.info(\u0027Setting power state \"%s\" in node %s\u0027,"},{"line_number":128,"context_line":"                          state, system.get(\u0027name\u0027))"},{"line_number":129,"context_line":"        if \u0027On\u0027 in state:"},{"line_number":130,"context_line":"            pending_state \u003d \u0027On\u0027"},{"line_number":131,"context_line":"        elif state in (\u0027ForceOff\u0027, \u0027GracefulShutdown\u0027):"},{"line_number":132,"context_line":"            pending_state \u003d \u0027Off\u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"0850f496_cbcaa8ad","line":129,"range":{"start_line":129,"start_character":11,"end_line":129,"end_character":24},"in_reply_to":"2efdcd01_b759f5b2","updated":"2023-10-05 14:31:41.000000000","message":"ResetType has both \"On\" and \"ForceOn\", I think that was the logic. I agree that it looks weird..","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        fake_ipa \u003d system.get(\u0027fake_ipa\u0027)"},{"line_number":127,"context_line":"        self._logger.info(\u0027Setting power state \"%s\" in node %s\u0027,"},{"line_number":128,"context_line":"                          state, system.get(\u0027name\u0027))"},{"line_number":129,"context_line":"        if \u0027On\u0027 in state:"},{"line_number":130,"context_line":"            pending_state \u003d \u0027On\u0027"},{"line_number":131,"context_line":"        elif state in (\u0027ForceOff\u0027, \u0027GracefulShutdown\u0027):"},{"line_number":132,"context_line":"            pending_state \u003d \u0027Off\u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"b649d5ff_45861ce4","line":129,"range":{"start_line":129,"start_character":11,"end_line":129,"end_character":24},"in_reply_to":"d2a62c59_2a1df2e9","updated":"2024-02-06 13:30:24.000000000","message":"Done","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"874f0c13438ea84f5cb3906f5b196ace2034e3af","unresolved":true,"context_lines":[{"line_number":130,"context_line":"            pending_state \u003d \u0027On\u0027"},{"line_number":131,"context_line":"        elif state in (\u0027ForceOff\u0027, \u0027GracefulShutdown\u0027):"},{"line_number":132,"context_line":"            pending_state \u003d \u0027Off\u0027"},{"line_number":133,"context_line":"        elif \u0027Restart\u0027 in state:"},{"line_number":134,"context_line":"            system[\u0027power_state\u0027] \u003d \u0027Off\u0027"},{"line_number":135,"context_line":"            pending_state \u003d \u0027On\u0027"},{"line_number":136,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":35,"id":"c542084e_999761fa","line":133,"range":{"start_line":133,"start_character":13,"end_line":133,"end_character":31},"updated":"2023-09-13 11:25:17.000000000","message":"state \u003d\u003d \"Restart\"","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"884e8096a85b5b9d65cb5d3aa1e861295174d971","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            pending_state \u003d \u0027On\u0027"},{"line_number":131,"context_line":"        elif state in (\u0027ForceOff\u0027, \u0027GracefulShutdown\u0027):"},{"line_number":132,"context_line":"            pending_state \u003d \u0027Off\u0027"},{"line_number":133,"context_line":"        elif \u0027Restart\u0027 in state:"},{"line_number":134,"context_line":"            system[\u0027power_state\u0027] \u003d \u0027Off\u0027"},{"line_number":135,"context_line":"            pending_state \u003d \u0027On\u0027"},{"line_number":136,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":35,"id":"c376bc41_c5866c75","line":133,"range":{"start_line":133,"start_character":13,"end_line":133,"end_character":31},"in_reply_to":"25cb3cd1_53d18c5b","updated":"2024-03-19 13:17:35.000000000","message":"Done","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e18429c545b1fd7171a124b72147e34fe8c78334","unresolved":true,"context_lines":[{"line_number":130,"context_line":"            pending_state \u003d \u0027On\u0027"},{"line_number":131,"context_line":"        elif state in (\u0027ForceOff\u0027, \u0027GracefulShutdown\u0027):"},{"line_number":132,"context_line":"            pending_state \u003d \u0027Off\u0027"},{"line_number":133,"context_line":"        elif \u0027Restart\u0027 in state:"},{"line_number":134,"context_line":"            system[\u0027power_state\u0027] \u003d \u0027Off\u0027"},{"line_number":135,"context_line":"            pending_state \u003d \u0027On\u0027"},{"line_number":136,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":35,"id":"25cb3cd1_53d18c5b","line":133,"range":{"start_line":133,"start_character":13,"end_line":133,"end_character":31},"in_reply_to":"c542084e_999761fa","updated":"2024-03-08 13:50:03.000000000","message":"+1","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"874f0c13438ea84f5cb3906f5b196ace2034e3af","unresolved":true,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if system[\u0027power_state\u0027] !\u003d pending_state:"},{"line_number":141,"context_line":"            if fake_ipa:"},{"line_number":142,"context_line":"                if state in \u0027On\u0027:"},{"line_number":143,"context_line":"                    self._logger.info("},{"line_number":144,"context_line":"                        \u0027Booting fake ipa in node %s\u0027,"},{"line_number":145,"context_line":"                        system.get(\u0027name\u0027))"}],"source_content_type":"text/x-python","patch_set":35,"id":"c63a8a53_f7802a96","line":142,"range":{"start_line":142,"start_character":25,"end_line":142,"end_character":27},"updated":"2023-09-13 11:25:17.000000000","message":"You mean \u003d\u003d?","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if system[\u0027power_state\u0027] !\u003d pending_state:"},{"line_number":141,"context_line":"            if fake_ipa:"},{"line_number":142,"context_line":"                if state in \u0027On\u0027:"},{"line_number":143,"context_line":"                    self._logger.info("},{"line_number":144,"context_line":"                        \u0027Booting fake ipa in node %s\u0027,"},{"line_number":145,"context_line":"                        system.get(\u0027name\u0027))"}],"source_content_type":"text/x-python","patch_set":35,"id":"a2314e00_18a97be7","line":142,"range":{"start_line":142,"start_character":25,"end_line":142,"end_character":27},"in_reply_to":"a74d941d_ce1a2a38","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if system[\u0027power_state\u0027] !\u003d pending_state:"},{"line_number":141,"context_line":"            if fake_ipa:"},{"line_number":142,"context_line":"                if state in \u0027On\u0027:"},{"line_number":143,"context_line":"                    self._logger.info("},{"line_number":144,"context_line":"                        \u0027Booting fake ipa in node %s\u0027,"},{"line_number":145,"context_line":"                        system.get(\u0027name\u0027))"}],"source_content_type":"text/x-python","patch_set":35,"id":"e9005d34_58f0ff7d","line":142,"range":{"start_line":142,"start_character":25,"end_line":142,"end_character":27},"in_reply_to":"c63a8a53_f7802a96","updated":"2023-10-05 14:31:41.000000000","message":"Better\n\n if pending_state \u003d\u003d \u0027On\u0027:","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if system[\u0027power_state\u0027] !\u003d pending_state:"},{"line_number":141,"context_line":"            if fake_ipa:"},{"line_number":142,"context_line":"                if state in \u0027On\u0027:"},{"line_number":143,"context_line":"                    self._logger.info("},{"line_number":144,"context_line":"                        \u0027Booting fake ipa in node %s\u0027,"},{"line_number":145,"context_line":"                        system.get(\u0027name\u0027))"}],"source_content_type":"text/x-python","patch_set":35,"id":"a74d941d_ce1a2a38","line":142,"range":{"start_line":142,"start_character":25,"end_line":142,"end_character":27},"in_reply_to":"e9005d34_58f0ff7d","updated":"2023-12-04 10:13:18.000000000","message":"done","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"874f0c13438ea84f5cb3906f5b196ace2034e3af","unresolved":true,"context_lines":[{"line_number":162,"context_line":"    def set_boot_device(self, identity, boot_source):"},{"line_number":163,"context_line":"        system \u003d self._get(identity)"},{"line_number":164,"context_line":"        fake_ipa_global \u003d self._config.get(\u0027SUSHY_EMULATOR_FAKE_IPA\u0027)"},{"line_number":165,"context_line":"        if fake_ipa_global:"},{"line_number":166,"context_line":"            if boot_source \u003d\u003d constants.DEVICE_TYPE_HDD:"},{"line_number":167,"context_line":"                self._logger.info(\u0027Disabling fake_ipa after set boot device:\\"},{"line_number":168,"context_line":"                                   %s in node %s\u0027,"}],"source_content_type":"text/x-python","patch_set":35,"id":"24efb7d6_d9580316","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":26},"updated":"2023-09-13 11:25:17.000000000","message":"if fake_ipa_global is not None","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"884e8096a85b5b9d65cb5d3aa1e861295174d971","unresolved":false,"context_lines":[{"line_number":162,"context_line":"    def set_boot_device(self, identity, boot_source):"},{"line_number":163,"context_line":"        system \u003d self._get(identity)"},{"line_number":164,"context_line":"        fake_ipa_global \u003d self._config.get(\u0027SUSHY_EMULATOR_FAKE_IPA\u0027)"},{"line_number":165,"context_line":"        if fake_ipa_global:"},{"line_number":166,"context_line":"            if boot_source \u003d\u003d constants.DEVICE_TYPE_HDD:"},{"line_number":167,"context_line":"                self._logger.info(\u0027Disabling fake_ipa after set boot device:\\"},{"line_number":168,"context_line":"                                   %s in node %s\u0027,"}],"source_content_type":"text/x-python","patch_set":35,"id":"9e76a69d_01370210","line":165,"range":{"start_line":165,"start_character":8,"end_line":165,"end_character":26},"in_reply_to":"24efb7d6_d9580316","updated":"2024-03-19 13:17:35.000000000","message":"I do not think this is need","commit_id":"673d5987e8414e1aaa7d329e0cb455ef9e68d83d"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"7c8eaffe6a2d89fe41f557fb102a24cbd1ca65f2","unresolved":true,"context_lines":[{"line_number":43,"context_line":"                ]"},{"line_number":44,"context_line":"            }"},{"line_number":45,"context_line":"        ])"},{"line_number":46,"context_line":"        config.setdefault(\u0027FAKE_IPA_URL\u0027, \u0027http://localhost:9999\u0027)"},{"line_number":47,"context_line":"        cls._config \u003d config"},{"line_number":48,"context_line":"        cls._logger \u003d logger"},{"line_number":49,"context_line":"        return cls"}],"source_content_type":"text/x-python","patch_set":36,"id":"32728c26_8206970c","line":46,"updated":"2023-10-30 14:27:31.000000000","message":"Maybe here as well, just for the shake of consolidation.","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"6051cd1dc9f7f65c0c23cc34f12ec1e73abb931a","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                ]"},{"line_number":44,"context_line":"            }"},{"line_number":45,"context_line":"        ])"},{"line_number":46,"context_line":"        config.setdefault(\u0027FAKE_IPA_URL\u0027, \u0027http://localhost:9999\u0027)"},{"line_number":47,"context_line":"        cls._config \u003d config"},{"line_number":48,"context_line":"        cls._logger \u003d logger"},{"line_number":49,"context_line":"        return cls"}],"source_content_type":"text/x-python","patch_set":36,"id":"21327b8b_2b315529","line":46,"in_reply_to":"32728c26_8206970c","updated":"2024-03-19 13:19:29.000000000","message":"Acknowledged","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":164,"context_line":"        fake_ipa_global \u003d self._config.get(\u0027SUSHY_EMULATOR_FAKE_IPA\u0027)"},{"line_number":165,"context_line":"        if fake_ipa_global:"},{"line_number":166,"context_line":"            if boot_source \u003d\u003d constants.DEVICE_TYPE_HDD:"},{"line_number":167,"context_line":"                self._logger.info(\u0027Disabling fake_ipa after set boot device:\\"},{"line_number":168,"context_line":"                                   %s in node %s\u0027,"},{"line_number":169,"context_line":"                                  boot_source, system.get(\u0027name\u0027))"},{"line_number":170,"context_line":"                self._update(identity, fake_ipa\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":36,"id":"58fd6275_8ddba62b","line":167,"updated":"2023-10-05 14:31:41.000000000","message":"This is going to result in a lot of spaces. Split into two strings instead:\n\n (\"start \"\n  \"finish\")","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":164,"context_line":"        fake_ipa_global \u003d self._config.get(\u0027SUSHY_EMULATOR_FAKE_IPA\u0027)"},{"line_number":165,"context_line":"        if fake_ipa_global:"},{"line_number":166,"context_line":"            if boot_source \u003d\u003d constants.DEVICE_TYPE_HDD:"},{"line_number":167,"context_line":"                self._logger.info(\u0027Disabling fake_ipa after set boot device:\\"},{"line_number":168,"context_line":"                                   %s in node %s\u0027,"},{"line_number":169,"context_line":"                                  boot_source, system.get(\u0027name\u0027))"},{"line_number":170,"context_line":"                self._update(identity, fake_ipa\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":36,"id":"f560c323_e0f1a658","line":167,"in_reply_to":"58fd6275_8ddba62b","updated":"2023-12-04 10:13:18.000000000","message":"Oh I did not notice that although it was badly formatted in the logs done thanks","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        fake_ipa_global \u003d self._config.get(\u0027SUSHY_EMULATOR_FAKE_IPA\u0027)"},{"line_number":165,"context_line":"        if fake_ipa_global:"},{"line_number":166,"context_line":"            if boot_source \u003d\u003d constants.DEVICE_TYPE_HDD:"},{"line_number":167,"context_line":"                self._logger.info(\u0027Disabling fake_ipa after set boot device:\\"},{"line_number":168,"context_line":"                                   %s in node %s\u0027,"},{"line_number":169,"context_line":"                                  boot_source, system.get(\u0027name\u0027))"},{"line_number":170,"context_line":"                self._update(identity, fake_ipa\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":36,"id":"7065dff4_f02f6108","line":167,"in_reply_to":"f560c323_e0f1a658","updated":"2024-02-21 10:53:10.000000000","message":"Done","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":169,"context_line":"                                  boot_source, system.get(\u0027name\u0027))"},{"line_number":170,"context_line":"                self._update(identity, fake_ipa\u003dFalse)"},{"line_number":171,"context_line":"            else:"},{"line_number":172,"context_line":"                self._logger.info(\u0027Enabling fake_ipa after set boot device:\\"},{"line_number":173,"context_line":"                                  %s in node %s\u0027, boot_source,"},{"line_number":174,"context_line":"                                  system.get(\u0027name\u0027))"},{"line_number":175,"context_line":"                self._update(identity, fake_ipa\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f9f5300_c1b72037","line":172,"updated":"2023-10-05 14:31:41.000000000","message":"Same","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":169,"context_line":"                                  boot_source, system.get(\u0027name\u0027))"},{"line_number":170,"context_line":"                self._update(identity, fake_ipa\u003dFalse)"},{"line_number":171,"context_line":"            else:"},{"line_number":172,"context_line":"                self._logger.info(\u0027Enabling fake_ipa after set boot device:\\"},{"line_number":173,"context_line":"                                  %s in node %s\u0027, boot_source,"},{"line_number":174,"context_line":"                                  system.get(\u0027name\u0027))"},{"line_number":175,"context_line":"                self._update(identity, fake_ipa\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":36,"id":"8ee38699_d7e063b3","line":172,"in_reply_to":"7f9f5300_c1b72037","updated":"2023-12-04 10:13:18.000000000","message":"done","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                                  boot_source, system.get(\u0027name\u0027))"},{"line_number":170,"context_line":"                self._update(identity, fake_ipa\u003dFalse)"},{"line_number":171,"context_line":"            else:"},{"line_number":172,"context_line":"                self._logger.info(\u0027Enabling fake_ipa after set boot device:\\"},{"line_number":173,"context_line":"                                  %s in node %s\u0027, boot_source,"},{"line_number":174,"context_line":"                                  system.get(\u0027name\u0027))"},{"line_number":175,"context_line":"                self._update(identity, fake_ipa\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":36,"id":"30c6ecf1_f1fdd6f3","line":172,"in_reply_to":"8ee38699_d7e063b3","updated":"2024-02-21 10:53:10.000000000","message":"Done","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":212,"context_line":"                               fake_ipa_url, system.get(\u0027name\u0027),"},{"line_number":213,"context_line":"                               resp.status_code, resp.text)"},{"line_number":214,"context_line":"            return"},{"line_number":215,"context_line":"        self._logger.info(\"ipa enabled in node %s\", system.get(\u0027name\u0027))"},{"line_number":216,"context_line":"        self._update(system, fake_ipa\u003d\u0027enabled\u0027)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def _remove_from_heartbeater(self, uuid):"}],"source_content_type":"text/x-python","patch_set":36,"id":"1b21cd94_cf2fbc66","line":215,"updated":"2023-10-05 14:31:41.000000000","message":"nit: in the context of Redfish, nodes are called systems.\n\nnit 2: please use IPA (upper-case) in human-visible strings. IN this case, even \"Fake IPA\"","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":212,"context_line":"                               fake_ipa_url, system.get(\u0027name\u0027),"},{"line_number":213,"context_line":"                               resp.status_code, resp.text)"},{"line_number":214,"context_line":"            return"},{"line_number":215,"context_line":"        self._logger.info(\"ipa enabled in node %s\", system.get(\u0027name\u0027))"},{"line_number":216,"context_line":"        self._update(system, fake_ipa\u003d\u0027enabled\u0027)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def _remove_from_heartbeater(self, uuid):"}],"source_content_type":"text/x-python","patch_set":36,"id":"1b24bd5b_1dcca883","line":215,"in_reply_to":"1b21cd94_cf2fbc66","updated":"2023-12-04 10:13:18.000000000","message":"done","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                               fake_ipa_url, system.get(\u0027name\u0027),"},{"line_number":213,"context_line":"                               resp.status_code, resp.text)"},{"line_number":214,"context_line":"            return"},{"line_number":215,"context_line":"        self._logger.info(\"ipa enabled in node %s\", system.get(\u0027name\u0027))"},{"line_number":216,"context_line":"        self._update(system, fake_ipa\u003d\u0027enabled\u0027)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def _remove_from_heartbeater(self, uuid):"}],"source_content_type":"text/x-python","patch_set":36,"id":"1b21e1bf_50e9aeea","line":215,"in_reply_to":"1b24bd5b_1dcca883","updated":"2024-02-21 10:53:10.000000000","message":"Done","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e18429c545b1fd7171a124b72147e34fe8c78334","unresolved":true,"context_lines":[{"line_number":126,"context_line":"        fake_ipa \u003d system.get(\u0027fake_ipa\u0027)"},{"line_number":127,"context_line":"        self._logger.info(\u0027Setting power state \"%s\" in node %s\u0027,"},{"line_number":128,"context_line":"                          state, system.get(\u0027name\u0027))"},{"line_number":129,"context_line":"        if \u0027On\u0027 in state:"},{"line_number":130,"context_line":"            pending_state \u003d \u0027On\u0027"},{"line_number":131,"context_line":"        elif state in (\u0027ForceOff\u0027, \u0027GracefulShutdown\u0027):"},{"line_number":132,"context_line":"            pending_state \u003d \u0027Off\u0027"}],"source_content_type":"text/x-python","patch_set":42,"id":"f7610969_55c6d06b","line":129,"updated":"2024-03-08 13:50:03.000000000","message":"state \u003d\u003d \u0027On\u0027? at least that\u0027s what you use on line 142","commit_id":"e4c5d519be943394226c259f9b47688e99574c58"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"884e8096a85b5b9d65cb5d3aa1e861295174d971","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        fake_ipa \u003d system.get(\u0027fake_ipa\u0027)"},{"line_number":127,"context_line":"        self._logger.info(\u0027Setting power state \"%s\" in node %s\u0027,"},{"line_number":128,"context_line":"                          state, system.get(\u0027name\u0027))"},{"line_number":129,"context_line":"        if \u0027On\u0027 in state:"},{"line_number":130,"context_line":"            pending_state \u003d \u0027On\u0027"},{"line_number":131,"context_line":"        elif state in (\u0027ForceOff\u0027, \u0027GracefulShutdown\u0027):"},{"line_number":132,"context_line":"            pending_state \u003d \u0027Off\u0027"}],"source_content_type":"text/x-python","patch_set":42,"id":"528c35b9_2cd55cc4","line":129,"in_reply_to":"f7610969_55c6d06b","updated":"2024-03-19 13:17:35.000000000","message":"Done","commit_id":"e4c5d519be943394226c259f9b47688e99574c58"}],"sushy_tools/error.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        super().__init__(msg)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"class Serializable(object):"},{"line_number":58,"context_line":"    \"\"\"Base class for things that can be serialized.\"\"\""},{"line_number":59,"context_line":"    serializable_fields \u003d ()"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"87adf529_479face0","line":57,"updated":"2023-04-27 08:24:09.000000000","message":"Please don\u0027t copy the whole IPA source here","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"174fc3db595dea5ad1cd7e3f258fa47b15979a2c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        super().__init__(msg)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"class Serializable(object):"},{"line_number":58,"context_line":"    \"\"\"Base class for things that can be serialized.\"\"\""},{"line_number":59,"context_line":"    serializable_fields \u003d ()"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"48e7b052_f8023dd6","line":57,"in_reply_to":"87adf529_479face0","updated":"2023-05-26 14:48:33.000000000","message":"I think I copied here only the needed parts","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":47,"context_line":"        super().__init__(msg, code)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class LookupNodeError(Exception):"},{"line_number":51,"context_line":"    \"\"\"Error raised when the node lookup to the Ironic API fails.\"\"\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def __init__(self, msg\u003d\u0027Error getting configuration from Ironic\u0027):"}],"source_content_type":"text/x-python","patch_set":22,"id":"ad2ca5c2_6d6cfa83","line":50,"updated":"2023-06-28 15:00:53.000000000","message":"Let\u0027s move these errors somewhere under the fake_ipa package to avoid confusion.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        super().__init__(msg, code)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class LookupNodeError(Exception):"},{"line_number":51,"context_line":"    \"\"\"Error raised when the node lookup to the Ironic API fails.\"\"\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def __init__(self, msg\u003d\u0027Error getting configuration from Ironic\u0027):"}],"source_content_type":"text/x-python","patch_set":22,"id":"b671e49b_ea42f9a9","line":50,"in_reply_to":"ad2ca5c2_6d6cfa83","updated":"2023-06-29 16:34:25.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":192,"context_line":"        super(InvalidCommandParamsError, self).__init__(details)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"class VersionMismatch(RESTError):"},{"line_number":196,"context_line":"    \"\"\"Error raised when Ironic and the Agent have different versions."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    If the agent version has changed since get_clean_steps or get_deploy_steps"}],"source_content_type":"text/x-python","patch_set":22,"id":"f17443a0_fe5c104b","line":195,"updated":"2023-06-28 15:00:53.000000000","message":"This seems to be one of the things we don\u0027t need to replicate here.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"884e8096a85b5b9d65cb5d3aa1e861295174d971","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        super(InvalidCommandParamsError, self).__init__(details)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"class VersionMismatch(RESTError):"},{"line_number":196,"context_line":"    \"\"\"Error raised when Ironic and the Agent have different versions."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    If the agent version has changed since get_clean_steps or get_deploy_steps"}],"source_content_type":"text/x-python","patch_set":22,"id":"184b0dc4_e408cc4d","line":195,"in_reply_to":"cf5f6479_1fa5b5ab","updated":"2024-03-19 13:17:35.000000000","message":"Acknowledged","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":true,"context_lines":[{"line_number":192,"context_line":"        super(InvalidCommandParamsError, self).__init__(details)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"class VersionMismatch(RESTError):"},{"line_number":196,"context_line":"    \"\"\"Error raised when Ironic and the Agent have different versions."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    If the agent version has changed since get_clean_steps or get_deploy_steps"}],"source_content_type":"text/x-python","patch_set":22,"id":"cf5f6479_1fa5b5ab","line":195,"in_reply_to":"f17443a0_fe5c104b","updated":"2023-06-29 16:34:25.000000000","message":"Does that mean we will never cause version mismatch from fakeipa ?","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"}],"sushy_tools/fake_ipa/base.py":[{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"d9462525d238b28c283879e90f78604dec18f743","unresolved":true,"context_lines":[{"line_number":34,"context_line":"        self.agent \u003d agent"},{"line_number":35,"context_line":"        self.command_map \u003d dict("},{"line_number":36,"context_line":"            (v.command_name, v)"},{"line_number":37,"context_line":"            for k, v in inspect.getmembers(self)"},{"line_number":38,"context_line":"            if hasattr(v, \u0027command_name\u0027)"},{"line_number":39,"context_line":"        )"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5ffca4f3_000d9d89","line":37,"range":{"start_line":37,"start_character":16,"end_line":37,"end_character":17},"updated":"2023-03-21 06:56:59.000000000","message":"\u0027k\u0027 is not used. Perhaps use _ instead?","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"5b3ca7c5cdf3bd5eecf3be2e4f90718ee0178561","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.agent \u003d agent"},{"line_number":35,"context_line":"        self.command_map \u003d dict("},{"line_number":36,"context_line":"            (v.command_name, v)"},{"line_number":37,"context_line":"            for k, v in inspect.getmembers(self)"},{"line_number":38,"context_line":"            if hasattr(v, \u0027command_name\u0027)"},{"line_number":39,"context_line":"        )"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"83924e77_28b2f950","line":37,"range":{"start_line":37,"start_character":16,"end_line":37,"end_character":17},"in_reply_to":"5ffca4f3_000d9d89","updated":"2023-05-26 14:49:52.000000000","message":"Done","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self.command_error \u003d result_or_error"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"class AsyncCommandResult(BaseCommandResult):"},{"line_number":148,"context_line":"    \"\"\"A command that executes asynchronously in the background.\"\"\""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def __init__(self, command_name, command_params, execute_method,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5aa1614a_77e5a04d","line":147,"updated":"2023-04-27 08:24:09.000000000","message":"The whole extension mechanism, async commands, etc are not needed in fake IPA. If you want to base on IPA code, please clean it up accordingly.\n\nFor example, async commands are unnecessary because no real actions are done.","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"174fc3db595dea5ad1cd7e3f258fa47b15979a2c","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self.command_error \u003d result_or_error"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"class AsyncCommandResult(BaseCommandResult):"},{"line_number":148,"context_line":"    \"\"\"A command that executes asynchronously in the background.\"\"\""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def __init__(self, command_name, command_params, execute_method,"}],"source_content_type":"text/x-python","patch_set":18,"id":"46599fd7_e6bbd1fc","line":147,"in_reply_to":"5aa1614a_77e5a04d","updated":"2023-05-26 14:48:33.000000000","message":"but still some commands need to be run async like deploy step","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":18,"context_line":"import threading"},{"line_number":19,"context_line":"import time"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_utils import uuidutils"},{"line_number":22,"context_line":"from stevedore import extension"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from sushy_tools import error"}],"source_content_type":"text/x-python","patch_set":22,"id":"989a1dcc_5e735ffc","line":21,"updated":"2023-06-28 15:00:53.000000000","message":"No oslo_utils please (or any other module with oslo_ in it).","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import threading"},{"line_number":19,"context_line":"import time"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_utils import uuidutils"},{"line_number":22,"context_line":"from stevedore import extension"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from sushy_tools import error"}],"source_content_type":"text/x-python","patch_set":22,"id":"0f9e9fa5_f6f9f02e","line":21,"in_reply_to":"989a1dcc_5e735ffc","updated":"2023-06-29 16:34:25.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":163,"context_line":"        self.command_state_lock \u003d threading.Lock()"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        thread_name \u003d \u0027agent-command-{}\u0027.format(self.id)"},{"line_number":166,"context_line":"        self.execution_thread \u003d threading.Thread(target\u003dself.run,"},{"line_number":167,"context_line":"                                                 name\u003dthread_name)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def serialize(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"4976a298_e81793ea","line":166,"updated":"2023-06-28 15:00:53.000000000","message":"I see the usage of threads here as a potential bottleneck. Imagine you\u0027re testing thousands of nodes. You may need to keep spawning hundreds or thousands of threads all the time. And the only thing these threads will do is to call sleep.\n\nMaybe instead we make each command return (immediately) the faked result and the timestamp when this result becomes \"real\" (0 for synchronous). Then you don\u0027t need all this async stuff here.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"e1952da8d7e1ea7d2ad2f97276f3490a014da6d1","unresolved":true,"context_lines":[{"line_number":163,"context_line":"        self.command_state_lock \u003d threading.Lock()"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        thread_name \u003d \u0027agent-command-{}\u0027.format(self.id)"},{"line_number":166,"context_line":"        self.execution_thread \u003d threading.Thread(target\u003dself.run,"},{"line_number":167,"context_line":"                                                 name\u003dthread_name)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def serialize(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"b7c8e40a_df1245f4","line":166,"in_reply_to":"4976a298_e81793ea","updated":"2023-08-04 08:51:21.000000000","message":"Agree! However, implementing this change would require significant modifications to the current codebase. To avoid delays in our current project, I propose that we proceed with the current approach for now and address the suggested changes in a follow-up iteration.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":163,"context_line":"        self.command_state_lock \u003d threading.Lock()"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        thread_name \u003d \u0027agent-command-{}\u0027.format(self.id)"},{"line_number":166,"context_line":"        self.execution_thread \u003d threading.Thread(target\u003dself.run,"},{"line_number":167,"context_line":"                                                 name\u003dthread_name)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def serialize(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"d9e4dc69_ee923e25","line":166,"in_reply_to":"b7c8e40a_df1245f4","updated":"2023-10-05 14:31:41.000000000","message":"There is no \"current codebase\", everything is added from scratch. My problem is, we\u0027re adding a lot of code that is *mostly* identical to IPA. It is hard to review and to maintain (and that explains why you\u0027re getting so few reviews so slowly btw).","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":163,"context_line":"        self.command_state_lock \u003d threading.Lock()"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        thread_name \u003d \u0027agent-command-{}\u0027.format(self.id)"},{"line_number":166,"context_line":"        self.execution_thread \u003d threading.Thread(target\u003dself.run,"},{"line_number":167,"context_line":"                                                 name\u003dthread_name)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def serialize(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"da6a7567_7ade2138","line":166,"in_reply_to":"d9e4dc69_ee923e25","updated":"2023-12-04 10:13:18.000000000","message":"done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        self.command_state_lock \u003d threading.Lock()"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        thread_name \u003d \u0027agent-command-{}\u0027.format(self.id)"},{"line_number":166,"context_line":"        self.execution_thread \u003d threading.Thread(target\u003dself.run,"},{"line_number":167,"context_line":"                                                 name\u003dthread_name)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def serialize(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"e1b47f8e_76e7d0ee","line":166,"in_reply_to":"da6a7567_7ade2138","updated":"2024-02-21 10:53:10.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":363,"context_line":"_EXT_MANAGER \u003d None"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"def init_ext_manager(agent):"},{"line_number":367,"context_line":"    global _EXT_MANAGER"},{"line_number":368,"context_line":"    _EXT_MANAGER \u003d extension.ExtensionManager("},{"line_number":369,"context_line":"        namespace\u003d\u0027ironic_python_agent.extensions\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"11a42a15_813f83a5","line":366,"updated":"2023-06-28 15:00:53.000000000","message":"We could do this, but we could also just hardcode the extensions we need here.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":false,"context_lines":[{"line_number":363,"context_line":"_EXT_MANAGER \u003d None"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"def init_ext_manager(agent):"},{"line_number":367,"context_line":"    global _EXT_MANAGER"},{"line_number":368,"context_line":"    _EXT_MANAGER \u003d extension.ExtensionManager("},{"line_number":369,"context_line":"        namespace\u003d\u0027ironic_python_agent.extensions\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"a581baec_52e334cd","line":366,"in_reply_to":"11a42a15_813f83a5","updated":"2023-06-29 16:34:25.000000000","message":"changed ext name","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":366,"context_line":"def init_ext_manager(agent):"},{"line_number":367,"context_line":"    global _EXT_MANAGER"},{"line_number":368,"context_line":"    _EXT_MANAGER \u003d extension.ExtensionManager("},{"line_number":369,"context_line":"        namespace\u003d\u0027ironic_python_agent.extensions\u0027,"},{"line_number":370,"context_line":"        invoke_on_load\u003dTrue,"},{"line_number":371,"context_line":"        propagate_map_exceptions\u003dTrue,"},{"line_number":372,"context_line":"        invoke_kwds\u003d{\u0027agent\u0027: agent},"}],"source_content_type":"text/x-python","patch_set":22,"id":"022091d7_85db466e","line":369,"updated":"2023-06-28 15:00:53.000000000","message":"If you do prefer to have extensions, change the namespace to something like sushy_tools.fake_ipa.extensions.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":false,"context_lines":[{"line_number":366,"context_line":"def init_ext_manager(agent):"},{"line_number":367,"context_line":"    global _EXT_MANAGER"},{"line_number":368,"context_line":"    _EXT_MANAGER \u003d extension.ExtensionManager("},{"line_number":369,"context_line":"        namespace\u003d\u0027ironic_python_agent.extensions\u0027,"},{"line_number":370,"context_line":"        invoke_on_load\u003dTrue,"},{"line_number":371,"context_line":"        propagate_map_exceptions\u003dTrue,"},{"line_number":372,"context_line":"        invoke_kwds\u003d{\u0027agent\u0027: agent},"}],"source_content_type":"text/x-python","patch_set":22,"id":"f03cf7a6_dcdc2def","line":369,"in_reply_to":"022091d7_85db466e","updated":"2023-06-29 16:34:25.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0cd0ed7794c6f9364bdff529aae35f4bfe099e12","unresolved":true,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class AgentCommandStatus(object):"},{"line_number":60,"context_line":"    \"\"\"Mapping of agent command statuses.\"\"\""},{"line_number":61,"context_line":"    RUNNING \u003d u\u0027RUNNING\u0027"},{"line_number":62,"context_line":"    SUCCEEDED \u003d u\u0027SUCCEEDED\u0027"},{"line_number":63,"context_line":"    FAILED \u003d u\u0027FAILED\u0027"},{"line_number":64,"context_line":"    # TODO(dtantsur): keeping the same text for backward compatibility, change"},{"line_number":65,"context_line":"    # to just VERSION_MISMATCH one release after ironic is updated."},{"line_number":66,"context_line":"    VERSION_MISMATCH \u003d u\u0027CLEAN_VERSION_MISMATCH\u0027"}],"source_content_type":"text/x-python","patch_set":23,"id":"b42d9338_af4d8e33","line":63,"range":{"start_line":61,"start_character":0,"end_line":63,"end_character":22},"updated":"2023-06-29 06:22:25.000000000","message":"nit: python3 strings are unicode, so omitting the u is a bit cleaner. sushy-tools still has some leftovers which can be cleaned up","commit_id":"918816781ecb73accf1162087f0a56d406ddd2a6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"2a6f5fd6ceae99cc5ad3387ea4930c20058870c2","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class AgentCommandStatus(object):"},{"line_number":60,"context_line":"    \"\"\"Mapping of agent command statuses.\"\"\""},{"line_number":61,"context_line":"    RUNNING \u003d u\u0027RUNNING\u0027"},{"line_number":62,"context_line":"    SUCCEEDED \u003d u\u0027SUCCEEDED\u0027"},{"line_number":63,"context_line":"    FAILED \u003d u\u0027FAILED\u0027"},{"line_number":64,"context_line":"    # TODO(dtantsur): keeping the same text for backward compatibility, change"},{"line_number":65,"context_line":"    # to just VERSION_MISMATCH one release after ironic is updated."},{"line_number":66,"context_line":"    VERSION_MISMATCH \u003d u\u0027CLEAN_VERSION_MISMATCH\u0027"}],"source_content_type":"text/x-python","patch_set":23,"id":"fb216df2_b4961d87","line":63,"range":{"start_line":61,"start_character":0,"end_line":63,"end_character":22},"in_reply_to":"b42d9338_af4d8e33","updated":"2023-08-04 12:21:34.000000000","message":"Done","commit_id":"918816781ecb73accf1162087f0a56d406ddd2a6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[{"line_number":161,"context_line":"        super(AsyncCommandResult, self).__init__(command_name, command_params)"},{"line_number":162,"context_line":"        self.agent \u003d agent"},{"line_number":163,"context_line":"        self.execute_method \u003d execute_method"},{"line_number":164,"context_line":"        self.time \u003d time.time() + random.randint(5, 10)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def serialize(self):"},{"line_number":167,"context_line":"        \"\"\"Serializes the AsyncCommandResult into a dict."}],"source_content_type":"text/x-python","patch_set":39,"id":"4d9538bb_e7972a5c","line":164,"updated":"2024-01-26 16:19:59.000000000","message":"Idea for the future: different numbers depending on the exact command (wiping partitions is faster than writing images).","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        super(AsyncCommandResult, self).__init__(command_name, command_params)"},{"line_number":162,"context_line":"        self.agent \u003d agent"},{"line_number":163,"context_line":"        self.execute_method \u003d execute_method"},{"line_number":164,"context_line":"        self.time \u003d time.time() + random.randint(5, 10)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def serialize(self):"},{"line_number":167,"context_line":"        \"\"\"Serializes the AsyncCommandResult into a dict."}],"source_content_type":"text/x-python","patch_set":39,"id":"8121b7a9_1ffee923","line":164,"in_reply_to":"2319c9b4_746ca76b","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":true,"context_lines":[{"line_number":161,"context_line":"        super(AsyncCommandResult, self).__init__(command_name, command_params)"},{"line_number":162,"context_line":"        self.agent \u003d agent"},{"line_number":163,"context_line":"        self.execute_method \u003d execute_method"},{"line_number":164,"context_line":"        self.time \u003d time.time() + random.randint(5, 10)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def serialize(self):"},{"line_number":167,"context_line":"        \"\"\"Serializes the AsyncCommandResult into a dict."}],"source_content_type":"text/x-python","patch_set":39,"id":"2319c9b4_746ca76b","line":164,"in_reply_to":"4d9538bb_e7972a5c","updated":"2024-02-06 13:30:24.000000000","message":"I will happy to see that in the future as well","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[{"line_number":163,"context_line":"        self.execute_method \u003d execute_method"},{"line_number":164,"context_line":"        self.time \u003d time.time() + random.randint(5, 10)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def serialize(self):"},{"line_number":167,"context_line":"        \"\"\"Serializes the AsyncCommandResult into a dict."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        :returns: dict containing serializable fields in AsyncCommandResult"}],"source_content_type":"text/x-python","patch_set":39,"id":"945d4d07_e36f6e93","line":166,"updated":"2024-01-26 16:19:59.000000000","message":"nit: the method does not do anything new","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":true,"context_lines":[{"line_number":163,"context_line":"        self.execute_method \u003d execute_method"},{"line_number":164,"context_line":"        self.time \u003d time.time() + random.randint(5, 10)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def serialize(self):"},{"line_number":167,"context_line":"        \"\"\"Serializes the AsyncCommandResult into a dict."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        :returns: dict containing serializable fields in AsyncCommandResult"}],"source_content_type":"text/x-python","patch_set":39,"id":"f6bd0f04_ee0bb499","line":166,"in_reply_to":"945d4d07_e36f6e93","updated":"2024-02-06 13:30:24.000000000","message":"removed","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        self.execute_method \u003d execute_method"},{"line_number":164,"context_line":"        self.time \u003d time.time() + random.randint(5, 10)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def serialize(self):"},{"line_number":167,"context_line":"        \"\"\"Serializes the AsyncCommandResult into a dict."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        :returns: dict containing serializable fields in AsyncCommandResult"}],"source_content_type":"text/x-python","patch_set":39,"id":"42a8cd7a_5db1884d","line":166,"in_reply_to":"f6bd0f04_ee0bb499","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[{"line_number":179,"context_line":"        time.sleep(max(0, self.time - time.time()))"},{"line_number":180,"context_line":"        return self"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def is_done(self):"},{"line_number":183,"context_line":"        \"\"\"Checks to see if command is still RUNNING."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        :returns: True if command is done, False if still RUNNING"}],"source_content_type":"text/x-python","patch_set":39,"id":"25c30918_f5a3a485","line":182,"updated":"2024-01-26 16:19:59.000000000","message":"same","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9640fc6e02e419e2cf7eed2d2816e4fc1d801649","unresolved":true,"context_lines":[{"line_number":179,"context_line":"        time.sleep(max(0, self.time - time.time()))"},{"line_number":180,"context_line":"        return self"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def is_done(self):"},{"line_number":183,"context_line":"        \"\"\"Checks to see if command is still RUNNING."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        :returns: True if command is done, False if still RUNNING"}],"source_content_type":"text/x-python","patch_set":39,"id":"60c43224_ba1e08e8","line":182,"in_reply_to":"25c30918_f5a3a485","updated":"2024-04-01 14:15:25.000000000","message":"Maybe a question to consider, \"is there a need for the explicit declaration of the method.\"","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":true,"context_lines":[{"line_number":179,"context_line":"        time.sleep(max(0, self.time - time.time()))"},{"line_number":180,"context_line":"        return self"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def is_done(self):"},{"line_number":183,"context_line":"        \"\"\"Checks to see if command is still RUNNING."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        :returns: True if command is done, False if still RUNNING"}],"source_content_type":"text/x-python","patch_set":39,"id":"92dd7170_9c35017c","line":182,"in_reply_to":"25c30918_f5a3a485","updated":"2024-02-06 13:30:24.000000000","message":"same","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"7d963b9b1ff2d9d09ae2377c525a218735731888","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        time.sleep(max(0, self.time - time.time()))"},{"line_number":180,"context_line":"        return self"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def is_done(self):"},{"line_number":183,"context_line":"        \"\"\"Checks to see if command is still RUNNING."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        :returns: True if command is done, False if still RUNNING"}],"source_content_type":"text/x-python","patch_set":39,"id":"5285adb9_8998c69e","line":182,"in_reply_to":"28e57dc9_a08f80ae","updated":"2024-04-24 04:24:51.000000000","message":"Acknowledged","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4df1a3d363b86c0eae5daaaaee84028d9c0e9c30","unresolved":true,"context_lines":[{"line_number":179,"context_line":"        time.sleep(max(0, self.time - time.time()))"},{"line_number":180,"context_line":"        return self"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def is_done(self):"},{"line_number":183,"context_line":"        \"\"\"Checks to see if command is still RUNNING."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        :returns: True if command is done, False if still RUNNING"}],"source_content_type":"text/x-python","patch_set":39,"id":"28e57dc9_a08f80ae","line":182,"in_reply_to":"60c43224_ba1e08e8","updated":"2024-04-04 14:03:07.000000000","message":"removed on the latest patch","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        time.sleep(max(0, self.time - time.time()))"},{"line_number":180,"context_line":"        return self"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def is_done(self):"},{"line_number":183,"context_line":"        \"\"\"Checks to see if command is still RUNNING."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        :returns: True if command is done, False if still RUNNING"}],"source_content_type":"text/x-python","patch_set":39,"id":"e6cb82f4_f732c7da","line":182,"in_reply_to":"92dd7170_9c35017c","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e18429c545b1fd7171a124b72147e34fe8c78334","unresolved":true,"context_lines":[{"line_number":19,"context_line":"import time"},{"line_number":20,"context_line":"import uuid"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from stevedore import extension"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from sushy_tools.fake_ipa import encoding"},{"line_number":25,"context_line":"from sushy_tools.fake_ipa import error"}],"source_content_type":"text/x-python","patch_set":42,"id":"a966c9f2_f4061586","line":22,"updated":"2024-03-08 13:50:03.000000000","message":"stevedore is not in requirements, you need to add it https://opendev.org/openstack/sushy-tools/src/branch/master/requirements.txt. Although I\u0027d rather use a constant list of extensions and get rid of stevedore.","commit_id":"e4c5d519be943394226c259f9b47688e99574c58"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"6051cd1dc9f7f65c0c23cc34f12ec1e73abb931a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import time"},{"line_number":20,"context_line":"import uuid"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from stevedore import extension"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from sushy_tools.fake_ipa import encoding"},{"line_number":25,"context_line":"from sushy_tools.fake_ipa import error"}],"source_content_type":"text/x-python","patch_set":42,"id":"6d750e0d_cb351803","line":22,"in_reply_to":"a966c9f2_f4061586","updated":"2024-03-19 13:19:29.000000000","message":"Done","commit_id":"e4c5d519be943394226c259f9b47688e99574c58"}],"sushy_tools/fake_ipa/clean.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"      \"interface\": \"deploy\","},{"line_number":34,"context_line":"      \"reboot_requested\": false,"},{"line_number":35,"context_line":"      \"abortable\": true"},{"line_number":36,"context_line":"    },"},{"line_number":37,"context_line":"    {"},{"line_number":38,"context_line":"      \"step\": \"erase_devices_express\","},{"line_number":39,"context_line":"      \"priority\": 0,"}],"source_content_type":"text/x-python","patch_set":18,"id":"64d23e87_777f7583","line":36,"updated":"2023-04-27 08:24:09.000000000","message":"Only the first two need to be emulated, everything else can be skipped for now.","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"174fc3db595dea5ad1cd7e3f258fa47b15979a2c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"      \"interface\": \"deploy\","},{"line_number":34,"context_line":"      \"reboot_requested\": false,"},{"line_number":35,"context_line":"      \"abortable\": true"},{"line_number":36,"context_line":"    },"},{"line_number":37,"context_line":"    {"},{"line_number":38,"context_line":"      \"step\": \"erase_devices_express\","},{"line_number":39,"context_line":"      \"priority\": 0,"}],"source_content_type":"text/x-python","patch_set":18,"id":"b03e1c68_edc599be","line":36,"in_reply_to":"64d23e87_777f7583","updated":"2023-05-26 14:48:33.000000000","message":"ok","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from sushy_tools.fake_ipa import base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d log.getLogger()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"clean_steps \u003d \"\"\"{"},{"line_number":22,"context_line":"  \"GenericHardwareManager\": ["}],"source_content_type":"text/x-python","patch_set":22,"id":"14da3673_f9839250","line":19,"updated":"2023-06-28 15:00:53.000000000","message":"Use the normal Python logger.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"e1952da8d7e1ea7d2ad2f97276f3490a014da6d1","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from sushy_tools.fake_ipa import base"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d log.getLogger()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"clean_steps \u003d \"\"\"{"},{"line_number":22,"context_line":"  \"GenericHardwareManager\": ["}],"source_content_type":"text/x-python","patch_set":22,"id":"e58634ac_9ecc18a2","line":19,"in_reply_to":"14da3673_f9839250","updated":"2023-08-04 08:51:21.000000000","message":"done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d log.getLogger()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"clean_steps \u003d \"\"\"{"},{"line_number":22,"context_line":"  \"GenericHardwareManager\": ["},{"line_number":23,"context_line":"    {"},{"line_number":24,"context_line":"      \"step\": \"erase_devices\","}],"source_content_type":"text/x-python","patch_set":22,"id":"1c89b840_626199d1","line":21,"updated":"2023-06-28 15:00:53.000000000","message":"Why a string, just make it a dictionary and you won\u0027t need to JSON-load it each time.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"2a6f5fd6ceae99cc5ad3387ea4930c20058870c2","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d log.getLogger()"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"clean_steps \u003d \"\"\"{"},{"line_number":22,"context_line":"  \"GenericHardwareManager\": ["},{"line_number":23,"context_line":"    {"},{"line_number":24,"context_line":"      \"step\": \"erase_devices\","}],"source_content_type":"text/x-python","patch_set":22,"id":"3a512d16_b0aaaad0","line":21,"in_reply_to":"1c89b840_626199d1","updated":"2023-08-04 12:21:34.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        \"\"\""},{"line_number":50,"context_line":"        LOG.debug(\u0027Getting clean steps, called with node: %(node)s, \u0027"},{"line_number":51,"context_line":"                  \u0027ports: %(ports)s\u0027, {\u0027node\u0027: node, \u0027ports\u0027: ports})"},{"line_number":52,"context_line":"        self.fake_processing_delay(3, 6)"},{"line_number":53,"context_line":"        return {"},{"line_number":54,"context_line":"            \u0027clean_steps\u0027: clean_steps,"},{"line_number":55,"context_line":"            \u0027hardware_manager_version\u0027: {"}],"source_content_type":"text/x-python","patch_set":36,"id":"bdb0f037_f2d4153b","line":52,"updated":"2023-10-05 14:31:41.000000000","message":"This is synchronous, no delay here","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \"\"\""},{"line_number":50,"context_line":"        LOG.debug(\u0027Getting clean steps, called with node: %(node)s, \u0027"},{"line_number":51,"context_line":"                  \u0027ports: %(ports)s\u0027, {\u0027node\u0027: node, \u0027ports\u0027: ports})"},{"line_number":52,"context_line":"        self.fake_processing_delay(3, 6)"},{"line_number":53,"context_line":"        return {"},{"line_number":54,"context_line":"            \u0027clean_steps\u0027: clean_steps,"},{"line_number":55,"context_line":"            \u0027hardware_manager_version\u0027: {"}],"source_content_type":"text/x-python","patch_set":36,"id":"6d2a75e1_2675750a","line":52,"in_reply_to":"900b27ce_39e0a48b","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        \"\"\""},{"line_number":50,"context_line":"        LOG.debug(\u0027Getting clean steps, called with node: %(node)s, \u0027"},{"line_number":51,"context_line":"                  \u0027ports: %(ports)s\u0027, {\u0027node\u0027: node, \u0027ports\u0027: ports})"},{"line_number":52,"context_line":"        self.fake_processing_delay(3, 6)"},{"line_number":53,"context_line":"        return {"},{"line_number":54,"context_line":"            \u0027clean_steps\u0027: clean_steps,"},{"line_number":55,"context_line":"            \u0027hardware_manager_version\u0027: {"}],"source_content_type":"text/x-python","patch_set":36,"id":"900b27ce_39e0a48b","line":52,"in_reply_to":"bdb0f037_f2d4153b","updated":"2023-12-04 10:13:18.000000000","message":"we are giving little delay to simulate real processing for sync commands but I take off","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        return {"},{"line_number":54,"context_line":"            \u0027clean_steps\u0027: clean_steps,"},{"line_number":55,"context_line":"            \u0027hardware_manager_version\u0027: {"},{"line_number":56,"context_line":"                \"generic_hardware_manager\": \"1.1\""},{"line_number":57,"context_line":"                },"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"9eda38b5_e810e9a7","line":56,"updated":"2023-10-05 14:31:41.000000000","message":"nit: Let\u0027s call it fake_hardware_manager","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        return {"},{"line_number":54,"context_line":"            \u0027clean_steps\u0027: clean_steps,"},{"line_number":55,"context_line":"            \u0027hardware_manager_version\u0027: {"},{"line_number":56,"context_line":"                \"generic_hardware_manager\": \"1.1\""},{"line_number":57,"context_line":"                },"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"a0caf1ba_d597cf5c","line":56,"in_reply_to":"9eda38b5_e810e9a7","updated":"2023-12-04 10:13:18.000000000","message":"done","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return {"},{"line_number":54,"context_line":"            \u0027clean_steps\u0027: clean_steps,"},{"line_number":55,"context_line":"            \u0027hardware_manager_version\u0027: {"},{"line_number":56,"context_line":"                \"generic_hardware_manager\": \"1.1\""},{"line_number":57,"context_line":"                },"},{"line_number":58,"context_line":"        }"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"08bf618f_24c65a03","line":56,"in_reply_to":"a0caf1ba_d597cf5c","updated":"2024-02-21 10:53:10.000000000","message":"Done","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":73,"context_line":"        \"\"\""},{"line_number":74,"context_line":"        # Ensure the agent is still the same version, or raise an exception"},{"line_number":75,"context_line":"        LOG.debug(\u0027Executing clean step %s\u0027, step)"},{"line_number":76,"context_line":"        if \u0027step\u0027 not in step:"},{"line_number":77,"context_line":"            msg \u003d \u0027Malformed clean_step, no \"step\" key: %s\u0027 % step"},{"line_number":78,"context_line":"            LOG.error(msg)"},{"line_number":79,"context_line":"            raise ValueError(msg)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3e716fcb_acd1b400","line":76,"updated":"2023-10-05 14:31:41.000000000","message":"Could you please clean up code that you don\u0027t use?","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        \"\"\""},{"line_number":74,"context_line":"        # Ensure the agent is still the same version, or raise an exception"},{"line_number":75,"context_line":"        LOG.debug(\u0027Executing clean step %s\u0027, step)"},{"line_number":76,"context_line":"        if \u0027step\u0027 not in step:"},{"line_number":77,"context_line":"            msg \u003d \u0027Malformed clean_step, no \"step\" key: %s\u0027 % step"},{"line_number":78,"context_line":"            LOG.error(msg)"},{"line_number":79,"context_line":"            raise ValueError(msg)"}],"source_content_type":"text/x-python","patch_set":36,"id":"6997eeb6_f94ffae9","line":76,"in_reply_to":"2232d62a_b64f1279","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":73,"context_line":"        \"\"\""},{"line_number":74,"context_line":"        # Ensure the agent is still the same version, or raise an exception"},{"line_number":75,"context_line":"        LOG.debug(\u0027Executing clean step %s\u0027, step)"},{"line_number":76,"context_line":"        if \u0027step\u0027 not in step:"},{"line_number":77,"context_line":"            msg \u003d \u0027Malformed clean_step, no \"step\" key: %s\u0027 % step"},{"line_number":78,"context_line":"            LOG.error(msg)"},{"line_number":79,"context_line":"            raise ValueError(msg)"}],"source_content_type":"text/x-python","patch_set":36,"id":"2232d62a_b64f1279","line":76,"in_reply_to":"3e716fcb_acd1b400","updated":"2023-12-04 10:13:18.000000000","message":"which code is not used ? this is check that the command sent from ironic has the step in the parameters","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        # Cast result tuples (like output of utils.execute) as lists, or"},{"line_number":87,"context_line":"        # API throws errors"},{"line_number":88,"context_line":"        if isinstance(result, tuple):"},{"line_number":89,"context_line":"            result \u003d list(result)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        # Return the step that was executed so we can dispatch"}],"source_content_type":"text/x-python","patch_set":36,"id":"adc381d6_0a6a4e56","line":88,"updated":"2023-10-05 14:31:41.000000000","message":"result is {}, how can it be a tuple?","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        # Cast result tuples (like output of utils.execute) as lists, or"},{"line_number":87,"context_line":"        # API throws errors"},{"line_number":88,"context_line":"        if isinstance(result, tuple):"},{"line_number":89,"context_line":"            result \u003d list(result)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        # Return the step that was executed so we can dispatch"}],"source_content_type":"text/x-python","patch_set":36,"id":"8d6e9ecf_8b59562e","line":88,"in_reply_to":"9a69ff14_5276d2e0","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        # Cast result tuples (like output of utils.execute) as lists, or"},{"line_number":87,"context_line":"        # API throws errors"},{"line_number":88,"context_line":"        if isinstance(result, tuple):"},{"line_number":89,"context_line":"            result \u003d list(result)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        # Return the step that was executed so we can dispatch"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a69ff14_5276d2e0","line":88,"in_reply_to":"adc381d6_0a6a4e56","updated":"2023-12-04 10:13:18.000000000","message":"this check deleted as we have static result {}","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"}],"sushy_tools/fake_ipa/deploy.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"      }"},{"line_number":46,"context_line":"    },"},{"line_number":47,"context_line":"    {"},{"line_number":48,"context_line":"      \"step\": \"write_image\","},{"line_number":49,"context_line":"      \"priority\": 0,"},{"line_number":50,"context_line":"      \"interface\": \"deploy\","},{"line_number":51,"context_line":"      \"reboot_requested\": false"}],"source_content_type":"text/x-python","patch_set":18,"id":"a471baba_7bca321b","line":48,"updated":"2023-04-27 08:24:09.000000000","message":"Only this one needs to be emulated","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"174fc3db595dea5ad1cd7e3f258fa47b15979a2c","unresolved":false,"context_lines":[{"line_number":45,"context_line":"      }"},{"line_number":46,"context_line":"    },"},{"line_number":47,"context_line":"    {"},{"line_number":48,"context_line":"      \"step\": \"write_image\","},{"line_number":49,"context_line":"      \"priority\": 0,"},{"line_number":50,"context_line":"      \"interface\": \"deploy\","},{"line_number":51,"context_line":"      \"reboot_requested\": false"}],"source_content_type":"text/x-python","patch_set":18,"id":"8340be9f_25850296","line":48,"in_reply_to":"a471baba_7bca321b","updated":"2023-05-26 14:48:33.000000000","message":"ok","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        LOG.debug(\u0027Getting deploy steps, called with node: %(node)s, \u0027"},{"line_number":43,"context_line":"                  \u0027ports: %(ports)s\u0027, {\u0027node\u0027: node, \u0027ports\u0027: ports})"},{"line_number":44,"context_line":"        self.fake_processing_delay(3, 6)"},{"line_number":45,"context_line":"        return {"},{"line_number":46,"context_line":"            \u0027deploy_steps\u0027: deploy_steps,"},{"line_number":47,"context_line":"            \u0027hardware_manager_version\u0027: {"}],"source_content_type":"text/x-python","patch_set":36,"id":"4694fd0b_65766732","line":44,"updated":"2023-10-05 14:31:41.000000000","message":"Same","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        LOG.debug(\u0027Getting deploy steps, called with node: %(node)s, \u0027"},{"line_number":43,"context_line":"                  \u0027ports: %(ports)s\u0027, {\u0027node\u0027: node, \u0027ports\u0027: ports})"},{"line_number":44,"context_line":"        self.fake_processing_delay(3, 6)"},{"line_number":45,"context_line":"        return {"},{"line_number":46,"context_line":"            \u0027deploy_steps\u0027: deploy_steps,"},{"line_number":47,"context_line":"            \u0027hardware_manager_version\u0027: {"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba91315a_6cc5c265","line":44,"in_reply_to":"4694fd0b_65766732","updated":"2023-12-04 10:13:18.000000000","message":"cleaned","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        LOG.debug(\u0027Getting deploy steps, called with node: %(node)s, \u0027"},{"line_number":43,"context_line":"                  \u0027ports: %(ports)s\u0027, {\u0027node\u0027: node, \u0027ports\u0027: ports})"},{"line_number":44,"context_line":"        self.fake_processing_delay(3, 6)"},{"line_number":45,"context_line":"        return {"},{"line_number":46,"context_line":"            \u0027deploy_steps\u0027: deploy_steps,"},{"line_number":47,"context_line":"            \u0027hardware_manager_version\u0027: {"}],"source_content_type":"text/x-python","patch_set":36,"id":"863666fd_6ac500ea","line":44,"in_reply_to":"ba91315a_6cc5c265","updated":"2024-02-21 10:53:10.000000000","message":"Done","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":68,"context_line":"        LOG.debug(\u0027Executing deploy step %s\u0027, step)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if \u0027step\u0027 not in step:"},{"line_number":71,"context_line":"            msg \u003d \u0027Malformed deploy_step, no \"step\" key: %s\u0027 % step"},{"line_number":72,"context_line":"            LOG.error(msg)"},{"line_number":73,"context_line":"            raise ValueError(msg)"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"4fd860b4_b237c22e","line":71,"updated":"2023-10-05 14:31:41.000000000","message":"Same comments here","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"884e8096a85b5b9d65cb5d3aa1e861295174d971","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        LOG.debug(\u0027Executing deploy step %s\u0027, step)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if \u0027step\u0027 not in step:"},{"line_number":71,"context_line":"            msg \u003d \u0027Malformed deploy_step, no \"step\" key: %s\u0027 % step"},{"line_number":72,"context_line":"            LOG.error(msg)"},{"line_number":73,"context_line":"            raise ValueError(msg)"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"a54a2e08_54fc7dcf","line":71,"in_reply_to":"2595b354_30c73c8c","updated":"2024-03-19 13:17:35.000000000","message":"Acknowledged","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":68,"context_line":"        LOG.debug(\u0027Executing deploy step %s\u0027, step)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if \u0027step\u0027 not in step:"},{"line_number":71,"context_line":"            msg \u003d \u0027Malformed deploy_step, no \"step\" key: %s\u0027 % step"},{"line_number":72,"context_line":"            LOG.error(msg)"},{"line_number":73,"context_line":"            raise ValueError(msg)"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"2595b354_30c73c8c","line":71,"in_reply_to":"4fd860b4_b237c22e","updated":"2023-12-04 10:13:18.000000000","message":"well I still think this error should be raised if ironic sent command without having step in the parameters why should fakeipa accept malformed deploy_step params","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"}],"sushy_tools/fake_ipa/encoding.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":13,"context_line":"import json"},{"line_number":14,"context_line":"import uuid"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from ironic_lib import exception as lib_exc"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class Serializable(object):"}],"source_content_type":"text/x-python","patch_set":22,"id":"be95c06e_46706b15","line":16,"updated":"2023-06-28 15:00:53.000000000","message":"no ironic-lib here","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0cd0ed7794c6f9364bdff529aae35f4bfe099e12","unresolved":true,"context_lines":[{"line_number":13,"context_line":"import json"},{"line_number":14,"context_line":"import uuid"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from ironic_lib import exception as lib_exc"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class Serializable(object):"}],"source_content_type":"text/x-python","patch_set":22,"id":"e94ce58b_4fa16730","line":16,"in_reply_to":"be95c06e_46706b15","updated":"2023-06-29 06:22:25.000000000","message":"We do depend on ironic_lib for basic_auth, arguable not required just for exceptions though. Whatever Dmitry follows up with I will agree","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"2a6f5fd6ceae99cc5ad3387ea4930c20058870c2","unresolved":false,"context_lines":[{"line_number":13,"context_line":"import json"},{"line_number":14,"context_line":"import uuid"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from ironic_lib import exception as lib_exc"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class Serializable(object):"}],"source_content_type":"text/x-python","patch_set":22,"id":"9ad1d91f_199ed620","line":16,"in_reply_to":"e94ce58b_4fa16730","updated":"2023-08-04 12:21:34.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"}],"sushy_tools/fake_ipa/error.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e18429c545b1fd7171a124b72147e34fe8c78334","unresolved":true,"context_lines":[{"line_number":23,"context_line":"        super().__init__(msg)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class Serializable(object):"},{"line_number":27,"context_line":"    \"\"\"Base class for things that can be serialized.\"\"\""},{"line_number":28,"context_line":"    serializable_fields \u003d ()"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"d5347d5c_916d63df","line":26,"updated":"2024-03-08 13:50:03.000000000","message":"Duplicated with encoding.py?","commit_id":"e4c5d519be943394226c259f9b47688e99574c58"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"884e8096a85b5b9d65cb5d3aa1e861295174d971","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        super().__init__(msg)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class Serializable(object):"},{"line_number":27,"context_line":"    \"\"\"Base class for things that can be serialized.\"\"\""},{"line_number":28,"context_line":"    serializable_fields \u003d ()"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"45af4ca8_4bfa7278","line":26,"in_reply_to":"d5347d5c_916d63df","updated":"2024-03-19 13:17:35.000000000","message":"Done","commit_id":"e4c5d519be943394226c259f9b47688e99574c58"}],"sushy_tools/fake_ipa/fake_agent.py":[{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"51581154aea65ee8c4d10eed6b09f9831e49c5c1","unresolved":true,"context_lines":[{"line_number":22,"context_line":"Host \u003d collections.namedtuple(\u0027Host\u0027, [\u0027hostname\u0027, \u0027port\u0027])"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class FakeIronicPythonAgent(base.ExecuteCommandMixin):"},{"line_number":26,"context_line":"    \"\"\"Class for faking ipa functionality.\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    agent_token \u003d None"}],"source_content_type":"text/x-python","patch_set":15,"id":"3e7c6d38_d1cd708c","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":54},"updated":"2023-03-21 13:25:56.000000000","message":"This class seems to replace IPA, which means we will need one instance of it to represent a node. Didn\u0027t we discuss and agree that the fake ipa should represent several nodes?","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"99a49071d7d5fb116e933f1c1b70af805afb4f1d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Host \u003d collections.namedtuple(\u0027Host\u0027, [\u0027hostname\u0027, \u0027port\u0027])"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class FakeIronicPythonAgent(base.ExecuteCommandMixin):"},{"line_number":26,"context_line":"    \"\"\"Class for faking ipa functionality.\"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    agent_token \u003d None"}],"source_content_type":"text/x-python","patch_set":15,"id":"e8cc33c1_893ff6dc","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":54},"in_reply_to":"3e7c6d38_d1cd708c","updated":"2023-05-26 14:49:25.000000000","message":"Done","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"1a210dab8607eec0a1e74327dfa13f0aba183c7a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    @classmethod"},{"line_number":32,"context_line":"    def initialize(cls, config, logger, api):"},{"line_number":33,"context_line":"        config.setdefault(\u0027FAKE_IPA_INSPECTION_CALLBACK_URL\u0027,"},{"line_number":34,"context_line":"                          \u0027http://172.22.0.2:5050/v1/continue\u0027)"},{"line_number":35,"context_line":"        config.setdefault(\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027,"},{"line_number":36,"context_line":"                          Host(hostname\u003d\"192.168.111.1\","},{"line_number":37,"context_line":"                               port\u003d9999))"}],"source_content_type":"text/x-python","patch_set":18,"id":"f6148b36_1aa19312","line":34,"updated":"2023-04-27 08:24:09.000000000","message":"If you\u0027d like to have a default, use localhost, not an arbitrary IP (same below).","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"174fc3db595dea5ad1cd7e3f258fa47b15979a2c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    @classmethod"},{"line_number":32,"context_line":"    def initialize(cls, config, logger, api):"},{"line_number":33,"context_line":"        config.setdefault(\u0027FAKE_IPA_INSPECTION_CALLBACK_URL\u0027,"},{"line_number":34,"context_line":"                          \u0027http://172.22.0.2:5050/v1/continue\u0027)"},{"line_number":35,"context_line":"        config.setdefault(\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027,"},{"line_number":36,"context_line":"                          Host(hostname\u003d\"192.168.111.1\","},{"line_number":37,"context_line":"                               port\u003d9999))"}],"source_content_type":"text/x-python","patch_set":18,"id":"2d3f2015_36b3aa0d","line":34,"in_reply_to":"f6148b36_1aa19312","updated":"2023-05-26 14:48:33.000000000","message":"ok","commit_id":"910f854dfce0a5192dc3a0553da3f75f6ce6a2f6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":33,"context_line":"        config.setdefault(\u0027FAKE_IPA_INSPECTION_CALLBACK_URL\u0027,"},{"line_number":34,"context_line":"                          \u0027http://localhost:5050/v1/continue\u0027)"},{"line_number":35,"context_line":"        config.setdefault(\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027,"},{"line_number":36,"context_line":"                          Host(hostname\u003d\"192.168.111.1\","},{"line_number":37,"context_line":"                               port\u003d9999))"},{"line_number":38,"context_line":"        config.setdefault(\u0027FAKE_IPA_MIN_BOOT_TIME\u0027, 180)"},{"line_number":39,"context_line":"        config.setdefault(\u0027FAKE_IPA_MAX_BOOT_TIME\u0027, 240)"}],"source_content_type":"text/x-python","patch_set":22,"id":"6acae095_386b5434","line":36,"updated":"2023-06-28 15:00:53.000000000","message":"I\u0027d rather prefer to use the current IP address of the machine. Also, it\u0027s not directly the advertise address, only the host:port part of it.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":33,"context_line":"        config.setdefault(\u0027FAKE_IPA_INSPECTION_CALLBACK_URL\u0027,"},{"line_number":34,"context_line":"                          \u0027http://localhost:5050/v1/continue\u0027)"},{"line_number":35,"context_line":"        config.setdefault(\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027,"},{"line_number":36,"context_line":"                          Host(hostname\u003d\"192.168.111.1\","},{"line_number":37,"context_line":"                               port\u003d9999))"},{"line_number":38,"context_line":"        config.setdefault(\u0027FAKE_IPA_MIN_BOOT_TIME\u0027, 180)"},{"line_number":39,"context_line":"        config.setdefault(\u0027FAKE_IPA_MAX_BOOT_TIME\u0027, 240)"}],"source_content_type":"text/x-python","patch_set":22,"id":"d7189d9b_39cfc551","line":36,"in_reply_to":"6acae095_386b5434","updated":"2023-10-05 14:31:41.000000000","message":"This comment holds","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9640fc6e02e419e2cf7eed2d2816e4fc1d801649","unresolved":true,"context_lines":[{"line_number":33,"context_line":"        config.setdefault(\u0027FAKE_IPA_INSPECTION_CALLBACK_URL\u0027,"},{"line_number":34,"context_line":"                          \u0027http://localhost:5050/v1/continue\u0027)"},{"line_number":35,"context_line":"        config.setdefault(\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027,"},{"line_number":36,"context_line":"                          Host(hostname\u003d\"192.168.111.1\","},{"line_number":37,"context_line":"                               port\u003d9999))"},{"line_number":38,"context_line":"        config.setdefault(\u0027FAKE_IPA_MIN_BOOT_TIME\u0027, 180)"},{"line_number":39,"context_line":"        config.setdefault(\u0027FAKE_IPA_MAX_BOOT_TIME\u0027, 240)"}],"source_content_type":"text/x-python","patch_set":22,"id":"f873d9df_cdba6e87","line":36,"in_reply_to":"94a30d9f_67b2b237","updated":"2024-04-01 14:15:25.000000000","message":"Well, the purpose here is to benchmark/stress test the interaction mechanism.\n\nThat would require a lot of work, but why not lay the ground work for a future patch to enable a wider set, because right now it seems like something external would need to configure each instance directly with enough configuration to be sufficiently different.\n\nSo maybe a method to call to get the url, and then in a future patch try to auto-determine what to do and if all else fails fall back to default config if still default?","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":33,"context_line":"        config.setdefault(\u0027FAKE_IPA_INSPECTION_CALLBACK_URL\u0027,"},{"line_number":34,"context_line":"                          \u0027http://localhost:5050/v1/continue\u0027)"},{"line_number":35,"context_line":"        config.setdefault(\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027,"},{"line_number":36,"context_line":"                          Host(hostname\u003d\"192.168.111.1\","},{"line_number":37,"context_line":"                               port\u003d9999))"},{"line_number":38,"context_line":"        config.setdefault(\u0027FAKE_IPA_MIN_BOOT_TIME\u0027, 180)"},{"line_number":39,"context_line":"        config.setdefault(\u0027FAKE_IPA_MAX_BOOT_TIME\u0027, 240)"}],"source_content_type":"text/x-python","patch_set":22,"id":"94a30d9f_67b2b237","line":36,"in_reply_to":"d7189d9b_39cfc551","updated":"2023-12-04 10:13:18.000000000","message":"I would prefer forcing the user to set ip address instead of managing failures when getting the machine IP if you have a suggestion that can work generically please let me know","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4df1a3d363b86c0eae5daaaaee84028d9c0e9c30","unresolved":true,"context_lines":[{"line_number":33,"context_line":"        config.setdefault(\u0027FAKE_IPA_INSPECTION_CALLBACK_URL\u0027,"},{"line_number":34,"context_line":"                          \u0027http://localhost:5050/v1/continue\u0027)"},{"line_number":35,"context_line":"        config.setdefault(\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027,"},{"line_number":36,"context_line":"                          Host(hostname\u003d\"192.168.111.1\","},{"line_number":37,"context_line":"                               port\u003d9999))"},{"line_number":38,"context_line":"        config.setdefault(\u0027FAKE_IPA_MIN_BOOT_TIME\u0027, 180)"},{"line_number":39,"context_line":"        config.setdefault(\u0027FAKE_IPA_MAX_BOOT_TIME\u0027, 240)"}],"source_content_type":"text/x-python","patch_set":22,"id":"4c06bcee_65cfd4a3","line":36,"in_reply_to":"f873d9df_cdba6e87","updated":"2024-04-04 14:03:07.000000000","message":"yeah we can consider this in a future patch","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":156,"context_line":"                  BaseCommandResult` objects."},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        return list(self.command_results.values())"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def get_command_result(self, result_id):"},{"line_number":162,"context_line":"        \"\"\"Get a specific command result by ID."}],"source_content_type":"text/x-python","patch_set":22,"id":"75c56a59_10d45e51","line":159,"updated":"2023-06-28 15:00:53.000000000","message":"Continuation of my comment about async commands: this is where we could use the timestamp to manipulate the results.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"e1952da8d7e1ea7d2ad2f97276f3490a014da6d1","unresolved":false,"context_lines":[{"line_number":156,"context_line":"                  BaseCommandResult` objects."},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        return list(self.command_results.values())"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def get_command_result(self, result_id):"},{"line_number":162,"context_line":"        \"\"\"Get a specific command result by ID."}],"source_content_type":"text/x-python","patch_set":22,"id":"cd3967f2_1314b2e7","line":159,"in_reply_to":"75c56a59_10d45e51","updated":"2023-08-04 08:51:21.000000000","message":"discussion in the other comment","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":168,"context_line":"        \"\"\""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        try:"},{"line_number":171,"context_line":"            return self.command_results[result_id]"},{"line_number":172,"context_line":"        except KeyError:"},{"line_number":173,"context_line":"            raise error.RequestedObjectNotFoundError(\u0027Command Result\u0027,"},{"line_number":174,"context_line":"                                                     result_id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"7594d42e_872e253c","line":171,"updated":"2023-06-28 15:00:53.000000000","message":"And here","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"e1952da8d7e1ea7d2ad2f97276f3490a014da6d1","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        \"\"\""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        try:"},{"line_number":171,"context_line":"            return self.command_results[result_id]"},{"line_number":172,"context_line":"        except KeyError:"},{"line_number":173,"context_line":"            raise error.RequestedObjectNotFoundError(\u0027Command Result\u0027,"},{"line_number":174,"context_line":"                                                     result_id)"}],"source_content_type":"text/x-python","patch_set":22,"id":"a06a7ce5_e0367adc","line":171,"in_reply_to":"7594d42e_872e253c","updated":"2023-08-04 08:51:21.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0cd0ed7794c6f9364bdff529aae35f4bfe099e12","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        # Waiting for ironic to unlock the node after changing the power state"},{"line_number":65,"context_line":"        time.sleep(random.randint("},{"line_number":66,"context_line":"            self._config[\"FAKE_IPA_MIN_BOOT_TIME\"],"},{"line_number":67,"context_line":"            self._config[\"FAKE_IPA_MAX_BOOT_TIME\"]))"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        uuid \u003d None"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"1d634fdd_c33ee878","line":67,"updated":"2023-06-29 06:22:25.000000000","message":"Check out what I did for the fake ironic drivers, a triangular random function so that it tends towards the minimum time, but some nodes are slow sometimes.\n\nAlthough Dmitry suggests sleeps would not be necessary with the async approach\n\nhttps://opendev.org/openstack/ironic/src/branch/master/ironic/drivers/modules/fake.py#L70","commit_id":"918816781ecb73accf1162087f0a56d406ddd2a6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"2a6f5fd6ceae99cc5ad3387ea4930c20058870c2","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        # Waiting for ironic to unlock the node after changing the power state"},{"line_number":65,"context_line":"        time.sleep(random.randint("},{"line_number":66,"context_line":"            self._config[\"FAKE_IPA_MIN_BOOT_TIME\"],"},{"line_number":67,"context_line":"            self._config[\"FAKE_IPA_MAX_BOOT_TIME\"]))"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        uuid \u003d None"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"da6b19c7_29e3636f","line":67,"in_reply_to":"1d634fdd_c33ee878","updated":"2023-08-04 12:21:34.000000000","message":"I would like to improve this in the planned follow up","commit_id":"918816781ecb73accf1162087f0a56d406ddd2a6"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"8500147169513087bd3cee78dee453629d72e635","unresolved":true,"context_lines":[{"line_number":33,"context_line":"        config.setdefault(\u0027FAKE_IPA_INSPECTION_CALLBACK_URL\u0027,"},{"line_number":34,"context_line":"                          \u0027http://localhost:5050/v1/continue\u0027)"},{"line_number":35,"context_line":"        config.setdefault(\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027,"},{"line_number":36,"context_line":"                          Host(hostname\u003d\"192.168.111.1\","},{"line_number":37,"context_line":"                               port\u003d9999))"},{"line_number":38,"context_line":"        config.setdefault(\u0027FAKE_IPA_MIN_BOOT_TIME\u0027, 180)"},{"line_number":39,"context_line":"        config.setdefault(\u0027FAKE_IPA_MAX_BOOT_TIME\u0027, 240)"}],"source_content_type":"text/x-python","patch_set":36,"id":"1f8087c0_ec642b19","line":36,"updated":"2023-10-30 12:52:03.000000000","message":"I think this should be changed to `SUSHY_FAKE_IPA_LISTEN_IP` and `SUSHY_FAKE_IPA_LISTEN_PORT` as you implemented in fake_ipa/main.py","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":33,"context_line":"        config.setdefault(\u0027FAKE_IPA_INSPECTION_CALLBACK_URL\u0027,"},{"line_number":34,"context_line":"                          \u0027http://localhost:5050/v1/continue\u0027)"},{"line_number":35,"context_line":"        config.setdefault(\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027,"},{"line_number":36,"context_line":"                          Host(hostname\u003d\"192.168.111.1\","},{"line_number":37,"context_line":"                               port\u003d9999))"},{"line_number":38,"context_line":"        config.setdefault(\u0027FAKE_IPA_MIN_BOOT_TIME\u0027, 180)"},{"line_number":39,"context_line":"        config.setdefault(\u0027FAKE_IPA_MAX_BOOT_TIME\u0027, 240)"}],"source_content_type":"text/x-python","patch_set":36,"id":"6043c1bd_f53145b9","line":36,"in_reply_to":"1f8087c0_ec642b19","updated":"2023-12-04 10:13:18.000000000","message":"advertised address can be different from the local listening IP","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        config.setdefault(\u0027FAKE_IPA_INSPECTION_CALLBACK_URL\u0027,"},{"line_number":34,"context_line":"                          \u0027http://localhost:5050/v1/continue\u0027)"},{"line_number":35,"context_line":"        config.setdefault(\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027,"},{"line_number":36,"context_line":"                          Host(hostname\u003d\"192.168.111.1\","},{"line_number":37,"context_line":"                               port\u003d9999))"},{"line_number":38,"context_line":"        config.setdefault(\u0027FAKE_IPA_MIN_BOOT_TIME\u0027, 180)"},{"line_number":39,"context_line":"        config.setdefault(\u0027FAKE_IPA_MAX_BOOT_TIME\u0027, 240)"}],"source_content_type":"text/x-python","patch_set":36,"id":"645237a7_f333ed55","line":36,"in_reply_to":"6043c1bd_f53145b9","updated":"2024-02-21 10:53:10.000000000","message":"Done","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e18429c545b1fd7171a124b72147e34fe8c78334","unresolved":true,"context_lines":[{"line_number":181,"context_line":"                                 \u0027by the conductor, yet we received a token."},{"line_number":182,"context_line":"                                 \u0027Cluster may be mid-upgrade. Support to"},{"line_number":183,"context_line":"                                 \u0027not fail in this condition will be removed in"},{"line_number":184,"context_line":"                                 \u0027the Victoria development cycle.\"\"\")"},{"line_number":185,"context_line":"            # Tell the API everything is okay."},{"line_number":186,"context_line":"            return True"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"255bf0c4_3feb0681","line":184,"updated":"2024-03-08 13:50:03.000000000","message":"nit: we\u0027re way past Victoria, this can be removed one","commit_id":"e4c5d519be943394226c259f9b47688e99574c58"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"884e8096a85b5b9d65cb5d3aa1e861295174d971","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                                 \u0027by the conductor, yet we received a token."},{"line_number":182,"context_line":"                                 \u0027Cluster may be mid-upgrade. Support to"},{"line_number":183,"context_line":"                                 \u0027not fail in this condition will be removed in"},{"line_number":184,"context_line":"                                 \u0027the Victoria development cycle.\"\"\")"},{"line_number":185,"context_line":"            # Tell the API everything is okay."},{"line_number":186,"context_line":"            return True"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"b38d590e_d96a0289","line":184,"in_reply_to":"255bf0c4_3feb0681","updated":"2024-03-19 13:17:35.000000000","message":"Done","commit_id":"e4c5d519be943394226c259f9b47688e99574c58"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"3ac50fc95f01f8646820595ae8b77c72e6c833ec","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        uuid \u003d None"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        if self._config[\"FAKE_IPA_INSPECTION_CALLBACK_URL\"]:"},{"line_number":66,"context_line":"            self._logger.\\"},{"line_number":67,"context_line":"                debug("},{"line_number":68,"context_line":"                    \"Starting inspection node %s\""},{"line_number":69,"context_line":"                    \"and sending data to %s\","}],"source_content_type":"text/x-python","patch_set":48,"id":"fcba5f51_3be5d6ee","line":66,"updated":"2024-04-02 08:43:36.000000000","message":"nit: we usually don\u0027t break lines this way","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4df1a3d363b86c0eae5daaaaee84028d9c0e9c30","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        uuid \u003d None"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        if self._config[\"FAKE_IPA_INSPECTION_CALLBACK_URL\"]:"},{"line_number":66,"context_line":"            self._logger.\\"},{"line_number":67,"context_line":"                debug("},{"line_number":68,"context_line":"                    \"Starting inspection node %s\""},{"line_number":69,"context_line":"                    \"and sending data to %s\","}],"source_content_type":"text/x-python","patch_set":48,"id":"f53437ad_a2bfedff","line":66,"in_reply_to":"fcba5f51_3be5d6ee","updated":"2024-04-04 14:03:07.000000000","message":"Done","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9640fc6e02e419e2cf7eed2d2816e4fc1d801649","unresolved":true,"context_lines":[{"line_number":126,"context_line":"                # set with-in the API client."},{"line_number":127,"context_line":"                self.api_client.agent_token \u003d token"},{"line_number":128,"context_line":"            elif token \u003d\u003d \u0027******\u0027:"},{"line_number":129,"context_line":"                self._logger.warning(\u0027The agent token has already been \u0027"},{"line_number":130,"context_line":"                                     \u0027retrieved. IPA may not operate as \u0027"},{"line_number":131,"context_line":"                                     \u0027intended and the deployment may fail \u0027"},{"line_number":132,"context_line":"                                     \u0027depending on settings in the ironic \u0027"},{"line_number":133,"context_line":"                                     \u0027deployment.\u0027)"},{"line_number":134,"context_line":"                if not self.agent_token and self.agent_token_required:"},{"line_number":135,"context_line":"                    self._logger.error(\u0027Ironic is signaling that agent tokens \u0027"},{"line_number":136,"context_line":"                                       \u0027are required, however we do not have \u0027"}],"source_content_type":"text/x-python","patch_set":48,"id":"0b16301d_c1ce97f7","line":133,"range":{"start_line":129,"start_character":0,"end_line":133,"end_character":51},"updated":"2024-04-01 14:15:25.000000000","message":"Heartbeats won\u0027t be recorded, for this purpose, this case is fatal if we\u0027ve never gotten or are aware of the token.","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4df1a3d363b86c0eae5daaaaee84028d9c0e9c30","unresolved":true,"context_lines":[{"line_number":126,"context_line":"                # set with-in the API client."},{"line_number":127,"context_line":"                self.api_client.agent_token \u003d token"},{"line_number":128,"context_line":"            elif token \u003d\u003d \u0027******\u0027:"},{"line_number":129,"context_line":"                self._logger.warning(\u0027The agent token has already been \u0027"},{"line_number":130,"context_line":"                                     \u0027retrieved. IPA may not operate as \u0027"},{"line_number":131,"context_line":"                                     \u0027intended and the deployment may fail \u0027"},{"line_number":132,"context_line":"                                     \u0027depending on settings in the ironic \u0027"},{"line_number":133,"context_line":"                                     \u0027deployment.\u0027)"},{"line_number":134,"context_line":"                if not self.agent_token and self.agent_token_required:"},{"line_number":135,"context_line":"                    self._logger.error(\u0027Ironic is signaling that agent tokens \u0027"},{"line_number":136,"context_line":"                                       \u0027are required, however we do not have \u0027"}],"source_content_type":"text/x-python","patch_set":48,"id":"1f53c111_fbdf7c44","line":133,"range":{"start_line":129,"start_character":0,"end_line":133,"end_character":51},"in_reply_to":"0b16301d_c1ce97f7","updated":"2024-04-04 14:03:07.000000000","message":"What is the action expected here","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9640fc6e02e419e2cf7eed2d2816e4fc1d801649","unresolved":true,"context_lines":[{"line_number":173,"context_line":"    def validate_agent_token(self, token):"},{"line_number":174,"context_line":"        # We did not get a token, i.e. None and"},{"line_number":175,"context_line":"        # we\u0027ve previously seen a token, which is"},{"line_number":176,"context_line":"        # a mid-cluster upgrade case with long-running ramdisks."},{"line_number":177,"context_line":"        if (not token and self.agent_token"},{"line_number":178,"context_line":"                and not self.agent_token_required):"},{"line_number":179,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":48,"id":"82aa7e6c_b5265f6a","line":176,"updated":"2024-04-01 14:15:25.000000000","message":"We\u0027re long out of the window where someone would be upgrading form an cluster without agent tokens to a cluster with agent tokens. You can likely take the path of \"it exists, or there is a failure.\"","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4df1a3d363b86c0eae5daaaaee84028d9c0e9c30","unresolved":true,"context_lines":[{"line_number":173,"context_line":"    def validate_agent_token(self, token):"},{"line_number":174,"context_line":"        # We did not get a token, i.e. None and"},{"line_number":175,"context_line":"        # we\u0027ve previously seen a token, which is"},{"line_number":176,"context_line":"        # a mid-cluster upgrade case with long-running ramdisks."},{"line_number":177,"context_line":"        if (not token and self.agent_token"},{"line_number":178,"context_line":"                and not self.agent_token_required):"},{"line_number":179,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":48,"id":"ac0868ab_829ca8c5","line":176,"in_reply_to":"82aa7e6c_b5265f6a","updated":"2024-04-04 14:03:07.000000000","message":"So here we do not need to check first condition agent_token_required just validate the sent token with the saved one ?\nMy strategy was to make the fake ipa identical to the real ipa when treating requests I do not want to introduce any different behavior even if it is more correct !","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"}],"sushy_tools/fake_ipa/heartbeater.py":[{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"6595b4820d1fc73408fc6439555583cbbf2dc69d","unresolved":true,"context_lines":[{"line_number":19,"context_line":"from sushy_tools import error"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Heatbeater:"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    queue \u003d collections.deque()"},{"line_number":25,"context_line":"    remove_from_q \u003d set()"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a20dee2_28d6828c","line":22,"range":{"start_line":22,"start_character":6,"end_line":22,"end_character":16},"updated":"2023-03-21 08:47:22.000000000","message":"I\u0027m wondering why we use @classmethod repeatedly in this class, while all the methods are, imo, quite instance-specific?","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"5b3ca7c5cdf3bd5eecf3be2e4f90718ee0178561","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from sushy_tools import error"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Heatbeater:"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    queue \u003d collections.deque()"},{"line_number":25,"context_line":"    remove_from_q \u003d set()"}],"source_content_type":"text/x-python","patch_set":15,"id":"9c9e3698_d917bc7d","line":22,"range":{"start_line":22,"start_character":6,"end_line":22,"end_character":16},"in_reply_to":"7a20dee2_28d6828c","updated":"2023-05-26 14:49:52.000000000","message":"Done","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"2f22bd8fdfdda88974ac7c5707f93c77ccb39f02","unresolved":true,"context_lines":[{"line_number":82,"context_line":"        if (agent.heartbeater.heartbeat_forced"},{"line_number":83,"context_line":"                and time.time() \u003e previous_heartbeat + 5):"},{"line_number":84,"context_line":"            return True"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def do_heartbeat(self, system, agent):"},{"line_number":87,"context_line":"        \"\"\"Send a heartbeat to Ironic.\"\"\""},{"line_number":88,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"0f767e2a_086ac359","line":85,"updated":"2023-03-22 09:13:42.000000000","message":"return False","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"5b3ca7c5cdf3bd5eecf3be2e4f90718ee0178561","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        if (agent.heartbeater.heartbeat_forced"},{"line_number":83,"context_line":"                and time.time() \u003e previous_heartbeat + 5):"},{"line_number":84,"context_line":"            return True"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def do_heartbeat(self, system, agent):"},{"line_number":87,"context_line":"        \"\"\"Send a heartbeat to Ironic.\"\"\""},{"line_number":88,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"a5f977b8_4365f8b0","line":85,"in_reply_to":"0f767e2a_086ac359","updated":"2023-05-26 14:49:52.000000000","message":"Done","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            agent.api_client.heartbeat("},{"line_number":90,"context_line":"                uuid\u003dagent.node[\u0027uuid\u0027],"},{"line_number":91,"context_line":"                advertise_address\u003dself._config[\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027],"},{"line_number":92,"context_line":"                advertise_protocol\u003d\"http\","},{"line_number":93,"context_line":"                generated_cert\u003dNone,"},{"line_number":94,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":22,"id":"66dbe445_c68c5df6","line":91,"updated":"2023-06-28 15:00:53.000000000","message":"This address has to be node-specific, i.e. include UUID.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"8500147169513087bd3cee78dee453629d72e635","unresolved":true,"context_lines":[{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            agent.api_client.heartbeat("},{"line_number":90,"context_line":"                uuid\u003dagent.node[\u0027uuid\u0027],"},{"line_number":91,"context_line":"                advertise_address\u003dself._config[\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027],"},{"line_number":92,"context_line":"                advertise_protocol\u003d\"http\","},{"line_number":93,"context_line":"                generated_cert\u003dNone,"},{"line_number":94,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":22,"id":"a3b04965_29f6f596","line":91,"in_reply_to":"21002c1f_7dec769e","updated":"2023-10-30 12:52:03.000000000","message":"Same here","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            agent.api_client.heartbeat("},{"line_number":90,"context_line":"                uuid\u003dagent.node[\u0027uuid\u0027],"},{"line_number":91,"context_line":"                advertise_address\u003dself._config[\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027],"},{"line_number":92,"context_line":"                advertise_protocol\u003d\"http\","},{"line_number":93,"context_line":"                generated_cert\u003dNone,"},{"line_number":94,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":22,"id":"21002c1f_7dec769e","line":91,"in_reply_to":"3a84baaf_92806ed4","updated":"2023-10-05 14:31:41.000000000","message":"In the design you copied from IPA, only one command can be executed at a time. Which means, only 1 node will be able to run any async actions.\n\nFurthermore, the Ironic takes the last result from the list of results. This is not great, but it\u0027s the case, and it means you\u0027re getting results from unrelated commands. I don\u0027t understand how it all is supposed to work.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"e1952da8d7e1ea7d2ad2f97276f3490a014da6d1","unresolved":true,"context_lines":[{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            agent.api_client.heartbeat("},{"line_number":90,"context_line":"                uuid\u003dagent.node[\u0027uuid\u0027],"},{"line_number":91,"context_line":"                advertise_address\u003dself._config[\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027],"},{"line_number":92,"context_line":"                advertise_protocol\u003d\"http\","},{"line_number":93,"context_line":"                generated_cert\u003dNone,"},{"line_number":94,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a84baaf_92806ed4","line":91,"in_reply_to":"66dbe445_c68c5df6","updated":"2023-08-04 08:51:21.000000000","message":"I suggest to do this in a follow up as well now we can use same ip for all fake ipas","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            agent.api_client.heartbeat("},{"line_number":90,"context_line":"                uuid\u003dagent.node[\u0027uuid\u0027],"},{"line_number":91,"context_line":"                advertise_address\u003dself._config[\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027],"},{"line_number":92,"context_line":"                advertise_protocol\u003d\"http\","},{"line_number":93,"context_line":"                generated_cert\u003dNone,"},{"line_number":94,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":22,"id":"d8554b8a_12a070ea","line":91,"in_reply_to":"a3b04965_29f6f596","updated":"2023-12-04 10:13:18.000000000","message":"no the fake ipa runs and checks async command based on the uuid there is no dependency between nodes.\nI do not understand why you want to advertise the fake ipa address endpoint differently based on the node at the end it is one webserver running on a container why different node see it differently (supposing that is possible)","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"884e8096a85b5b9d65cb5d3aa1e861295174d971","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            agent.api_client.heartbeat("},{"line_number":90,"context_line":"                uuid\u003dagent.node[\u0027uuid\u0027],"},{"line_number":91,"context_line":"                advertise_address\u003dself._config[\u0027FAKE_IPA_ADVERTISE_ADDRESS\u0027],"},{"line_number":92,"context_line":"                advertise_protocol\u003d\"http\","},{"line_number":93,"context_line":"                generated_cert\u003dNone,"},{"line_number":94,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":22,"id":"c51bb8f0_7dbd67fd","line":91,"in_reply_to":"d8554b8a_12a070ea","updated":"2024-03-19 13:17:35.000000000","message":"Acknowledged","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":93,"context_line":"                generated_cert\u003dNone,"},{"line_number":94,"context_line":"            )"},{"line_number":95,"context_line":"            self._logger.info(\u0027heartbeat successful\u0027)"},{"line_number":96,"context_line":"            agent.heartbeater.heartbeat_forced \u003d False"},{"line_number":97,"context_line":"            self.previous_heartbeat \u003d time.time()"},{"line_number":98,"context_line":"        except error.HeartbeatConflictError:"},{"line_number":99,"context_line":"            self._logger.warning(\u0027conflict error sending heartbeat to %s\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"c0e2b75c_603c7302","line":96,"updated":"2023-06-28 15:00:53.000000000","message":"Most of the \u0027self\u0027 variables are also per system, not global.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e18429c545b1fd7171a124b72147e34fe8c78334","unresolved":true,"context_lines":[{"line_number":93,"context_line":"                generated_cert\u003dNone,"},{"line_number":94,"context_line":"            )"},{"line_number":95,"context_line":"            self._logger.info(\u0027heartbeat successful\u0027)"},{"line_number":96,"context_line":"            agent.heartbeater.heartbeat_forced \u003d False"},{"line_number":97,"context_line":"            self.previous_heartbeat \u003d time.time()"},{"line_number":98,"context_line":"        except error.HeartbeatConflictError:"},{"line_number":99,"context_line":"            self._logger.warning(\u0027conflict error sending heartbeat to %s\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"9882da55_2d80b3e5","line":96,"in_reply_to":"62985edc_6bbf7c11","updated":"2024-03-08 13:50:03.000000000","message":"Okay, so there is a heartbeater per node/per agent. This is okay, I guess, at least for now. But then why do you share the same queue between all instances?","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":93,"context_line":"                generated_cert\u003dNone,"},{"line_number":94,"context_line":"            )"},{"line_number":95,"context_line":"            self._logger.info(\u0027heartbeat successful\u0027)"},{"line_number":96,"context_line":"            agent.heartbeater.heartbeat_forced \u003d False"},{"line_number":97,"context_line":"            self.previous_heartbeat \u003d time.time()"},{"line_number":98,"context_line":"        except error.HeartbeatConflictError:"},{"line_number":99,"context_line":"            self._logger.warning(\u0027conflict error sending heartbeat to %s\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"cd5ff3c6_45fdacf6","line":96,"in_reply_to":"8d29e8f0_66f98d51","updated":"2023-10-05 14:31:41.000000000","message":"It means that if you get one out-of-order heartbeat for one system, you\u0027re going to do out-of-order heartbeats for a random system instead.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"884e8096a85b5b9d65cb5d3aa1e861295174d971","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                generated_cert\u003dNone,"},{"line_number":94,"context_line":"            )"},{"line_number":95,"context_line":"            self._logger.info(\u0027heartbeat successful\u0027)"},{"line_number":96,"context_line":"            agent.heartbeater.heartbeat_forced \u003d False"},{"line_number":97,"context_line":"            self.previous_heartbeat \u003d time.time()"},{"line_number":98,"context_line":"        except error.HeartbeatConflictError:"},{"line_number":99,"context_line":"            self._logger.warning(\u0027conflict error sending heartbeat to %s\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"31b89d50_d0bfdc37","line":96,"in_reply_to":"9882da55_2d80b3e5","updated":"2024-03-19 13:17:35.000000000","message":"We share so static threads access the queue without conflicts","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"e1952da8d7e1ea7d2ad2f97276f3490a014da6d1","unresolved":true,"context_lines":[{"line_number":93,"context_line":"                generated_cert\u003dNone,"},{"line_number":94,"context_line":"            )"},{"line_number":95,"context_line":"            self._logger.info(\u0027heartbeat successful\u0027)"},{"line_number":96,"context_line":"            agent.heartbeater.heartbeat_forced \u003d False"},{"line_number":97,"context_line":"            self.previous_heartbeat \u003d time.time()"},{"line_number":98,"context_line":"        except error.HeartbeatConflictError:"},{"line_number":99,"context_line":"            self._logger.warning(\u0027conflict error sending heartbeat to %s\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"8d29e8f0_66f98d51","line":96,"in_reply_to":"c0e2b75c_603c7302","updated":"2023-08-04 08:51:21.000000000","message":"not sure how critical this to do it in the current patch","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":93,"context_line":"                generated_cert\u003dNone,"},{"line_number":94,"context_line":"            )"},{"line_number":95,"context_line":"            self._logger.info(\u0027heartbeat successful\u0027)"},{"line_number":96,"context_line":"            agent.heartbeater.heartbeat_forced \u003d False"},{"line_number":97,"context_line":"            self.previous_heartbeat \u003d time.time()"},{"line_number":98,"context_line":"        except error.HeartbeatConflictError:"},{"line_number":99,"context_line":"            self._logger.warning(\u0027conflict error sending heartbeat to %s\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"62985edc_6bbf7c11","line":96,"in_reply_to":"cd5ff3c6_45fdacf6","updated":"2023-12-04 10:13:18.000000000","message":"Well FakeIronicPythonAgent object is  instantiated for each node then each FakeIronicPythonAgent object has instance of Heatbeater which has its own attribute interval and heartbeat_forced not sure if these attribute will be the same for all agent with this design but my understanding is they are not","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":60,"context_line":"                time.sleep(Heatbeater.min_interval)"},{"line_number":61,"context_line":"                continue"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"            if self._heartbeat_expected(agent, previous_heartbeat):"},{"line_number":64,"context_line":"                self._logger.debug(\"Thread[%s] Currently processing %s \\"},{"line_number":65,"context_line":"                                   [%s] and  %s \","},{"line_number":66,"context_line":"                                   currentThread().ident, system[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":36,"id":"b2a29d0f_4139640a","line":63,"updated":"2023-10-05 14:31:41.000000000","message":"To emphasize my point below: there is no general \"heartbeat expected\", it\u0027s a per-node state.","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9640fc6e02e419e2cf7eed2d2816e4fc1d801649","unresolved":true,"context_lines":[{"line_number":60,"context_line":"                time.sleep(Heatbeater.min_interval)"},{"line_number":61,"context_line":"                continue"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"            if self._heartbeat_expected(agent, previous_heartbeat):"},{"line_number":64,"context_line":"                self._logger.debug(\"Thread[%s] Currently processing %s \\"},{"line_number":65,"context_line":"                                   [%s] and  %s \","},{"line_number":66,"context_line":"                                   currentThread().ident, system[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":36,"id":"6d68e89c_7a5036eb","line":63,"in_reply_to":"1f098eec_e41d91fc","updated":"2024-04-01 14:15:25.000000000","message":"Each node will heartbeat at different times based upon launch time and response time.","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4df1a3d363b86c0eae5daaaaee84028d9c0e9c30","unresolved":true,"context_lines":[{"line_number":60,"context_line":"                time.sleep(Heatbeater.min_interval)"},{"line_number":61,"context_line":"                continue"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"            if self._heartbeat_expected(agent, previous_heartbeat):"},{"line_number":64,"context_line":"                self._logger.debug(\"Thread[%s] Currently processing %s \\"},{"line_number":65,"context_line":"                                   [%s] and  %s \","},{"line_number":66,"context_line":"                                   currentThread().ident, system[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":36,"id":"67a7b961_ffd41415","line":63,"in_reply_to":"6d68e89c_7a5036eb","updated":"2024-04-04 14:03:07.000000000","message":"that is what is impliment here as this method not general but process the heartbeat based on the poped parameters: (system, agent, previous_heartbeat) \u003d \\\n                    Heatbeater.queue.popleft()","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":60,"context_line":"                time.sleep(Heatbeater.min_interval)"},{"line_number":61,"context_line":"                continue"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"            if self._heartbeat_expected(agent, previous_heartbeat):"},{"line_number":64,"context_line":"                self._logger.debug(\"Thread[%s] Currently processing %s \\"},{"line_number":65,"context_line":"                                   [%s] and  %s \","},{"line_number":66,"context_line":"                                   currentThread().ident, system[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":36,"id":"1f098eec_e41d91fc","line":63,"in_reply_to":"b2a29d0f_4139640a","updated":"2023-12-04 10:13:18.000000000","message":"can you clarify do you want each node to have different interval ?","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"}],"sushy_tools/fake_ipa/inspector.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def inspect(system, inspection_callback_url, logger):"},{"line_number":25,"context_line":"    data \u003d Template(\"\"\"{"},{"line_number":26,"context_line":"            \"boot_interface\":\"${mac}\","},{"line_number":27,"context_line":"            \"inventory\":{"},{"line_number":28,"context_line":"                \"bmc_address\":\"192.168.111.1\","}],"source_content_type":"text/x-python","patch_set":22,"id":"1ca573f8_459ccfe7","line":25,"updated":"2023-06-28 15:00:53.000000000","message":"Instead of manipulating strings, build a Python dictionary and then serialize it.","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"2a6f5fd6ceae99cc5ad3387ea4930c20058870c2","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def inspect(system, inspection_callback_url, logger):"},{"line_number":25,"context_line":"    data \u003d Template(\"\"\"{"},{"line_number":26,"context_line":"            \"boot_interface\":\"${mac}\","},{"line_number":27,"context_line":"            \"inventory\":{"},{"line_number":28,"context_line":"                \"bmc_address\":\"192.168.111.1\","}],"source_content_type":"text/x-python","patch_set":22,"id":"83690ee2_26cd06fc","line":25,"in_reply_to":"1ca573f8_459ccfe7","updated":"2023-08-04 12:21:34.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"391170221d8368fd84820dfd1cfdd0834df3bcb5","unresolved":true,"context_lines":[{"line_number":24,"context_line":"    data \u003d {"},{"line_number":25,"context_line":"        \"boot_interface\": system.get(\"nics\")[0][\"mac\"],"},{"line_number":26,"context_line":"        \"inventory\": {"},{"line_number":27,"context_line":"            \"bmc_address\": \"192.168.111.1\","},{"line_number":28,"context_line":"            \"interfaces\": ["},{"line_number":29,"context_line":"                {"},{"line_number":30,"context_line":"                    \"lldp\": None,"}],"source_content_type":"text/x-python","patch_set":36,"id":"6181dc18_d03125f6","line":27,"updated":"2023-10-05 14:31:41.000000000","message":"You\u0027re going to have duplicate BMC addresses here, it\u0027s not great.","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    data \u003d {"},{"line_number":25,"context_line":"        \"boot_interface\": system.get(\"nics\")[0][\"mac\"],"},{"line_number":26,"context_line":"        \"inventory\": {"},{"line_number":27,"context_line":"            \"bmc_address\": \"192.168.111.1\","},{"line_number":28,"context_line":"            \"interfaces\": ["},{"line_number":29,"context_line":"                {"},{"line_number":30,"context_line":"                    \"lldp\": None,"}],"source_content_type":"text/x-python","patch_set":36,"id":"38a27df3_b25c5ebd","line":27,"in_reply_to":"1aa2fae0_392e2978","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[{"line_number":24,"context_line":"    data \u003d {"},{"line_number":25,"context_line":"        \"boot_interface\": system.get(\"nics\")[0][\"mac\"],"},{"line_number":26,"context_line":"        \"inventory\": {"},{"line_number":27,"context_line":"            \"bmc_address\": \"192.168.111.1\","},{"line_number":28,"context_line":"            \"interfaces\": ["},{"line_number":29,"context_line":"                {"},{"line_number":30,"context_line":"                    \"lldp\": None,"}],"source_content_type":"text/x-python","patch_set":36,"id":"cbc3f1eb_3eaffdaa","line":27,"in_reply_to":"48c992af_6cd97f59","updated":"2024-01-26 16:19:59.000000000","message":"Probably just drop this field? It only works for IPMI-enabled systems anyway.","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"7d963b9b1ff2d9d09ae2377c525a218735731888","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    data \u003d {"},{"line_number":25,"context_line":"        \"boot_interface\": system.get(\"nics\")[0][\"mac\"],"},{"line_number":26,"context_line":"        \"inventory\": {"},{"line_number":27,"context_line":"            \"bmc_address\": \"192.168.111.1\","},{"line_number":28,"context_line":"            \"interfaces\": ["},{"line_number":29,"context_line":"                {"},{"line_number":30,"context_line":"                    \"lldp\": None,"}],"source_content_type":"text/x-python","patch_set":36,"id":"0f60422a_5357b673","line":27,"in_reply_to":"4f46bea0_f3df960f","updated":"2024-04-24 04:24:51.000000000","message":"Acknowledged","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b8eabe240548aecd09356c09b32c496337924587","unresolved":true,"context_lines":[{"line_number":24,"context_line":"    data \u003d {"},{"line_number":25,"context_line":"        \"boot_interface\": system.get(\"nics\")[0][\"mac\"],"},{"line_number":26,"context_line":"        \"inventory\": {"},{"line_number":27,"context_line":"            \"bmc_address\": \"192.168.111.1\","},{"line_number":28,"context_line":"            \"interfaces\": ["},{"line_number":29,"context_line":"                {"},{"line_number":30,"context_line":"                    \"lldp\": None,"}],"source_content_type":"text/x-python","patch_set":36,"id":"48c992af_6cd97f59","line":27,"in_reply_to":"6181dc18_d03125f6","updated":"2023-12-04 10:13:18.000000000","message":"I have no idea how it should be implemented here in fake ipa at the end it is the address for shushytools or vbmc right ?  what do you suggest","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4df1a3d363b86c0eae5daaaaee84028d9c0e9c30","unresolved":true,"context_lines":[{"line_number":24,"context_line":"    data \u003d {"},{"line_number":25,"context_line":"        \"boot_interface\": system.get(\"nics\")[0][\"mac\"],"},{"line_number":26,"context_line":"        \"inventory\": {"},{"line_number":27,"context_line":"            \"bmc_address\": \"192.168.111.1\","},{"line_number":28,"context_line":"            \"interfaces\": ["},{"line_number":29,"context_line":"                {"},{"line_number":30,"context_line":"                    \"lldp\": None,"}],"source_content_type":"text/x-python","patch_set":36,"id":"4f46bea0_f3df960f","line":27,"in_reply_to":"9ad2332e_fdcba212","updated":"2024-04-04 14:03:07.000000000","message":"removed on the latest patch","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9640fc6e02e419e2cf7eed2d2816e4fc1d801649","unresolved":true,"context_lines":[{"line_number":24,"context_line":"    data \u003d {"},{"line_number":25,"context_line":"        \"boot_interface\": system.get(\"nics\")[0][\"mac\"],"},{"line_number":26,"context_line":"        \"inventory\": {"},{"line_number":27,"context_line":"            \"bmc_address\": \"192.168.111.1\","},{"line_number":28,"context_line":"            \"interfaces\": ["},{"line_number":29,"context_line":"                {"},{"line_number":30,"context_line":"                    \"lldp\": None,"}],"source_content_type":"text/x-python","patch_set":36,"id":"9ad2332e_fdcba212","line":27,"in_reply_to":"cbc3f1eb_3eaffdaa","updated":"2024-04-01 14:15:25.000000000","message":"+1 to drop, fwiw.","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":true,"context_lines":[{"line_number":24,"context_line":"    data \u003d {"},{"line_number":25,"context_line":"        \"boot_interface\": system.get(\"nics\")[0][\"mac\"],"},{"line_number":26,"context_line":"        \"inventory\": {"},{"line_number":27,"context_line":"            \"bmc_address\": \"192.168.111.1\","},{"line_number":28,"context_line":"            \"interfaces\": ["},{"line_number":29,"context_line":"                {"},{"line_number":30,"context_line":"                    \"lldp\": None,"}],"source_content_type":"text/x-python","patch_set":36,"id":"1aa2fae0_392e2978","line":27,"in_reply_to":"cbc3f1eb_3eaffdaa","updated":"2024-02-06 13:30:24.000000000","message":"removed","commit_id":"b47ecca418612069689ad2b52b39ab7a83dde397"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[{"line_number":52,"context_line":"        stop\u003dtenacity.stop_after_attempt(_RETRY_ATTEMPTS),"},{"line_number":53,"context_line":"        wait\u003dtenacity.wait_fixed(_RETRY_WAIT),"},{"line_number":54,"context_line":"        reraise\u003dTrue)"},{"line_number":55,"context_line":"    def _post_to_inspector():"},{"line_number":56,"context_line":"        return requests.post(inspection_callback_url, json\u003ddata, verify\u003dFalse)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    resp \u003d _post_to_inspector()"}],"source_content_type":"text/x-python","patch_set":39,"id":"f3a19ae5_c5b597db","line":55,"updated":"2024-01-26 16:19:59.000000000","message":"This one is already out of sync with IPA master. I wonder if we want to keep them in sync manually or... not sure.","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"884e8096a85b5b9d65cb5d3aa1e861295174d971","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        stop\u003dtenacity.stop_after_attempt(_RETRY_ATTEMPTS),"},{"line_number":53,"context_line":"        wait\u003dtenacity.wait_fixed(_RETRY_WAIT),"},{"line_number":54,"context_line":"        reraise\u003dTrue)"},{"line_number":55,"context_line":"    def _post_to_inspector():"},{"line_number":56,"context_line":"        return requests.post(inspection_callback_url, json\u003ddata, verify\u003dFalse)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    resp \u003d _post_to_inspector()"}],"source_content_type":"text/x-python","patch_set":39,"id":"b13d1b76_6383cfd5","line":55,"in_reply_to":"52d9086b_8de9cf16","updated":"2024-03-19 13:17:35.000000000","message":"Acknowledged","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":true,"context_lines":[{"line_number":52,"context_line":"        stop\u003dtenacity.stop_after_attempt(_RETRY_ATTEMPTS),"},{"line_number":53,"context_line":"        wait\u003dtenacity.wait_fixed(_RETRY_WAIT),"},{"line_number":54,"context_line":"        reraise\u003dTrue)"},{"line_number":55,"context_line":"    def _post_to_inspector():"},{"line_number":56,"context_line":"        return requests.post(inspection_callback_url, json\u003ddata, verify\u003dFalse)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    resp \u003d _post_to_inspector()"}],"source_content_type":"text/x-python","patch_set":39,"id":"52d9086b_8de9cf16","line":55,"in_reply_to":"f3a19ae5_c5b597db","updated":"2024-02-06 13:30:24.000000000","message":"I would prefer to merge this significant PR now then we can maintain and sync later in smaller PRs","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"}],"sushy_tools/fake_ipa/ironic_api_client.py":[{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"6595b4820d1fc73408fc6439555583cbbf2dc69d","unresolved":true,"context_lines":[{"line_number":170,"context_line":"            msg \u003d (\u0027Unhandled error looking up node with addresses {} at \u0027"},{"line_number":171,"context_line":"                   \u0027{}: {}\u0027.format(params[\u0027addresses\u0027], self.api_url, err))"},{"line_number":172,"context_line":"            self._logger.exception(msg)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        if response.status_code !\u003d requests.codes.OK:"},{"line_number":175,"context_line":"            self._logger.warning("},{"line_number":176,"context_line":"                \u0027Failed looking up node with addresses %r at %s. \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"95258384_86e004bc","line":173,"updated":"2023-03-21 08:47:22.000000000","message":"return False here as well","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"99a49071d7d5fb116e933f1c1b70af805afb4f1d","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            msg \u003d (\u0027Unhandled error looking up node with addresses {} at \u0027"},{"line_number":171,"context_line":"                   \u0027{}: {}\u0027.format(params[\u0027addresses\u0027], self.api_url, err))"},{"line_number":172,"context_line":"            self._logger.exception(msg)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        if response.status_code !\u003d requests.codes.OK:"},{"line_number":175,"context_line":"            self._logger.warning("},{"line_number":176,"context_line":"                \u0027Failed looking up node with addresses %r at %s. \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"71cbc149_ddb91d4e","line":173,"in_reply_to":"95258384_86e004bc","updated":"2023-05-26 14:49:25.000000000","message":"Done","commit_id":"c71225719133b2677b7f1621550a8a8bae3f3c4c"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0cd0ed7794c6f9364bdff529aae35f4bfe099e12","unresolved":true,"context_lines":[{"line_number":38,"context_line":"    return ip"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class APIClient():"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    api_version \u003d \u0027v1\u0027"},{"line_number":44,"context_line":"    lookup_api \u003d \u0027/%s/lookup\u0027 % api_version"}],"source_content_type":"text/x-python","patch_set":23,"id":"1e5dba2d_838219e8","line":41,"updated":"2023-06-29 06:22:25.000000000","message":"This looks like it is vendored out of ironic-python-agent. Later we could move it into ironic_lib","commit_id":"918816781ecb73accf1162087f0a56d406ddd2a6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"2a6f5fd6ceae99cc5ad3387ea4930c20058870c2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    return ip"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class APIClient():"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    api_version \u003d \u0027v1\u0027"},{"line_number":44,"context_line":"    lookup_api \u003d \u0027/%s/lookup\u0027 % api_version"}],"source_content_type":"text/x-python","patch_set":23,"id":"1556b928_779a2ea8","line":41,"in_reply_to":"1e5dba2d_838219e8","updated":"2023-08-04 12:21:34.000000000","message":"Done","commit_id":"918816781ecb73accf1162087f0a56d406ddd2a6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":39,"id":"013154ec_8e94c240","updated":"2024-01-26 16:19:59.000000000","message":"It\u0027s pretty sad that we have to copy this file. I don\u0027t have better ideas though.","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":39,"id":"e3126e7f_78452191","in_reply_to":"013154ec_8e94c240","updated":"2024-02-06 13:30:24.000000000","message":"I am sad also","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":39,"id":"dc6650be_d86a786e","in_reply_to":"e3126e7f_78452191","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9640fc6e02e419e2cf7eed2d2816e4fc1d801649","unresolved":true,"context_lines":[{"line_number":133,"context_line":"    def _do_lookup(self, node_uuid):"},{"line_number":134,"context_line":"        \"\"\"The actual call to lookup a node.\"\"\""},{"line_number":135,"context_line":"        params \u003d {"},{"line_number":136,"context_line":"            \u0027addresses\u0027: self.node.get(\u0027nics\u0027)[0][\u0027mac\u0027]"},{"line_number":137,"context_line":"        }"},{"line_number":138,"context_line":"        if node_uuid:"},{"line_number":139,"context_line":"            params[\u0027node_uuid\u0027] \u003d node_uuid"}],"source_content_type":"text/x-python","patch_set":48,"id":"9969b991_2b25ff4f","line":136,"updated":"2024-04-01 14:15:25.000000000","message":"Does this scale at all if only one mac from the static fake driver gets invoked?","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4df1a3d363b86c0eae5daaaaee84028d9c0e9c30","unresolved":true,"context_lines":[{"line_number":133,"context_line":"    def _do_lookup(self, node_uuid):"},{"line_number":134,"context_line":"        \"\"\"The actual call to lookup a node.\"\"\""},{"line_number":135,"context_line":"        params \u003d {"},{"line_number":136,"context_line":"            \u0027addresses\u0027: self.node.get(\u0027nics\u0027)[0][\u0027mac\u0027]"},{"line_number":137,"context_line":"        }"},{"line_number":138,"context_line":"        if node_uuid:"},{"line_number":139,"context_line":"            params[\u0027node_uuid\u0027] \u003d node_uuid"}],"source_content_type":"text/x-python","patch_set":48,"id":"cdd7978a_4d7442f4","line":136,"in_reply_to":"9969b991_2b25ff4f","updated":"2024-04-04 14:03:07.000000000","message":"the macs are set by node in the fake driver config check this example https://github.com/Nordix/metal3-clusterapi-docs/pull/89/files#diff-34704f2e26b5e2ffaa71f10c4699e91af12d130ea9477123166cf5c96ba4aab9","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"}],"sushy_tools/fake_ipa/log.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":"9640fc6e02e419e2cf7eed2d2816e4fc1d801649","unresolved":true,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def collect_system_logs(journald_max_lines\u003dNone):"},{"line_number":47,"context_line":"    \"\"\"Collect system logs."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    Collect system logs, for distributions using systemd the logs will"},{"line_number":50,"context_line":"    come from journald. On other distributions the logs will come from"},{"line_number":51,"context_line":"    the /var/log directory and dmesg output."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    :param journald_max_lines: Maximum number of lines to retrieve from"},{"line_number":54,"context_line":"                               the journald. if None, return everything."}],"source_content_type":"text/x-python","patch_set":48,"id":"92acb9bc_17d20f9a","line":51,"range":{"start_line":48,"start_character":0,"end_line":51,"end_character":44},"updated":"2024-04-01 14:15:25.000000000","message":"I realize your copying some of the methods from the agent, but maybe update the text 😊","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4df1a3d363b86c0eae5daaaaee84028d9c0e9c30","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def collect_system_logs(journald_max_lines\u003dNone):"},{"line_number":47,"context_line":"    \"\"\"Collect system logs."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    Collect system logs, for distributions using systemd the logs will"},{"line_number":50,"context_line":"    come from journald. On other distributions the logs will come from"},{"line_number":51,"context_line":"    the /var/log directory and dmesg output."},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    :param journald_max_lines: Maximum number of lines to retrieve from"},{"line_number":54,"context_line":"                               the journald. if None, return everything."}],"source_content_type":"text/x-python","patch_set":48,"id":"5fba867a_192e6793","line":51,"range":{"start_line":48,"start_character":0,"end_line":51,"end_character":44},"in_reply_to":"92acb9bc_17d20f9a","updated":"2024-04-04 14:03:07.000000000","message":"Done","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"}],"sushy_tools/fake_ipa/main.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a72bf97df47daf1db9ff13d9f1ffaaffb3954439","unresolved":true,"context_lines":[{"line_number":57,"context_line":"    if not hasattr(FakeIronicPythonAgent, \u0027api\u0027):"},{"line_number":58,"context_line":"        FakeIronicPythonAgent.initialize(app.config, app.logger, app)"},{"line_number":59,"context_line":"    ipa \u003d FakeIronicPythonAgent(system, app.config.get("},{"line_number":60,"context_line":"        \u0027FAKE_IPA_API_URL\u0027, \u0027http://172.22.0.2:6385\u0027))"},{"line_number":61,"context_line":"    thread \u003d Thread(target\u003dipa.boot, daemon\u003dTrue)"},{"line_number":62,"context_line":"    thread.start()"},{"line_number":63,"context_line":"    # agent dict with uuid key"}],"source_content_type":"text/x-python","patch_set":22,"id":"ebfc4a17_3bb85d5a","line":60,"updated":"2023-06-28 15:00:53.000000000","message":"localhost","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"14814951d4f41521be2150a5befcde84b911791a","unresolved":true,"context_lines":[{"line_number":57,"context_line":"    if not hasattr(FakeIronicPythonAgent, \u0027api\u0027):"},{"line_number":58,"context_line":"        FakeIronicPythonAgent.initialize(app.config, app.logger, app)"},{"line_number":59,"context_line":"    ipa \u003d FakeIronicPythonAgent(system, app.config.get("},{"line_number":60,"context_line":"        \u0027FAKE_IPA_API_URL\u0027, \u0027http://172.22.0.2:6385\u0027))"},{"line_number":61,"context_line":"    thread \u003d Thread(target\u003dipa.boot, daemon\u003dTrue)"},{"line_number":62,"context_line":"    thread.start()"},{"line_number":63,"context_line":"    # agent dict with uuid key"}],"source_content_type":"text/x-python","patch_set":22,"id":"b172a17f_b002130e","line":60,"in_reply_to":"310635c5_af8e3032","updated":"2023-06-29 16:34:25.000000000","message":"localhost","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"e1952da8d7e1ea7d2ad2f97276f3490a014da6d1","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    if not hasattr(FakeIronicPythonAgent, \u0027api\u0027):"},{"line_number":58,"context_line":"        FakeIronicPythonAgent.initialize(app.config, app.logger, app)"},{"line_number":59,"context_line":"    ipa \u003d FakeIronicPythonAgent(system, app.config.get("},{"line_number":60,"context_line":"        \u0027FAKE_IPA_API_URL\u0027, \u0027http://172.22.0.2:6385\u0027))"},{"line_number":61,"context_line":"    thread \u003d Thread(target\u003dipa.boot, daemon\u003dTrue)"},{"line_number":62,"context_line":"    thread.start()"},{"line_number":63,"context_line":"    # agent dict with uuid key"}],"source_content_type":"text/x-python","patch_set":22,"id":"267e3070_ad10870d","line":60,"in_reply_to":"b172a17f_b002130e","updated":"2023-08-04 08:51:21.000000000","message":"Done","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0cd0ed7794c6f9364bdff529aae35f4bfe099e12","unresolved":true,"context_lines":[{"line_number":57,"context_line":"    if not hasattr(FakeIronicPythonAgent, \u0027api\u0027):"},{"line_number":58,"context_line":"        FakeIronicPythonAgent.initialize(app.config, app.logger, app)"},{"line_number":59,"context_line":"    ipa \u003d FakeIronicPythonAgent(system, app.config.get("},{"line_number":60,"context_line":"        \u0027FAKE_IPA_API_URL\u0027, \u0027http://172.22.0.2:6385\u0027))"},{"line_number":61,"context_line":"    thread \u003d Thread(target\u003dipa.boot, daemon\u003dTrue)"},{"line_number":62,"context_line":"    thread.start()"},{"line_number":63,"context_line":"    # agent dict with uuid key"}],"source_content_type":"text/x-python","patch_set":22,"id":"310635c5_af8e3032","line":60,"in_reply_to":"ebfc4a17_3bb85d5a","updated":"2023-06-29 06:22:25.000000000","message":"Or is this an appropriate case for a test-net-1 address like 192.0.2.1\n\nSame goes for all the other IP addresses in this change?\n\nhttps://www.rfc-editor.org/rfc/rfc5735","commit_id":"f87b1745504c3634924fa481080a0fcf5e212339"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[{"line_number":51,"context_line":"    return response"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"@app.route(\u0027/\u0027, methods\u003d[\u0027PUT\u0027])"},{"line_number":55,"context_line":"def boot():"},{"line_number":56,"context_line":"    system \u003d request.json"},{"line_number":57,"context_line":"    # init agent if not already done"}],"source_content_type":"text/x-python","patch_set":39,"id":"f8626fce_82e3a82e","line":54,"updated":"2024-01-26 16:19:59.000000000","message":"PUT is considered an idempotent action, this one is not. So rather POST.","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    return response"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"@app.route(\u0027/\u0027, methods\u003d[\u0027PUT\u0027])"},{"line_number":55,"context_line":"def boot():"},{"line_number":56,"context_line":"    system \u003d request.json"},{"line_number":57,"context_line":"    # init agent if not already done"}],"source_content_type":"text/x-python","patch_set":39,"id":"00d7409e_fc9bfe8a","line":54,"in_reply_to":"a8be4185_9faa2620","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":true,"context_lines":[{"line_number":51,"context_line":"    return response"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"@app.route(\u0027/\u0027, methods\u003d[\u0027PUT\u0027])"},{"line_number":55,"context_line":"def boot():"},{"line_number":56,"context_line":"    system \u003d request.json"},{"line_number":57,"context_line":"    # init agent if not already done"}],"source_content_type":"text/x-python","patch_set":39,"id":"a8be4185_9faa2620","line":54,"in_reply_to":"f8626fce_82e3a82e","updated":"2024-02-06 13:30:24.000000000","message":"I did POST ;)","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[{"line_number":61,"context_line":"        \u0027FAKE_IPA_API_URL\u0027, \u0027http://localhost:6385\u0027))"},{"line_number":62,"context_line":"    thread \u003d Thread(target\u003dipa.boot, daemon\u003dTrue)"},{"line_number":63,"context_line":"    thread.start()"},{"line_number":64,"context_line":"    # agent dict with uuid key"},{"line_number":65,"context_line":"    return \u0027\u0027, 204"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"a82baabe_22b68159","line":64,"updated":"2024-01-26 16:19:59.000000000","message":"Seems false?","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":true,"context_lines":[{"line_number":61,"context_line":"        \u0027FAKE_IPA_API_URL\u0027, \u0027http://localhost:6385\u0027))"},{"line_number":62,"context_line":"    thread \u003d Thread(target\u003dipa.boot, daemon\u003dTrue)"},{"line_number":63,"context_line":"    thread.start()"},{"line_number":64,"context_line":"    # agent dict with uuid key"},{"line_number":65,"context_line":"    return \u0027\u0027, 204"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"cf1cc52c_1ad4b2b0","line":64,"in_reply_to":"a82baabe_22b68159","updated":"2024-02-06 13:30:24.000000000","message":"Why we have the same emulator code","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"884e8096a85b5b9d65cb5d3aa1e861295174d971","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \u0027FAKE_IPA_API_URL\u0027, \u0027http://localhost:6385\u0027))"},{"line_number":62,"context_line":"    thread \u003d Thread(target\u003dipa.boot, daemon\u003dTrue)"},{"line_number":63,"context_line":"    thread.start()"},{"line_number":64,"context_line":"    # agent dict with uuid key"},{"line_number":65,"context_line":"    return \u0027\u0027, 204"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"571ad79e_20444359","line":64,"in_reply_to":"cf1cc52c_1ad4b2b0","updated":"2024-03-19 13:17:35.000000000","message":"Acknowledged","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[{"line_number":120,"context_line":"    }"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"@app.route(\u0027/images/\u003cimage_name\u003e\u0027, methods\u003d[\"GET\"])"},{"line_number":124,"context_line":"def node_images(image_name):"},{"line_number":125,"context_line":"    return jsonify({})"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"b10fff79_ea6376b5","line":123,"updated":"2024-01-26 16:19:59.000000000","message":"This is a weird API, why do you need it?","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    }"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"@app.route(\u0027/images/\u003cimage_name\u003e\u0027, methods\u003d[\"GET\"])"},{"line_number":124,"context_line":"def node_images(image_name):"},{"line_number":125,"context_line":"    return jsonify({})"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"f37eb80f_fdfc05d6","line":123,"in_reply_to":"9f59b795_3625bf71","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":true,"context_lines":[{"line_number":120,"context_line":"    }"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"@app.route(\u0027/images/\u003cimage_name\u003e\u0027, methods\u003d[\"GET\"])"},{"line_number":124,"context_line":"def node_images(image_name):"},{"line_number":125,"context_line":"    return jsonify({})"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9f59b795_3625bf71","line":123,"in_reply_to":"b10fff79_ea6376b5","updated":"2024-02-06 13:30:24.000000000","message":"I think this was trying to fake the images instead of creating a file but we can keep this improvement for the future","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[{"line_number":130,"context_line":"    url \u003d request.url_root.rstrip(\u0027/\u0027)"},{"line_number":131,"context_line":"    return jsonify({"},{"line_number":132,"context_line":"        \u0027name\u0027: \u0027OpenStack Ironic Python Agent API\u0027,"},{"line_number":133,"context_line":"        \u0027description\u0027: (\u0027Ironic Python Agent is a provisioning agent for \u0027"},{"line_number":134,"context_line":"                        \u0027OpenStack Ironic\u0027),"},{"line_number":135,"context_line":"        \u0027versions\u0027: [version(url)],"},{"line_number":136,"context_line":"        \u0027default_version\u0027: version(url),"}],"source_content_type":"text/x-python","patch_set":39,"id":"d7f8243a_a138e848","line":133,"updated":"2024-01-26 16:19:59.000000000","message":"nit: we can be honest here and call it fake","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    url \u003d request.url_root.rstrip(\u0027/\u0027)"},{"line_number":131,"context_line":"    return jsonify({"},{"line_number":132,"context_line":"        \u0027name\u0027: \u0027OpenStack Ironic Python Agent API\u0027,"},{"line_number":133,"context_line":"        \u0027description\u0027: (\u0027Ironic Python Agent is a provisioning agent for \u0027"},{"line_number":134,"context_line":"                        \u0027OpenStack Ironic\u0027),"},{"line_number":135,"context_line":"        \u0027versions\u0027: [version(url)],"},{"line_number":136,"context_line":"        \u0027default_version\u0027: version(url),"}],"source_content_type":"text/x-python","patch_set":39,"id":"30fac873_bd9a14de","line":133,"in_reply_to":"071d21df_7d593273","updated":"2024-02-21 10:53:10.000000000","message":"Done","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":true,"context_lines":[{"line_number":130,"context_line":"    url \u003d request.url_root.rstrip(\u0027/\u0027)"},{"line_number":131,"context_line":"    return jsonify({"},{"line_number":132,"context_line":"        \u0027name\u0027: \u0027OpenStack Ironic Python Agent API\u0027,"},{"line_number":133,"context_line":"        \u0027description\u0027: (\u0027Ironic Python Agent is a provisioning agent for \u0027"},{"line_number":134,"context_line":"                        \u0027OpenStack Ironic\u0027),"},{"line_number":135,"context_line":"        \u0027versions\u0027: [version(url)],"},{"line_number":136,"context_line":"        \u0027default_version\u0027: version(url),"}],"source_content_type":"text/x-python","patch_set":39,"id":"071d21df_7d593273","line":133,"in_reply_to":"d7f8243a_a138e848","updated":"2024-02-06 13:30:24.000000000","message":"Viva honesty!","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9640fc6e02e419e2cf7eed2d2816e4fc1d801649","unresolved":true,"context_lines":[{"line_number":217,"context_line":"    DEFAULT_PORT \u003d 9999"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    if not app.config.get(\u0027FAKE_IPA_ADVERTISE_ADDRESS_IP\u0027):"},{"line_number":220,"context_line":"        app.logger.error("},{"line_number":221,"context_line":"            \u0027Please set FAKE_IPA_ADVERTISE_ADDRESS_IP in config file\u0027"},{"line_number":222,"context_line":"            )"},{"line_number":223,"context_line":"        return 1"},{"line_number":224,"context_line":"    if not app.config.get(\u0027FAKE_IPA_ADVERTISE_ADDRESS_PORT\u0027):"},{"line_number":225,"context_line":"        app.config.setdefault(\u0027FAKE_IPA_ADVERTISE_ADDRESS_PORT\u0027, DEFAULT_PORT)"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"bd72c2bd_96c548e7","line":223,"range":{"start_line":220,"start_character":4,"end_line":223,"end_character":16},"updated":"2024-04-01 14:15:25.000000000","message":"Since your doing this, you might as well not have the hard coded reference to localhost in one of the other files.","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4df1a3d363b86c0eae5daaaaee84028d9c0e9c30","unresolved":true,"context_lines":[{"line_number":217,"context_line":"    DEFAULT_PORT \u003d 9999"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    if not app.config.get(\u0027FAKE_IPA_ADVERTISE_ADDRESS_IP\u0027):"},{"line_number":220,"context_line":"        app.logger.error("},{"line_number":221,"context_line":"            \u0027Please set FAKE_IPA_ADVERTISE_ADDRESS_IP in config file\u0027"},{"line_number":222,"context_line":"            )"},{"line_number":223,"context_line":"        return 1"},{"line_number":224,"context_line":"    if not app.config.get(\u0027FAKE_IPA_ADVERTISE_ADDRESS_PORT\u0027):"},{"line_number":225,"context_line":"        app.config.setdefault(\u0027FAKE_IPA_ADVERTISE_ADDRESS_PORT\u0027, DEFAULT_PORT)"},{"line_number":226,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"2e6c1b82_b7a11c73","line":223,"range":{"start_line":220,"start_character":4,"end_line":223,"end_character":16},"in_reply_to":"bd72c2bd_96c548e7","updated":"2024-04-04 14:03:07.000000000","message":"As mentioned in the previous comment I can take this as follow up","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9640fc6e02e419e2cf7eed2d2816e4fc1d801649","unresolved":true,"context_lines":[{"line_number":228,"context_line":"        \u0027FAKE_IPA_ADVERTISE_ADDRESS_IP: %s\u0027,"},{"line_number":229,"context_line":"        app.config.get(\u0027FAKE_IPA_ADVERTISE_ADDRESS_IP\u0027)"},{"line_number":230,"context_line":"        )"},{"line_number":231,"context_line":"    app.run(host\u003dapp.config.get(\u0027SUSHY_FAKE_IPA_LISTEN_IP\u0027, \u00270.0.0.0\u0027),"},{"line_number":232,"context_line":"            port\u003dapp.config.get(\u0027SUSHY_FAKE_IPA_LISTEN_PORT\u0027, DEFAULT_PORT),"},{"line_number":233,"context_line":"            debug\u003dTrue)"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"cb1b1251_784ff489","line":231,"updated":"2024-04-01 14:15:25.000000000","message":"You may want to just bind to only the set IP. Binding to the v4 any address is also not ideal since many also run v6 enabled hosts, plus operationally Ironic will only connect to the IP it has been supplied.","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4df1a3d363b86c0eae5daaaaee84028d9c0e9c30","unresolved":true,"context_lines":[{"line_number":228,"context_line":"        \u0027FAKE_IPA_ADVERTISE_ADDRESS_IP: %s\u0027,"},{"line_number":229,"context_line":"        app.config.get(\u0027FAKE_IPA_ADVERTISE_ADDRESS_IP\u0027)"},{"line_number":230,"context_line":"        )"},{"line_number":231,"context_line":"    app.run(host\u003dapp.config.get(\u0027SUSHY_FAKE_IPA_LISTEN_IP\u0027, \u00270.0.0.0\u0027),"},{"line_number":232,"context_line":"            port\u003dapp.config.get(\u0027SUSHY_FAKE_IPA_LISTEN_PORT\u0027, DEFAULT_PORT),"},{"line_number":233,"context_line":"            debug\u003dTrue)"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":48,"id":"fa900819_cb1cb1ea","line":231,"in_reply_to":"cb1b1251_784ff489","updated":"2024-04-04 14:03:07.000000000","message":"I am not sure if you mean here we should not default 0.0.0.0 as the listening ip ?","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"}],"sushy_tools/fake_ipa/standby.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[{"line_number":26,"context_line":"        LOG.info(\u0027Powering off system\u0027)"},{"line_number":27,"context_line":"        sushytools_url \u003d \\"},{"line_number":28,"context_line":"            \u0027{}/redfish/v1/Systems/{}/Actions/ComputerSystem.Reset\u0027.format("},{"line_number":29,"context_line":"                self.agent._config.get(\u0027FAKE_IPA_SUSHY_URL\u0027),"},{"line_number":30,"context_line":"                self.agent.system[\u0027uuid\u0027])"},{"line_number":31,"context_line":"        data \u003d {"},{"line_number":32,"context_line":"            \"Action\": \"Reset\","}],"source_content_type":"text/x-python","patch_set":39,"id":"62e0b789_859aa394","line":29,"updated":"2024-01-26 16:19:59.000000000","message":"see below","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        LOG.info(\u0027Powering off system\u0027)"},{"line_number":27,"context_line":"        sushytools_url \u003d \\"},{"line_number":28,"context_line":"            \u0027{}/redfish/v1/Systems/{}/Actions/ComputerSystem.Reset\u0027.format("},{"line_number":29,"context_line":"                self.agent._config.get(\u0027FAKE_IPA_SUSHY_URL\u0027),"},{"line_number":30,"context_line":"                self.agent.system[\u0027uuid\u0027])"},{"line_number":31,"context_line":"        data \u003d {"},{"line_number":32,"context_line":"            \"Action\": \"Reset\","}],"source_content_type":"text/x-python","patch_set":39,"id":"4e08dc8b_ca7ebf77","line":29,"in_reply_to":"60eebbb5_cb0ee390","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":true,"context_lines":[{"line_number":26,"context_line":"        LOG.info(\u0027Powering off system\u0027)"},{"line_number":27,"context_line":"        sushytools_url \u003d \\"},{"line_number":28,"context_line":"            \u0027{}/redfish/v1/Systems/{}/Actions/ComputerSystem.Reset\u0027.format("},{"line_number":29,"context_line":"                self.agent._config.get(\u0027FAKE_IPA_SUSHY_URL\u0027),"},{"line_number":30,"context_line":"                self.agent.system[\u0027uuid\u0027])"},{"line_number":31,"context_line":"        data \u003d {"},{"line_number":32,"context_line":"            \"Action\": \"Reset\","}],"source_content_type":"text/x-python","patch_set":39,"id":"60eebbb5_cb0ee390","line":29,"in_reply_to":"62e0b789_859aa394","updated":"2024-02-06 13:30:24.000000000","message":"I saw below","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[{"line_number":33,"context_line":"            \"ResetType\": \"ForceOff\""},{"line_number":34,"context_line":"        }"},{"line_number":35,"context_line":"        auth \u003d requests.auth.HTTPBasicAuth("},{"line_number":36,"context_line":"            self.agent._config.get(\u0027FAKE_IPA_SUSHY_USER\u0027,"},{"line_number":37,"context_line":"                                   \u0027admin\u0027),"},{"line_number":38,"context_line":"            self.agent._config.get(\u0027FAKE_IPA_SUSHY_PASSWORD\u0027,"},{"line_number":39,"context_line":"                                   \u0027password\u0027))"}],"source_content_type":"text/x-python","patch_set":39,"id":"702d0bda_58b90b21","line":36,"updated":"2024-01-26 16:19:59.000000000","message":"nit: s/SUSHY/REDFISH/  (sushy is a library for accessing Redfish, it\u0027s not used here)","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":true,"context_lines":[{"line_number":33,"context_line":"            \"ResetType\": \"ForceOff\""},{"line_number":34,"context_line":"        }"},{"line_number":35,"context_line":"        auth \u003d requests.auth.HTTPBasicAuth("},{"line_number":36,"context_line":"            self.agent._config.get(\u0027FAKE_IPA_SUSHY_USER\u0027,"},{"line_number":37,"context_line":"                                   \u0027admin\u0027),"},{"line_number":38,"context_line":"            self.agent._config.get(\u0027FAKE_IPA_SUSHY_PASSWORD\u0027,"},{"line_number":39,"context_line":"                                   \u0027password\u0027))"}],"source_content_type":"text/x-python","patch_set":39,"id":"cb2049fb_55a5a130","line":36,"in_reply_to":"702d0bda_58b90b21","updated":"2024-02-06 13:30:24.000000000","message":"thanks for clarifying","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \"ResetType\": \"ForceOff\""},{"line_number":34,"context_line":"        }"},{"line_number":35,"context_line":"        auth \u003d requests.auth.HTTPBasicAuth("},{"line_number":36,"context_line":"            self.agent._config.get(\u0027FAKE_IPA_SUSHY_USER\u0027,"},{"line_number":37,"context_line":"                                   \u0027admin\u0027),"},{"line_number":38,"context_line":"            self.agent._config.get(\u0027FAKE_IPA_SUSHY_PASSWORD\u0027,"},{"line_number":39,"context_line":"                                   \u0027password\u0027))"}],"source_content_type":"text/x-python","patch_set":39,"id":"ba4ea356_f29b5998","line":36,"in_reply_to":"cb2049fb_55a5a130","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9640fc6e02e419e2cf7eed2d2816e4fc1d801649","unresolved":true,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class StandbyExtension(base.BaseAgentExtension):"},{"line_number":23,"context_line":"    @base.async_command(\u0027power_off\u0027)"},{"line_number":24,"context_line":"    def power_off(self):"},{"line_number":25,"context_line":"        \"\"\"Powers off the agent\u0027s system.\"\"\""},{"line_number":26,"context_line":"        LOG.info(\u0027Powering off system\u0027)"},{"line_number":27,"context_line":"        sushytools_url \u003d \\"},{"line_number":28,"context_line":"            \u0027{}/redfish/v1/Systems/{}/Actions/ComputerSystem.Reset\u0027.format("},{"line_number":29,"context_line":"                self.agent._config.get(\u0027FAKE_IPA_REDFISH_URL\u0027),"},{"line_number":30,"context_line":"                self.agent.system[\u0027uuid\u0027])"},{"line_number":31,"context_line":"        data \u003d {"},{"line_number":32,"context_line":"            \"Action\": \"Reset\","},{"line_number":33,"context_line":"            \"ResetType\": \"ForceOff\""},{"line_number":34,"context_line":"        }"},{"line_number":35,"context_line":"        auth \u003d requests.auth.HTTPBasicAuth("},{"line_number":36,"context_line":"            self.agent._config.get(\u0027FAKE_IPA_REDFISH_USER\u0027,"},{"line_number":37,"context_line":"                                   \u0027admin\u0027),"},{"line_number":38,"context_line":"            self.agent._config.get(\u0027FAKE_IPA_REDFISH_PASSWORD\u0027,"},{"line_number":39,"context_line":"                                   \u0027password\u0027))"},{"line_number":40,"context_line":"        requests.post(sushytools_url, json\u003ddata, verify\u003dFalse, auth\u003dauth,"},{"line_number":41,"context_line":"                      headers\u003d{\u0027Content-type\u0027: \u0027application/json\u0027})"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @base.sync_command(\u0027get_partition_uuids\u0027)"},{"line_number":44,"context_line":"    def get_partition_uuids(self):"},{"line_number":45,"context_line":"        \"\"\"Return partition UUIDs.\"\"\""}],"source_content_type":"text/x-python","patch_set":48,"id":"891a03a7_d7271ffc","line":42,"range":{"start_line":24,"start_character":0,"end_line":42,"end_character":0},"updated":"2024-04-01 14:15:25.000000000","message":"Please put an inline note as to why this is needed. Power off as an emulated function shouldn\u0027t *need* to be wired through to anything.","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4df1a3d363b86c0eae5daaaaee84028d9c0e9c30","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class StandbyExtension(base.BaseAgentExtension):"},{"line_number":23,"context_line":"    @base.async_command(\u0027power_off\u0027)"},{"line_number":24,"context_line":"    def power_off(self):"},{"line_number":25,"context_line":"        \"\"\"Powers off the agent\u0027s system.\"\"\""},{"line_number":26,"context_line":"        LOG.info(\u0027Powering off system\u0027)"},{"line_number":27,"context_line":"        sushytools_url \u003d \\"},{"line_number":28,"context_line":"            \u0027{}/redfish/v1/Systems/{}/Actions/ComputerSystem.Reset\u0027.format("},{"line_number":29,"context_line":"                self.agent._config.get(\u0027FAKE_IPA_REDFISH_URL\u0027),"},{"line_number":30,"context_line":"                self.agent.system[\u0027uuid\u0027])"},{"line_number":31,"context_line":"        data \u003d {"},{"line_number":32,"context_line":"            \"Action\": \"Reset\","},{"line_number":33,"context_line":"            \"ResetType\": \"ForceOff\""},{"line_number":34,"context_line":"        }"},{"line_number":35,"context_line":"        auth \u003d requests.auth.HTTPBasicAuth("},{"line_number":36,"context_line":"            self.agent._config.get(\u0027FAKE_IPA_REDFISH_USER\u0027,"},{"line_number":37,"context_line":"                                   \u0027admin\u0027),"},{"line_number":38,"context_line":"            self.agent._config.get(\u0027FAKE_IPA_REDFISH_PASSWORD\u0027,"},{"line_number":39,"context_line":"                                   \u0027password\u0027))"},{"line_number":40,"context_line":"        requests.post(sushytools_url, json\u003ddata, verify\u003dFalse, auth\u003dauth,"},{"line_number":41,"context_line":"                      headers\u003d{\u0027Content-type\u0027: \u0027application/json\u0027})"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @base.sync_command(\u0027get_partition_uuids\u0027)"},{"line_number":44,"context_line":"    def get_partition_uuids(self):"},{"line_number":45,"context_line":"        \"\"\"Return partition UUIDs.\"\"\""}],"source_content_type":"text/x-python","patch_set":48,"id":"98f78eaf_972a66f0","line":42,"range":{"start_line":24,"start_character":0,"end_line":42,"end_character":0},"in_reply_to":"891a03a7_d7271ffc","updated":"2024-04-04 14:03:07.000000000","message":"Done","commit_id":"0ae4c49f33f82536ac771375dbaf95495f051a3f"}],"sushy_tools/fake_ipa/utils.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[{"line_number":17,"context_line":"import time"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def remove_large_keys(var):"},{"line_number":21,"context_line":"    \"\"\"Remove specific keys from the var, recursing into dicts and lists.\"\"\""},{"line_number":22,"context_line":"    _LARGE_KEYS \u003d frozenset([\u0027configdrive\u0027, \u0027system_logs\u0027])"},{"line_number":23,"context_line":"    if isinstance(var, abc.Mapping):"}],"source_content_type":"text/x-python","patch_set":39,"id":"5d7a2d97_d762cf44","line":20,"updated":"2024-01-26 16:19:59.000000000","message":"Unused","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":true,"context_lines":[{"line_number":17,"context_line":"import time"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def remove_large_keys(var):"},{"line_number":21,"context_line":"    \"\"\"Remove specific keys from the var, recursing into dicts and lists.\"\"\""},{"line_number":22,"context_line":"    _LARGE_KEYS \u003d frozenset([\u0027configdrive\u0027, \u0027system_logs\u0027])"},{"line_number":23,"context_line":"    if isinstance(var, abc.Mapping):"}],"source_content_type":"text/x-python","patch_set":39,"id":"92f1694a_12d78140","line":20,"in_reply_to":"5d7a2d97_d762cf44","updated":"2024-02-06 13:30:24.000000000","message":"thrown behind","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import time"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def remove_large_keys(var):"},{"line_number":21,"context_line":"    \"\"\"Remove specific keys from the var, recursing into dicts and lists.\"\"\""},{"line_number":22,"context_line":"    _LARGE_KEYS \u003d frozenset([\u0027configdrive\u0027, \u0027system_logs\u0027])"},{"line_number":23,"context_line":"    if isinstance(var, abc.Mapping):"}],"source_content_type":"text/x-python","patch_set":39,"id":"ebdc0e49_fe36f6b5","line":20,"in_reply_to":"92f1694a_12d78140","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[{"line_number":37,"context_line":"    return s.decode(\u0027ascii\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def collect_system_logs(journald_max_lines\u003dNone):"},{"line_number":41,"context_line":"    \"\"\"Collect system logs."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    Collect system logs, for distributions using systemd the logs will"}],"source_content_type":"text/x-python","patch_set":39,"id":"1df66839_d01acc1b","line":40,"updated":"2024-01-26 16:19:59.000000000","message":"Since this function is not real, I suggest moving it right into log.py","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"725b5261cd832b8d3e5abd998c82adaa99c984c7","unresolved":true,"context_lines":[{"line_number":37,"context_line":"    return s.decode(\u0027ascii\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def collect_system_logs(journald_max_lines\u003dNone):"},{"line_number":41,"context_line":"    \"\"\"Collect system logs."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    Collect system logs, for distributions using systemd the logs will"}],"source_content_type":"text/x-python","patch_set":39,"id":"86e117b6_a392c715","line":40,"in_reply_to":"1df66839_d01acc1b","updated":"2024-02-06 13:30:24.000000000","message":"moved","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    return s.decode(\u0027ascii\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def collect_system_logs(journald_max_lines\u003dNone):"},{"line_number":41,"context_line":"    \"\"\"Collect system logs."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    Collect system logs, for distributions using systemd the logs will"}],"source_content_type":"text/x-python","patch_set":39,"id":"1d35cde8_6a923cf1","line":40,"in_reply_to":"86e117b6_a392c715","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"607d6b8e877c2c104f282d40ceeb9dd88b2ef226","unresolved":true,"context_lines":[{"line_number":53,"context_line":"    file_list \u003d []"},{"line_number":54,"context_line":"    with io.BytesIO() as fp:"},{"line_number":55,"context_line":"        with tarfile.open(fileobj\u003dfp, mode\u003d\u0027w:gz\u0027) as tar:"},{"line_number":56,"context_line":"            for fname in io_dict:"},{"line_number":57,"context_line":"                ioobj \u003d io_dict[fname]"},{"line_number":58,"context_line":"                tarinfo \u003d tarfile.TarInfo(name\u003dfname)"},{"line_number":59,"context_line":"                tarinfo.size \u003d ioobj.seek(0, 2)"}],"source_content_type":"text/x-python","patch_set":39,"id":"b60a9a80_9e33937b","line":56,"updated":"2024-01-26 16:19:59.000000000","message":"io_dict is always empty.\n\nyou can just as well return some random binary data here - ironic will not try to unpack it.","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"1f57baa844a6632345636b525a1fa12b945c13c2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    file_list \u003d []"},{"line_number":54,"context_line":"    with io.BytesIO() as fp:"},{"line_number":55,"context_line":"        with tarfile.open(fileobj\u003dfp, mode\u003d\u0027w:gz\u0027) as tar:"},{"line_number":56,"context_line":"            for fname in io_dict:"},{"line_number":57,"context_line":"                ioobj \u003d io_dict[fname]"},{"line_number":58,"context_line":"                tarinfo \u003d tarfile.TarInfo(name\u003dfname)"},{"line_number":59,"context_line":"                tarinfo.size \u003d ioobj.seek(0, 2)"}],"source_content_type":"text/x-python","patch_set":39,"id":"0a699b79_ac88e1bd","line":56,"in_reply_to":"b60a9a80_9e33937b","updated":"2024-02-21 10:53:10.000000000","message":"Acknowledged","commit_id":"f56c15d22923afd8bd4829d397435de90aebda23"}],"tox.ini":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0cd0ed7794c6f9364bdff529aae35f4bfe099e12","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"[testenv:pep8]"},{"line_number":20,"context_line":"deps\u003d"},{"line_number":21,"context_line":"    hacking~\u003d6.0.0 # Apache-2.0"},{"line_number":22,"context_line":"    flake8-import-order\u003e\u003d0.17.1 # LGPLv3"},{"line_number":23,"context_line":"    pycodestyle\u003e\u003d2.0.0,\u003c3.0.0 # MIT"},{"line_number":24,"context_line":"commands \u003d flake8 {posargs}"}],"source_content_type":"text/x-properties","patch_set":23,"id":"147843f7_d8fca66e","line":21,"updated":"2023-06-29 06:22:25.000000000","message":"This could be broken out into the first change in this series, and it would land sooner","commit_id":"918816781ecb73accf1162087f0a56d406ddd2a6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"2a6f5fd6ceae99cc5ad3387ea4930c20058870c2","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"[testenv:pep8]"},{"line_number":20,"context_line":"deps\u003d"},{"line_number":21,"context_line":"    hacking~\u003d6.0.0 # Apache-2.0"},{"line_number":22,"context_line":"    flake8-import-order\u003e\u003d0.17.1 # LGPLv3"},{"line_number":23,"context_line":"    pycodestyle\u003e\u003d2.0.0,\u003c3.0.0 # MIT"},{"line_number":24,"context_line":"commands \u003d flake8 {posargs}"}],"source_content_type":"text/x-properties","patch_set":23,"id":"b0155f00_36655e34","line":21,"in_reply_to":"147843f7_d8fca66e","updated":"2023-08-04 12:21:34.000000000","message":"the idea was to merge an initial working fakeipa and improve it by iterations","commit_id":"918816781ecb73accf1162087f0a56d406ddd2a6"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"884e8096a85b5b9d65cb5d3aa1e861295174d971","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"[testenv:pep8]"},{"line_number":20,"context_line":"deps\u003d"},{"line_number":21,"context_line":"    hacking~\u003d6.0.0 # Apache-2.0"},{"line_number":22,"context_line":"    flake8-import-order\u003e\u003d0.17.1 # LGPLv3"},{"line_number":23,"context_line":"    pycodestyle\u003e\u003d2.0.0,\u003c3.0.0 # MIT"},{"line_number":24,"context_line":"commands \u003d flake8 {posargs}"}],"source_content_type":"text/x-properties","patch_set":23,"id":"9ec85f2e_13034665","line":21,"in_reply_to":"b0155f00_36655e34","updated":"2024-03-19 13:17:35.000000000","message":"Acknowledged","commit_id":"918816781ecb73accf1162087f0a56d406ddd2a6"}]}
