)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"495544518941ebb7a755deb0c0b57afd9cc6935e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c0d2cd74_7eeebf80","updated":"2024-07-01 07:40:33.000000000","message":"It is a bit weird to merge the fake IPA interaction without having the fake IPA itself, but I understand why you\u0027re doing that. I\u0027m sorry that we could not merge your changes in time 😞\n\nAnyway, I\u0027m good with this change, but could you write some documentation on it? For now, since we don\u0027t have the actual fake IPA anyway, I\u0027m interested in one addition: for a new section in https://docs.openstack.org/sushy-tools/latest/contributor/index.html let us describe the expected API contract between sushy-tools and fake IPA.","commit_id":"6f9293b4f27465a00244db262b487ca057f74292"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"7253a39c11ae20034d0a4489a09ab6eb6d732daf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ae29bc17_373f944e","in_reply_to":"343866c1_907f83ef","updated":"2024-07-02 15:02:04.000000000","message":"done","commit_id":"6f9293b4f27465a00244db262b487ca057f74292"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ee1cfe249471c3f47ab7bbcc088dbbac2e42eff4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"343866c1_907f83ef","in_reply_to":"672b8b57_cb8403c4","updated":"2024-07-02 14:20:48.000000000","message":"Right, this is why it\u0027s important to have some documentation around it. Otherwise, it will stay a private detail of fake IPA.","commit_id":"6f9293b4f27465a00244db262b487ca057f74292"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"a0bea8b87aea14e2d38ceb253669c83016e85294","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"672b8b57_cb8403c4","in_reply_to":"c0d2cd74_7eeebf80","updated":"2024-07-01 09:51:09.000000000","message":"I would see this more a generic call that can be configured with the url of the Fakeipa implimented in metal3 or any other fake ipa. I do not think it is that strong attached to the fakeipa","commit_id":"6f9293b4f27465a00244db262b487ca057f74292"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c1a3662683c1ed2dce34e8154c3ce21b9d92aea5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"9f6c6526_b3267d2f","updated":"2024-07-03 14:13:33.000000000","message":"Another thought: this addition still have a lot of FakeIPA-specific assumptions. What if we just create hooks that run on power and boot device actions?","commit_id":"f7361df94ad5aed17e81fd313dd0b3c963aa70eb"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4ce2e41757a2ae057f81e2f24ad11b9882253b46","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"7d793ccb_51d5f89e","updated":"2024-07-03 14:00:34.000000000","message":"Still needs docs","commit_id":"f7361df94ad5aed17e81fd313dd0b3c963aa70eb"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"308992da893b9afc6acf9e3677933233a9f5e9d5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"71e7b29c_42222381","updated":"2024-07-25 14:21:00.000000000","message":"Yeah, I\u0027m not trying to be in your way, just if we have something in the repo we need to be able to understand why it\u0027s there, even if the humans who had that context are participating anymore. It\u0027s how we make sure that the project can last longer than any single persons\u0027 participation in it.\n\nI don\u0027t have a super high bar for documenting it, I just want a few sentences about why it exists and what it\u0027s useful for.","commit_id":"ce212d91d426d6c3842c2c6af7e100fe5357b55f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"ce5d647e3875ad73dfd17eac9ebb7d91a138e660","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"649683db_a6f6eed5","in_reply_to":"71e7b29c_42222381","updated":"2024-07-29 09:01:25.000000000","message":"This has triggered cascading updates to the documentation in the already merged fake driver, which we have addressed here: https://review.opendev.org/c/openstack/sushy-tools/+/924920.\n\nI have also updated the System Status Notifications. Let me know if this helps make it easier to start reviewing the actual changes.","commit_id":"ce212d91d426d6c3842c2c6af7e100fe5357b55f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"ce5d647e3875ad73dfd17eac9ebb7d91a138e660","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"0c03f42c_f921c14a","updated":"2024-07-29 09:01:25.000000000","message":"documentation context addressed in https://review.opendev.org/c/openstack/sushy-tools/+/924920.","commit_id":"b11863be8f57b5b860a0be0018d02785a2e7e6ce"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e7e6f92def196ecb4562ed2f2d2bd4b77a188830","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"a01276dd_ac6f5951","updated":"2024-07-29 15:59:23.000000000","message":"One minor issue with power states.","commit_id":"26f2be24e337a63f08906f47b11f8f2ef6e359aa"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"41a1f5f97ad53f39ff467fb938a8a79affd3f42e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"4def83aa_ebaddd06","updated":"2024-07-30 13:58:14.000000000","message":"Thank you!","commit_id":"4268005227af4f84ae226a0e47dfdf45f583a247"}],"doc/source/user/dynamic-emulator.rst":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"2487986e2754946105f23cbd453700fae7050eae","unresolved":true,"context_lines":[{"line_number":391,"context_line":"Python Agent can be simulated by an external API. The notifier sends a"},{"line_number":392,"context_line":"`PUT` API call with the system object as a `JSON` parameter. The receiver can"},{"line_number":393,"context_line":"implement an endpoint that triggers some process based on the new status."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"Filtering by allowed instances"},{"line_number":396,"context_line":"++++++++++++++++++++++++++++++"},{"line_number":397,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"0fd8a341_e899ff04","line":394,"updated":"2024-07-19 15:29:25.000000000","message":"I\u0027m really confused as to what the use case is for this feature, and it\u0027s making it hard to review.","commit_id":"ce212d91d426d6c3842c2c6af7e100fe5357b55f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"fa0cff33eeb5dd9ef2b28e1fb54362eba034f929","unresolved":true,"context_lines":[{"line_number":391,"context_line":"Python Agent can be simulated by an external API. The notifier sends a"},{"line_number":392,"context_line":"`PUT` API call with the system object as a `JSON` parameter. The receiver can"},{"line_number":393,"context_line":"implement an endpoint that triggers some process based on the new status."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"Filtering by allowed instances"},{"line_number":396,"context_line":"++++++++++++++++++++++++++++++"},{"line_number":397,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"5894ecb2_3fa13780","line":394,"in_reply_to":"0fd8a341_e899ff04","updated":"2024-07-22 08:15:23.000000000","message":"Hi @jay@jvf.cc,\n\nThank you for your review but I’m a bit puzzled by the confusion, as I believe the use case is straightforward and well-documented in the commit. Let me provide further clarification:\n\nIn sushytools, we have a fake system that simulates VMs and their operations (such as turning them on and off). We aim to add a notification hook to synchronize with an external component based on the VM status. This means that when a VM boots, we inform the external component to start, and when the VM shuts down, we inform it to stop.\n\nOur first use case for this feature is running the fake IPA (Ironic Python Agent). You’re likely familiar with IPA, which is expected by Ironic to be running on the VM. When sushytools operates in fake driver mode, there is no actual VM to host the IPA, so we run a fake IPA in a separate container.\n\nBy the way we decided to host the fake IPA on Metal3, as the review process did not proceed within sushytools. The fake IPA needs to know the VM status changes to boot and shut down. The hook we are adding to the fake system will provide these updates. This approach was discussed and suggested by Dmitry in our community meeting, starting at the 04:10 mark in the recording [https://youtu.be/HxrTQa-Hfy8?t\u003d251].","commit_id":"ce212d91d426d6c3842c2c6af7e100fe5357b55f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"b6f8278a2069bfedc61a81702180ac0f4d4fcb20","unresolved":true,"context_lines":[{"line_number":391,"context_line":"Python Agent can be simulated by an external API. The notifier sends a"},{"line_number":392,"context_line":"`PUT` API call with the system object as a `JSON` parameter. The receiver can"},{"line_number":393,"context_line":"implement an endpoint that triggers some process based on the new status."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"Filtering by allowed instances"},{"line_number":396,"context_line":"++++++++++++++++++++++++++++++"},{"line_number":397,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3c1ea244_4e34f682","line":394,"in_reply_to":"24c343de_8389f745","updated":"2024-07-25 11:33:37.000000000","message":"Thanks! I’ve opened a change request for documenting the fake system: https://review.opendev.org/c/openstack/sushy-tools/+/924920.\n\nI’ll keep these changes focused on the hook and will add the notification docs here once the other patch is merged.\n\nBased on my experience with this repo and the higher barriers you mentioned, I cannot tell if these changes will be merged or face delays. Therefore, I will not take any immediate action on the Metal3 organization until the required interface is available in Sushy-tools. If that doesn’t proceed as planned, I’ll host the fake-IPA differently! Either by maintaining a local fork of sushy or by integrating the fake IPA into the utility images to meet downstream requirements with the smallest possible footprint. I am eager to close this long-running case.","commit_id":"ce212d91d426d6c3842c2c6af7e100fe5357b55f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"31244ebbbd63f8c0a6e93cd86819362eb293112a","unresolved":true,"context_lines":[{"line_number":391,"context_line":"Python Agent can be simulated by an external API. The notifier sends a"},{"line_number":392,"context_line":"`PUT` API call with the system object as a `JSON` parameter. The receiver can"},{"line_number":393,"context_line":"implement an endpoint that triggers some process based on the new status."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"Filtering by allowed instances"},{"line_number":396,"context_line":"++++++++++++++++++++++++++++++"},{"line_number":397,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"afbc9984_06ee9eed","line":394,"in_reply_to":"38665adb_6bfb1d7a","updated":"2024-07-25 11:55:04.000000000","message":"Thanks for the feedback, Dmitry. My intention is to navigate the constraints and barriers we’re facing while still progressing toward a solution.\n\nWe’re building on top of the fake-IPA and linking it to other scalability tools, so hosting it in a stable and accessible location is crucial for us. We had a clear plan from the beginning, but after a year and a half, the situation has shifted significantly. Additionally, I’m concerned that if we leave this effort hanging on a PR, it could be overlooked over time, as I may not always have the time or capacity to follow up indefinitely.","commit_id":"ce212d91d426d6c3842c2c6af7e100fe5357b55f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"225eef3928a8deb3bae94026e59ea156501deb4b","unresolved":true,"context_lines":[{"line_number":391,"context_line":"Python Agent can be simulated by an external API. The notifier sends a"},{"line_number":392,"context_line":"`PUT` API call with the system object as a `JSON` parameter. The receiver can"},{"line_number":393,"context_line":"implement an endpoint that triggers some process based on the new status."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"Filtering by allowed instances"},{"line_number":396,"context_line":"++++++++++++++++++++++++++++++"},{"line_number":397,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"38665adb_6bfb1d7a","line":394,"in_reply_to":"3c1ea244_4e34f682","updated":"2024-07-25 11:35:42.000000000","message":"If you\u0027re \"eager to close this long-running case\", refusing to do what the maintainers are asking for is not the perfect strategy.","commit_id":"ce212d91d426d6c3842c2c6af7e100fe5357b55f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c6f3673cd400fcc2392a6e7a91efc87f99d12480","unresolved":true,"context_lines":[{"line_number":391,"context_line":"Python Agent can be simulated by an external API. The notifier sends a"},{"line_number":392,"context_line":"`PUT` API call with the system object as a `JSON` parameter. The receiver can"},{"line_number":393,"context_line":"implement an endpoint that triggers some process based on the new status."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"Filtering by allowed instances"},{"line_number":396,"context_line":"++++++++++++++++++++++++++++++"},{"line_number":397,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"b9a1748d_4b1abb43","line":394,"in_reply_to":"5894ecb2_3fa13780","updated":"2024-07-24 15:40:37.000000000","message":"There is quite a bit of context that is entirely missing from the sushy-tools docs today, and that\u0027s on me. I created the fake resource driver with the very goal of having something like Fake IPA eventually. It was not until much later that we realized that adding Fake IPA itself to sushy-tools is unrealistic from the review and maintenance perspective. I was the only who suggested to switch to a notification based approach.\n\nNow, for this documentation addition, we probably need to reconstruct all the missing context. I suggest leading with something like https://paste.opendev.org/show/b8h1LCkDiHapWbTtJuhW/ (note that I\u0027m assuming a repository for Fake IPA under Metal3 - see my comment on the utility-images PR).","commit_id":"ce212d91d426d6c3842c2c6af7e100fe5357b55f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"653c63a08b1d767f096b91065587514d03be7c54","unresolved":true,"context_lines":[{"line_number":391,"context_line":"Python Agent can be simulated by an external API. The notifier sends a"},{"line_number":392,"context_line":"`PUT` API call with the system object as a `JSON` parameter. The receiver can"},{"line_number":393,"context_line":"implement an endpoint that triggers some process based on the new status."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"Filtering by allowed instances"},{"line_number":396,"context_line":"++++++++++++++++++++++++++++++"},{"line_number":397,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"24c343de_8389f745","line":394,"in_reply_to":"98421b3b_696139a0","updated":"2024-07-25 10:34:56.000000000","message":"Feel free to take my text and apply it here.\n\nI\u0027m against ignoring the Fake IPA repo link. You can create a repo today (I can do it if you don\u0027t have the rights on metal3-io) and merge in your WIP code to iterate on it later. The barrier is much lower than merging anything here in a community project.","commit_id":"ce212d91d426d6c3842c2c6af7e100fe5357b55f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"36154070fda5541bf166af13bdfc543dcb345f7a","unresolved":true,"context_lines":[{"line_number":391,"context_line":"Python Agent can be simulated by an external API. The notifier sends a"},{"line_number":392,"context_line":"`PUT` API call with the system object as a `JSON` parameter. The receiver can"},{"line_number":393,"context_line":"implement an endpoint that triggers some process based on the new status."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"Filtering by allowed instances"},{"line_number":396,"context_line":"++++++++++++++++++++++++++++++"},{"line_number":397,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"d391c4f3_0a6496e6","line":394,"in_reply_to":"9d2a275e_91a90943","updated":"2024-07-25 14:19:33.000000000","message":"I think one missing point was the explanation of the fake driver at all (which is now addressed by your other patch). If you check my proposed text, I\u0027m putting some focus on \"Why\" before diving (or suggesting to dive) into \"How\". I think the paragraph here is a bit light on this.","commit_id":"ce212d91d426d6c3842c2c6af7e100fe5357b55f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"7efc11bf021ba2c960adb155ffeba41c7f7d1290","unresolved":true,"context_lines":[{"line_number":391,"context_line":"Python Agent can be simulated by an external API. The notifier sends a"},{"line_number":392,"context_line":"`PUT` API call with the system object as a `JSON` parameter. The receiver can"},{"line_number":393,"context_line":"implement an endpoint that triggers some process based on the new status."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"Filtering by allowed instances"},{"line_number":396,"context_line":"++++++++++++++++++++++++++++++"},{"line_number":397,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"d4d92ca3_3b6188d2","line":394,"in_reply_to":"afbc9984_06ee9eed","updated":"2024-07-25 12:00:20.000000000","message":"The feedback from Jay was that the intention and the future of this patch are unclear *from this patch*. The fact that you and I know why we\u0027re going this is not enough - some community members are not involved in Metal3, nor in our discussions about scale-testing Ironic.\n\nIf you don\u0027t want to pursue this path, there is an option number 3 that has just came to my mind. Instead of modifying sushy-tools at all, our Fake IPA can become a Redfish proxy to sushy-tools. So, Ironic will talk to Fake IPA (a better name might be needed), most requests will be passed as they are to the real sushy-tools in the background. Some requests will trigger additional actions though, e.g. if we detect that the power state is being changed.\n\nI\u0027m not sure that this option is easier from the engineering standpoint, but it\u0027s definitely easier from the \"get things done now\" position.","commit_id":"ce212d91d426d6c3842c2c6af7e100fe5357b55f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"f2cbbbf18ab9c6ce999bb1a07c1a4ad9f8597fee","unresolved":true,"context_lines":[{"line_number":391,"context_line":"Python Agent can be simulated by an external API. The notifier sends a"},{"line_number":392,"context_line":"`PUT` API call with the system object as a `JSON` parameter. The receiver can"},{"line_number":393,"context_line":"implement an endpoint that triggers some process based on the new status."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"Filtering by allowed instances"},{"line_number":396,"context_line":"++++++++++++++++++++++++++++++"},{"line_number":397,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"98421b3b_696139a0","line":394,"in_reply_to":"b9a1748d_4b1abb43","updated":"2024-07-25 07:28:48.000000000","message":"Thanks Dmitry That will help clarify the context can we merge that docs and unlock the review for this PR. I also suggest ignore IPA repo link for now as it will not be created until we get compatibility interface available on sushy-tools (notification system)","commit_id":"ce212d91d426d6c3842c2c6af7e100fe5357b55f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"ce5d647e3875ad73dfd17eac9ebb7d91a138e660","unresolved":false,"context_lines":[{"line_number":391,"context_line":"Python Agent can be simulated by an external API. The notifier sends a"},{"line_number":392,"context_line":"`PUT` API call with the system object as a `JSON` parameter. The receiver can"},{"line_number":393,"context_line":"implement an endpoint that triggers some process based on the new status."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"Filtering by allowed instances"},{"line_number":396,"context_line":"++++++++++++++++++++++++++++++"},{"line_number":397,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"bc9ef944_b1dbdd1f","line":394,"in_reply_to":"d391c4f3_0a6496e6","updated":"2024-07-29 09:01:25.000000000","message":"done please check","commit_id":"ce212d91d426d6c3842c2c6af7e100fe5357b55f"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"c4093a8da65325884fb2a9a73bd3e35819513060","unresolved":true,"context_lines":[{"line_number":391,"context_line":"Python Agent can be simulated by an external API. The notifier sends a"},{"line_number":392,"context_line":"`PUT` API call with the system object as a `JSON` parameter. The receiver can"},{"line_number":393,"context_line":"implement an endpoint that triggers some process based on the new status."},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"Filtering by allowed instances"},{"line_number":396,"context_line":"++++++++++++++++++++++++++++++"},{"line_number":397,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"9d2a275e_91a90943","line":394,"in_reply_to":"d4d92ca3_3b6188d2","updated":"2024-07-25 14:06:37.000000000","message":"I’m happy to explain the use case and motivation behind these patches. We’ve had solid reasons backed by discussion, but I often don’t get feedback on whether my explanations are convincing.\n\nGiven the time and effort invested, I believe the best approach is to take the shortest path to our goal by merging the hook and hosting the fake-IPA on Metal3. If that’s not possible, I may make the fake-IPA available on a fork or in utility images to simplify users\u0027 work and prevent complaints about merge conflicts blocking their builds, as I might not always be available for support.","commit_id":"ce212d91d426d6c3842c2c6af7e100fe5357b55f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e7e6f92def196ecb4562ed2f2d2bd4b77a188830","unresolved":true,"context_lines":[{"line_number":24,"context_line":"Systems resource"},{"line_number":25,"context_line":"----------------"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"For *Systems* resource, emulator maintains two drivers relying on"},{"line_number":28,"context_line":"a virtualization backend to emulate bare metal machines by means of"},{"line_number":29,"context_line":"virtual machines. And a fake driver where we mock existing"},{"line_number":30,"context_line":"bare metal machines."}],"source_content_type":"text/x-rst","patch_set":14,"id":"944457c7_40f68357","line":27,"updated":"2024-07-29 15:59:23.000000000","message":"\"two\" is definitely no longer correct","commit_id":"26f2be24e337a63f08906f47b11f8f2ef6e359aa"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"20070e00dbab334abe5644cd0d883bafcb0e7af3","unresolved":true,"context_lines":[{"line_number":24,"context_line":"Systems resource"},{"line_number":25,"context_line":"----------------"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"For *Systems* resource, emulator maintains two drivers relying on"},{"line_number":28,"context_line":"a virtualization backend to emulate bare metal machines by means of"},{"line_number":29,"context_line":"virtual machines. And a fake driver where we mock existing"},{"line_number":30,"context_line":"bare metal machines."}],"source_content_type":"text/x-rst","patch_set":14,"id":"4750e92f_0e43698a","line":27,"in_reply_to":"3d40de7f_3f827064","updated":"2024-07-29 17:29:45.000000000","message":"Mmm, I see your logic, I hope it won\u0027t cause confusion. Maybe start the new sentence with \"Additionally,\" to make it clear that the fake one is not a part of the two.","commit_id":"26f2be24e337a63f08906f47b11f8f2ef6e359aa"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4d96810b94935d2aaaa2ab84bb1a3a0faefa0f2a","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Systems resource"},{"line_number":25,"context_line":"----------------"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"For *Systems* resource, emulator maintains two drivers relying on"},{"line_number":28,"context_line":"a virtualization backend to emulate bare metal machines by means of"},{"line_number":29,"context_line":"virtual machines. And a fake driver where we mock existing"},{"line_number":30,"context_line":"bare metal machines."}],"source_content_type":"text/x-rst","patch_set":14,"id":"4b473636_52e11eca","line":27,"in_reply_to":"4750e92f_0e43698a","updated":"2024-07-30 08:54:21.000000000","message":"done thanks","commit_id":"26f2be24e337a63f08906f47b11f8f2ef6e359aa"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"a83a659f192a894f723c34f4a4115f9e17b2473d","unresolved":true,"context_lines":[{"line_number":24,"context_line":"Systems resource"},{"line_number":25,"context_line":"----------------"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"For *Systems* resource, emulator maintains two drivers relying on"},{"line_number":28,"context_line":"a virtualization backend to emulate bare metal machines by means of"},{"line_number":29,"context_line":"virtual machines. And a fake driver where we mock existing"},{"line_number":30,"context_line":"bare metal machines."}],"source_content_type":"text/x-rst","patch_set":14,"id":"3d40de7f_3f827064","line":27,"in_reply_to":"944457c7_40f68357","updated":"2024-07-29 16:54:48.000000000","message":"It is correct because \"two\" refers to the drivers that are actively maintained and rely on a virtualization back-end. I’m keeping these as distinct from the fake driver, which is used just for mocking purposes and is not actively maintained. Thus, with some math, the reader can understand that we have two and a half drivers ;)","commit_id":"26f2be24e337a63f08906f47b11f8f2ef6e359aa"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"20070e00dbab334abe5644cd0d883bafcb0e7af3","unresolved":true,"context_lines":[{"line_number":412,"context_line":"        \"nics\": ["},{"line_number":413,"context_line":"            {"},{"line_number":414,"context_line":"                \"mac\": \"00:5c:52:31:3a:9c\","},{"line_number":415,"context_line":"                \"ip\": \"172.22.0.100\""},{"line_number":416,"context_line":"            }"},{"line_number":417,"context_line":"        ]"},{"line_number":418,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1295f9c2_2df8ea5f","line":415,"updated":"2024-07-29 17:29:45.000000000","message":"Same question about IP as in the code","commit_id":"26f2be24e337a63f08906f47b11f8f2ef6e359aa"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4d96810b94935d2aaaa2ab84bb1a3a0faefa0f2a","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        \"nics\": ["},{"line_number":413,"context_line":"            {"},{"line_number":414,"context_line":"                \"mac\": \"00:5c:52:31:3a:9c\","},{"line_number":415,"context_line":"                \"ip\": \"172.22.0.100\""},{"line_number":416,"context_line":"            }"},{"line_number":417,"context_line":"        ]"},{"line_number":418,"context_line":"    }"}],"source_content_type":"text/x-rst","patch_set":14,"id":"77592fb1_1f28c30b","line":415,"in_reply_to":"1295f9c2_2df8ea5f","updated":"2024-07-30 08:54:21.000000000","message":"because ironic inspector require the ipv4 https://github.com/openstack/ironic-python-agent/blob/b2ec08a15e63f6f68b50e637a1a6e45465a3b4b8/ironic_python_agent/inspector.py#L232 we can also set it to None from fake ipa but I just prefer have an example IP","commit_id":"26f2be24e337a63f08906f47b11f8f2ef6e359aa"}],"sushy_tools/emulator/resources/systems/fakedriver.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e7e6f92def196ecb4562ed2f2d2bd4b77a188830","unresolved":true,"context_lines":[{"line_number":37,"context_line":"                \u0027nics\u0027: ["},{"line_number":38,"context_line":"                    {"},{"line_number":39,"context_line":"                        \u0027mac\u0027: \u002700:5c:52:31:3a:9c\u0027,"},{"line_number":40,"context_line":"                        \u0027ip\u0027: \u0027172.22.0.100\u0027"},{"line_number":41,"context_line":"                    }"},{"line_number":42,"context_line":"                ]"},{"line_number":43,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":14,"id":"d586b32a_381f60ef","line":40,"updated":"2024-07-29 15:59:23.000000000","message":"Is this a leftover from the fake IPA patch? Not sure why you need an IP now.","commit_id":"26f2be24e337a63f08906f47b11f8f2ef6e359aa"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"fca66ad87f498d0a8d7b5c066676f1e05d33eb1d","unresolved":true,"context_lines":[{"line_number":37,"context_line":"                \u0027nics\u0027: ["},{"line_number":38,"context_line":"                    {"},{"line_number":39,"context_line":"                        \u0027mac\u0027: \u002700:5c:52:31:3a:9c\u0027,"},{"line_number":40,"context_line":"                        \u0027ip\u0027: \u0027172.22.0.100\u0027"},{"line_number":41,"context_line":"                    }"},{"line_number":42,"context_line":"                ]"},{"line_number":43,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":14,"id":"c3c9739f_26956f7c","line":40,"in_reply_to":"66aace49_be73f978","updated":"2024-07-30 13:32:25.000000000","message":"Maybe require was the best term I wanted to say expect this field to exist even if the value is none","commit_id":"26f2be24e337a63f08906f47b11f8f2ef6e359aa"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4d96810b94935d2aaaa2ab84bb1a3a0faefa0f2a","unresolved":true,"context_lines":[{"line_number":37,"context_line":"                \u0027nics\u0027: ["},{"line_number":38,"context_line":"                    {"},{"line_number":39,"context_line":"                        \u0027mac\u0027: \u002700:5c:52:31:3a:9c\u0027,"},{"line_number":40,"context_line":"                        \u0027ip\u0027: \u0027172.22.0.100\u0027"},{"line_number":41,"context_line":"                    }"},{"line_number":42,"context_line":"                ]"},{"line_number":43,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":14,"id":"66aace49_be73f978","line":40,"in_reply_to":"d586b32a_381f60ef","updated":"2024-07-30 08:54:21.000000000","message":"same as in the other comment :\nbecause ironic inspector require the ipv4 https://github.com/openstack/ironic-python-agent/blob/b2ec08a15e63f6f68b50e637a1a6e45465a3b4b8/ironic_python_agent/inspector.py#L232 we can also set it to None from fake ipa but I just prefer have an example IP","commit_id":"26f2be24e337a63f08906f47b11f8f2ef6e359aa"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e7e6f92def196ecb4562ed2f2d2bd4b77a188830","unresolved":true,"context_lines":[{"line_number":133,"context_line":"            pending_state \u003d \u0027Off\u0027"},{"line_number":134,"context_line":"        elif \u0027Restart\u0027 in state:"},{"line_number":135,"context_line":"            system[\u0027power_state\u0027] \u003d \u0027Off\u0027"},{"line_number":136,"context_line":"            pending_state \u003d state"},{"line_number":137,"context_line":"        else:"},{"line_number":138,"context_line":"            raise error.NotSupportedError("},{"line_number":139,"context_line":"                f\u0027Power state {state} is not supported\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"bd3e9c79_cf3f0604","line":136,"updated":"2024-07-29 15:59:23.000000000","message":"I don\u0027t think it\u0027s correct: Redfish requires power_state to be On or Off, it cannot be Reboot.","commit_id":"26f2be24e337a63f08906f47b11f8f2ef6e359aa"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"20070e00dbab334abe5644cd0d883bafcb0e7af3","unresolved":true,"context_lines":[{"line_number":133,"context_line":"            pending_state \u003d \u0027Off\u0027"},{"line_number":134,"context_line":"        elif \u0027Restart\u0027 in state:"},{"line_number":135,"context_line":"            system[\u0027power_state\u0027] \u003d \u0027Off\u0027"},{"line_number":136,"context_line":"            pending_state \u003d state"},{"line_number":137,"context_line":"        else:"},{"line_number":138,"context_line":"            raise error.NotSupportedError("},{"line_number":139,"context_line":"                f\u0027Power state {state} is not supported\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ca2afefb_83add9ad","line":136,"in_reply_to":"66933856_5be592f6","updated":"2024-07-29 17:29:45.000000000","message":"Well, keep in mind: Ironic does not actually issue restart calls in all cases. Often enough, it does power off, some business, then power on. I understand now why what you propose is correct from the Redfish standpoint, but are you sure you actually need it?","commit_id":"26f2be24e337a63f08906f47b11f8f2ef6e359aa"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"a83a659f192a894f723c34f4a4115f9e17b2473d","unresolved":true,"context_lines":[{"line_number":133,"context_line":"            pending_state \u003d \u0027Off\u0027"},{"line_number":134,"context_line":"        elif \u0027Restart\u0027 in state:"},{"line_number":135,"context_line":"            system[\u0027power_state\u0027] \u003d \u0027Off\u0027"},{"line_number":136,"context_line":"            pending_state \u003d state"},{"line_number":137,"context_line":"        else:"},{"line_number":138,"context_line":"            raise error.NotSupportedError("},{"line_number":139,"context_line":"                f\u0027Power state {state} is not supported\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"66933856_5be592f6","line":136,"in_reply_to":"bd3e9c79_cf3f0604","updated":"2024-07-29 16:54:48.000000000","message":"The external component needs to know the restart state because simply sharing ON or OFF might not clearly indicate a restart, which can involve different actions. \n\nThe pending_state is not visible on the Redfish API; the state remains binary as ON or OFF for Redfish. The additional RESTART state is used internally and will not be visible in the Redfish API. \n\nAfter each change, the fake system shares the system object, and the external component reads the pending_state to understand the nature of the changes. This approach ensures that the external component can differentiate between a restart and other power states.","commit_id":"26f2be24e337a63f08906f47b11f8f2ef6e359aa"},{"author":{"_account_id":35777,"name":"Mohammed Boukhalfa","display_name":"mboukhalfa","email":"mohammed.boukhalfa@est.tech","username":"mboukhalfa"},"change_message_id":"4d96810b94935d2aaaa2ab84bb1a3a0faefa0f2a","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            pending_state \u003d \u0027Off\u0027"},{"line_number":134,"context_line":"        elif \u0027Restart\u0027 in state:"},{"line_number":135,"context_line":"            system[\u0027power_state\u0027] \u003d \u0027Off\u0027"},{"line_number":136,"context_line":"            pending_state \u003d state"},{"line_number":137,"context_line":"        else:"},{"line_number":138,"context_line":"            raise error.NotSupportedError("},{"line_number":139,"context_line":"                f\u0027Power state {state} is not supported\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"c99bc68f_4dfcd2ab","line":136,"in_reply_to":"ca2afefb_83add9ad","updated":"2024-07-30 08:54:21.000000000","message":"We need to use the RESTART state to accurately reflect system transitions. Previously, we set the pending_state to ON when a restart was requested on the fake system. If we continue with this approach, the external component, such as the fake IPA, might misinterpret the status update. Specifically, if the fake IPA receives an ON update when the system was already ON, it will not recognize that a restart was in progress. And as you know we cannot count on the state field because it only updated on next request happen it will never updated on realtime.","commit_id":"26f2be24e337a63f08906f47b11f8f2ef6e359aa"},{"author":{"_account_id":35867,"name":"Huy Mai","display_name":"mquhuy","email":"huy.mai@est.tech","username":"mquhuy"},"change_message_id":"cce58147041991b1dd1ea3846ab2f4e4d579bc83","unresolved":true,"context_lines":[{"line_number":33,"context_line":"                \u0027uuid\u0027: DEFAULT_UUID,"},{"line_number":34,"context_line":"                \u0027name\u0027: \u0027fake\u0027,"},{"line_number":35,"context_line":"                \u0027power_state\u0027: \u0027Off\u0027,"},{"line_number":36,"context_line":"                \u0027external_notifier\u0027: False,"},{"line_number":37,"context_line":"                \u0027nics\u0027: ["},{"line_number":38,"context_line":"                    {"},{"line_number":39,"context_line":"                        \u0027mac\u0027: \u002700:5c:52:31:3a:9c\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7452a0af_dda97864","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":43},"updated":"2024-08-07 11:00:32.000000000","message":"Do we ever set this to True?","commit_id":"4268005227af4f84ae226a0e47dfdf45f583a247"}]}
