)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"0bd0e5c212ae449988974e9c67deedc02ee9ef06","unresolved":true,"context_lines":[{"line_number":9,"context_line":"Add boot_from_volume parameter to _create_instance that uses"},{"line_number":10,"context_line":"Tempest\u0027s existing create_volume_from_image and _get_bdm methods."},{"line_number":11,"context_line":"Add list_provider_inventory to ExtendPlacementClient."},{"line_number":12,"context_line":"Add BfV workload balance and stabilizatyion  test that creates"},{"line_number":13,"context_line":"instances with flavor disk larger than available disk to validate"},{"line_number":14,"context_line":"that disk constraints are calculated properly for instances"},{"line_number":15,"context_line":"booting from volume."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f8dc1d3_31140e64","line":12,"range":{"start_line":12,"start_character":29,"end_line":12,"end_character":43},"updated":"2026-04-29 10:51:21.000000000","message":"stabilization","commit_id":"cbbf8247b9ad3e16eace390453796787f4b84866"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"a2bcb227b6017683c691ad95dc1ce6f0c993bbfe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"272116d8_81ed92a5","updated":"2026-04-29 09:15:58.000000000","message":"It would be a great addition, thank you for working on it.","commit_id":"1d081a89c8233e6f105647301faec32b93b2a07f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"d8594c215a4a8ac037dcd6601dede2d26a07c7b1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f9134d72_362b3737","updated":"2026-04-29 09:39:48.000000000","message":"bfv tests failed:\n\nhttps://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_c62/openstack/c625cb4c06ca45bb821ddacd58581ef9/testr_results.html\n\nFor test_execute_workload_balance_strategy_bfv:\n\nAssertionError: The audit has found action types set() when expecting [\u0027migrate\u0027]\n\nhttps://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_c62/openstack/c625cb4c06ca45bb821ddacd58581ef9/compute1/logs/screen-watcher-decision-engine.txt\n\nApr 29 08:58:00.234908 np97c800fd6c6f4 watcher-decision-engine[48993]: WARNING watcher.decision_engine.strategy.strategies.workload_balance [None req-8d457dc1-ec6a-4b33-aa8c-25338dd81c41 None None] No proper target host could be found, it might be because of there\u0027s no enough CPU/Memory/DISK\n\nApr 29 08:58:00.313197 np97c800fd6c6f4 watcher-decision-engine[48993]: WARNING watcher.decision_engine.planner.workload_stabilization [None req-92e29c9a-6025-44eb-be67-a429c2665efe None None] The action plan is empty\n\nFor test_execute_workload_stabilization_strategy_ram_bfv\n\nAssertionError: The audit has found action types set() when expecting [\u0027migrate\u0027]\n\nhttps://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_c62/openstack/c625cb4c06ca45bb821ddacd58581ef9/controller/logs/screen-watcher-decision-engine.txt\n\nApr 29 09:04:28.204603 npab99835d60814 watcher-decision-engine[102678]: INFO watcher.decision_engine.strategy.strategies.workload_stabilization [None req-d107c73a-4169-4a52-8486-19cfbf0680ae None None] Standard deviation for instance_ram_usage is 0.3499936972141687.\nApr 29 09:04:28.204782 npab99835d60814 watcher-decision-engine[102678]: INFO watcher.decision_engine.strategy.strategies.workload_stabilization [None req-d107c73a-4169-4a52-8486-19cfbf0680ae None None] Standard deviation of instance_ram_usage exceeds appropriate threshold 0.05 by 0.3499936972141687.\nApr 29 09:04:28.204963 npab99835d60814 watcher-decision-engine[102678]: INFO watcher.decision_engine.strategy.strategies.workload_stabilization [None req-d107c73a-4169-4a52-8486-19cfbf0680ae None None] Launching workload optimization...\n\nApr 29 09:04:28.303714 npab99835d60814 watcher-decision-engine[102678]: WARNING watcher.decision_engine.planner.workload_stabilization [None req-2412fc57-739a-44ce-bb6b-882b7f2c5ecc None None] The action plan is empty","commit_id":"1d081a89c8233e6f105647301faec32b93b2a07f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"f18916bd157e9ea085e573a259c6f543574c7b3c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7a9ba740_1f7d2bcd","updated":"2026-04-29 14:30:36.000000000","message":"I need to fix gnocchi resources creation for bfv https://github.com/openstack/watcher-tempest-plugin/blob/master/watcher_tempest_plugin/tests/scenario/base.py#L632","commit_id":"82f025e4b9d0dbda4b6184f55b5a3cc5ae0dc203"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fddf85f14c9f94b961a035c66429914cc1cd4b8e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"334d7d4f_eb116d29","updated":"2026-04-30 08:39:31.000000000","message":"lgtm, just spotted a tiny nit","commit_id":"3046a56e3e2a0915682b610f900fa93b74da804e"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"65d53b75a9cbc409b89c8b6cd3b9bb3732d10432","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"1694a58f_61f70efe","updated":"2026-05-04 15:29:36.000000000","message":"I looks good to me, note that we are adding 3 tests that consume some good amount of time. We may need to start thinking in a way of speeding up these tests...\n\n2026-05-04 11:56:56.773586 | controller | {0} watcher_tempest_plugin.tests.scenario.test_execute_workload_balance.TestExecuteWorkloadBalanceStrategyBfV.test_execute_workload_balance_strategy_cpu_bfv [105.258447s] ... ok\nwatcher_tempest_plugin.tests.scenario.test_execute_workload_stabilization.TestExecuteWorkloadStabilizationStrategyBfV.test_execute_workload_stabilization_strategy_ram_bfv [94.524293s] ... ok\n2026-05-04 12:19:15.770989 | controller | {0} watcher_tempest_plugin.tests.scenario.test_execute_zone_migration.TestExecuteZoneMigrationStrategyVolumeBfV.test_execute_zone_migration_volume_and_compute_migrate_bfv [134.202697s] ... ok","commit_id":"7483bae815a649390766d2da1aa31e929b8a3b9e"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"78d090d778f251cb8449fe8ba66f817960be4ff3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"d053549d_52b3e530","updated":"2026-05-05 07:11:07.000000000","message":"Overall looks good, lgtm!","commit_id":"7483bae815a649390766d2da1aa31e929b8a3b9e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1bced28d04fefddbe5f89719ab45e8f1a81f15e0","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"d870f4d8_044d9593","updated":"2026-05-06 16:05:07.000000000","message":"you are not testing with non zero swap and ephmeral\nnor are you testing that watcher is capable of live or cold migrating  a bfv vm end to end so you have not really tested this properly end to end.\n\ntesting that we can generate a plan as you have done is exactly the type of testing that shoudl eventually be done in a functional test rather then an integrtion test.\n\nscenario tests in particular are meant to be end to end tests so this testing feel pretty light to me.\n\n\nfor example it would be nice ot have a negative test that show its not possibel to move the vms because there is not enouch space for the swap/ephermal requests.\n\nthe current test wont detect if that code is broken in watcher.","commit_id":"7483bae815a649390766d2da1aa31e929b8a3b9e"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"5ee449a87b2593e44d67d7171b572d54cd888a6d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"30e5a52e_ef7182c2","in_reply_to":"78181190_736b204b","updated":"2026-05-07 18:46:11.000000000","message":"It is correct that stoping the test at the generated action plan is not a complete end to end, but at the same time I am also worried about increasing the execution time of all tests. At some point we will end up with very long running jobs. Functional tests can help us to avoid that, but not sure when it will be a reality due to priorities.\nI understood that the negative test would be a good addition as functional tests, maybe we could extend coverage by working more on getting functional tests in watcher.","commit_id":"7483bae815a649390766d2da1aa31e929b8a3b9e"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"587f00cc3f584dedb242da914107af4a795853f6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"78181190_736b204b","in_reply_to":"d870f4d8_044d9593","updated":"2026-05-07 06:15:44.000000000","message":"\u003e you are not testing with non zero swap and ephmeral\n\nCorrect, I will add ephemeral and swap.\n\n\u003e  nor are you testing that watcher is capable of live or cold migrating a bfv vm end to end so you have not really tested this properly end to end.\n\nIncorrect, I\u0027m testing end to end migrations in the zone_migration test. I skipped in the others to save some time given that the migration itself was tested in the zone_migration test. We mentioned that in a meeting with no objections. In the patch on top of this one (https://review.opendev.org/c/openstack/watcher-tempest-plugin/+/987338 ) I\u0027m also doing end to end in one of the tests (the host_maintenance). If we agree on doing always end to end, I will update the patch.\n\n\u003e scenario tests in particular are meant to be end to end tests so this testing feel pretty light to me.\n\nI think saving some time avoiding repeating once and again an already tested action (migration) can be a good thing. But I\u0027m open to modify if needed.\n\n\u003e for example it would be nice ot have a negative test that show its not possibel to move the vms because there is not enouch space for the swap/ephermal requests.\n\nWe never had this kind of tests before for non BfV instances. I don\u0027t understand why this  is required for this particular one.\n\nI\u0027m not saying it\u0027s bad to increase coverage, but don\u0027t understand why it is critical to merge this one and was never before. I will give a think about how to test negative cases and will send follow up.","commit_id":"7483bae815a649390766d2da1aa31e929b8a3b9e"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"5ee449a87b2593e44d67d7171b572d54cd888a6d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"bd59e7ac_43ddb4c4","updated":"2026-05-07 18:46:11.000000000","message":"Continues to be +2 for me, in favor of the additional tests added and the execution of at least on bfv migration. We can decide when to W+1 or not.","commit_id":"6e6f290ba6246c4e9d21c67f42e056f12ac30dc1"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c687d36541a21c0ff6d24a21e0705da8be316425","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"fbef8b13_56605361","updated":"2026-05-08 17:12:44.000000000","message":"recheck","commit_id":"6e6f290ba6246c4e9d21c67f42e056f12ac30dc1"}],"watcher_tempest_plugin/config.py":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"78d090d778f251cb8449fe8ba66f817960be4ff3","unresolved":true,"context_lines":[{"line_number":162,"context_line":"        default\u003dFalse,"},{"line_number":163,"context_line":"        help\u003d\"Whether or not to run storage zone migration tests.\""},{"line_number":164,"context_line":"    ),"},{"line_number":165,"context_line":"    cfg.BoolOpt("},{"line_number":166,"context_line":"        \"run_bfv_tests\","},{"line_number":167,"context_line":"        default\u003dFalse,"},{"line_number":168,"context_line":"        help\u003d\"Whether or not to run boot from volume tests.\""},{"line_number":169,"context_line":"    ),"},{"line_number":170,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":10,"id":"72bfd772_8bacff0b","line":170,"range":{"start_line":165,"start_character":4,"end_line":170,"end_character":1},"updated":"2026-05-05 07:11:07.000000000","message":"+1 for putting it under config.","commit_id":"7483bae815a649390766d2da1aa31e929b8a3b9e"}],"watcher_tempest_plugin/infra_optim_clients.py":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"a2bcb227b6017683c691ad95dc1ce6f0c993bbfe","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class ExtendPlacementClient(placement_client.PlacementClient):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def list_provider_traits(self, rp_uuid):"},{"line_number":72,"context_line":"        \"\"\"List resource provider traits."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        For full list of available parameters, please refer to the official"},{"line_number":75,"context_line":"        API reference:"},{"line_number":76,"context_line":"        https://docs.openstack.org/api-ref/placement/#"},{"line_number":77,"context_line":"        list-resource-provider-traits-detail"},{"line_number":78,"context_line":"        \"\"\""},{"line_number":79,"context_line":"        url \u003d \u0027/resource_providers/%s/traits\u0027 % rp_uuid"},{"line_number":80,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":81,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":82,"context_line":"        body \u003d json.loads(body)"},{"line_number":83,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def list_provider_inventory(self, rp_uuid):"},{"line_number":86,"context_line":"        \"\"\"List resource provider inventories. \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf2809ed_128f81b0","line":83,"range":{"start_line":71,"start_character":0,"end_line":83,"end_character":51},"updated":"2026-04-29 09:15:58.000000000","message":"We can also drop this one also in favor of list_resource_provider_traits https://review.opendev.org/c/openstack/watcher-tempest-plugin/+/986622 will take care of that.","commit_id":"1d081a89c8233e6f105647301faec32b93b2a07f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"587f00cc3f584dedb242da914107af4a795853f6","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class ExtendPlacementClient(placement_client.PlacementClient):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def list_provider_traits(self, rp_uuid):"},{"line_number":72,"context_line":"        \"\"\"List resource provider traits."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        For full list of available parameters, please refer to the official"},{"line_number":75,"context_line":"        API reference:"},{"line_number":76,"context_line":"        https://docs.openstack.org/api-ref/placement/#"},{"line_number":77,"context_line":"        list-resource-provider-traits-detail"},{"line_number":78,"context_line":"        \"\"\""},{"line_number":79,"context_line":"        url \u003d \u0027/resource_providers/%s/traits\u0027 % rp_uuid"},{"line_number":80,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":81,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":82,"context_line":"        body \u003d json.loads(body)"},{"line_number":83,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def list_provider_inventory(self, rp_uuid):"},{"line_number":86,"context_line":"        \"\"\"List resource provider inventories. \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfb730_d572e43c","line":83,"range":{"start_line":71,"start_character":0,"end_line":83,"end_character":51},"in_reply_to":"03fead30_ee5c96c6","updated":"2026-05-07 06:15:44.000000000","message":"Because, this arrived first and I consider unfair making this change which is intended to fix other thing to depend this on fixing a technical debt that has been there **for years** literally.","commit_id":"1d081a89c8233e6f105647301faec32b93b2a07f"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"e59937d33417d072833297f12130b8a761d91c73","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class ExtendPlacementClient(placement_client.PlacementClient):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def list_provider_traits(self, rp_uuid):"},{"line_number":72,"context_line":"        \"\"\"List resource provider traits."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        For full list of available parameters, please refer to the official"},{"line_number":75,"context_line":"        API reference:"},{"line_number":76,"context_line":"        https://docs.openstack.org/api-ref/placement/#"},{"line_number":77,"context_line":"        list-resource-provider-traits-detail"},{"line_number":78,"context_line":"        \"\"\""},{"line_number":79,"context_line":"        url \u003d \u0027/resource_providers/%s/traits\u0027 % rp_uuid"},{"line_number":80,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":81,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":82,"context_line":"        body \u003d json.loads(body)"},{"line_number":83,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def list_provider_inventory(self, rp_uuid):"},{"line_number":86,"context_line":"        \"\"\"List resource provider inventories. \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"ce13bbf6_815b78f1","line":83,"range":{"start_line":71,"start_character":0,"end_line":83,"end_character":51},"in_reply_to":"3553602b_1ccbd764","updated":"2026-04-29 12:03:52.000000000","message":"sure, will rebase my patch on top of this.","commit_id":"1d081a89c8233e6f105647301faec32b93b2a07f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3b7e99bb4a5e335d0664e303cb9df814cf173404","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class ExtendPlacementClient(placement_client.PlacementClient):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def list_provider_traits(self, rp_uuid):"},{"line_number":72,"context_line":"        \"\"\"List resource provider traits."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        For full list of available parameters, please refer to the official"},{"line_number":75,"context_line":"        API reference:"},{"line_number":76,"context_line":"        https://docs.openstack.org/api-ref/placement/#"},{"line_number":77,"context_line":"        list-resource-provider-traits-detail"},{"line_number":78,"context_line":"        \"\"\""},{"line_number":79,"context_line":"        url \u003d \u0027/resource_providers/%s/traits\u0027 % rp_uuid"},{"line_number":80,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":81,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":82,"context_line":"        body \u003d json.loads(body)"},{"line_number":83,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def list_provider_inventory(self, rp_uuid):"},{"line_number":86,"context_line":"        \"\"\"List resource provider inventories. \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"d059d3d7_3836dd2f","line":83,"range":{"start_line":71,"start_character":0,"end_line":83,"end_character":51},"in_reply_to":"3b34ff48_fa02019a","updated":"2026-05-08 11:10:07.000000000","message":"honestly i woudl hope that we woudl activly avoid building on shakey foundations\n\nwe can proceed with this but we shoudl take the time to clean up technial debt when we are exteneing the code base or we will eventually be burried in it.","commit_id":"1d081a89c8233e6f105647301faec32b93b2a07f"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"5ee449a87b2593e44d67d7171b572d54cd888a6d","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class ExtendPlacementClient(placement_client.PlacementClient):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def list_provider_traits(self, rp_uuid):"},{"line_number":72,"context_line":"        \"\"\"List resource provider traits."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        For full list of available parameters, please refer to the official"},{"line_number":75,"context_line":"        API reference:"},{"line_number":76,"context_line":"        https://docs.openstack.org/api-ref/placement/#"},{"line_number":77,"context_line":"        list-resource-provider-traits-detail"},{"line_number":78,"context_line":"        \"\"\""},{"line_number":79,"context_line":"        url \u003d \u0027/resource_providers/%s/traits\u0027 % rp_uuid"},{"line_number":80,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":81,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":82,"context_line":"        body \u003d json.loads(body)"},{"line_number":83,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def list_provider_inventory(self, rp_uuid):"},{"line_number":86,"context_line":"        \"\"\"List resource provider inventories. \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3b34ff48_fa02019a","line":83,"range":{"start_line":71,"start_character":0,"end_line":83,"end_character":51},"in_reply_to":"9fdfb730_d572e43c","updated":"2026-05-07 18:46:11.000000000","message":"Since we already have a patch to follow the tech debt, i don\u0027t see a problem in this merge order. We can hold this one until we agree in the follow up too, if you folks prefer.","commit_id":"1d081a89c8233e6f105647301faec32b93b2a07f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"189802bed0fad5df62b989dd1eb14432808bb3fa","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class ExtendPlacementClient(placement_client.PlacementClient):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def list_provider_traits(self, rp_uuid):"},{"line_number":72,"context_line":"        \"\"\"List resource provider traits."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        For full list of available parameters, please refer to the official"},{"line_number":75,"context_line":"        API reference:"},{"line_number":76,"context_line":"        https://docs.openstack.org/api-ref/placement/#"},{"line_number":77,"context_line":"        list-resource-provider-traits-detail"},{"line_number":78,"context_line":"        \"\"\""},{"line_number":79,"context_line":"        url \u003d \u0027/resource_providers/%s/traits\u0027 % rp_uuid"},{"line_number":80,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":81,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":82,"context_line":"        body \u003d json.loads(body)"},{"line_number":83,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def list_provider_inventory(self, rp_uuid):"},{"line_number":86,"context_line":"        \"\"\"List resource provider inventories. \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3553602b_1ccbd764","line":83,"range":{"start_line":71,"start_character":0,"end_line":83,"end_character":51},"in_reply_to":"bf2809ed_128f81b0","updated":"2026-04-29 10:00:48.000000000","message":"Actually, i did that for consistency with the existing method, but removing both in that patch sounds good, will you rebase your patch on top of this?","commit_id":"1d081a89c8233e6f105647301faec32b93b2a07f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1bced28d04fefddbe5f89719ab45e8f1a81f15e0","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class ExtendPlacementClient(placement_client.PlacementClient):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def list_provider_traits(self, rp_uuid):"},{"line_number":72,"context_line":"        \"\"\"List resource provider traits."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        For full list of available parameters, please refer to the official"},{"line_number":75,"context_line":"        API reference:"},{"line_number":76,"context_line":"        https://docs.openstack.org/api-ref/placement/#"},{"line_number":77,"context_line":"        list-resource-provider-traits-detail"},{"line_number":78,"context_line":"        \"\"\""},{"line_number":79,"context_line":"        url \u003d \u0027/resource_providers/%s/traits\u0027 % rp_uuid"},{"line_number":80,"context_line":"        resp, body \u003d self.get(url)"},{"line_number":81,"context_line":"        self.expected_success(200, resp.status)"},{"line_number":82,"context_line":"        body \u003d json.loads(body)"},{"line_number":83,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def list_provider_inventory(self, rp_uuid):"},{"line_number":86,"context_line":"        \"\"\"List resource provider inventories. \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"03fead30_ee5c96c6","line":83,"range":{"start_line":71,"start_character":0,"end_line":83,"end_character":51},"in_reply_to":"ce13bbf6_815b78f1","updated":"2026-05-06 16:05:07.000000000","message":"why would we not rebase this patch on that\n\ni don\u0027t really see a reason to introduce more technical debt by repeating the incorrect pattern given there is no supported version of openstack that dose not support tempest 40","commit_id":"1d081a89c8233e6f105647301faec32b93b2a07f"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"a2bcb227b6017683c691ad95dc1ce6f0c993bbfe","unresolved":true,"context_lines":[{"line_number":82,"context_line":"        body \u003d json.loads(body)"},{"line_number":83,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def list_provider_inventory(self, rp_uuid):"},{"line_number":86,"context_line":"        \"\"\"List resource provider inventories. \"\"\""},{"line_number":87,"context_line":"        url \u003d \u0027/resource_providers/%s/inventories\u0027 % rp_uuid"},{"line_number":88,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":1,"id":"4a9c0940_ffd05c4b","line":85,"updated":"2026-04-29 09:15:58.000000000","message":"Not sure we need to define this method, https://github.com/openstack/tempest/blob/master/tempest/lib/services/placement/resource_providers_client.py#L60 tempest placement resource_providers_client already provides this.","commit_id":"1d081a89c8233e6f105647301faec32b93b2a07f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"189802bed0fad5df62b989dd1eb14432808bb3fa","unresolved":true,"context_lines":[{"line_number":82,"context_line":"        body \u003d json.loads(body)"},{"line_number":83,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def list_provider_inventory(self, rp_uuid):"},{"line_number":86,"context_line":"        \"\"\"List resource provider inventories. \"\"\""},{"line_number":87,"context_line":"        url \u003d \u0027/resource_providers/%s/inventories\u0027 % rp_uuid"},{"line_number":88,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":1,"id":"b4911616_5a4d5a7c","line":85,"in_reply_to":"4a9c0940_ffd05c4b","updated":"2026-04-29 10:00:48.000000000","message":"As mentioned before, i did this for consistency with the existing placement client calls.","commit_id":"1d081a89c8233e6f105647301faec32b93b2a07f"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b3beb9413419ec044cff026e3c99a45332cbd250","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        body \u003d json.loads(body)"},{"line_number":83,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def list_provider_inventory(self, rp_uuid):"},{"line_number":86,"context_line":"        \"\"\"List resource provider inventories. \"\"\""},{"line_number":87,"context_line":"        url \u003d \u0027/resource_providers/%s/inventories\u0027 % rp_uuid"},{"line_number":88,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":1,"id":"daa040f8_60c12631","line":85,"in_reply_to":"b4911616_5a4d5a7c","updated":"2026-05-04 10:44:20.000000000","message":"Done","commit_id":"1d081a89c8233e6f105647301faec32b93b2a07f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1bced28d04fefddbe5f89719ab45e8f1a81f15e0","unresolved":true,"context_lines":[{"line_number":82,"context_line":"        body \u003d json.loads(body)"},{"line_number":83,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def list_provider_inventory(self, rp_uuid):"},{"line_number":86,"context_line":"        \"\"\"List resource provider inventories.\"\"\""},{"line_number":87,"context_line":"        url \u003d \u0027/resource_providers/%s/inventories\u0027 % rp_uuid"},{"line_number":88,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ac3bfcbe_7dbee36e","line":85,"in_reply_to":"261b0061_23df5d7d","updated":"2026-05-06 16:05:07.000000000","message":"so this si the type of comprmsie for backporatblity that in general we shoudl not do.\n\ntempest is branchless meaning we use master on all stable brnaches and we only pin tempet wehn a branch moves to unmaintanied.\n\nand even unmaintaiend anteloper uses tempest 41.0.0\n\nhttps://github.com/openstack/devstack/blob/unmaintained/2023.1/stackrc#L303","commit_id":"d940640e5d5751589a2fe5ba7b57c321ec7aef9c"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b3beb9413419ec044cff026e3c99a45332cbd250","unresolved":true,"context_lines":[{"line_number":82,"context_line":"        body \u003d json.loads(body)"},{"line_number":83,"context_line":"        return rest_client.ResponseBody(resp, body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def list_provider_inventory(self, rp_uuid):"},{"line_number":86,"context_line":"        \"\"\"List resource provider inventories.\"\"\""},{"line_number":87,"context_line":"        url \u003d \u0027/resource_providers/%s/inventories\u0027 % rp_uuid"},{"line_number":88,"context_line":"        resp, body \u003d self.get(url)"}],"source_content_type":"text/x-python","patch_set":9,"id":"261b0061_23df5d7d","line":85,"in_reply_to":"3d5cb103_9f83f572","updated":"2026-05-04 10:44:20.000000000","message":"I\u0027m being consistent with list_provider_traits method. These are going away with follow up changes. See Chandan\u0027s messages.","commit_id":"d940640e5d5751589a2fe5ba7b57c321ec7aef9c"}],"watcher_tempest_plugin/tests/scenario/base.py":[{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"9ba2aa6e7a4b1914a7f22bdf70d2ce3bf4a1dca2","unresolved":true,"context_lines":[{"line_number":310,"context_line":"    def _create_custom_flavor(self, ram\u003d512, vcpus\u003d1, disk\u003d1):"},{"line_number":311,"context_line":"        \"\"\"Create a flavor with custom RAM size"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        :param ram: RAM in MB to be set for the flavor."},{"line_number":314,"context_line":"        :returns: A flavor id"},{"line_number":315,"context_line":"        \"\"\""},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9d4aae17_715cac32","line":313,"updated":"2026-04-29 10:46:19.000000000","message":"please add the new param here","commit_id":"cbbf8247b9ad3e16eace390453796787f4b84866"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"19a7f8416c80347be79c4a1e56ed2bd5bda6b1c1","unresolved":false,"context_lines":[{"line_number":310,"context_line":"    def _create_custom_flavor(self, ram\u003d512, vcpus\u003d1, disk\u003d1):"},{"line_number":311,"context_line":"        \"\"\"Create a flavor with custom RAM size"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        :param ram: RAM in MB to be set for the flavor."},{"line_number":314,"context_line":"        :returns: A flavor id"},{"line_number":315,"context_line":"        \"\"\""},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"01cbf024_b5723fcd","line":313,"in_reply_to":"9d4aae17_715cac32","updated":"2026-04-29 12:51:20.000000000","message":"Good point, done.","commit_id":"cbbf8247b9ad3e16eace390453796787f4b84866"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"b8cffc654163f82c4b8bf773944e4c1bb26ecab3","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            created_instances.append(instance)"},{"line_number":376,"context_line":"        return created_instances"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _create_instance(self, host\u003dNone, flavor\u003dNone, run_command\u003dNone,"},{"line_number":379,"context_line":"                         boot_from_volume\u003dFalse, volume_type\u003dNone):"},{"line_number":380,"context_line":"        # We enforce the compute node where we create the instance to"},{"line_number":381,"context_line":"        # make sure we have one node on each compute."}],"source_content_type":"text/x-python","patch_set":5,"id":"fb9df859_6e28b791","line":378,"in_reply_to":"3a2b67e1_df182c3e","updated":"2026-04-29 15:57:11.000000000","message":"\u003e The volume_type parameter in _create_instance is accepted but never used in the two new BfV test classes. The volume_type kwarg is passed to create_volume_from_image only when truthy, yet no test exercises this path.\n\u003e \n\u003e **Severity**: WARNING | **Confidence**: 0.8\n\u003e \n\u003e **Impact**: Dead parameter increases API surface without test coverage. Future callers may assume volume_type works but it is untested, potentially hiding bugs in volume-type-scoped BfV scenarios.\n\u003e \n\u003e **Suggestion**:\n\u003e Either add a test that exercises volume_type, or remove the parameter entirely and add it in a follow-up patch that includes corresponding test coverage. If kept, ensure the Cinder volume-type exists in the test environment.\n\n\nThis is true for this patch, but the parameter is used in the next patch of the chain so we can disregard the commment.","commit_id":"82f025e4b9d0dbda4b6184f55b5a3cc5ae0dc203"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c97f05f73510e407ef2921fc8d8858bedebbf8b8","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            created_instances.append(instance)"},{"line_number":376,"context_line":"        return created_instances"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _create_instance(self, host\u003dNone, flavor\u003dNone, run_command\u003dNone,"},{"line_number":379,"context_line":"                         boot_from_volume\u003dFalse, volume_type\u003dNone):"},{"line_number":380,"context_line":"        # We enforce the compute node where we create the instance to"},{"line_number":381,"context_line":"        # make sure we have one node on each compute."}],"source_content_type":"text/x-python","patch_set":5,"id":"97eee0a8_965768c9","line":378,"in_reply_to":"fb9df859_6e28b791","updated":"2026-04-30 07:22:42.000000000","message":"Given that i need to ammend the patch, I will squash both reviews in one.","commit_id":"82f025e4b9d0dbda4b6184f55b5a3cc5ae0dc203"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"b8cffc654163f82c4b8bf773944e4c1bb26ecab3","unresolved":true,"context_lines":[{"line_number":404,"context_line":"            if volume_type:"},{"line_number":405,"context_line":"                bfv_kwargs[\u0027volume_type\u0027] \u003d volume_type"},{"line_number":406,"context_line":"            volume \u003d self.create_volume_from_image(**bfv_kwargs)"},{"line_number":407,"context_line":"            kwargs_server.update(self._get_bdm("},{"line_number":408,"context_line":"                volume[\u0027id\u0027], \u0027volume\u0027))"},{"line_number":409,"context_line":"            image_id \u003d \u0027\u0027"},{"line_number":410,"context_line":"        instance \u003d self.create_server("}],"source_content_type":"text/x-python","patch_set":5,"id":"d0a2359a_79b640d8","line":407,"updated":"2026-04-29 15:57:11.000000000","message":"the `_get_bdm` method is defined in tempest https://github.com/openstack/tempest/blob/70c4143230559059ed0839956a2a153b36573c29/tempest/scenario/manager.py#L1353 but the name suggests that it\u0027s an internal function. I\u0027m ok with using it since it\u0027s not very likely to change, but I would add a comment pointing to the source for easier debugging if it ever changes and our tests break because of it","commit_id":"82f025e4b9d0dbda4b6184f55b5a3cc5ae0dc203"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fddf85f14c9f94b961a035c66429914cc1cd4b8e","unresolved":false,"context_lines":[{"line_number":404,"context_line":"            if volume_type:"},{"line_number":405,"context_line":"                bfv_kwargs[\u0027volume_type\u0027] \u003d volume_type"},{"line_number":406,"context_line":"            volume \u003d self.create_volume_from_image(**bfv_kwargs)"},{"line_number":407,"context_line":"            kwargs_server.update(self._get_bdm("},{"line_number":408,"context_line":"                volume[\u0027id\u0027], \u0027volume\u0027))"},{"line_number":409,"context_line":"            image_id \u003d \u0027\u0027"},{"line_number":410,"context_line":"        instance \u003d self.create_server("}],"source_content_type":"text/x-python","patch_set":5,"id":"ef71f631_dbaf1f5e","line":407,"in_reply_to":"8ca347db_e12f0f3e","updated":"2026-04-30 08:39:31.000000000","message":"that looks better, should be more robust, thanks","commit_id":"82f025e4b9d0dbda4b6184f55b5a3cc5ae0dc203"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"c97f05f73510e407ef2921fc8d8858bedebbf8b8","unresolved":true,"context_lines":[{"line_number":404,"context_line":"            if volume_type:"},{"line_number":405,"context_line":"                bfv_kwargs[\u0027volume_type\u0027] \u003d volume_type"},{"line_number":406,"context_line":"            volume \u003d self.create_volume_from_image(**bfv_kwargs)"},{"line_number":407,"context_line":"            kwargs_server.update(self._get_bdm("},{"line_number":408,"context_line":"                volume[\u0027id\u0027], \u0027volume\u0027))"},{"line_number":409,"context_line":"            image_id \u003d \u0027\u0027"},{"line_number":410,"context_line":"        instance \u003d self.create_server("}],"source_content_type":"text/x-python","patch_set":5,"id":"8ca347db_e12f0f3e","line":407,"in_reply_to":"d0a2359a_79b640d8","updated":"2026-04-30 07:22:42.000000000","message":"Good point, i will switch to use boot_instance_from_resource https://github.com/openstack/tempest/blob/70c4143230559059ed0839956a2a153b36573c29/tempest/scenario/manager.py#L1362 in that case","commit_id":"82f025e4b9d0dbda4b6184f55b5a3cc5ae0dc203"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"fddf85f14c9f94b961a035c66429914cc1cd4b8e","unresolved":true,"context_lines":[{"line_number":409,"context_line":"                wait_until\u003d\u0027ACTIVE\u0027, flavor\u003dflavor, clients\u003dself.os_admin,"},{"line_number":410,"context_line":"                validatable\u003dvalidatable,"},{"line_number":411,"context_line":"                validation_resources\u003dvalidation_resources, **kwargs_server)"},{"line_number":412,"context_line":"            image_id \u003d \u0027\u0027"},{"line_number":413,"context_line":"        else:"},{"line_number":414,"context_line":"            instance \u003d self.create_server("},{"line_number":415,"context_line":"                image_id\u003dimage_id, wait_until\u003d\u0027ACTIVE\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"caed9be6_178b8ae8","line":412,"updated":"2026-04-30 08:39:31.000000000","message":"nit, we\u0027re setting this variable again but it does not seem to be used anymore going forward","commit_id":"3046a56e3e2a0915682b610f900fa93b74da804e"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"341d3d555e33ddba5bf1d8dbe7eddf26567336e9","unresolved":false,"context_lines":[{"line_number":409,"context_line":"                wait_until\u003d\u0027ACTIVE\u0027, flavor\u003dflavor, clients\u003dself.os_admin,"},{"line_number":410,"context_line":"                validatable\u003dvalidatable,"},{"line_number":411,"context_line":"                validation_resources\u003dvalidation_resources, **kwargs_server)"},{"line_number":412,"context_line":"            image_id \u003d \u0027\u0027"},{"line_number":413,"context_line":"        else:"},{"line_number":414,"context_line":"            instance \u003d self.create_server("},{"line_number":415,"context_line":"                image_id\u003dimage_id, wait_until\u003d\u0027ACTIVE\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"70523bc8_bdec0143","line":412,"in_reply_to":"9f52a149_2aad0723","updated":"2026-04-30 10:43:58.000000000","message":"Done","commit_id":"3046a56e3e2a0915682b610f900fa93b74da804e"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"81c9df28fd88517636f7f96d4824461fa61a7679","unresolved":true,"context_lines":[{"line_number":409,"context_line":"                wait_until\u003d\u0027ACTIVE\u0027, flavor\u003dflavor, clients\u003dself.os_admin,"},{"line_number":410,"context_line":"                validatable\u003dvalidatable,"},{"line_number":411,"context_line":"                validation_resources\u003dvalidation_resources, **kwargs_server)"},{"line_number":412,"context_line":"            image_id \u003d \u0027\u0027"},{"line_number":413,"context_line":"        else:"},{"line_number":414,"context_line":"            instance \u003d self.create_server("},{"line_number":415,"context_line":"                image_id\u003dimage_id, wait_until\u003d\u0027ACTIVE\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f52a149_2aad0723","line":412,"in_reply_to":"caed9be6_178b8ae8","updated":"2026-04-30 08:46:20.000000000","message":"I\u0027ll fix if i need to fix other things or rerun ci","commit_id":"3046a56e3e2a0915682b610f900fa93b74da804e"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"af42e37dc2f1449da80dccff6cd18fcc77bd5568","unresolved":true,"context_lines":[{"line_number":376,"context_line":"        return created_instances"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _create_instance(self, host\u003dNone, flavor\u003dNone, run_command\u003dNone,"},{"line_number":379,"context_line":"                         boot_from_volume\u003dFalse, volume_type\u003dNone):"},{"line_number":380,"context_line":"        # We enforce the compute node where we create the instance to"},{"line_number":381,"context_line":"        # make sure we have one node on each compute."},{"line_number":382,"context_line":"        # This requires Nova API version 2.74 or higher."}],"source_content_type":"text/x-python","patch_set":7,"id":"b2dbc5cf_65c33d08","line":379,"range":{"start_line":379,"start_character":0,"end_line":379,"end_character":67},"updated":"2026-04-30 17:07:40.000000000","message":"i think that is fine to be reusing this method, but once we start adding more config parameters here, i think that we should split in 2.","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3b7e99bb4a5e335d0664e303cb9df814cf173404","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        return created_instances"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _create_instance(self, host\u003dNone, flavor\u003dNone, run_command\u003dNone,"},{"line_number":379,"context_line":"                         boot_from_volume\u003dFalse, volume_type\u003dNone):"},{"line_number":380,"context_line":"        # We enforce the compute node where we create the instance to"},{"line_number":381,"context_line":"        # make sure we have one node on each compute."},{"line_number":382,"context_line":"        # This requires Nova API version 2.74 or higher."}],"source_content_type":"text/x-python","patch_set":7,"id":"b47f62e8_25766165","line":379,"range":{"start_line":379,"start_character":0,"end_line":379,"end_character":67},"in_reply_to":"7a9891b7_496b6d95","updated":"2026-05-08 11:10:07.000000000","message":"Acknowledged","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1bced28d04fefddbe5f89719ab45e8f1a81f15e0","unresolved":true,"context_lines":[{"line_number":376,"context_line":"        return created_instances"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _create_instance(self, host\u003dNone, flavor\u003dNone, run_command\u003dNone,"},{"line_number":379,"context_line":"                         boot_from_volume\u003dFalse, volume_type\u003dNone):"},{"line_number":380,"context_line":"        # We enforce the compute node where we create the instance to"},{"line_number":381,"context_line":"        # make sure we have one node on each compute."},{"line_number":382,"context_line":"        # This requires Nova API version 2.74 or higher."}],"source_content_type":"text/x-python","patch_set":7,"id":"7a9891b7_496b6d95","line":379,"range":{"start_line":379,"start_character":0,"end_line":379,"end_character":67},"in_reply_to":"8c1dc125_fbfd716f","updated":"2026-05-06 16:05:07.000000000","message":"in nova unit/funcitonal test we have 2 relsated function a semi privage build_server_parms or simialr  function that can then be extended and a sepreate _create_server that take the build args  and default them if not provided\n\nthat means for the default case its trivial but if you need to tweak basic command you can.\n\nso yes i agree this is ok for now but really will likely need tobe decomposed if it gows much more.","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"78d090d778f251cb8449fe8ba66f817960be4ff3","unresolved":true,"context_lines":[{"line_number":376,"context_line":"        return created_instances"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _create_instance(self, host\u003dNone, flavor\u003dNone, run_command\u003dNone,"},{"line_number":379,"context_line":"                         boot_from_volume\u003dFalse, volume_type\u003dNone):"},{"line_number":380,"context_line":"        # We enforce the compute node where we create the instance to"},{"line_number":381,"context_line":"        # make sure we have one node on each compute."},{"line_number":382,"context_line":"        # This requires Nova API version 2.74 or higher."}],"source_content_type":"text/x-python","patch_set":7,"id":"8c1dc125_fbfd716f","line":379,"range":{"start_line":379,"start_character":0,"end_line":379,"end_character":67},"in_reply_to":"b2dbc5cf_65c33d08","updated":"2026-05-05 07:11:07.000000000","message":"+1 to split this method in 2 in future.","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3b7e99bb4a5e335d0664e303cb9df814cf173404","unresolved":false,"context_lines":[{"line_number":1030,"context_line":"        else:"},{"line_number":1031,"context_line":"            return False"},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    def get_resource_provider_inventory(self, res_id):"},{"line_number":1034,"context_line":"        \"\"\"Get resource provider details for a node"},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"        :param res_id: The unique identifier of the resource provider."}],"source_content_type":"text/x-python","patch_set":9,"id":"a247934a_a2849445","line":1033,"in_reply_to":"6b889a5b_20fb0321","updated":"2026-05-08 11:10:07.000000000","message":"its out of scope but i woudl actully sueition if we whuld remove this method entirly.\n\nthis is adding very littel value over using the placemetn client directly","commit_id":"d940640e5d5751589a2fe5ba7b57c321ec7aef9c"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b3beb9413419ec044cff026e3c99a45332cbd250","unresolved":true,"context_lines":[{"line_number":1030,"context_line":"        else:"},{"line_number":1031,"context_line":"            return False"},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    def get_resource_provider_inventory(self, res_id):"},{"line_number":1034,"context_line":"        \"\"\"Get resource provider details for a node"},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"        :param res_id: The unique identifier of the resource provider."}],"source_content_type":"text/x-python","patch_set":9,"id":"6b889a5b_20fb0321","line":1033,"in_reply_to":"ca967354_0672f044","updated":"2026-05-04 10:44:20.000000000","message":"The intent of this method is to provide the inventories content.","commit_id":"d940640e5d5751589a2fe5ba7b57c321ec7aef9c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1bced28d04fefddbe5f89719ab45e8f1a81f15e0","unresolved":true,"context_lines":[{"line_number":321,"context_line":"            ram\u003dram,"},{"line_number":322,"context_line":"            vcpus\u003dvcpus,"},{"line_number":323,"context_line":"            disk\u003ddisk,"},{"line_number":324,"context_line":"            ephemeral\u003d0,"},{"line_number":325,"context_line":"            swap\u003d0,"},{"line_number":326,"context_line":"            rxtx_factor\u003d1.0,"},{"line_number":327,"context_line":"            is_public\u003dTrue)[\u0027flavor\u0027][\u0027id\u0027]"},{"line_number":328,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"}],"source_content_type":"text/x-python","patch_set":10,"id":"61833475_e418bd92","line":325,"range":{"start_line":324,"start_character":0,"end_line":325,"end_character":19},"updated":"2026-05-06 16:05:07.000000000","message":"you will need ot be able to set these as well to test it properly.","commit_id":"7483bae815a649390766d2da1aa31e929b8a3b9e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3b7e99bb4a5e335d0664e303cb9df814cf173404","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            ram\u003dram,"},{"line_number":322,"context_line":"            vcpus\u003dvcpus,"},{"line_number":323,"context_line":"            disk\u003ddisk,"},{"line_number":324,"context_line":"            ephemeral\u003d0,"},{"line_number":325,"context_line":"            swap\u003d0,"},{"line_number":326,"context_line":"            rxtx_factor\u003d1.0,"},{"line_number":327,"context_line":"            is_public\u003dTrue)[\u0027flavor\u0027][\u0027id\u0027]"},{"line_number":328,"context_line":"        self.addCleanup(test_utils.call_and_ignore_notfound_exc,"}],"source_content_type":"text/x-python","patch_set":10,"id":"b5c706c7_79c973d2","line":325,"range":{"start_line":324,"start_character":0,"end_line":325,"end_character":19},"in_reply_to":"61833475_e418bd92","updated":"2026-05-08 11:10:07.000000000","message":"Done and tested via https://review.opendev.org/c/openstack/watcher-tempest-plugin/+/987820/1","commit_id":"7483bae815a649390766d2da1aa31e929b8a3b9e"}],"watcher_tempest_plugin/tests/scenario/test_execute_workload_balance.py":[{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"9ba2aa6e7a4b1914a7f22bdf70d2ce3bf4a1dca2","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        TestExecuteWorkloadBalanceStrategyBase):"},{"line_number":50,"context_line":"    \"\"\"Tests for workload_balance\"\"\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    # Minimal version required for list data models"},{"line_number":53,"context_line":"    min_microversion \u003d \"1.3\""},{"line_number":54,"context_line":"    # Minimal version required for _create_one_instance_per_host"},{"line_number":55,"context_line":"    compute_min_microversion \u003d base.NOVA_API_VERSION_CREATE_WITH_HOST"}],"source_content_type":"text/x-python","patch_set":3,"id":"a902d2ae_23f27c01","line":52,"updated":"2026-04-29 10:46:19.000000000","message":"we can remove this block as it is defined on the base class","commit_id":"cbbf8247b9ad3e16eace390453796787f4b84866"},{"author":{"_account_id":28647,"name":"David","display_name":"morenod","email":"dsanzmor@redhat.com","username":"morenod"},"change_message_id":"9ba2aa6e7a4b1914a7f22bdf70d2ce3bf4a1dca2","unresolved":true,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027workload_balance\u0027, \u0027bfv\u0027])"},{"line_number":173,"context_line":"    @decorators.idempotent_id(\u00275686b82d-462b-4298-bdb7-563309406848\u0027)"},{"line_number":174,"context_line":"    def test_execute_workload_balance_strategy_bfv(self):"},{"line_number":175,"context_line":"        # This test requires metrics injection"},{"line_number":176,"context_line":"        self.check_min_enabled_compute_nodes(2)"},{"line_number":177,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"}],"source_content_type":"text/x-python","patch_set":3,"id":"c0ce88c4_54999fff","line":174,"updated":"2026-04-29 10:46:19.000000000","message":"can name include cpu? to match cpu test name without bfv","commit_id":"cbbf8247b9ad3e16eace390453796787f4b84866"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"19a7f8416c80347be79c4a1e56ed2bd5bda6b1c1","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027workload_balance\u0027, \u0027bfv\u0027])"},{"line_number":173,"context_line":"    @decorators.idempotent_id(\u00275686b82d-462b-4298-bdb7-563309406848\u0027)"},{"line_number":174,"context_line":"    def test_execute_workload_balance_strategy_bfv(self):"},{"line_number":175,"context_line":"        # This test requires metrics injection"},{"line_number":176,"context_line":"        self.check_min_enabled_compute_nodes(2)"},{"line_number":177,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"}],"source_content_type":"text/x-python","patch_set":3,"id":"68304abd_bd211352","line":174,"in_reply_to":"c0ce88c4_54999fff","updated":"2026-04-29 12:51:20.000000000","message":"Done","commit_id":"cbbf8247b9ad3e16eace390453796787f4b84866"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"19a7f8416c80347be79c4a1e56ed2bd5bda6b1c1","unresolved":false,"context_lines":[{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        action_plan, _ \u003d self.get_action_plan_and_validate_actions("},{"line_number":221,"context_line":"            audit[\u0027uuid\u0027], [\u0027migrate\u0027])"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        self.assertEqual(\"RECOMMENDED\", action_plan[\u0027state\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"cc67adbf_0d9dd32f","line":222,"in_reply_to":"805fb8c5_052a8321","updated":"2026-04-29 12:51:20.000000000","message":"That\u0027s on purpose to make job shorter.","commit_id":"cbbf8247b9ad3e16eace390453796787f4b84866"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b3beb9413419ec044cff026e3c99a45332cbd250","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            hypervisor[\u0027id\u0027])[\u0027DISK_GB\u0027]"},{"line_number":170,"context_line":"        available_disk \u003d (disk_inventory[\u0027total\u0027]"},{"line_number":171,"context_line":"                          * disk_inventory[\u0027allocation_ratio\u0027])"},{"line_number":172,"context_line":"        flavor_disk \u003d int(available_disk) + 2"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        flavor_id \u003d self._create_custom_flavor(disk\u003dflavor_disk)"},{"line_number":175,"context_line":"        instances \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"97419d46_59f87685","line":172,"in_reply_to":"420b8cd7_074c3053","updated":"2026-05-04 10:44:20.000000000","message":"Done","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"af42e37dc2f1449da80dccff6cd18fcc77bd5568","unresolved":true,"context_lines":[{"line_number":169,"context_line":"            hypervisor[\u0027id\u0027])[\u0027DISK_GB\u0027]"},{"line_number":170,"context_line":"        available_disk \u003d (disk_inventory[\u0027total\u0027]"},{"line_number":171,"context_line":"                          * disk_inventory[\u0027allocation_ratio\u0027])"},{"line_number":172,"context_line":"        flavor_disk \u003d int(available_disk) + 2"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        flavor_id \u003d self._create_custom_flavor(disk\u003dflavor_disk)"},{"line_number":175,"context_line":"        instances \u003d []"}],"source_content_type":"text/x-python","patch_set":7,"id":"420b8cd7_074c3053","line":172,"in_reply_to":"8824b7cc_2a9a98c5","updated":"2026-04-30 17:07:40.000000000","message":"nit: not only that, but a small note that explain why you do this, to make easier to read the test and understand the approach.","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"af42e37dc2f1449da80dccff6cd18fcc77bd5568","unresolved":true,"context_lines":[{"line_number":180,"context_line":"            instances.append(instance)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # wait for compute model updates"},{"line_number":183,"context_line":"        self.wait_for_instances_in_model(instances)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        for instance in instances:"},{"line_number":186,"context_line":"            # Inject metrics after the instances are created"}],"source_content_type":"text/x-python","patch_set":7,"id":"292a9ca6_8ed002f9","line":183,"range":{"start_line":183,"start_character":13,"end_line":183,"end_character":40},"updated":"2026-04-30 17:07:40.000000000","message":"we could also read the info from datamodel list api, to check the value set in server_disk. But the idea is to stop depending on datamodel api anyway :)","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3b7e99bb4a5e335d0664e303cb9df814cf173404","unresolved":true,"context_lines":[{"line_number":180,"context_line":"            instances.append(instance)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # wait for compute model updates"},{"line_number":183,"context_line":"        self.wait_for_instances_in_model(instances)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        for instance in instances:"},{"line_number":186,"context_line":"            # Inject metrics after the instances are created"}],"source_content_type":"text/x-python","patch_set":7,"id":"234c0866_55e5f6ce","line":183,"range":{"start_line":183,"start_character":13,"end_line":183,"end_character":40},"in_reply_to":"1b4d687e_46694f47","updated":"2026-05-08 11:10:07.000000000","message":"That type of testign is beter to do in watcher iselef in functional tests rahter then tempest test  where we can start a instance of the decsions engine with a sqlite db and a rest api then emit a notifiction for the isntace or simulate the nova api can triger the collector to populate the datamodel and assert it.","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b3beb9413419ec044cff026e3c99a45332cbd250","unresolved":true,"context_lines":[{"line_number":180,"context_line":"            instances.append(instance)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # wait for compute model updates"},{"line_number":183,"context_line":"        self.wait_for_instances_in_model(instances)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        for instance in instances:"},{"line_number":186,"context_line":"            # Inject metrics after the instances are created"}],"source_content_type":"text/x-python","patch_set":7,"id":"1b4d687e_46694f47","line":183,"range":{"start_line":183,"start_character":13,"end_line":183,"end_character":40},"in_reply_to":"292a9ca6_8ed002f9","updated":"2026-05-04 10:44:20.000000000","message":"Yep. That was my though. Anyway, I still have doubts if we should add a test based on the datamodel while we have it in addition to this one which test the entire feature of boot from volume for workload_balance. If we decide to do it, I will send it in follow up.","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3b7e99bb4a5e335d0664e303cb9df814cf173404","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        action_plan, _ \u003d self.get_action_plan_and_validate_actions("},{"line_number":208,"context_line":"            audit[\u0027uuid\u0027], [\u0027migrate\u0027])"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        self.assertEqual(\"RECOMMENDED\", action_plan[\u0027state\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"d38494ce_d64ba026","line":210,"in_reply_to":"0d9e2111_59d83261","updated":"2026-05-08 11:10:07.000000000","message":"Acknowledged","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"587f00cc3f584dedb242da914107af4a795853f6","unresolved":true,"context_lines":[{"line_number":207,"context_line":"        action_plan, _ \u003d self.get_action_plan_and_validate_actions("},{"line_number":208,"context_line":"            audit[\u0027uuid\u0027], [\u0027migrate\u0027])"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        self.assertEqual(\"RECOMMENDED\", action_plan[\u0027state\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"a4ed4379_b498ec9b","line":210,"in_reply_to":"0fa799dc_6367413b","updated":"2026-05-07 06:15:44.000000000","message":"I will add ephemeral and swap in one of the tests with end to end.","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"af42e37dc2f1449da80dccff6cd18fcc77bd5568","unresolved":true,"context_lines":[{"line_number":207,"context_line":"        action_plan, _ \u003d self.get_action_plan_and_validate_actions("},{"line_number":208,"context_line":"            audit[\u0027uuid\u0027], [\u0027migrate\u0027])"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        self.assertEqual(\"RECOMMENDED\", action_plan[\u0027state\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"652f3d7c_17007e1a","line":210,"in_reply_to":"4946a42c_fe872ad5","updated":"2026-04-30 17:07:40.000000000","message":"We don\u0027t really need to trigger the action plan, there are other tests that validate that. IMO is enough just to check that we have a migrate action in the action plan.","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1bced28d04fefddbe5f89719ab45e8f1a81f15e0","unresolved":true,"context_lines":[{"line_number":207,"context_line":"        action_plan, _ \u003d self.get_action_plan_and_validate_actions("},{"line_number":208,"context_line":"            audit[\u0027uuid\u0027], [\u0027migrate\u0027])"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        self.assertEqual(\"RECOMMENDED\", action_plan[\u0027state\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"0fa799dc_6367413b","line":210,"in_reply_to":"64425217_ee643653","updated":"2026-05-06 16:05:07.000000000","message":"i guess if we are just validating the logic fo the descion engin\n\nbut to live migrate with bfv instnace htat also have swap and or ephmeral psace you must use the 2.25 micorvertion \n\nhttps://docs.openstack.org/nova/latest/reference/api-microversion-history.html#maximum-in-mitaka\n\nand we do not set a min microversion in our config. we set a default.\n\nso we shoudl have at least one test that actully verfices that end to end somewhere before we can say we supprot bfv\n\nideally we would do that with a realy bfv flavor has root_gb\u003d0 and swap\u003d128mb and ephmeral \u003d 1G respectivly.\n\nthat shoudl likely be in a diffent test.","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b3beb9413419ec044cff026e3c99a45332cbd250","unresolved":true,"context_lines":[{"line_number":207,"context_line":"        action_plan, _ \u003d self.get_action_plan_and_validate_actions("},{"line_number":208,"context_line":"            audit[\u0027uuid\u0027], [\u0027migrate\u0027])"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        self.assertEqual(\"RECOMMENDED\", action_plan[\u0027state\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"64425217_ee643653","line":210,"in_reply_to":"652f3d7c_17007e1a","updated":"2026-05-04 10:44:20.000000000","message":"I agree","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b85e73041a5fed8c7b2155046d997dfe1748b88c","unresolved":true,"context_lines":[{"line_number":207,"context_line":"        action_plan, _ \u003d self.get_action_plan_and_validate_actions("},{"line_number":208,"context_line":"            audit[\u0027uuid\u0027], [\u0027migrate\u0027])"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        self.assertEqual(\"RECOMMENDED\", action_plan[\u0027state\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"0d9e2111_59d83261","line":210,"in_reply_to":"a4ed4379_b498ec9b","updated":"2026-05-07 08:01:02.000000000","message":"This is the final tested cases:\n\n- test_execute_workload_balance_strategy_cpu : bfv + ephemeral + swap. End to end, including migrations validation\n- test_execute_workload_stabilization_strategy_ram_bfv: bfv only ( ephemeral \u003d swap \u003d 0). End to end, including VM migration validation\n- test_execute_zone_migration_volume_and_compute_migrate_bfv: bfv only ( ephemeral \u003d swap \u003d 0). End to end, including VM and volume migrations validation\n- test_execute_host_maintenance_strategy_backup_node_bfv: bfv only ( ephemeral \u003d swap \u003d 0). End to end, including VM migration\n- test_execute_node_resource_consolidation_with_specify_bfv: bfv + ephemeral + swap. End to end, including migrations validation\n- test_execute_vm_workload_consolidation_strategy_with_specify_bfv:  bfv only ( ephemeral \u003d swap \u003d 0). End to end, including VM migration\n\nAdditionally, I\u0027ve also added ephemeral and swap to the non bfv test test_execute_workload_balance_strategy_cpu given that the issue with ephemeral and swap is not specific of bfv.","commit_id":"16d19bb3bdf3567d792b8edb6caae2fa1a0654c7"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b3beb9413419ec044cff026e3c99a45332cbd250","unresolved":true,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027workload_balance\u0027])"},{"line_number":160,"context_line":"    @decorators.idempotent_id(\u00275686b82d-462b-4298-bdb7-563309406848\u0027)"},{"line_number":161,"context_line":"    def test_execute_workload_balance_strategy_cpu_bfv(self):"},{"line_number":162,"context_line":"        # This test requires metrics injection"},{"line_number":163,"context_line":"        self.check_min_enabled_compute_nodes(2)"},{"line_number":164,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"}],"source_content_type":"text/x-python","patch_set":9,"id":"e3d936f4_e74022ac","line":161,"in_reply_to":"2596f569_57aa1cdf","updated":"2026-05-04 10:44:20.000000000","message":"I could but we try to not over-wrapper logic in tempest tests so that we have flexibility in the tests. Said that, i can do it if others request it.","commit_id":"d940640e5d5751589a2fe5ba7b57c321ec7aef9c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3b7e99bb4a5e335d0664e303cb9df814cf173404","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    @decorators.attr(type\u003d[\u0027strategy\u0027, \u0027workload_balance\u0027])"},{"line_number":160,"context_line":"    @decorators.idempotent_id(\u00275686b82d-462b-4298-bdb7-563309406848\u0027)"},{"line_number":161,"context_line":"    def test_execute_workload_balance_strategy_cpu_bfv(self):"},{"line_number":162,"context_line":"        # This test requires metrics injection"},{"line_number":163,"context_line":"        self.check_min_enabled_compute_nodes(2)"},{"line_number":164,"context_line":"        self.addCleanup(self.wait_delete_instances_from_model)"}],"source_content_type":"text/x-python","patch_set":9,"id":"b3897ab6_95d79904","line":161,"in_reply_to":"e3d936f4_e74022ac","updated":"2026-05-08 11:10:07.000000000","message":"if we end up duplicating it alot we can consdier teh refactor in the future but i think its oke for now","commit_id":"d940640e5d5751589a2fe5ba7b57c321ec7aef9c"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b3beb9413419ec044cff026e3c99a45332cbd250","unresolved":true,"context_lines":[{"line_number":207,"context_line":"        action_plan, _ \u003d self.get_action_plan_and_validate_actions("},{"line_number":208,"context_line":"            audit[\u0027uuid\u0027], [\u0027migrate\u0027])"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        self.assertEqual(\"RECOMMENDED\", action_plan[\u0027state\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"b3b5187a_823d0cb2","line":210,"in_reply_to":"7b3056e6_8ddebad2","updated":"2026-05-04 10:44:20.000000000","message":"On purpose as explained in workload_stabilization one.","commit_id":"d940640e5d5751589a2fe5ba7b57c321ec7aef9c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"3b7e99bb4a5e335d0664e303cb9df814cf173404","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        action_plan, _ \u003d self.get_action_plan_and_validate_actions("},{"line_number":208,"context_line":"            audit[\u0027uuid\u0027], [\u0027migrate\u0027])"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        self.assertEqual(\"RECOMMENDED\", action_plan[\u0027state\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"1dcac568_a2c1edbc","line":210,"in_reply_to":"b3b5187a_823d0cb2","updated":"2026-05-08 11:10:07.000000000","message":"Acknowledged","commit_id":"d940640e5d5751589a2fe5ba7b57c321ec7aef9c"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"65d53b75a9cbc409b89c8b6cd3b9bb3732d10432","unresolved":true,"context_lines":[{"line_number":163,"context_line":"        # destination host. In Boot from Volume instances, the accounting"},{"line_number":164,"context_line":"        # of local disk differs from boot from image as root disk is not"},{"line_number":165,"context_line":"        # taken from the compute node local disk. This test is intended to"},{"line_number":166,"context_line":"        # validate this case by creating a flavor with disk size larger than"},{"line_number":167,"context_line":"        # the available disk in the destination host."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        # This test requires metrics injection"},{"line_number":170,"context_line":"        self.check_min_enabled_compute_nodes(2)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ce5b95ef_5c9676e1","line":167,"range":{"start_line":166,"start_character":0,"end_line":167,"end_character":53},"updated":"2026-05-04 15:29:36.000000000","message":"+1","commit_id":"7483bae815a649390766d2da1aa31e929b8a3b9e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1bced28d04fefddbe5f89719ab45e8f1a81f15e0","unresolved":true,"context_lines":[{"line_number":175,"context_line":"        # Let\u0027s create the flavor with disk size larger than the available disk"},{"line_number":176,"context_line":"        disk_inventory \u003d self.get_resource_provider_inventory("},{"line_number":177,"context_line":"            hypervisor[\u0027id\u0027])[\u0027DISK_GB\u0027]"},{"line_number":178,"context_line":"        available_disk \u003d (disk_inventory[\u0027total\u0027]"},{"line_number":179,"context_line":"                          * disk_inventory[\u0027allocation_ratio\u0027])"},{"line_number":180,"context_line":"        flavor_disk \u003d int(available_disk) + 2"},{"line_number":181,"context_line":"        flavor_id \u003d self._create_custom_flavor(disk\u003dflavor_disk)"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"b5da186c_c36d9d8a","line":179,"range":{"start_line":178,"start_character":26,"end_line":179,"end_character":62},"updated":"2026-05-06 16:05:07.000000000","message":"nit: you should be also subtracting reserved but that fien\n\nwe will just make the falvor even larger by not doing that so it wont really invlaidate it.\n\nthe point is for the flavor to be larger then could fit","commit_id":"7483bae815a649390766d2da1aa31e929b8a3b9e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1bced28d04fefddbe5f89719ab45e8f1a81f15e0","unresolved":true,"context_lines":[{"line_number":194,"context_line":"            # Inject metrics after the instances are created"},{"line_number":195,"context_line":"            self.make_instance_statistic(instance)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # Set a threshold for CPU usage"},{"line_number":198,"context_line":"        # ( \u003cnumber of vms\u003e - 0.5 ) * (0.8/\u003cvcpus of the compute host\u003e)*100"},{"line_number":199,"context_line":"        threshold \u003d round("},{"line_number":200,"context_line":"            (created_instances - 0.5) * (0.8 / int(hypervisor[\u0027vcpus\u0027])) * 100)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"8c78e2b3_6a3cd916","line":198,"range":{"start_line":197,"start_character":7,"end_line":198,"end_character":75},"updated":"2026-05-06 16:05:07.000000000","message":"we should not have coment like this that effectivly just state the next line again.","commit_id":"7483bae815a649390766d2da1aa31e929b8a3b9e"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b85e73041a5fed8c7b2155046d997dfe1748b88c","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            # Inject metrics after the instances are created"},{"line_number":195,"context_line":"            self.make_instance_statistic(instance)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # Set a threshold for CPU usage"},{"line_number":198,"context_line":"        # ( \u003cnumber of vms\u003e - 0.5 ) * (0.8/\u003cvcpus of the compute host\u003e)*100"},{"line_number":199,"context_line":"        threshold \u003d round("},{"line_number":200,"context_line":"            (created_instances - 0.5) * (0.8 / int(hypervisor[\u0027vcpus\u0027])) * 100)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"6b8c2660_66f99681","line":198,"range":{"start_line":197,"start_character":7,"end_line":198,"end_character":75},"in_reply_to":"8c78e2b3_6a3cd916","updated":"2026-05-07 08:01:02.000000000","message":"Done","commit_id":"7483bae815a649390766d2da1aa31e929b8a3b9e"}],"watcher_tempest_plugin/tests/scenario/test_execute_zone_migration.py":[{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b3beb9413419ec044cff026e3c99a45332cbd250","unresolved":false,"context_lines":[{"line_number":478,"context_line":"    @classmethod"},{"line_number":479,"context_line":"    def skip_checks(cls):"},{"line_number":480,"context_line":"        super().skip_checks()"},{"line_number":481,"context_line":"        if not CONF.service_available.cinder:"},{"line_number":482,"context_line":"            raise cls.skipException(\"Cinder is not available\")"},{"line_number":483,"context_line":"        if not CONF.optimize.run_zone_migration_storage_tests:"},{"line_number":484,"context_line":"            raise cls.skipException("}],"source_content_type":"text/x-python","patch_set":9,"id":"01cfbb45_c1eb3349","line":481,"in_reply_to":"a458a017_10724a31","updated":"2026-05-04 10:44:20.000000000","message":"Done","commit_id":"d940640e5d5751589a2fe5ba7b57c321ec7aef9c"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"b3beb9413419ec044cff026e3c99a45332cbd250","unresolved":true,"context_lines":[{"line_number":554,"context_line":""},{"line_number":555,"context_line":"        self.assertEqual(\u0027RECOMMENDED\u0027, action_plan[\u0027state\u0027])"},{"line_number":556,"context_line":""},{"line_number":557,"context_line":"        self.execute_action_plan_and_validate_states("},{"line_number":558,"context_line":"            action_plan[\u0027uuid\u0027])"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"        boot_volume_host \u003d self.get_host_for_volume(boot_volume_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"941ffed4_baae236b","line":557,"in_reply_to":"67b9dd8d_7d302e16","updated":"2026-05-04 10:44:20.000000000","message":"Actually, it does lines 564 - 567","commit_id":"d940640e5d5751589a2fe5ba7b57c321ec7aef9c"}]}
