)]}'
{"ironic/common/policy.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"96e2c9d827e7b69822cf0cb7f03583169ee2afb9","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        \u0027Retrieve Port records\u0027,"},{"line_number":190,"context_line":"        [{\u0027path\u0027: \u0027/ports\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":191,"context_line":"         {\u0027path\u0027: \u0027/ports/detail\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":192,"context_line":"         {\u0027path\u0027: \u0027/ports/{port_id}\u0027, \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":193,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":194,"context_line":"        \u0027baremetal:port:create\u0027,"},{"line_number":195,"context_line":"        \u0027rule:is_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"df6247ed_895f990d","line":192,"updated":"2017-09-19 21:14:04.000000000","message":"also \n\nGET /nodes/{node_ident}/ports \u0026 GET /nodes/{node_ident}/ports/detail\n\nGET /portgroups/{portgroup_ident}/ports \u0026 GET /portgroups/{portgroup_ident}/ports/detail\n\nI was just thinking, does this mean policy.baremetal:node:get and policy baremetal:portgroup:get (respectively) should also apply? :)","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b0afd04b7614b42289ebc8cb2fc7eb34c8f11bd0","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        \u0027Retrieve Port records\u0027,"},{"line_number":190,"context_line":"        [{\u0027path\u0027: \u0027/ports\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":191,"context_line":"         {\u0027path\u0027: \u0027/ports/detail\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":192,"context_line":"         {\u0027path\u0027: \u0027/ports/{port_id}\u0027, \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":193,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":194,"context_line":"        \u0027baremetal:port:create\u0027,"},{"line_number":195,"context_line":"        \u0027rule:is_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_9731b6a5","line":192,"in_reply_to":"df6247ed_895f990d","updated":"2017-09-25 15:22:57.000000000","message":"it does not look like this so to me, as the `_lookup` [0] seems to pass the request directly to the subcontroller w/o validating the \u0027node:get\u0027 policy.\n\nBut I might be wrong re how pecan works as I do not see any direct invocations of this method anywhere else.\n\n[0] https://github.com/openstack/ironic/blob/0e4b5b8c0504e72d5bab944c3fbe68bdd80d566e/ironic/api/controllers/v1/node.py#L1275-L1289","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"96e2c9d827e7b69822cf0cb7f03583169ee2afb9","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        \u0027Retrieve Portgroup records\u0027,"},{"line_number":215,"context_line":"        [{\u0027path\u0027: \u0027/portgroups\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":216,"context_line":"         {\u0027path\u0027: \u0027/portgroups/detail\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":217,"context_line":"         {\u0027path\u0027: \u0027/portgroups/{portgroup_id}\u0027, \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":218,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":219,"context_line":"        \u0027baremetal:portgroup:create\u0027,"},{"line_number":220,"context_line":"        \u0027rule:is_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"df6247ed_a9493d61","line":217,"updated":"2017-09-19 21:14:04.000000000","message":"also \n\nGET /nodes/{node_ident}/portgroups \u0026 GET /nodes/{node_ident}/portgroups/detail","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b0afd04b7614b42289ebc8cb2fc7eb34c8f11bd0","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        \u0027Retrieve Portgroup records\u0027,"},{"line_number":215,"context_line":"        [{\u0027path\u0027: \u0027/portgroups\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":216,"context_line":"         {\u0027path\u0027: \u0027/portgroups/detail\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":217,"context_line":"         {\u0027path\u0027: \u0027/portgroups/{portgroup_id}\u0027, \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":218,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":219,"context_line":"        \u0027baremetal:portgroup:create\u0027,"},{"line_number":220,"context_line":"        \u0027rule:is_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_d74f2e32","line":217,"in_reply_to":"df6247ed_a9493d61","updated":"2017-09-25 15:22:57.000000000","message":"Done","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"96e2c9d827e7b69822cf0cb7f03583169ee2afb9","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        \u0027baremetal:portgroup:delete\u0027,"},{"line_number":225,"context_line":"        \u0027rule:is_admin\u0027,"},{"line_number":226,"context_line":"        \u0027Delete Portgroup records\u0027,"},{"line_number":227,"context_line":"        [{\u0027path\u0027: \u0027/portgroups/{portgroup_id}\u0027, \u0027method\u0027: \u0027DELETE\u0027}]),"},{"line_number":228,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":229,"context_line":"        \u0027baremetal:portgroup:update\u0027,"},{"line_number":230,"context_line":"        \u0027rule:is_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"df6247ed_89b43937","line":227,"updated":"2017-09-19 21:14:04.000000000","message":"s/id/ident/ (our api-ref is wrong)","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b0afd04b7614b42289ebc8cb2fc7eb34c8f11bd0","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        \u0027baremetal:portgroup:delete\u0027,"},{"line_number":225,"context_line":"        \u0027rule:is_admin\u0027,"},{"line_number":226,"context_line":"        \u0027Delete Portgroup records\u0027,"},{"line_number":227,"context_line":"        [{\u0027path\u0027: \u0027/portgroups/{portgroup_id}\u0027, \u0027method\u0027: \u0027DELETE\u0027}]),"},{"line_number":228,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":229,"context_line":"        \u0027baremetal:portgroup:update\u0027,"},{"line_number":230,"context_line":"        \u0027rule:is_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_b76032a7","line":227,"in_reply_to":"df6247ed_89b43937","updated":"2017-09-25 15:22:57.000000000","message":"Done","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"96e2c9d827e7b69822cf0cb7f03583169ee2afb9","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        \u0027baremetal:portgroup:update\u0027,"},{"line_number":230,"context_line":"        \u0027rule:is_admin\u0027,"},{"line_number":231,"context_line":"        \u0027Update Portgroup records\u0027,"},{"line_number":232,"context_line":"        [{\u0027path\u0027: \u0027/portgroups/{portgroup_id}\u0027, \u0027method\u0027: \u0027PATCH\u0027}]),"},{"line_number":233,"context_line":"]"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"chassis_policies \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"df6247ed_69834558","line":232,"updated":"2017-09-19 21:14:04.000000000","message":"s/id/ident/ (our api-ref is wrong)","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b0afd04b7614b42289ebc8cb2fc7eb34c8f11bd0","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        \u0027baremetal:portgroup:update\u0027,"},{"line_number":230,"context_line":"        \u0027rule:is_admin\u0027,"},{"line_number":231,"context_line":"        \u0027Update Portgroup records\u0027,"},{"line_number":232,"context_line":"        [{\u0027path\u0027: \u0027/portgroups/{portgroup_id}\u0027, \u0027method\u0027: \u0027PATCH\u0027}]),"},{"line_number":233,"context_line":"]"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"chassis_policies \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_9763f6b1","line":232,"in_reply_to":"df6247ed_69834558","updated":"2017-09-25 15:22:57.000000000","message":"Done","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"96e2c9d827e7b69822cf0cb7f03583169ee2afb9","unresolved":false,"context_lines":[{"line_number":291,"context_line":"         {\u0027path\u0027: \u0027nodes/{node_ident}/vendor_passthru?method\u003d{method_name}\u0027,"},{"line_number":292,"context_line":"          \u0027method\u0027: \u0027POST\u0027},"},{"line_number":293,"context_line":"         {\u0027path\u0027: \u0027nodes/{node_ident}/vendor_passthru?method\u003d{method_name}\u0027,"},{"line_number":294,"context_line":"          \u0027method\u0027: \u0027DELETE\u0027}]),"},{"line_number":295,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":296,"context_line":"        \u0027baremetal:driver:vendor_passthru\u0027,"},{"line_number":297,"context_line":"        \u0027rule:is_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff5d4b2f_a2837d04","line":294,"updated":"2017-09-19 21:14:04.000000000","message":"I\u0027m not sure what the truth is, but I don\u0027t see anything blocking \u0027patch\u0027 and it is mentioned at https://docs.openstack.org/ironic/latest/contributor/vendor-passthru.html#writing-vendor-methods","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b0afd04b7614b42289ebc8cb2fc7eb34c8f11bd0","unresolved":false,"context_lines":[{"line_number":291,"context_line":"         {\u0027path\u0027: \u0027nodes/{node_ident}/vendor_passthru?method\u003d{method_name}\u0027,"},{"line_number":292,"context_line":"          \u0027method\u0027: \u0027POST\u0027},"},{"line_number":293,"context_line":"         {\u0027path\u0027: \u0027nodes/{node_ident}/vendor_passthru?method\u003d{method_name}\u0027,"},{"line_number":294,"context_line":"          \u0027method\u0027: \u0027DELETE\u0027}]),"},{"line_number":295,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":296,"context_line":"        \u0027baremetal:driver:vendor_passthru\u0027,"},{"line_number":297,"context_line":"        \u0027rule:is_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_f4bfc8f8","line":294,"in_reply_to":"ff5d4b2f_a2837d04","updated":"2017-09-25 15:22:57.000000000","message":"yes, in fact by this doc reference the DELETE verb is not supported but the PATCH is, however looking at the code, nothing actually prohibits using DELETE...\n\nWill add PATCH, and update doc in a separate change","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"96e2c9d827e7b69822cf0cb7f03583169ee2afb9","unresolved":false,"context_lines":[{"line_number":305,"context_line":"         {\u0027path\u0027: \u0027drivers/{driver_name}/vendor_passthru?method\u003d{method_name}\u0027,"},{"line_number":306,"context_line":"          \u0027method\u0027: \u0027POST\u0027},"},{"line_number":307,"context_line":"         {\u0027path\u0027: \u0027drivers/{driver_name}/vendor_passthru?method\u003d{method_name}\u0027,"},{"line_number":308,"context_line":"          \u0027method\u0027: \u0027DELETE\u0027}]),"},{"line_number":309,"context_line":"]"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"utility_policies \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"ff5d4b2f_e28e1526","line":308,"updated":"2017-09-19 21:14:04.000000000","message":"ditto","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"96e2c9d827e7b69822cf0cb7f03583169ee2afb9","unresolved":false,"context_lines":[{"line_number":330,"context_line":"         {\u0027path\u0027: \u0027/volume/connectors\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":331,"context_line":"         {\u0027path\u0027: \u0027/volume/connectors/{volume_connector_id}\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":332,"context_line":"         {\u0027path\u0027: \u0027/volume/targets\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":333,"context_line":"         {\u0027path\u0027: \u0027/volume/targets/{volume_target_id}\u0027, \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":334,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":335,"context_line":"        \u0027baremetal:volume:create\u0027,"},{"line_number":336,"context_line":"        \u0027rule:is_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"df6247ed_a9effde7","line":333,"updated":"2017-09-19 21:14:04.000000000","message":"also GET /nodes/{node_ident}/volume, GET /nodes/{node_ident}/volume/connectors, GET /nodes/{node_ident}/volume/targets","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b0afd04b7614b42289ebc8cb2fc7eb34c8f11bd0","unresolved":false,"context_lines":[{"line_number":330,"context_line":"         {\u0027path\u0027: \u0027/volume/connectors\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":331,"context_line":"         {\u0027path\u0027: \u0027/volume/connectors/{volume_connector_id}\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":332,"context_line":"         {\u0027path\u0027: \u0027/volume/targets\u0027, \u0027method\u0027: \u0027GET\u0027},"},{"line_number":333,"context_line":"         {\u0027path\u0027: \u0027/volume/targets/{volume_target_id}\u0027, \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":334,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":335,"context_line":"        \u0027baremetal:volume:create\u0027,"},{"line_number":336,"context_line":"        \u0027rule:is_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_57f69efb","line":333,"in_reply_to":"df6247ed_a9effde7","updated":"2017-09-25 15:22:57.000000000","message":"Done","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"96e2c9d827e7b69822cf0cb7f03583169ee2afb9","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        \u0027baremetal:volume:delete\u0027,"},{"line_number":342,"context_line":"        \u0027rule:is_admin\u0027,"},{"line_number":343,"context_line":"        \u0027Delete Volume connector and target records\u0027,"},{"line_number":344,"context_line":"        [{\u0027path\u0027: \u0027/volume/connectors/{volume_connector_id\u0027,"},{"line_number":345,"context_line":"          \u0027method\u0027: \u0027DELETE\u0027},"},{"line_number":346,"context_line":"         {\u0027path\u0027: \u0027/volume/targets/{volume_target_id}\u0027,"},{"line_number":347,"context_line":"          \u0027method\u0027: \u0027DELETE\u0027}]),"}],"source_content_type":"text/x-python","patch_set":4,"id":"df6247ed_692d8545","line":344,"updated":"2017-09-19 21:14:04.000000000","message":"s/connector_id/connector_id}/","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b0afd04b7614b42289ebc8cb2fc7eb34c8f11bd0","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        \u0027baremetal:volume:delete\u0027,"},{"line_number":342,"context_line":"        \u0027rule:is_admin\u0027,"},{"line_number":343,"context_line":"        \u0027Delete Volume connector and target records\u0027,"},{"line_number":344,"context_line":"        [{\u0027path\u0027: \u0027/volume/connectors/{volume_connector_id\u0027,"},{"line_number":345,"context_line":"          \u0027method\u0027: \u0027DELETE\u0027},"},{"line_number":346,"context_line":"         {\u0027path\u0027: \u0027/volume/targets/{volume_target_id}\u0027,"},{"line_number":347,"context_line":"          \u0027method\u0027: \u0027DELETE\u0027}]),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_14c70448","line":344,"in_reply_to":"df6247ed_692d8545","updated":"2017-09-25 15:22:57.000000000","message":"Done","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"96e2c9d827e7b69822cf0cb7f03583169ee2afb9","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        \u0027baremetal:volume:update\u0027,"},{"line_number":350,"context_line":"        \u0027rule:is_admin\u0027,"},{"line_number":351,"context_line":"        \u0027Update Volume connector and target records\u0027,"},{"line_number":352,"context_line":"        [{\u0027path\u0027: \u0027/volume/connectors/{volume_connector_id\u0027,"},{"line_number":353,"context_line":"          \u0027method\u0027: \u0027PATCH\u0027},"},{"line_number":354,"context_line":"         {\u0027path\u0027: \u0027/volume/targets/{volume_target_id}\u0027,"},{"line_number":355,"context_line":"          \u0027method\u0027: \u0027PATCH\u0027}]),"}],"source_content_type":"text/x-python","patch_set":4,"id":"df6247ed_4932c1a9","line":352,"updated":"2017-09-19 21:14:04.000000000","message":"s/connector_id/connector_id}/","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b0afd04b7614b42289ebc8cb2fc7eb34c8f11bd0","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        \u0027baremetal:volume:update\u0027,"},{"line_number":350,"context_line":"        \u0027rule:is_admin\u0027,"},{"line_number":351,"context_line":"        \u0027Update Volume connector and target records\u0027,"},{"line_number":352,"context_line":"        [{\u0027path\u0027: \u0027/volume/connectors/{volume_connector_id\u0027,"},{"line_number":353,"context_line":"          \u0027method\u0027: \u0027PATCH\u0027},"},{"line_number":354,"context_line":"         {\u0027path\u0027: \u0027/volume/targets/{volume_target_id}\u0027,"},{"line_number":355,"context_line":"          \u0027method\u0027: \u0027PATCH\u0027}]),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_34cc4069","line":352,"in_reply_to":"df6247ed_4932c1a9","updated":"2017-09-25 15:22:57.000000000","message":"Done","commit_id":"391a9003dbd25cc5cd7e62b3009de1755d52d851"}]}
