)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43d3a133294b04968bd22e4ce88e2bb243b5b8d1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add new policies for migration APIs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There is no separate policy to control the live migration"},{"line_number":10,"context_line":"to a specific host or listing migration with host info."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Adding the separate policies for host related operation allow"},{"line_number":13,"context_line":"us to open the server migration to project manager role. Existing"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"cfa1ebe1_c448a272","line":10,"updated":"2025-07-09 20:01:04.000000000","message":"ok this is decirbing the prior state before the chnage.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"047dedbb60848a98a87c065587fc4c2c6ab3664b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add new policies for migration APIs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There is no separate policy to control the live migration"},{"line_number":10,"context_line":"to a specific host or listing migration with host info."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Adding the separate policies for host related operation allow"},{"line_number":13,"context_line":"us to open the server migration to project manager role. Existing"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"4e30b431_cc6a6c6e","line":10,"in_reply_to":"cfa1ebe1_c448a272","updated":"2025-07-10 17:21:19.000000000","message":"yeah, will clarify it.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43d3a133294b04968bd22e4ce88e2bb243b5b8d1","unresolved":false,"context_lines":[{"line_number":14,"context_line":"policy is checked if live migration without specifying host and"},{"line_number":15,"context_line":"new policy is checked if host is specified. Same will be applied"},{"line_number":16,"context_line":"to list migrations (list in-progress live migration or list migrations"},{"line_number":17,"context_line":"of all type), new policy will control to return the host info."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Partial implement blueprint policy-manager-role-default"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"a18107f1_cd2e46cd","line":17,"updated":"2025-07-09 20:01:04.000000000","message":"and this is what your changeing\n\ni was sligly confused at first but makes senese when i re read this.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"047dedbb60848a98a87c065587fc4c2c6ab3664b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"policy is checked if live migration without specifying host and"},{"line_number":15,"context_line":"new policy is checked if host is specified. Same will be applied"},{"line_number":16,"context_line":"to list migrations (list in-progress live migration or list migrations"},{"line_number":17,"context_line":"of all type), new policy will control to return the host info."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Partial implement blueprint policy-manager-role-default"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ef0de5a9_894f1212","line":17,"in_reply_to":"a18107f1_cd2e46cd","updated":"2025-07-10 17:21:19.000000000","message":"ack","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1949ea9b710a7c6a743c31c007fdff817296618b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"3a6e0f64_0004259a","updated":"2025-06-25 20:14:55.000000000","message":"recheck bug 2115338","commit_id":"e687feafa820b197e6f7d5f60727df45093b9e68"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"27e59e133c08aecf330ea5b8322a668e1282e1c9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"cd0bb0eb_58bd8440","updated":"2025-06-26 18:36:16.000000000","message":"recheck grenade timeout","commit_id":"e687feafa820b197e6f7d5f60727df45093b9e68"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"b1f162f355968614078d6ba72e384e10ef9b1a16","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9b48d61d_2c857376","updated":"2025-06-25 15:50:39.000000000","message":"recheck nova-next post failure","commit_id":"e687feafa820b197e6f7d5f60727df45093b9e68"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"d0c29740edb98463737cf4b54659efcf7e703d81","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"5606df43_a65edf99","updated":"2025-07-03 15:52:43.000000000","message":"recheck 404 for get_cephadm in ceph job","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8469ea64e5bd5aeb2c5ed8a5ca703d053985680d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"6ea8884c_470db87c","updated":"2025-06-29 19:19:06.000000000","message":"recheck failure not related","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"7fadc251d84d5ce433ac91bfcbd221f0928e8640","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"13207131_46ef676f","updated":"2025-07-03 00:37:55.000000000","message":"recheck gate is unblocked now","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43d3a133294b04968bd22e4ce88e2bb243b5b8d1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"242df155_776683f1","updated":"2025-07-09 20:01:04.000000000","message":"the -1 is mainly for the deprecation of the new policy rules\nspliting the patch also feels liek a very odd choice but that im more ok with.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1628c3c90ad1926b26b52b56c630d2b9cbd4d8ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9d94a51b_815be49f","updated":"2025-07-16 16:01:01.000000000","message":"Mainly for docs nits. I would personally love to see the schemas for this API merge first, since they\u0027ll test the changes here, but idk how viable that is.","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ec91910432197d49d67ae92b07987aca20932919","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"143bb811_32fcd502","updated":"2025-07-16 04:11:08.000000000","message":"recheck\n\nFailed to discover available identity versions when contacting https://10.209.36.33/identity. Attempting to parse version from URL.\nCould not find versioned identity endpoints when attempting to authenticate.","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"69d632c59519d5728fd6e9338ce1f9bf6294f190","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"dc9b2c7e_5e0cf89b","updated":"2025-07-16 01:13:20.000000000","message":"recheck nova-ceph-multistore job is unblocked now","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"dea0cca776d9b97023ca595d8a0cc2da940dab6d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"642119c2_56885f6e","updated":"2025-07-30 19:33:13.000000000","message":"fixing doc comment in followup https://review.opendev.org/c/openstack/nova/+/956189/","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b5eb1cd386c3ed81985771eb1b7ac06d2d4bded4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"7a9490e0_de0cd699","updated":"2025-07-23 17:28:56.000000000","message":"i have not looked at the test covergae in any detail but loking ath teh policy changes, comments and release notes/docs update i think this all looks good\n\nill try an take a closer look at the unit test changes tomorrow but +1 for now","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1554d1ad4f222023d4d90a836a2a50f0f9bd723c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"bda67322_9e1cdd75","updated":"2025-07-30 18:17:07.000000000","message":"so the existing cold migrate (confirm/revert) and live migrate test are updated by \nhttps://review.opendev.org/c/openstack/tempest/+/953850\n\nand then in https://review.opendev.org/c/openstack/tempest/+/953847/16/tempest/api/compute/admin/test_live_migration.py\n\nyou have added additional live migration test to assert that project managers can list the migrations for there project.\n\nas part of that you also added response schemas for list live migrations\n\nhttps://review.opendev.org/c/openstack/tempest/+/953847/16/tempest/lib/api_schema/response/compute/v2_1/servers.py\n\n\nthe new test also has code to detach if the migration is still running and try to force complete it.\n\ntow meta comment for the tempest change.\n\nshould that be under the admin tests?\n\nhttps://review.opendev.org/c/openstack/tempest/+/953847/16/tempest/api/compute/admin/test_live_migration.py\n\nthe other is have you considered adding a version that aborts the migration instead of force completing.\n\nnighter are blocking but just said i would mention it.\n\nover all i think this looks good. we could perhaps improve the wording of the release note a bit but im not sure we need to block on that.\n\n+2 for now so you can respond to the commend im happy to add +w if you agree.","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f21d8ecb7c9c5f48e5cd52aabd1f54c08c13bfc8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"87a443c2_1091e407","in_reply_to":"433e702c_ba0b665e","updated":"2025-07-30 19:01:31.000000000","message":"ack, ya i dont link cause high load in the guest to test abort.\nim happy with the level of coverage you have added.","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ca2873fbd57e7a5eb77e7be5d5bda186d503b296","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"433e702c_ba0b665e","in_reply_to":"bda67322_9e1cdd75","updated":"2025-07-30 18:28:30.000000000","message":"\u003e so the existing cold migrate (confirm/revert) and live migrate test are updated by \n\u003e https://review.opendev.org/c/openstack/tempest/+/953850\n\u003e \n\u003e and then in https://review.opendev.org/c/openstack/tempest/+/953847/16/tempest/api/compute/admin/test_live_migration.py\n\u003e \n\u003e you have added additional live migration test to assert that project managers can list the migrations for there project.\n\u003e \n\u003e as part of that you also added response schemas for list live migrations\n\u003e \n\u003e https://review.opendev.org/c/openstack/tempest/+/953847/16/tempest/lib/api_schema/response/compute/v2_1/servers.py\n\u003e \n\u003e \n\u003e the new test also has code to detach if the migration is still running and try to force complete it.\n\u003e \n\u003e tow meta comment for the tempest change.\n\u003e \n\u003e should that be under the admin tests?\n\nYes, I checked on it but there are some operation we need to do as admin in those tests. For exmaple getting host for server which only admin can get - https://github.com/openstack/tempest/blob/6158cc5cdc922dfdd67236766f0fdb8b36ff3703/tempest/api/compute/base.py#L712\n\nThat is the reason to keep them under admin test.\n\n\u003e \n\u003e https://review.opendev.org/c/openstack/tempest/+/953847/16/tempest/api/compute/admin/test_live_migration.py\n\u003e \n\u003e the other is have you considered adding a version that aborts the migration instead of force completing.\n\nYes, I tried, but as per the test flow, it seems we were not able to reach to in-progress migration to abort. Unless we really add a heavily memory-loaded server to migrate.\n- https://review.opendev.org/c/openstack/tempest/+/953847/6/tempest/api/compute/admin/test_live_migration.py#537\n\n\u003e \n\u003e nighter are blocking but just said i would mention it.\n\u003e \n\u003e over all i think this looks good. we could perhaps improve the wording of the release note a bit but im not sure we need to block on that.\n\nack, will fix those.\n\n\u003e \n\u003e +2 for now so you can respond to the commend im happy to add +w if you agree.","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"}],"doc/source/configuration/policy-concepts.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1628c3c90ad1926b26b52b56c630d2b9cbd4d8ea","unresolved":true,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":".. rubric:: ``manager``"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"project-manager is denoted by someone with the manager role on a project. It is"},{"line_number":221,"context_line":"intended to be used in project-level management APIs and perform more"},{"line_number":222,"context_line":"privileged operations than project-member on its project resources. It inherits"},{"line_number":223,"context_line":"all the permissions of a project-member and project-reader. A good example for"}],"source_content_type":"text/x-rst","patch_set":9,"id":"2c99b7ad_196b5979","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":15},"updated":"2025-07-16 16:01:01.000000000","message":"nit: IMO these make sense as literals\n\n```suggestion\n``project-manager`` is denoted as someone with the ``manager`` role on a project. It is\n```\n\nditto for the rest of these.","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"95701d2c4323820224fcc9c54b169681d44c589a","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":".. rubric:: ``manager``"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"project-manager is denoted by someone with the manager role on a project. It is"},{"line_number":221,"context_line":"intended to be used in project-level management APIs and perform more"},{"line_number":222,"context_line":"privileged operations than project-member on its project resources. It inherits"},{"line_number":223,"context_line":"all the permissions of a project-member and project-reader. A good example for"}],"source_content_type":"text/x-rst","patch_set":9,"id":"30b8cd1a_3faf9ee4","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":15},"in_reply_to":"2c99b7ad_196b5979","updated":"2025-07-22 21:49:59.000000000","message":"Done. defining it as \u0027project_manager\u0027 to be consistent with code","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1628c3c90ad1926b26b52b56c630d2b9cbd4d8ea","unresolved":true,"context_lines":[{"line_number":221,"context_line":"intended to be used in project-level management APIs and perform more"},{"line_number":222,"context_line":"privileged operations than project-member on its project resources. It inherits"},{"line_number":223,"context_line":"all the permissions of a project-member and project-reader. A good example for"},{"line_number":224,"context_line":"project-manager task is migrate (cold or live) their server without specifying"},{"line_number":225,"context_line":"the host. The project-manager will be able to list their own project"},{"line_number":226,"context_line":"migrations."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"project-manager persona in the policy check string:"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":".. code-block:: python"}],"source_content_type":"text/x-rst","patch_set":9,"id":"4dbcc909_882ed788","line":227,"range":{"start_line":224,"start_character":16,"end_line":227,"end_character":1},"updated":"2025-07-16 16:01:01.000000000","message":"This needs rewording. I\u0027m not sure what you\u0027re trying to say, unfortunately.","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"95701d2c4323820224fcc9c54b169681d44c589a","unresolved":false,"context_lines":[{"line_number":221,"context_line":"intended to be used in project-level management APIs and perform more"},{"line_number":222,"context_line":"privileged operations than project-member on its project resources. It inherits"},{"line_number":223,"context_line":"all the permissions of a project-member and project-reader. A good example for"},{"line_number":224,"context_line":"project-manager task is migrate (cold or live) their server without specifying"},{"line_number":225,"context_line":"the host. The project-manager will be able to list their own project"},{"line_number":226,"context_line":"migrations."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"project-manager persona in the policy check string:"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":".. code-block:: python"}],"source_content_type":"text/x-rst","patch_set":9,"id":"60d4e7cd_9d0b65ec","line":227,"range":{"start_line":224,"start_character":16,"end_line":227,"end_character":1},"in_reply_to":"4dbcc909_882ed788","updated":"2025-07-22 21:49:59.000000000","message":"Done","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1628c3c90ad1926b26b52b56c630d2b9cbd4d8ea","unresolved":true,"context_lines":[{"line_number":225,"context_line":"the host. The project-manager will be able to list their own project"},{"line_number":226,"context_line":"migrations."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"project-manager persona in the policy check string:"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":".. code-block:: python"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    policy.RuleDefault("},{"line_number":233,"context_line":"        name\u003d\"project_manager\","},{"line_number":234,"context_line":"        check_str\u003d\"role:manager and project_id:%(project_id)s\","},{"line_number":235,"context_line":"        description\u003d\"Default rule for Project level management APIs.\""},{"line_number":236,"context_line":"    )"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"Using it in policy rule (with admin + manager access): (because we want to keep"},{"line_number":239,"context_line":"legacy admin behavior, admin role gets access to the project level management"},{"line_number":240,"context_line":"APIs.)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":".. code-block:: python"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":245,"context_line":"        name\u003d\u0027os_compute_api:os-migrate-server:migrate\u0027,"},{"line_number":246,"context_line":"        check_str\u003d\u0027role:admin or (\u0027 + \u0027role:manager and project_id:%(project_id)s)\u0027,"},{"line_number":247,"context_line":"        description\u003d\u0027Cold migrate a server without specifying a host\u0027,"},{"line_number":248,"context_line":"        operations\u003d["},{"line_number":249,"context_line":"            {"},{"line_number":250,"context_line":"                \u0027method\u0027: \u0027POST\u0027,"},{"line_number":251,"context_line":"                \u0027path\u0027: \u0027/servers/{server_id}/action (migrate)\u0027"},{"line_number":252,"context_line":"            }"},{"line_number":253,"context_line":"        ],"},{"line_number":254,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":255,"context_line":"    )"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"OR"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":".. code-block:: python"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    policy.RuleDefault("},{"line_number":262,"context_line":"        name\u003d\"admin_api\","},{"line_number":263,"context_line":"        check_str\u003d\"role:admin\","},{"line_number":264,"context_line":"        description\u003d\"Default rule for administrative APIs.\""},{"line_number":265,"context_line":"    )"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":268,"context_line":"        name\u003d\u0027os_compute_api:os-migrate-server:migrate\u0027,"},{"line_number":269,"context_line":"        check_str\u003d\u0027rule_admin or rule:project_manager"},{"line_number":270,"context_line":"        description\u003d\u0027Cold migrate a server without specifying a host\u0027,"},{"line_number":271,"context_line":"        operations\u003d["},{"line_number":272,"context_line":"            {"},{"line_number":273,"context_line":"                \u0027method\u0027: \u0027POST\u0027,"},{"line_number":274,"context_line":"                \u0027path\u0027: \u0027/servers/{server_id}/action (migrate)\u0027"},{"line_number":275,"context_line":"            }"},{"line_number":276,"context_line":"        ],"},{"line_number":277,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":278,"context_line":"    )"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"\u0027project_id:%(project_id)s\u0027 in the check_str is important to restrict the"},{"line_number":281,"context_line":"access within the requested project."},{"line_number":282,"context_line":""},{"line_number":283,"context_line":".. rubric:: ``admin``"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"This role is to perform the admin level write operations. Nova policies are"}],"source_content_type":"text/x-rst","patch_set":9,"id":"d49f706f_56558dc0","line":282,"range":{"start_line":228,"start_character":0,"end_line":282,"end_character":1},"updated":"2025-07-16 16:01:01.000000000","message":"I don\u0027t believe this belongs here, since we don\u0027t expect deployers to modify Python code. This would be better placed in the contributor guide, IMO.","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"95701d2c4323820224fcc9c54b169681d44c589a","unresolved":false,"context_lines":[{"line_number":225,"context_line":"the host. The project-manager will be able to list their own project"},{"line_number":226,"context_line":"migrations."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"project-manager persona in the policy check string:"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":".. code-block:: python"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    policy.RuleDefault("},{"line_number":233,"context_line":"        name\u003d\"project_manager\","},{"line_number":234,"context_line":"        check_str\u003d\"role:manager and project_id:%(project_id)s\","},{"line_number":235,"context_line":"        description\u003d\"Default rule for Project level management APIs.\""},{"line_number":236,"context_line":"    )"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"Using it in policy rule (with admin + manager access): (because we want to keep"},{"line_number":239,"context_line":"legacy admin behavior, admin role gets access to the project level management"},{"line_number":240,"context_line":"APIs.)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":".. code-block:: python"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":245,"context_line":"        name\u003d\u0027os_compute_api:os-migrate-server:migrate\u0027,"},{"line_number":246,"context_line":"        check_str\u003d\u0027role:admin or (\u0027 + \u0027role:manager and project_id:%(project_id)s)\u0027,"},{"line_number":247,"context_line":"        description\u003d\u0027Cold migrate a server without specifying a host\u0027,"},{"line_number":248,"context_line":"        operations\u003d["},{"line_number":249,"context_line":"            {"},{"line_number":250,"context_line":"                \u0027method\u0027: \u0027POST\u0027,"},{"line_number":251,"context_line":"                \u0027path\u0027: \u0027/servers/{server_id}/action (migrate)\u0027"},{"line_number":252,"context_line":"            }"},{"line_number":253,"context_line":"        ],"},{"line_number":254,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":255,"context_line":"    )"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"OR"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":".. code-block:: python"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    policy.RuleDefault("},{"line_number":262,"context_line":"        name\u003d\"admin_api\","},{"line_number":263,"context_line":"        check_str\u003d\"role:admin\","},{"line_number":264,"context_line":"        description\u003d\"Default rule for administrative APIs.\""},{"line_number":265,"context_line":"    )"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":268,"context_line":"        name\u003d\u0027os_compute_api:os-migrate-server:migrate\u0027,"},{"line_number":269,"context_line":"        check_str\u003d\u0027rule_admin or rule:project_manager"},{"line_number":270,"context_line":"        description\u003d\u0027Cold migrate a server without specifying a host\u0027,"},{"line_number":271,"context_line":"        operations\u003d["},{"line_number":272,"context_line":"            {"},{"line_number":273,"context_line":"                \u0027method\u0027: \u0027POST\u0027,"},{"line_number":274,"context_line":"                \u0027path\u0027: \u0027/servers/{server_id}/action (migrate)\u0027"},{"line_number":275,"context_line":"            }"},{"line_number":276,"context_line":"        ],"},{"line_number":277,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":278,"context_line":"    )"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"\u0027project_id:%(project_id)s\u0027 in the check_str is important to restrict the"},{"line_number":281,"context_line":"access within the requested project."},{"line_number":282,"context_line":""},{"line_number":283,"context_line":".. rubric:: ``admin``"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"This role is to perform the admin level write operations. Nova policies are"}],"source_content_type":"text/x-rst","patch_set":9,"id":"eeab88f1_7e45bb51","line":282,"range":{"start_line":228,"start_character":0,"end_line":282,"end_character":1},"in_reply_to":"d49f706f_56558dc0","updated":"2025-07-22 21:49:59.000000000","message":"done. As followup, I will modify the other existing role doc also and move these code details in contributor doc.","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1628c3c90ad1926b26b52b56c630d2b9cbd4d8ea","unresolved":true,"context_lines":[{"line_number":314,"context_line":"   service, Live migrate server etc."},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"#. PROJECT_MANAGER: ``manager`` role on ``project`` scope. This is used to"},{"line_number":317,"context_line":"   perform project management operations within project. For example: Migrate"},{"line_number":318,"context_line":"   a server."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"#. PROJECT_MEMBER: ``member`` role on ``project`` scope. This is used to perform"}],"source_content_type":"text/x-rst","patch_set":9,"id":"6bac0a2a_2fbadfe7","line":317,"range":{"start_line":317,"start_character":70,"end_line":317,"end_character":77},"updated":"2025-07-16 16:01:01.000000000","message":"```suggestion\n   perform project management operations within project. For example: migrate\n```","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"95701d2c4323820224fcc9c54b169681d44c589a","unresolved":false,"context_lines":[{"line_number":314,"context_line":"   service, Live migrate server etc."},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"#. PROJECT_MANAGER: ``manager`` role on ``project`` scope. This is used to"},{"line_number":317,"context_line":"   perform project management operations within project. For example: Migrate"},{"line_number":318,"context_line":"   a server."},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"#. PROJECT_MEMBER: ``member`` role on ``project`` scope. This is used to perform"}],"source_content_type":"text/x-rst","patch_set":9,"id":"439bd4fe_bcc1a71f","line":317,"range":{"start_line":317,"start_character":70,"end_line":317,"end_character":77},"in_reply_to":"6bac0a2a_2fbadfe7","updated":"2025-07-22 21:49:59.000000000","message":"Done","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1628c3c90ad1926b26b52b56c630d2b9cbd4d8ea","unresolved":true,"context_lines":[{"line_number":327,"context_line":"   Such policy rules are default to project management level APIs and along"},{"line_number":328,"context_line":"   with ``manager`` role, legacy admin can continue to access those APIs."},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"#. PROJECT_MEMBER_OR_ADMIN: ``admin`` or ``member`` role on ``project`` scope.    Such policy rules are default to most of the owner level APIs and align"},{"line_number":331,"context_line":"   with ``member`` role legacy admin can continue to access those APIs."},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"#. PROJECT_READER_OR_ADMIN: ``admin`` or ``reader`` role on ``project`` scope.    Such policy rules are default to most of the read only APIs so that legacy"}],"source_content_type":"text/x-rst","patch_set":9,"id":"110259bf_7f0f266a","line":330,"updated":"2025-07-16 16:01:01.000000000","message":"nit: Would be good to rewrap this line while you\u0027re here. Ditto below.","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"95701d2c4323820224fcc9c54b169681d44c589a","unresolved":false,"context_lines":[{"line_number":327,"context_line":"   Such policy rules are default to project management level APIs and along"},{"line_number":328,"context_line":"   with ``manager`` role, legacy admin can continue to access those APIs."},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"#. PROJECT_MEMBER_OR_ADMIN: ``admin`` or ``member`` role on ``project`` scope.    Such policy rules are default to most of the owner level APIs and align"},{"line_number":331,"context_line":"   with ``member`` role legacy admin can continue to access those APIs."},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"#. PROJECT_READER_OR_ADMIN: ``admin`` or ``reader`` role on ``project`` scope.    Such policy rules are default to most of the read only APIs so that legacy"}],"source_content_type":"text/x-rst","patch_set":9,"id":"a00791d5_ca344628","line":330,"in_reply_to":"110259bf_7f0f266a","updated":"2025-07-22 21:49:59.000000000","message":"Done","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1628c3c90ad1926b26b52b56c630d2b9cbd4d8ea","unresolved":true,"context_lines":[{"line_number":423,"context_line":"|                    +--------------------------+------------------+----------+"},{"line_number":424,"context_line":"|                    |-\u003ePROJECT_READER_OR_ADMIN |Project resource  |[project] |"},{"line_number":425,"context_line":"|                    |                          |Read              |          |"},{"line_number":426,"context_line":"+--------------------+--------------------------+------------------+----------+"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"We expect all deployments to migrate to the new policy by OpenStack 2023.1"},{"line_number":429,"context_line":"(Nova 27.0.0) release so that we can remove the support of old policies."}],"source_content_type":"text/x-rst","patch_set":9,"id":"4b48bd46_fff7b3dc","line":426,"updated":"2025-07-16 16:01:01.000000000","message":"Seeing as you\u0027re rewriting this, could we use a `list-table` instead? It would be easier to modify in the future\n\nhttps://docutils.sourceforge.io/docs/ref/rst/directives.html#list-table","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"95701d2c4323820224fcc9c54b169681d44c589a","unresolved":false,"context_lines":[{"line_number":423,"context_line":"|                    +--------------------------+------------------+----------+"},{"line_number":424,"context_line":"|                    |-\u003ePROJECT_READER_OR_ADMIN |Project resource  |[project] |"},{"line_number":425,"context_line":"|                    |                          |Read              |          |"},{"line_number":426,"context_line":"+--------------------+--------------------------+------------------+----------+"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"We expect all deployments to migrate to the new policy by OpenStack 2023.1"},{"line_number":429,"context_line":"(Nova 27.0.0) release so that we can remove the support of old policies."}],"source_content_type":"text/x-rst","patch_set":9,"id":"96c59ada_f6103108","line":426,"in_reply_to":"4b48bd46_fff7b3dc","updated":"2025-07-22 21:49:59.000000000","message":"sure, Done","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1628c3c90ad1926b26b52b56c630d2b9cbd4d8ea","unresolved":true,"context_lines":[{"line_number":425,"context_line":"|                    |                          |Read              |          |"},{"line_number":426,"context_line":"+--------------------+--------------------------+------------------+----------+"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"We expect all deployments to migrate to the new policy by OpenStack 2023.1"},{"line_number":429,"context_line":"(Nova 27.0.0) release so that we can remove the support of old policies."}],"source_content_type":"text/x-rst","patch_set":9,"id":"108dbfb5_37b1a55d","line":428,"updated":"2025-07-16 16:01:01.000000000","message":"We probably want to remove this note in a follow-up, right? It doesn\u0027t make sense anymore.","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"95701d2c4323820224fcc9c54b169681d44c589a","unresolved":false,"context_lines":[{"line_number":425,"context_line":"|                    |                          |Read              |          |"},{"line_number":426,"context_line":"+--------------------+--------------------------+------------------+----------+"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"We expect all deployments to migrate to the new policy by OpenStack 2023.1"},{"line_number":429,"context_line":"(Nova 27.0.0) release so that we can remove the support of old policies."}],"source_content_type":"text/x-rst","patch_set":9,"id":"245db0a6_b2d1a51c","line":428,"in_reply_to":"108dbfb5_37b1a55d","updated":"2025-07-22 21:49:59.000000000","message":"we still have old defaults and there might be some deployment using those. I can modify this to add manager role usage also.","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"16dc34ff7ede7118a86176baa901a383f92bb98a","unresolved":true,"context_lines":[{"line_number":219,"context_line":""},{"line_number":220,"context_line":"``project_manager`` is denoted by someone with the manager role on a project."},{"line_number":221,"context_line":"It is intended to be used in project-level management APIs and perform more"},{"line_number":222,"context_line":"privileged operations than ``project_member`` on its project resources. It"},{"line_number":223,"context_line":"inherits all the permissions of a ``project_member`` and ``project_reader``."},{"line_number":224,"context_line":"For example, ``project_manager`` can migrate (cold or live) their server"},{"line_number":225,"context_line":"without specifying the host. Further, the ``project_manager`` will be able"}],"source_content_type":"text/x-rst","patch_set":10,"id":"6d30e0b6_e2346ffc","line":222,"updated":"2025-07-29 16:13:39.000000000","message":"```suggestion\nprivileged operations on its project resources than ``project_member``. It\n```","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ca2873fbd57e7a5eb77e7be5d5bda186d503b296","unresolved":true,"context_lines":[{"line_number":219,"context_line":""},{"line_number":220,"context_line":"``project_manager`` is denoted by someone with the manager role on a project."},{"line_number":221,"context_line":"It is intended to be used in project-level management APIs and perform more"},{"line_number":222,"context_line":"privileged operations than ``project_member`` on its project resources. It"},{"line_number":223,"context_line":"inherits all the permissions of a ``project_member`` and ``project_reader``."},{"line_number":224,"context_line":"For example, ``project_manager`` can migrate (cold or live) their server"},{"line_number":225,"context_line":"without specifying the host. Further, the ``project_manager`` will be able"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9a60e6d8_e8e313ee","line":222,"in_reply_to":"6d30e0b6_e2346ffc","updated":"2025-07-30 18:28:30.000000000","message":"Acknowledged","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"dea0cca776d9b97023ca595d8a0cc2da940dab6d","unresolved":false,"context_lines":[{"line_number":219,"context_line":""},{"line_number":220,"context_line":"``project_manager`` is denoted by someone with the manager role on a project."},{"line_number":221,"context_line":"It is intended to be used in project-level management APIs and perform more"},{"line_number":222,"context_line":"privileged operations than ``project_member`` on its project resources. It"},{"line_number":223,"context_line":"inherits all the permissions of a ``project_member`` and ``project_reader``."},{"line_number":224,"context_line":"For example, ``project_manager`` can migrate (cold or live) their server"},{"line_number":225,"context_line":"without specifying the host. Further, the ``project_manager`` will be able"}],"source_content_type":"text/x-rst","patch_set":10,"id":"d038aa92_142c469f","line":222,"in_reply_to":"9a60e6d8_e8e313ee","updated":"2025-07-30 19:33:13.000000000","message":"Done","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b5eb1cd386c3ed81985771eb1b7ac06d2d4bded4","unresolved":true,"context_lines":[{"line_number":221,"context_line":"It is intended to be used in project-level management APIs and perform more"},{"line_number":222,"context_line":"privileged operations than ``project_member`` on its project resources. It"},{"line_number":223,"context_line":"inherits all the permissions of a ``project_member`` and ``project_reader``."},{"line_number":224,"context_line":"For example, ``project_manager`` can migrate (cold or live) their server"},{"line_number":225,"context_line":"without specifying the host. Further, the ``project_manager`` will be able"},{"line_number":226,"context_line":"to list their own project migrations."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"``project_manager`` persona in Nova policy rule (it is defined as"},{"line_number":229,"context_line":"``project_manager_api`` in policy yaml) looks like:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"90f4f163_cf21a896","line":226,"range":{"start_line":224,"start_character":0,"end_line":226,"end_character":37},"updated":"2025-07-23 17:28:56.000000000","message":"this is just a wording nit but i might phrase it like this\n\n```suggestion\nFor example, a ``project_manager`` can migrate (cold or live) their servers\nwithout specifying the host. Further, a ``project_manager`` will be able\nto list migrations related to there own project.\n```\n\ni would personally prefer `a`rather than `the` as there is no implciation that there shoudl only be 1 use with the manager role on a given project.","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"dea0cca776d9b97023ca595d8a0cc2da940dab6d","unresolved":false,"context_lines":[{"line_number":221,"context_line":"It is intended to be used in project-level management APIs and perform more"},{"line_number":222,"context_line":"privileged operations than ``project_member`` on its project resources. It"},{"line_number":223,"context_line":"inherits all the permissions of a ``project_member`` and ``project_reader``."},{"line_number":224,"context_line":"For example, ``project_manager`` can migrate (cold or live) their server"},{"line_number":225,"context_line":"without specifying the host. Further, the ``project_manager`` will be able"},{"line_number":226,"context_line":"to list their own project migrations."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"``project_manager`` persona in Nova policy rule (it is defined as"},{"line_number":229,"context_line":"``project_manager_api`` in policy yaml) looks like:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"6ef13e9f_3c75a47b","line":226,"range":{"start_line":224,"start_character":0,"end_line":226,"end_character":37},"in_reply_to":"62005f9a_040beb03","updated":"2025-07-30 19:33:13.000000000","message":"Done","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ca2873fbd57e7a5eb77e7be5d5bda186d503b296","unresolved":true,"context_lines":[{"line_number":221,"context_line":"It is intended to be used in project-level management APIs and perform more"},{"line_number":222,"context_line":"privileged operations than ``project_member`` on its project resources. It"},{"line_number":223,"context_line":"inherits all the permissions of a ``project_member`` and ``project_reader``."},{"line_number":224,"context_line":"For example, ``project_manager`` can migrate (cold or live) their server"},{"line_number":225,"context_line":"without specifying the host. Further, the ``project_manager`` will be able"},{"line_number":226,"context_line":"to list their own project migrations."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"``project_manager`` persona in Nova policy rule (it is defined as"},{"line_number":229,"context_line":"``project_manager_api`` in policy yaml) looks like:"}],"source_content_type":"text/x-rst","patch_set":10,"id":"62005f9a_040beb03","line":226,"range":{"start_line":224,"start_character":0,"end_line":226,"end_character":37},"in_reply_to":"90f4f163_cf21a896","updated":"2025-07-30 18:28:30.000000000","message":"Acknowledged","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b5eb1cd386c3ed81985771eb1b7ac06d2d4bded4","unresolved":false,"context_lines":[{"line_number":384,"context_line":""},{"line_number":385,"context_line":"Below table show how legacy rules are mapped to new rules:"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":".. list-table::"},{"line_number":388,"context_line":"   :widths: 25 45 15 15"},{"line_number":389,"context_line":"   :header-rows: 1"},{"line_number":390,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"549c2553_47ae1e64","line":387,"updated":"2025-07-23 17:28:56.000000000","message":"+1 to using the sphinx directive instead of manually creating the table inline.\n\nwe have some tables in watcher that we need to convert to using this as well.","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"}],"nova/api/openstack/compute/migrate_server.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43d3a133294b04968bd22e4ce88e2bb243b5b8d1","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        else:"},{"line_number":116,"context_line":"            context.can(ms_policies.POLICY_ROOT % \u0027migrate_live\u0027,"},{"line_number":117,"context_line":"                        target\u003d{\u0027project_id\u0027: instance.project_id})"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        block_migration \u003d body[\"os-migrateLive\"][\"block_migration\"]"},{"line_number":120,"context_line":"        force \u003d None"},{"line_number":121,"context_line":"        async_ \u003d api_version_request.is_supported(req, \u00272.34\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"8e33fafe_c83477b4","line":118,"updated":"2025-07-09 20:01:04.000000000","message":"+1 for soem reaon i was expcting this to be using a decorator or soemthign to decide but a simple if is more then sufficient.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"047dedbb60848a98a87c065587fc4c2c6ab3664b","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        else:"},{"line_number":116,"context_line":"            context.can(ms_policies.POLICY_ROOT % \u0027migrate_live\u0027,"},{"line_number":117,"context_line":"                        target\u003d{\u0027project_id\u0027: instance.project_id})"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        block_migration \u003d body[\"os-migrateLive\"][\"block_migration\"]"},{"line_number":120,"context_line":"        force \u003d None"},{"line_number":121,"context_line":"        async_ \u003d api_version_request.is_supported(req, \u00272.34\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"d9f20867_e6aec12f","line":118,"in_reply_to":"8e33fafe_c83477b4","updated":"2025-07-10 17:21:19.000000000","message":"ack","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"}],"nova/api/openstack/compute/migrations.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"00db1672502feb24e958fde8fc572e1d31092c0f","unresolved":true,"context_lines":[{"line_number":77,"context_line":"                obj[\u0027dest_host\u0027] \u003d None"},{"line_number":78,"context_line":"                obj[\u0027dest_node\u0027] \u003d None"},{"line_number":79,"context_line":"                obj[\u0027source_compute\u0027] \u003d None"},{"line_number":80,"context_line":"                obj[\u0027source_node\u0027] \u003d None"},{"line_number":81,"context_line":"            # NOTE(Shaohe Feng) above version 2.23, add migration_type for all"},{"line_number":82,"context_line":"            # kinds of migration, but we only add links just for in-progress"},{"line_number":83,"context_line":"            # live-migration."}],"source_content_type":"text/x-python","patch_set":7,"id":"cd182349_e36c103c","line":80,"updated":"2025-06-30 18:23:37.000000000","message":"hum there is not soruce host in the respocne.\nthat anoying but i guess dest_compute and dest_host hold the same info\nso source_compute woudl be the saem as source_host anyway.\n\ni wonder fi we cant to clean that up in the future adn remvoe dest_host","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"047dedbb60848a98a87c065587fc4c2c6ab3664b","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                obj[\u0027dest_host\u0027] \u003d None"},{"line_number":78,"context_line":"                obj[\u0027dest_node\u0027] \u003d None"},{"line_number":79,"context_line":"                obj[\u0027source_compute\u0027] \u003d None"},{"line_number":80,"context_line":"                obj[\u0027source_node\u0027] \u003d None"},{"line_number":81,"context_line":"            # NOTE(Shaohe Feng) above version 2.23, add migration_type for all"},{"line_number":82,"context_line":"            # kinds of migration, but we only add links just for in-progress"},{"line_number":83,"context_line":"            # live-migration."}],"source_content_type":"text/x-python","patch_set":7,"id":"5d7ddf68_820cfedd","line":80,"in_reply_to":"1c1785ba_73dc99dc","updated":"2025-07-10 17:21:19.000000000","message":"yeah, there is chance of improvement. let me add a todo here so that if we touch this API in microvesion we can fix this too.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43d3a133294b04968bd22e4ce88e2bb243b5b8d1","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                obj[\u0027dest_host\u0027] \u003d None"},{"line_number":78,"context_line":"                obj[\u0027dest_node\u0027] \u003d None"},{"line_number":79,"context_line":"                obj[\u0027source_compute\u0027] \u003d None"},{"line_number":80,"context_line":"                obj[\u0027source_node\u0027] \u003d None"},{"line_number":81,"context_line":"            # NOTE(Shaohe Feng) above version 2.23, add migration_type for all"},{"line_number":82,"context_line":"            # kinds of migration, but we only add links just for in-progress"},{"line_number":83,"context_line":"            # live-migration."}],"source_content_type":"text/x-python","patch_set":7,"id":"1c1785ba_73dc99dc","line":80,"in_reply_to":"cd182349_e36c103c","updated":"2025-07-09 20:01:04.000000000","message":"Acknowledged","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43d3a133294b04968bd22e4ce88e2bb243b5b8d1","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        # NOTE(gmann): If the user request all or cross project migrations"},{"line_number":105,"context_line":"        # (passing other project id or not passing project id itself) then"},{"line_number":106,"context_line":"        # policy needs to permit the same otherwise it will raise 403 error."},{"line_number":107,"context_line":"        # This behavior can be improved by returning their own project"},{"line_number":108,"context_line":"        # migrations if the policy does not permit to list all or cross"},{"line_number":109,"context_line":"        # project migrations but that will be API behavior change and"},{"line_number":110,"context_line":"        # needs to be done with microversion bump."},{"line_number":111,"context_line":"        if not project_id or project_id !\u003d context.project_id:"},{"line_number":112,"context_line":"            context.can(migrations_policies.POLICY_ROOT % \u0027index:all_projects\u0027)"},{"line_number":113,"context_line":"        add_host \u003d context.can(migrations_policies.POLICY_ROOT % \u0027index:host\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3928f716_680577f3","line":110,"range":{"start_line":107,"start_character":0,"end_line":110,"end_character":50},"updated":"2025-07-09 20:01:04.000000000","message":"this is basically saying in the future we can do\n```\nif not project_id:\n   project_id \u003d context.project_id\n```\n\nand make the project id optional by defaultign to yoru current project id\n\nbut that would need a new microveriosn.\n\ni agree that that woudl be valid at least for non admins.\n\nto supprot admin and ensuring that that continue to take the all project path we techinally need ot be a litte smarter and try the \n\n context.can(migrations_policies.POLICY_ROOT % \u0027index:all_projects\u0027)\n \n cehcke frist catch the execption if your not allowed for that and then default\n \n  project_id \u003d context.project_id\n \n but ya regardless fo how we implemnt that i ca see that being a nice enhancement eventually.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"047dedbb60848a98a87c065587fc4c2c6ab3664b","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        # NOTE(gmann): If the user request all or cross project migrations"},{"line_number":105,"context_line":"        # (passing other project id or not passing project id itself) then"},{"line_number":106,"context_line":"        # policy needs to permit the same otherwise it will raise 403 error."},{"line_number":107,"context_line":"        # This behavior can be improved by returning their own project"},{"line_number":108,"context_line":"        # migrations if the policy does not permit to list all or cross"},{"line_number":109,"context_line":"        # project migrations but that will be API behavior change and"},{"line_number":110,"context_line":"        # needs to be done with microversion bump."},{"line_number":111,"context_line":"        if not project_id or project_id !\u003d context.project_id:"},{"line_number":112,"context_line":"            context.can(migrations_policies.POLICY_ROOT % \u0027index:all_projects\u0027)"},{"line_number":113,"context_line":"        add_host \u003d context.can(migrations_policies.POLICY_ROOT % \u0027index:host\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba6b294a_6cb07722","line":110,"range":{"start_line":107,"start_character":0,"end_line":110,"end_character":50},"in_reply_to":"3928f716_680577f3","updated":"2025-07-10 17:21:19.000000000","message":"yeah, I think it is better to raise error in 2nd case where non-admin ask for other project migrations and policy does not allow. That will not confuse user that they got migrations but not for the requested project.\n\nIf no project_id is mentioned then it make sense to return their own projects migration. \n\nBut yes we can disucss it in spec when we will do this improvement.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b5eb1cd386c3ed81985771eb1b7ac06d2d4bded4","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            context.can(migrations_policies.POLICY_ROOT % \u0027index:all_projects\u0027)"},{"line_number":126,"context_line":"        add_host \u003d context.can(migrations_policies.POLICY_ROOT % \u0027index:host\u0027,"},{"line_number":127,"context_line":"                               fatal\u003dFalse)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        if \u0027changes-since\u0027 in search_opts:"},{"line_number":130,"context_line":"            if allow_changes_since:"},{"line_number":131,"context_line":"                search_opts[\u0027changes-since\u0027] \u003d timeutils.parse_isotime("}],"source_content_type":"text/x-python","patch_set":10,"id":"c2bdf96e_7140e3e9","line":128,"updated":"2025-07-23 17:28:56.000000000","message":"+1 to this and the other todo.","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"}],"nova/api/openstack/compute/server_migrations.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9efae70e290a121d090cff7b2ce7823b3bada503","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    migration,"},{"line_number":31,"context_line":"    include_uuid\u003dFalse,"},{"line_number":32,"context_line":"    include_user_project\u003dFalse,"},{"line_number":33,"context_line":"     show_host\u003dTrue):"},{"line_number":34,"context_line":"    \"\"\"Returns the desired output of the API from an object."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    From a Migrations\u0027s object this method returns the primitive"}],"source_content_type":"text/x-python","patch_set":4,"id":"689a4da1_b4bf5cae","line":33,"updated":"2025-06-24 08:44:50.000000000","message":"nit: can we keep the naming the same?\n\n```suggestion\n    include_host\u003dTrue,\n):\n```","commit_id":"470efebc5e382b4c25fbd3efb178964d84f19b50"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f58b5702c72ce21a4d8535b5e1763fce86e3e59f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    migration,"},{"line_number":31,"context_line":"    include_uuid\u003dFalse,"},{"line_number":32,"context_line":"    include_user_project\u003dFalse,"},{"line_number":33,"context_line":"     show_host\u003dTrue):"},{"line_number":34,"context_line":"    \"\"\"Returns the desired output of the API from an object."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    From a Migrations\u0027s object this method returns the primitive"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a37b603_2bca4b9f","line":33,"in_reply_to":"689a4da1_b4bf5cae","updated":"2025-06-25 01:40:08.000000000","message":"Done","commit_id":"470efebc5e382b4c25fbd3efb178964d84f19b50"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9efae70e290a121d090cff7b2ce7823b3bada503","unresolved":true,"context_lines":[{"line_number":59,"context_line":"        result[\u0027dest_host\u0027] \u003d migration.dest_host"},{"line_number":60,"context_line":"        result[\u0027dest_node\u0027] \u003d migration.dest_node"},{"line_number":61,"context_line":"        result[\u0027source_compute\u0027] \u003d migration.source_compute"},{"line_number":62,"context_line":"        result[\u0027source_node\u0027] \u003d migration.source_node"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    return result"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"195cf084_eaae2bd9","line":62,"updated":"2025-06-24 08:44:50.000000000","message":"Isn\u0027t this an API change? I would imagine it would be better to return `None` or to add a new microversion and refuse access to project members before this version?","commit_id":"470efebc5e382b4c25fbd3efb178964d84f19b50"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2c7ffd304a6161a6d53c355eb641e485b53b6882","unresolved":true,"context_lines":[{"line_number":59,"context_line":"        result[\u0027dest_host\u0027] \u003d migration.dest_host"},{"line_number":60,"context_line":"        result[\u0027dest_node\u0027] \u003d migration.dest_node"},{"line_number":61,"context_line":"        result[\u0027source_compute\u0027] \u003d migration.source_compute"},{"line_number":62,"context_line":"        result[\u0027source_node\u0027] \u003d migration.source_node"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    return result"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"4ff4d58d_13f5bf76","line":62,"in_reply_to":"195cf084_eaae2bd9","updated":"2025-06-24 08:45:26.000000000","message":"`s/member/manager/`","commit_id":"470efebc5e382b4c25fbd3efb178964d84f19b50"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f58b5702c72ce21a4d8535b5e1763fce86e3e59f","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        result[\u0027dest_host\u0027] \u003d migration.dest_host"},{"line_number":60,"context_line":"        result[\u0027dest_node\u0027] \u003d migration.dest_node"},{"line_number":61,"context_line":"        result[\u0027source_compute\u0027] \u003d migration.source_compute"},{"line_number":62,"context_line":"        result[\u0027source_node\u0027] \u003d migration.source_node"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    return result"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"946b0f28_c1381cb5","line":62,"in_reply_to":"4ff4d58d_13f5bf76","updated":"2025-06-25 01:40:08.000000000","message":"Yeah, you are right. We cannot change response fields without microversion; instead, only the value can be controlled by the policies. In other APIs, we do not include the field itself if the policy does not allow (host_status in GET servers, host, events in GET instance action APIs), but those are done via microversion bump so that there is no change in behavior for older microversions.\n\nFor now, I will go with your suggestion to return \u0027None\u0027, and if we endup doing microversion for this API, we can do the same here for consistency.","commit_id":"470efebc5e382b4c25fbd3efb178964d84f19b50"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43d3a133294b04968bd22e4ce88e2bb243b5b8d1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    # For backward compatibility, we always return the host fields in response"},{"line_number":41,"context_line":"    # but policy controls the value. To be consistent to other APIs, if the"},{"line_number":42,"context_line":"    # policy does not permit then we should not include these fields in"},{"line_number":43,"context_line":"    # response but that needs to be done with a new microversion."},{"line_number":44,"context_line":"    result \u003d {"},{"line_number":45,"context_line":"        \"created_at\": migration.created_at,"},{"line_number":46,"context_line":"        \"dest_compute\": None,"}],"source_content_type":"text/x-python","patch_set":7,"id":"64e852e2_9e33fb0c","line":43,"updated":"2025-07-09 20:01:04.000000000","message":"ok thats fair. i guess we can clean this up in the same microversion where we default to the tokens project if we dont specy one and its nto an admin.\n\nwe could also consier if we wanted a --all-project type quey arg i guess at that point too.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"047dedbb60848a98a87c065587fc4c2c6ab3664b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    # For backward compatibility, we always return the host fields in response"},{"line_number":41,"context_line":"    # but policy controls the value. To be consistent to other APIs, if the"},{"line_number":42,"context_line":"    # policy does not permit then we should not include these fields in"},{"line_number":43,"context_line":"    # response but that needs to be done with a new microversion."},{"line_number":44,"context_line":"    result \u003d {"},{"line_number":45,"context_line":"        \"created_at\": migration.created_at,"},{"line_number":46,"context_line":"        \"dest_compute\": None,"}],"source_content_type":"text/x-python","patch_set":7,"id":"235ccfbe_72d56cb6","line":43,"in_reply_to":"64e852e2_9e33fb0c","updated":"2025-07-10 17:21:19.000000000","message":"yeah, let me append these TODO to ref each other so that we can consider doing those together and along with source_host in migration response.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43d3a133294b04968bd22e4ce88e2bb243b5b8d1","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        result[\u0027dest_host\u0027] \u003d migration.dest_host"},{"line_number":70,"context_line":"        result[\u0027dest_node\u0027] \u003d migration.dest_node"},{"line_number":71,"context_line":"        result[\u0027source_compute\u0027] \u003d migration.source_compute"},{"line_number":72,"context_line":"        result[\u0027source_node\u0027] \u003d migration.source_node"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    return result"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"260fe3ea_7ee190e9","line":72,"updated":"2025-07-09 20:01:04.000000000","message":"we dont need a todo for this but if we have a new microversion i would\nalso take teh tieme to deduplciate/normalise thise","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"047dedbb60848a98a87c065587fc4c2c6ab3664b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        result[\u0027dest_host\u0027] \u003d migration.dest_host"},{"line_number":70,"context_line":"        result[\u0027dest_node\u0027] \u003d migration.dest_node"},{"line_number":71,"context_line":"        result[\u0027source_compute\u0027] \u003d migration.source_compute"},{"line_number":72,"context_line":"        result[\u0027source_node\u0027] \u003d migration.source_node"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    return result"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"0458cd78_8489f645","line":72,"in_reply_to":"260fe3ea_7ee190e9","updated":"2025-07-10 17:21:19.000000000","message":"yeah, i just commented to add a todo here and also on os-migration API. I will combine all those with each other ref.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1628c3c90ad1926b26b52b56c630d2b9cbd4d8ea","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    migration,"},{"line_number":31,"context_line":"    include_uuid\u003dFalse,"},{"line_number":32,"context_line":"    include_user_project\u003dFalse,"},{"line_number":33,"context_line":"    include_host\u003dTrue):"},{"line_number":34,"context_line":"    \"\"\"Returns the desired output of the API from an object."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    From a Migrations\u0027s object this method returns the primitive"}],"source_content_type":"text/x-python","patch_set":9,"id":"b94c2beb_319b814d","line":33,"updated":"2025-07-16 16:01:01.000000000","message":"nit:\n\n```suggestion\n    include_host\u003dTrue,\n):\n```","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"95701d2c4323820224fcc9c54b169681d44c589a","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    migration,"},{"line_number":31,"context_line":"    include_uuid\u003dFalse,"},{"line_number":32,"context_line":"    include_user_project\u003dFalse,"},{"line_number":33,"context_line":"    include_host\u003dTrue):"},{"line_number":34,"context_line":"    \"\"\"Returns the desired output of the API from an object."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    From a Migrations\u0027s object this method returns the primitive"}],"source_content_type":"text/x-python","patch_set":9,"id":"e03c8077_1e33805e","line":33,"in_reply_to":"b94c2beb_319b814d","updated":"2025-07-22 21:49:59.000000000","message":"Done","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"}],"nova/policies/base.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b5eb1cd386c3ed81985771eb1b7ac06d2d4bded4","unresolved":true,"context_lines":[{"line_number":57,"context_line":"# RULE_ADMIN_OR_OWNER|-\u003e PROJECT_MEMBER_OR_ADMIN  |Project resource| [project]"},{"line_number":58,"context_line":"#                    |                            |Write           |"},{"line_number":59,"context_line":"#                    |-\u003e PROJECT_READER_OR_ADMIN  |Project resource| [project]"},{"line_number":60,"context_line":"#                    |                            |Read            |"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"# NOTE(johngarbutt) The base rules here affect so many APIs the list"},{"line_number":63,"context_line":"# of related API operations has not been populated. It would be"}],"source_content_type":"text/x-python","patch_set":10,"id":"669fac93_0aed08b8","line":60,"updated":"2025-07-23 17:28:56.000000000","message":"if you respin you could also convert this to the sphinx directive to generate the table but im ok with his minimal change too.","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ca2873fbd57e7a5eb77e7be5d5bda186d503b296","unresolved":true,"context_lines":[{"line_number":57,"context_line":"# RULE_ADMIN_OR_OWNER|-\u003e PROJECT_MEMBER_OR_ADMIN  |Project resource| [project]"},{"line_number":58,"context_line":"#                    |                            |Write           |"},{"line_number":59,"context_line":"#                    |-\u003e PROJECT_READER_OR_ADMIN  |Project resource| [project]"},{"line_number":60,"context_line":"#                    |                            |Read            |"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"# NOTE(johngarbutt) The base rules here affect so many APIs the list"},{"line_number":63,"context_line":"# of related API operations has not been populated. It would be"}],"source_content_type":"text/x-python","patch_set":10,"id":"376cac3f_44e111fb","line":60,"in_reply_to":"669fac93_0aed08b8","updated":"2025-07-30 18:28:30.000000000","message":"Acknowledged","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"}],"nova/policies/migrate_server.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9efae70e290a121d090cff7b2ce7823b3bada503","unresolved":true,"context_lines":[{"line_number":60,"context_line":"        ],"},{"line_number":61,"context_line":"        scope_types\u003d[\u0027project\u0027]),"},{"line_number":62,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":63,"context_line":"        name\u003dPOLICY_ROOT % \u0027migrate_live\u0027,"},{"line_number":64,"context_line":"        check_str\u003dbase.ADMIN,"},{"line_number":65,"context_line":"        description\u003d\"Live migrate a server to a new host without a reboot \""},{"line_number":66,"context_line":"        \"without specifying a host.\","}],"source_content_type":"text/x-python","patch_set":4,"id":"cdda78db_e4f5c2d0","line":63,"updated":"2025-06-24 08:44:50.000000000","message":"Don\u0027t you need to rename this if you\u0027re deprecating the current name? If not, could we get a comment explaining what\u0027s happening?","commit_id":"470efebc5e382b4c25fbd3efb178964d84f19b50"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"77be9670b415530890e29f1e68c02c2ced281459","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        ],"},{"line_number":61,"context_line":"        scope_types\u003d[\u0027project\u0027]),"},{"line_number":62,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":63,"context_line":"        name\u003dPOLICY_ROOT % \u0027migrate_live\u0027,"},{"line_number":64,"context_line":"        check_str\u003dbase.ADMIN,"},{"line_number":65,"context_line":"        description\u003d\"Live migrate a server to a new host without a reboot \""},{"line_number":66,"context_line":"        \"without specifying a host.\","}],"source_content_type":"text/x-python","patch_set":4,"id":"1638bc7a_91ab3153","line":63,"in_reply_to":"733605f2_313c5151","updated":"2025-06-25 02:27:08.000000000","message":"Done","commit_id":"470efebc5e382b4c25fbd3efb178964d84f19b50"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f58b5702c72ce21a4d8535b5e1763fce86e3e59f","unresolved":true,"context_lines":[{"line_number":60,"context_line":"        ],"},{"line_number":61,"context_line":"        scope_types\u003d[\u0027project\u0027]),"},{"line_number":62,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":63,"context_line":"        name\u003dPOLICY_ROOT % \u0027migrate_live\u0027,"},{"line_number":64,"context_line":"        check_str\u003dbase.ADMIN,"},{"line_number":65,"context_line":"        description\u003d\"Live migrate a server to a new host without a reboot \""},{"line_number":66,"context_line":"        \"without specifying a host.\","}],"source_content_type":"text/x-python","patch_set":4,"id":"733605f2_313c5151","line":63,"in_reply_to":"cdda78db_e4f5c2d0","updated":"2025-06-25 01:40:08.000000000","message":"I do not want to rename it so that we do not break the existing deployment. And I have to add it in the deprecated to the new policy to handle the custom policy case (oslo.policy assign old policy overridden value to new policy also).\n\nI tried to explain the situation in DEPRECATED_REASON @L23 but let me add comment here also explicitly saying \u0027this existing policy still valid and not deprecated\u0027.","commit_id":"470efebc5e382b4c25fbd3efb178964d84f19b50"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43d3a133294b04968bd22e4ce88e2bb243b5b8d1","unresolved":true,"context_lines":[{"line_number":70,"context_line":"    # policy case) will not break."},{"line_number":71,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":72,"context_line":"        name\u003dPOLICY_ROOT % \u0027migrate_live\u0027,"},{"line_number":73,"context_line":"        check_str\u003dbase.ADMIN,"},{"line_number":74,"context_line":"        description\u003d\"Live migrate a server to a new host without a reboot \""},{"line_number":75,"context_line":"        \"without specifying a host.\","},{"line_number":76,"context_line":"        operations\u003d["},{"line_number":77,"context_line":"            {"},{"line_number":78,"context_line":"                \u0027method\u0027: \u0027POST\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"d296d50b_c9d52444","line":75,"range":{"start_line":73,"start_character":0,"end_line":75,"end_character":37},"updated":"2025-07-09 20:01:04.000000000","message":"```suggestion\n        check_str\u003dbase.Manager,\n        description\u003d\"Live migrate a server to a new host without \"\n        \"specifying a host.\",\n```\n\nim not sure why reboot was mention but by defintion live migrate means no reboots.\n\nlater\n----\nok you split this is a way i was not expecteing hence ^","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"226dfe7dfd90a822f8d48dbbb001c03369fc260a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    # policy case) will not break."},{"line_number":71,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":72,"context_line":"        name\u003dPOLICY_ROOT % \u0027migrate_live\u0027,"},{"line_number":73,"context_line":"        check_str\u003dbase.ADMIN,"},{"line_number":74,"context_line":"        description\u003d\"Live migrate a server to a new host without a reboot \""},{"line_number":75,"context_line":"        \"without specifying a host.\","},{"line_number":76,"context_line":"        operations\u003d["},{"line_number":77,"context_line":"            {"},{"line_number":78,"context_line":"                \u0027method\u0027: \u0027POST\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"db320703_a631c8ff","line":75,"range":{"start_line":73,"start_character":0,"end_line":75,"end_character":37},"in_reply_to":"d296d50b_c9d52444","updated":"2025-07-15 00:24:26.000000000","message":"Done","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43d3a133294b04968bd22e4ce88e2bb243b5b8d1","unresolved":true,"context_lines":[{"line_number":98,"context_line":"        # \u0027migrate_live\u0027 in policy.yaml. For details, refer to the above"},{"line_number":99,"context_line":"        # comment in the \u0027migrate_live\u0027 policy rule."},{"line_number":100,"context_line":"        deprecated_rule\u003dDEPRECATED_POLICY),"},{"line_number":101,"context_line":"]"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def list_rules():"}],"source_content_type":"text/x-python","patch_set":7,"id":"664f18ae_9579f184","line":101,"updated":"2025-07-09 20:01:04.000000000","message":"im not quite following why you are doign this change\n\nthis shoudl not be deprecated because live migration with a host shoudl still be admin only.\n\nhowever live migration without a host sould not be manager.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"6ae8550130f8ec888f8b22595773b09a84fd2928","unresolved":true,"context_lines":[{"line_number":98,"context_line":"        # \u0027migrate_live\u0027 in policy.yaml. For details, refer to the above"},{"line_number":99,"context_line":"        # comment in the \u0027migrate_live\u0027 policy rule."},{"line_number":100,"context_line":"        deprecated_rule\u003dDEPRECATED_POLICY),"},{"line_number":101,"context_line":"]"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def list_rules():"}],"source_content_type":"text/x-python","patch_set":7,"id":"297f73e1_ed5d27b4","line":101,"in_reply_to":"0dadcd77_714c43b4","updated":"2025-07-14 18:19:32.000000000","message":"sure, let me merge both. and if we get oslo.policy new way that can be done in followup.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"226dfe7dfd90a822f8d48dbbb001c03369fc260a","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        # \u0027migrate_live\u0027 in policy.yaml. For details, refer to the above"},{"line_number":99,"context_line":"        # comment in the \u0027migrate_live\u0027 policy rule."},{"line_number":100,"context_line":"        deprecated_rule\u003dDEPRECATED_POLICY),"},{"line_number":101,"context_line":"]"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def list_rules():"}],"source_content_type":"text/x-python","patch_set":7,"id":"074d873f_dc203b36","line":101,"in_reply_to":"297f73e1_ed5d27b4","updated":"2025-07-15 00:24:26.000000000","message":"Done","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f1a512d6a86e3f91f619ed3f40115ad71f2c6ecf","unresolved":true,"context_lines":[{"line_number":98,"context_line":"        # \u0027migrate_live\u0027 in policy.yaml. For details, refer to the above"},{"line_number":99,"context_line":"        # comment in the \u0027migrate_live\u0027 policy rule."},{"line_number":100,"context_line":"        deprecated_rule\u003dDEPRECATED_POLICY),"},{"line_number":101,"context_line":"]"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def list_rules():"}],"source_content_type":"text/x-python","patch_set":7,"id":"0dadcd77_714c43b4","line":101,"in_reply_to":"2deef0f5_b1a3d157","updated":"2025-07-14 17:48:45.000000000","message":"i would not block this patch on that change.\n\nwhat i would suggest is adding a follow up patch to update to the new ay if and only if oslo are ok with that.\n\nwhat was confusing me was why you split adding the new policy form adding it with the manager role.\n\nform my perspective we approved the later in the spec not the former so its only really valid to merge both together because i don\u0027t think we shoudl have the new polices with out defaulting them to manager as appropriate.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f959780d7b612c8ed6c7759223c6d8a226d76be6","unresolved":true,"context_lines":[{"line_number":98,"context_line":"        # \u0027migrate_live\u0027 in policy.yaml. For details, refer to the above"},{"line_number":99,"context_line":"        # comment in the \u0027migrate_live\u0027 policy rule."},{"line_number":100,"context_line":"        deprecated_rule\u003dDEPRECATED_POLICY),"},{"line_number":101,"context_line":"]"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def list_rules():"}],"source_content_type":"text/x-python","patch_set":7,"id":"c88097b2_bd11eb9b","line":101,"in_reply_to":"5d3cf404_2aae4896","updated":"2025-07-10 17:24:51.000000000","message":"Also, to convey this is not deprecated, I am stating the same in deprecation warning @L23. I think that should be enough for operators to know that this is not deprecated?","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"047dedbb60848a98a87c065587fc4c2c6ab3664b","unresolved":true,"context_lines":[{"line_number":98,"context_line":"        # \u0027migrate_live\u0027 in policy.yaml. For details, refer to the above"},{"line_number":99,"context_line":"        # comment in the \u0027migrate_live\u0027 policy rule."},{"line_number":100,"context_line":"        deprecated_rule\u003dDEPRECATED_POLICY),"},{"line_number":101,"context_line":"]"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def list_rules():"}],"source_content_type":"text/x-python","patch_set":7,"id":"5d3cf404_2aae4896","line":101,"in_reply_to":"664f18ae_9579f184","updated":"2025-07-10 17:21:19.000000000","message":"The main purpose of deprecation is for custom policy. I explained the use case in the previous comment. oslo.policy does have a way to handle the policy split case, and that is why I went with the deprecation way, which is not quite a correct implementation (as I commented in L63), but this solves the custom policy case for the operator and avoids breaking their deployment.\n\nCase 1: Default policy: No deprecation policy needed, both default to \u0027admin\u0027, so this case continues working.\n\nCase2: custom policy: Operators had overridden \u0027migrate_live\u0027 policy to \u0027role:can_migrate\u0027:\n\nCurrent behavior: \u0027can_migrate\u0027 user can live migrate the server by specifying host.\n\nWith this change, because the new policy \u0027migrate_live:host\u0027 is default to admin,  it will block \u0027can_migrate\u0027 users to live migrate the server by specifying host.\n\nSolution:\nTo handle that, we need to have a deprecated_rule (L100) with an existing policy. If any policy rule has deprecated_rule and old rule is overridden, then oslo.policy applies the overridden value tothe  new policy and their deployment continues working same way\n- https://github.com/openstack/oslo.policy/blob/fc28a7b343516754829ffd0ecddc7323b866b33e/oslo_policy/policy.py#L790\n\nI know in some policy changes (granularity), we did not handle the custom policy case but we should. In future, we can improve oslo.policy to handle the granularity case also where along with deprecxated rule case, granular rule case can be handle for custom policy case.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"09632f2f3e9e36a5320777bc0bfed3b2398ad4cf","unresolved":true,"context_lines":[{"line_number":98,"context_line":"        # \u0027migrate_live\u0027 in policy.yaml. For details, refer to the above"},{"line_number":99,"context_line":"        # comment in the \u0027migrate_live\u0027 policy rule."},{"line_number":100,"context_line":"        deprecated_rule\u003dDEPRECATED_POLICY),"},{"line_number":101,"context_line":"]"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def list_rules():"}],"source_content_type":"text/x-python","patch_set":7,"id":"2deef0f5_b1a3d157","line":101,"in_reply_to":"c88097b2_bd11eb9b","updated":"2025-07-10 17:31:27.000000000","message":"I see we still time for the library freeze so let me see if I can implement granular case handling in olso.policy and then correct our implementation. If i can get that merge and released on time.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1628c3c90ad1926b26b52b56c630d2b9cbd4d8ea","unresolved":true,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"POLICY_ROOT \u003d \u0027os_compute_api:os-migrate-server:%s\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"DEPRECATED_REASON \u003d \"\"\""},{"line_number":24,"context_line":"Nova introduces one more policy to live migration API. The original policy is"},{"line_number":25,"context_line":"not deprecated and used to allow live migration without requesting a specific"},{"line_number":26,"context_line":"host. A new policy is added to control the live migration requesting a"}],"source_content_type":"text/x-python","patch_set":9,"id":"758bbd8e_a639233f","line":23,"updated":"2025-07-16 16:01:01.000000000","message":"```suggestion\nDEPRECATED_REASON \u003d \"\"\"\\\n```\n\n(assuming we don\u0027t strip newlines, but maybe we do)","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"95701d2c4323820224fcc9c54b169681d44c589a","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"POLICY_ROOT \u003d \u0027os_compute_api:os-migrate-server:%s\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"DEPRECATED_REASON \u003d \"\"\""},{"line_number":24,"context_line":"Nova introduces one more policy to live migration API. The original policy is"},{"line_number":25,"context_line":"not deprecated and used to allow live migration without requesting a specific"},{"line_number":26,"context_line":"host. A new policy is added to control the live migration requesting a"}],"source_content_type":"text/x-python","patch_set":9,"id":"d579c252_206605a7","line":23,"in_reply_to":"758bbd8e_a639233f","updated":"2025-07-22 21:49:59.000000000","message":"Done","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"}],"nova/policies/migrations.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43d3a133294b04968bd22e4ce88e2bb243b5b8d1","unresolved":true,"context_lines":[{"line_number":48,"context_line":"    # policy case) will not break."},{"line_number":49,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":50,"context_line":"        name\u003dPOLICY_ROOT % \u0027index\u0027,"},{"line_number":51,"context_line":"        check_str\u003dbase.ADMIN,"},{"line_number":52,"context_line":"        description\u003d\"List migrations without host info\","},{"line_number":53,"context_line":"        operations\u003d["},{"line_number":54,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":7,"id":"e0b2f3b4_cc9efc71","line":51,"updated":"2025-07-09 20:01:04.000000000","message":"base.Manager?","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"047dedbb60848a98a87c065587fc4c2c6ab3664b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    # policy case) will not break."},{"line_number":49,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":50,"context_line":"        name\u003dPOLICY_ROOT % \u0027index\u0027,"},{"line_number":51,"context_line":"        check_str\u003dbase.ADMIN,"},{"line_number":52,"context_line":"        description\u003d\"List migrations without host info\","},{"line_number":53,"context_line":"        operations\u003d["},{"line_number":54,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":7,"id":"8077677d_1636bd2f","line":51,"in_reply_to":"e0b2f3b4_cc9efc71","updated":"2025-07-10 17:21:19.000000000","message":"I am doing it in next change.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43d3a133294b04968bd22e4ce88e2bb243b5b8d1","unresolved":true,"context_lines":[{"line_number":57,"context_line":"            }"},{"line_number":58,"context_line":"        ],"},{"line_number":59,"context_line":"        scope_types\u003d[\u0027project\u0027]),"},{"line_number":60,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":61,"context_line":"        name\u003dPOLICY_ROOT % \u0027index:all_projects\u0027,"},{"line_number":62,"context_line":"        check_str\u003dbase.ADMIN,"},{"line_number":63,"context_line":"        description\u003d\"List migrations for all or cross projects\","},{"line_number":64,"context_line":"        operations\u003d["},{"line_number":65,"context_line":"            {"},{"line_number":66,"context_line":"                \u0027method\u0027: \u0027GET\u0027,"},{"line_number":67,"context_line":"                \u0027path\u0027: \u0027/os-migrations\u0027"},{"line_number":68,"context_line":"            }"},{"line_number":69,"context_line":"        ],"},{"line_number":70,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":71,"context_line":"        # TODO(gmaan): We can remove this after the next SLURP release"},{"line_number":72,"context_line":"        # (after 2026.1 release). We need to keep this deprecated rule"},{"line_number":73,"context_line":"        # for the case where operator has overridden the old policy"},{"line_number":74,"context_line":"        # \u0027index\u0027 in policy.yaml. For details, refer to the above"},{"line_number":75,"context_line":"        # comment in the \u0027index\u0027 policy rule."},{"line_number":76,"context_line":"        deprecated_rule\u003dDEPRECATED_POLICY),"},{"line_number":77,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":78,"context_line":"        name\u003dPOLICY_ROOT % \u0027index:host\u0027,"},{"line_number":79,"context_line":"        check_str\u003dbase.ADMIN,"},{"line_number":80,"context_line":"        description\u003d\"List migrations with host info\","},{"line_number":81,"context_line":"        operations\u003d["},{"line_number":82,"context_line":"            {"},{"line_number":83,"context_line":"                \u0027method\u0027: \u0027GET\u0027,"},{"line_number":84,"context_line":"                \u0027path\u0027: \u0027/os-migrations\u0027"},{"line_number":85,"context_line":"            }"},{"line_number":86,"context_line":"        ],"},{"line_number":87,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":88,"context_line":"        # TODO(gmaan): We can remove this after the next SLURP release"},{"line_number":89,"context_line":"        # (after 2026.1 release). We need to keep this deprecated rule"},{"line_number":90,"context_line":"        # for the case where operator has overridden the old policy"},{"line_number":91,"context_line":"        # \u0027index\u0027 in policy.yaml. For details, refer to the above"},{"line_number":92,"context_line":"        # comment in the \u0027index\u0027 policy rule."},{"line_number":93,"context_line":"        deprecated_rule\u003dDEPRECATED_POLICY),"},{"line_number":94,"context_line":"]"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"2d395be3_6cc71be9","line":93,"range":{"start_line":60,"start_character":0,"end_line":93,"end_character":43},"updated":"2025-07-09 20:01:04.000000000","message":"this also feel incorrect. we shoudl have the policy rules indefinitely because you may want to grant that to a different custom role so i don\u0027t think it make sen to deprecate these.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"047dedbb60848a98a87c065587fc4c2c6ab3664b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            }"},{"line_number":58,"context_line":"        ],"},{"line_number":59,"context_line":"        scope_types\u003d[\u0027project\u0027]),"},{"line_number":60,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":61,"context_line":"        name\u003dPOLICY_ROOT % \u0027index:all_projects\u0027,"},{"line_number":62,"context_line":"        check_str\u003dbase.ADMIN,"},{"line_number":63,"context_line":"        description\u003d\"List migrations for all or cross projects\","},{"line_number":64,"context_line":"        operations\u003d["},{"line_number":65,"context_line":"            {"},{"line_number":66,"context_line":"                \u0027method\u0027: \u0027GET\u0027,"},{"line_number":67,"context_line":"                \u0027path\u0027: \u0027/os-migrations\u0027"},{"line_number":68,"context_line":"            }"},{"line_number":69,"context_line":"        ],"},{"line_number":70,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":71,"context_line":"        # TODO(gmaan): We can remove this after the next SLURP release"},{"line_number":72,"context_line":"        # (after 2026.1 release). We need to keep this deprecated rule"},{"line_number":73,"context_line":"        # for the case where operator has overridden the old policy"},{"line_number":74,"context_line":"        # \u0027index\u0027 in policy.yaml. For details, refer to the above"},{"line_number":75,"context_line":"        # comment in the \u0027index\u0027 policy rule."},{"line_number":76,"context_line":"        deprecated_rule\u003dDEPRECATED_POLICY),"},{"line_number":77,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":78,"context_line":"        name\u003dPOLICY_ROOT % \u0027index:host\u0027,"},{"line_number":79,"context_line":"        check_str\u003dbase.ADMIN,"},{"line_number":80,"context_line":"        description\u003d\"List migrations with host info\","},{"line_number":81,"context_line":"        operations\u003d["},{"line_number":82,"context_line":"            {"},{"line_number":83,"context_line":"                \u0027method\u0027: \u0027GET\u0027,"},{"line_number":84,"context_line":"                \u0027path\u0027: \u0027/os-migrations\u0027"},{"line_number":85,"context_line":"            }"},{"line_number":86,"context_line":"        ],"},{"line_number":87,"context_line":"        scope_types\u003d[\u0027project\u0027],"},{"line_number":88,"context_line":"        # TODO(gmaan): We can remove this after the next SLURP release"},{"line_number":89,"context_line":"        # (after 2026.1 release). We need to keep this deprecated rule"},{"line_number":90,"context_line":"        # for the case where operator has overridden the old policy"},{"line_number":91,"context_line":"        # \u0027index\u0027 in policy.yaml. For details, refer to the above"},{"line_number":92,"context_line":"        # comment in the \u0027index\u0027 policy rule."},{"line_number":93,"context_line":"        deprecated_rule\u003dDEPRECATED_POLICY),"},{"line_number":94,"context_line":"]"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"d807f643_2710e4d4","line":93,"range":{"start_line":60,"start_character":0,"end_line":93,"end_character":43},"in_reply_to":"2d395be3_6cc71be9","updated":"2025-07-10 17:21:19.000000000","message":"ditto, commented in previous file.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1628c3c90ad1926b26b52b56c630d2b9cbd4d8ea","unresolved":true,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"POLICY_ROOT \u003d \u0027os_compute_api:os-migrations:%s\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"DEPRECATED_REASON \u003d \"\"\""},{"line_number":24,"context_line":"Nova introduces two new policies to list migrations. The original policy"},{"line_number":25,"context_line":"is not deprecated and used to list the live migration without host info."},{"line_number":26,"context_line":"Two new policies are added to list migration with host info and cross"}],"source_content_type":"text/x-python","patch_set":9,"id":"12e74832_110d2894","line":23,"updated":"2025-07-16 16:01:01.000000000","message":"```suggestion\nDEPRECATED_REASON \u003d \"\"\"\\\n```\n\n(again, assuming we don\u0027t strip newlines)","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"95701d2c4323820224fcc9c54b169681d44c589a","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"POLICY_ROOT \u003d \u0027os_compute_api:os-migrations:%s\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"DEPRECATED_REASON \u003d \"\"\""},{"line_number":24,"context_line":"Nova introduces two new policies to list migrations. The original policy"},{"line_number":25,"context_line":"is not deprecated and used to list the live migration without host info."},{"line_number":26,"context_line":"Two new policies are added to list migration with host info and cross"}],"source_content_type":"text/x-python","patch_set":9,"id":"6c036769_60bd4d82","line":23,"in_reply_to":"12e74832_110d2894","updated":"2025-07-22 21:49:59.000000000","message":"Done","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"}],"nova/policies/servers_migrations.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43d3a133294b04968bd22e4ce88e2bb243b5b8d1","unresolved":true,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"POLICY_ROOT \u003d \u0027os_compute_api:servers:migrations:%s\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"DEPRECATED_REASON \u003d \"\"\""},{"line_number":24,"context_line":"Nova introduces a new policy to list live migrations. The original policy"},{"line_number":25,"context_line":"is not deprecated and used to list the in-progress live migration without"},{"line_number":26,"context_line":"host info. A new policy is added to list live migration with host info."}],"source_content_type":"text/x-python","patch_set":7,"id":"14533f7e_175b06b8","line":23,"updated":"2025-07-09 20:01:04.000000000","message":"same comemnt again\nthis does not feel like a correct use of deprecation\n\naslo i dotn think we shoudl be addign new poilicies as deprecated.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"226dfe7dfd90a822f8d48dbbb001c03369fc260a","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"POLICY_ROOT \u003d \u0027os_compute_api:servers:migrations:%s\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"DEPRECATED_REASON \u003d \"\"\""},{"line_number":24,"context_line":"Nova introduces a new policy to list live migrations. The original policy"},{"line_number":25,"context_line":"is not deprecated and used to list the in-progress live migration without"},{"line_number":26,"context_line":"host info. A new policy is added to list live migration with host info."}],"source_content_type":"text/x-python","patch_set":7,"id":"a76220a4_fb8ee941","line":23,"in_reply_to":"14533f7e_175b06b8","updated":"2025-07-15 00:24:26.000000000","message":"ditto, as discussed in other comment.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1628c3c90ad1926b26b52b56c630d2b9cbd4d8ea","unresolved":true,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"POLICY_ROOT \u003d \u0027os_compute_api:servers:migrations:%s\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"DEPRECATED_REASON \u003d \"\"\""},{"line_number":24,"context_line":"Nova introduces one new policy to list live migrations. The original policy"},{"line_number":25,"context_line":"is not deprecated and used to list the in-progress live migration without"},{"line_number":26,"context_line":"host info. A new policy is added to list live migration with host info."}],"source_content_type":"text/x-python","patch_set":9,"id":"da711abf_7ae36ac5","line":23,"updated":"2025-07-16 16:01:01.000000000","message":"```suggestion\nDEPRECATED_REASON \u003d \"\"\"\\\n```","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"95701d2c4323820224fcc9c54b169681d44c589a","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"POLICY_ROOT \u003d \u0027os_compute_api:servers:migrations:%s\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"DEPRECATED_REASON \u003d \"\"\""},{"line_number":24,"context_line":"Nova introduces one new policy to list live migrations. The original policy"},{"line_number":25,"context_line":"is not deprecated and used to list the in-progress live migration without"},{"line_number":26,"context_line":"host info. A new policy is added to list live migration with host info."}],"source_content_type":"text/x-python","patch_set":9,"id":"8a009103_a2d60cdb","line":23,"in_reply_to":"da711abf_7ae36ac5","updated":"2025-07-22 21:49:59.000000000","message":"Done","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"}],"releasenotes/notes/add-migrations-new-policy-e245ba669eb88b26.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9efae70e290a121d090cff7b2ce7823b3bada503","unresolved":true,"context_lines":[{"line_number":34,"context_line":"upgrade:"},{"line_number":35,"context_line":"  - |"},{"line_number":36,"context_line":"    New policies are added to the live migration APIs with the same default."},{"line_number":37,"context_line":"    If you are using default policy, then no action is needed, but If you have"},{"line_number":38,"context_line":"    overridden the existing live migration policies in your deployment, you"},{"line_number":39,"context_line":"    must include the new policy with the same permissions."},{"line_number":40,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":4,"id":"a658be76_9178bef8","line":37,"range":{"start_line":37,"start_character":67,"end_line":37,"end_character":73},"updated":"2025-06-24 08:44:50.000000000","message":"```suggestion\n    If you are using default policy, then no action is needed, but if you have\n```","commit_id":"470efebc5e382b4c25fbd3efb178964d84f19b50"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f58b5702c72ce21a4d8535b5e1763fce86e3e59f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"upgrade:"},{"line_number":35,"context_line":"  - |"},{"line_number":36,"context_line":"    New policies are added to the live migration APIs with the same default."},{"line_number":37,"context_line":"    If you are using default policy, then no action is needed, but If you have"},{"line_number":38,"context_line":"    overridden the existing live migration policies in your deployment, you"},{"line_number":39,"context_line":"    must include the new policy with the same permissions."},{"line_number":40,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":4,"id":"9ceb3bf4_27260e03","line":37,"range":{"start_line":37,"start_character":67,"end_line":37,"end_character":73},"in_reply_to":"a658be76_9178bef8","updated":"2025-06-25 01:40:08.000000000","message":"Done","commit_id":"470efebc5e382b4c25fbd3efb178964d84f19b50"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43d3a133294b04968bd22e4ce88e2bb243b5b8d1","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add new policies for the live migration APIs. To keep the backward"},{"line_number":5,"context_line":"    compatibility, the new policies are default to the same as the old"},{"line_number":6,"context_line":"    policy."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Live migrate:"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"aa32cddd_e8a6b730","line":6,"updated":"2025-07-09 20:01:04.000000000","message":"oh ok i see why im confued you added new polices without adding the manger ole in this pathc\n\n\nhttps://review.opendev.org/c/openstack/nova/+/941347 actully updates them again.\n\nim not really a fan fo doing this in two patches.\n\nor at lest im not a fan of merging this until we are happy to merge the follwo ups\nbecasue i dont think we shoudl have the posible of onely one of the two patche merging this release.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"047dedbb60848a98a87c065587fc4c2c6ab3664b","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add new policies for the live migration APIs. To keep the backward"},{"line_number":5,"context_line":"    compatibility, the new policies are default to the same as the old"},{"line_number":6,"context_line":"    policy."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    * Live migrate:"},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"f7059812_0ec75a45","line":6,"in_reply_to":"aa32cddd_e8a6b730","updated":"2025-07-10 17:21:19.000000000","message":"I thought of doing it in same change but to avoid a big patch I split them. But you are right. It is good to have them in single change to see overall change together and merge them together.","commit_id":"bb0a8a1b3d543fad1ab8dce2ba04fd239e5400c9"}],"releasenotes/notes/add-policy-manager-role-e245ba669eb88b26.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1628c3c90ad1926b26b52b56c630d2b9cbd4d8ea","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"    The Nova policies introduce ``manager`` default roles provided by"},{"line_number":6,"context_line":"    keystone. A ``project manager`` denoted by someone with the ``manager``"},{"line_number":7,"context_line":"    role on a project. It is intended to perform more privileged operations"},{"line_number":8,"context_line":"    than ``project member`` on its project resources. To avoid any change in"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"2ff265bc_5e1089c1","line":5,"range":{"start_line":3,"start_character":0,"end_line":5,"end_character":69},"updated":"2025-07-16 16:01:01.000000000","message":"```suggestion\n  - |\n    The Nova policies introduce ``manager`` default roles provided by\n```","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"95701d2c4323820224fcc9c54b169681d44c589a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"    The Nova policies introduce ``manager`` default roles provided by"},{"line_number":6,"context_line":"    keystone. A ``project manager`` denoted by someone with the ``manager``"},{"line_number":7,"context_line":"    role on a project. It is intended to perform more privileged operations"},{"line_number":8,"context_line":"    than ``project member`` on its project resources. To avoid any change in"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"7a8cb6e5_2b6ec667","line":5,"range":{"start_line":3,"start_character":0,"end_line":5,"end_character":69},"in_reply_to":"2ff265bc_5e1089c1","updated":"2025-07-22 21:49:59.000000000","message":"Done","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1628c3c90ad1926b26b52b56c630d2b9cbd4d8ea","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"    The Nova policies introduce ``manager`` default roles provided by"},{"line_number":6,"context_line":"    keystone. A ``project manager`` denoted by someone with the ``manager``"},{"line_number":7,"context_line":"    role on a project. It is intended to perform more privileged operations"},{"line_number":8,"context_line":"    than ``project member`` on its project resources. To avoid any change in"},{"line_number":9,"context_line":"    ``admin`` permissions, Nova use ``PROJECT_MANAGER_OR_ADMIN`` as default."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"bb0bf5d0_d3fd5869","line":6,"range":{"start_line":6,"start_character":18,"end_line":6,"end_character":33},"updated":"2025-07-16 16:01:01.000000000","message":"```suggestion\n    keystone. A ``project-manager`` denoted by someone with the ``manager``\n```\n\nRight? Ditto for the rest of this release note if so","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"95701d2c4323820224fcc9c54b169681d44c589a","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"    The Nova policies introduce ``manager`` default roles provided by"},{"line_number":6,"context_line":"    keystone. A ``project manager`` denoted by someone with the ``manager``"},{"line_number":7,"context_line":"    role on a project. It is intended to perform more privileged operations"},{"line_number":8,"context_line":"    than ``project member`` on its project resources. To avoid any change in"},{"line_number":9,"context_line":"    ``admin`` permissions, Nova use ``PROJECT_MANAGER_OR_ADMIN`` as default."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"4e352b2e_d8bf3284","line":6,"range":{"start_line":6,"start_character":18,"end_line":6,"end_character":33},"in_reply_to":"bb0bf5d0_d3fd5869","updated":"2025-07-22 21:49:59.000000000","message":"Done","commit_id":"b099e6efc87a80a5ebba555bb013d9995ac67af4"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1554d1ad4f222023d4d90a836a2a50f0f9bd723c","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The Nova policies introduce ``manager`` default roles provided by"},{"line_number":5,"context_line":"    keystone. A ``project_manager`` denoted by someone with the ``manager``"},{"line_number":6,"context_line":"    role on a project. It is intended to perform more privileged operations"},{"line_number":7,"context_line":"    than ``project_member`` on its project resources. To avoid any change in"},{"line_number":8,"context_line":"    ``admin`` permissions, Nova use ``PROJECT_MANAGER_OR_ADMIN`` as default."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    Currently, nova supports:"},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":10,"id":"00345a02_4af7b164","line":8,"range":{"start_line":4,"start_character":3,"end_line":8,"end_character":76},"updated":"2025-07-30 18:17:07.000000000","message":"```suggestion\n    Nova mow supprots a new default role ``manager``, the manager role is part of the standard role hierarchy supported by keystone. A new persona the  ``project_manager`` is denoted by someone with the ``manager`` role on a specific project. The project manager persona  is intended to perform more privileged operations than a ``project_member`` while granting less access then the global admin role.  To avoid any change in ``admin`` permissions, Nova use ``PROJECT_MANAGER_OR_ADMIN`` as a default where manger access is granted.\n```","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ca2873fbd57e7a5eb77e7be5d5bda186d503b296","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The Nova policies introduce ``manager`` default roles provided by"},{"line_number":5,"context_line":"    keystone. A ``project_manager`` denoted by someone with the ``manager``"},{"line_number":6,"context_line":"    role on a project. It is intended to perform more privileged operations"},{"line_number":7,"context_line":"    than ``project_member`` on its project resources. To avoid any change in"},{"line_number":8,"context_line":"    ``admin`` permissions, Nova use ``PROJECT_MANAGER_OR_ADMIN`` as default."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    Currently, nova supports:"},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":10,"id":"68b11469_6d523e9c","line":8,"range":{"start_line":4,"start_character":3,"end_line":8,"end_character":76},"in_reply_to":"00345a02_4af7b164","updated":"2025-07-30 18:28:30.000000000","message":"Acknowledged","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"dea0cca776d9b97023ca595d8a0cc2da940dab6d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The Nova policies introduce ``manager`` default roles provided by"},{"line_number":5,"context_line":"    keystone. A ``project_manager`` denoted by someone with the ``manager``"},{"line_number":6,"context_line":"    role on a project. It is intended to perform more privileged operations"},{"line_number":7,"context_line":"    than ``project_member`` on its project resources. To avoid any change in"},{"line_number":8,"context_line":"    ``admin`` permissions, Nova use ``PROJECT_MANAGER_OR_ADMIN`` as default."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    Currently, nova supports:"},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":10,"id":"be11eaf8_a1cae4d3","line":8,"range":{"start_line":4,"start_character":3,"end_line":8,"end_character":76},"in_reply_to":"68b11469_6d523e9c","updated":"2025-07-30 19:33:13.000000000","message":"Done","commit_id":"06699f26a5a7dc60258231e19698b8b1e4d80fe6"}]}
