)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"71a51992e5a9cc977a731474b74ed151d449a7aa","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add usage admin resource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Shows \"usage\" (how many of each object type exist in our DB) in total"},{"line_number":10,"context_line":"and also broken down by both operating and provisioning status."},{"line_number":11,"context_line":"Global system usage is available to admins / global observers, while"},{"line_number":12,"context_line":"per-project usage is also available to any project admin."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3f79a3b5_abe3a4d8","line":10,"range":{"start_line":10,"start_character":29,"end_line":10,"end_character":62},"updated":"2018-08-14 01:53:08.000000000","message":"Can you add \"admin_state_up\"?","commit_id":"67ae2f0cfbfe6bee4977c9ee22844b53c4b19845"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"205f8b7bf34d12650ec3b04b9d45fb6b1cf7fba7","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add usage admin resource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Shows \"usage\" (how many of each object type exist in our DB) in total"},{"line_number":10,"context_line":"and also broken down by both operating and provisioning status."},{"line_number":11,"context_line":"Global system usage is available to admins / global observers, while"},{"line_number":12,"context_line":"per-project usage is also available to any project admin."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3f79a3b5_afd3b737","line":10,"range":{"start_line":10,"start_character":29,"end_line":10,"end_character":62},"in_reply_to":"3f79a3b5_0702eb6f","updated":"2018-08-24 06:49:35.000000000","message":"Can you comment exactly what you want to see, and where you want to see it, in the docs example response JSON? Just to be completely clear.","commit_id":"67ae2f0cfbfe6bee4977c9ee22844b53c4b19845"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"36ec77365c5cf05dcf150307440898c80f362c00","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add usage admin resource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Shows \"usage\" (how many of each object type exist in our DB) in total"},{"line_number":10,"context_line":"and also broken down by both operating and provisioning status."},{"line_number":11,"context_line":"Global system usage is available to admins / global observers, while"},{"line_number":12,"context_line":"per-project usage is also available to any project admin."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3f79a3b5_e103030f","line":10,"range":{"start_line":10,"start_character":29,"end_line":10,"end_character":62},"in_reply_to":"3f79a3b5_2177bbd6","updated":"2018-08-24 08:22:47.000000000","message":"For the test, maybe I\u0027m wrong for not covering so many cases. Please feel free to correct. And That\u0027s just my opinion.","commit_id":"67ae2f0cfbfe6bee4977c9ee22844b53c4b19845"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"b63c534bc1fb38ab744063474b8a5cd958d0d467","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add usage admin resource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Shows \"usage\" (how many of each object type exist in our DB) in total"},{"line_number":10,"context_line":"and also broken down by both operating and provisioning status."},{"line_number":11,"context_line":"Global system usage is available to admins / global observers, while"},{"line_number":12,"context_line":"per-project usage is also available to any project admin."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3f79a3b5_0702eb6f","line":10,"range":{"start_line":10,"start_character":29,"end_line":10,"end_character":62},"in_reply_to":"3f79a3b5_744cf675","updated":"2018-08-23 08:50:03.000000000","message":"How about a new key \"admin_state_up\" for each resource? Just from my opinion, it\u0027s reasonable to add for spliting a big part resource, such as which resources are OFFLINE manually, which resources are OFFLINE with errors/in the middle status during processes.","commit_id":"67ae2f0cfbfe6bee4977c9ee22844b53c4b19845"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"39c7d39c9334c84fa879707c45e61692022ef1ba","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add usage admin resource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Shows \"usage\" (how many of each object type exist in our DB) in total"},{"line_number":10,"context_line":"and also broken down by both operating and provisioning status."},{"line_number":11,"context_line":"Global system usage is available to admins / global observers, while"},{"line_number":12,"context_line":"per-project usage is also available to any project admin."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3f79a3b5_744cf675","line":10,"range":{"start_line":10,"start_character":29,"end_line":10,"end_character":62},"in_reply_to":"3f79a3b5_abe3a4d8","updated":"2018-08-21 01:43:35.000000000","message":"If admin_state_up is False, it will be in OFFLINE operating status... But, it won\u0027t be distinct from other reasons for OFFLINE. :(\nTrying to split this up SO MUCH just leads to a ton of duplication. :/\nWe can discuss during an IRC meeting what people actually prefer the most, and can consider what to do here.","commit_id":"67ae2f0cfbfe6bee4977c9ee22844b53c4b19845"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"3b56687eef8f0fa02f1bf1648d908fb410745797","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add usage admin resource"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Shows \"usage\" (how many of each object type exist in our DB) in total"},{"line_number":10,"context_line":"and also broken down by both operating and provisioning status."},{"line_number":11,"context_line":"Global system usage is available to admins / global observers, while"},{"line_number":12,"context_line":"per-project usage is also available to any project admin."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"3f79a3b5_2177bbd6","line":10,"range":{"start_line":10,"start_character":29,"end_line":10,"end_character":62},"in_reply_to":"3f79a3b5_afd3b737","updated":"2018-08-24 08:17:24.000000000","message":"I test all resources, if we set the admin_state_up to False, only  the loadblancer\u0027s operating status will be OFFLINE, so I think the new \"admin_state_up\" should be only added into the loadbalancer resources in usage info.\n{\"loadbalancers\": {\"total\": 2, \"admin_state_up\": {\"True\": 1, \"False\": 1}, \"operating_status\": {\"ERROR\": 0, \"DRAINING\": 0, \"ONLINE\": 0, \"NO_MONITOR\": 0, \"DEGRADED\": 0, \"OFFLINE\": 2}, \"provisioning_status\": {\"PENDING_DELETE\": 0, \"DELETED\": 0, \"PENDING_UPDATE\": 0, \"PENDING_CREATE\": 1, \"ERROR\": 0, \"ACTIVE\": 1}},\n\nFor this kind body, we can distinguish why there is a OFFLINE loadbalancer very clear, as we force to set 1 loadbalancer with \"False\" admin_state_up. Then we can split the other loadbalancers for other reasons, such as it is in CREATING/ERROR., which need more analysis.","commit_id":"67ae2f0cfbfe6bee4977c9ee22844b53c4b19845"}],"api-ref/source/v2/examples/usage-show-all-response.json":[{"author":{"_account_id":2245,"name":"Jacky Hu","email":"hudayou@hotmail.com","username":"hudayou"},"change_message_id":"dd22cb3e967a801bcd6232d0434e6f40f366a5de","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"\t\"loadbalancers\": {"},{"line_number":3,"context_line":"\t\t\"provisioning_status\": {"},{"line_number":4,"context_line":"\t\t\t\"PENDING_DELETE\": 0,"},{"line_number":5,"context_line":"\t\t\t\"PENDING_UPDATE\": 0,"}],"source_content_type":"application/json","patch_set":3,"id":"bf659307_ab3f1385","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":1},"updated":"2018-04-03 02:32:17.000000000","message":"in other examples, spaces are used instead of tabs.\nShould we keep the same style here?","commit_id":"181777b0934f6e00c3e8248e62c05a1d4e49b7cf"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"9e6944d5dbf4e4e7408c3b405d40c4852c82671e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"\t\"loadbalancers\": {"},{"line_number":3,"context_line":"\t\t\"provisioning_status\": {"},{"line_number":4,"context_line":"\t\t\t\"PENDING_DELETE\": 0,"},{"line_number":5,"context_line":"\t\t\t\"PENDING_UPDATE\": 0,"}],"source_content_type":"application/json","patch_set":3,"id":"bf659307_1676623f","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":1},"in_reply_to":"bf659307_ab3f1385","updated":"2018-04-03 04:22:09.000000000","message":"Ah yeah, not sure how my editor let tabs get in there at all. Weird.","commit_id":"181777b0934f6e00c3e8248e62c05a1d4e49b7cf"}],"api-ref/source/v2/examples/usage-show-response.json":[{"author":{"_account_id":2245,"name":"Jacky Hu","email":"hudayou@hotmail.com","username":"hudayou"},"change_message_id":"dd22cb3e967a801bcd6232d0434e6f40f366a5de","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"\t\"loadbalancers\": {"},{"line_number":3,"context_line":"\t\t\"provisioning_status\": {"},{"line_number":4,"context_line":"\t\t\t\"PENDING_DELETE\": 0,"},{"line_number":5,"context_line":"\t\t\t\"PENDING_UPDATE\": 0,"}],"source_content_type":"application/json","patch_set":3,"id":"bf659307_6b4d7b3c","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":1},"updated":"2018-04-03 02:32:17.000000000","message":"in other examples, spaces are used instead of tabs.\nShould we keep the same style here?","commit_id":"181777b0934f6e00c3e8248e62c05a1d4e49b7cf"}],"api-ref/source/v2/usage.inc":[{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"1bb408faa1e84829044816affcc578d5e505531f","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":".. rest_method:: GET /v2.0/lbaas/usage"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Show all usage for Octavia."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"This function is typically available only to administrators."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":9,"id":"5f7c97a3_cc89cf25","line":8,"updated":"2018-06-29 20:36:02.000000000","message":"Still getting used to Octavia not meaning just our driver but also the whole project -- nevertheless can we write that a bit less confusing. Also I glanced we are showing deleted entities, too -- so it\u0027s not entirely usage.\n\nAlso other LB vendors might show different things?","commit_id":"2d3614d16f8d80216fb04a7bc41b436877864e6c"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"7b46c72a3cae6e69ddced179faddda85bfb0c0c0","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":".. rest_method:: GET /v2.0/lbaas/usage"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Show all usage for Octavia."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"This function is typically available only to administrators."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":9,"id":"5f7c97a3_9d29cb3b","line":8,"in_reply_to":"5f7c97a3_cc89cf25","updated":"2018-07-13 00:49:45.000000000","message":"This really does mean the whole project -- this is just looking at our DB and seeing the \"usage of the system\". It\u0027s useful for project managers who want to see how many LBs and such have been created in total, but it\u0027s also useful for operators to see a quick snapshot of system health (LBs in ERROR, etc). I don\u0027t know how else I\u0027d write it other than \"for Octavia\".\nWe are showing deleted entities, but they\u0027ll only show up until they are expired from the DB by housekeeping. It\u0027s just another reference point. The idea here is just to provide data, not interpret it.","commit_id":"2d3614d16f8d80216fb04a7bc41b436877864e6c"}],"octavia/common/jinja/haproxy/jinja_cfg.py":[{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"1bb408faa1e84829044816affcc578d5e505531f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    constants.LB_ALGORITHM_SOURCE_IP: \u0027source\u0027"},{"line_number":37,"context_line":"}"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"ACTIVE_PENDING_STATUSES \u003d constants.SUPPORTED_PROVISIONING_STATUSES + ("},{"line_number":40,"context_line":"    constants.DEGRADED,)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"BASE_PATH \u003d \u0027/var/lib/octavia\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_ecc12b31","side":"PARENT","line":39,"updated":"2018-06-29 20:36:02.000000000","message":"Unrelated change? Also what happened to DEGRADED?","commit_id":"0359422739f3fdaab01c8202967a040e4eba7e7d"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"7b46c72a3cae6e69ddced179faddda85bfb0c0c0","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    constants.LB_ALGORITHM_SOURCE_IP: \u0027source\u0027"},{"line_number":37,"context_line":"}"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"ACTIVE_PENDING_STATUSES \u003d constants.SUPPORTED_PROVISIONING_STATUSES + ("},{"line_number":40,"context_line":"    constants.DEGRADED,)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"BASE_PATH \u003d \u0027/var/lib/octavia\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_3d18b71d","side":"PARENT","line":39,"in_reply_to":"5f7c97a3_ecc12b31","updated":"2018-07-13 00:49:45.000000000","message":"I think this was removed just as cleanup, because it is simply not used anywhere in the whole project.","commit_id":"0359422739f3fdaab01c8202967a040e4eba7e7d"}],"octavia/policies/base.py":[{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"b63c534bc1fb38ab744063474b8a5cd958d0d467","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                       \u0027role:load-balancer_quota_admin or \u0027"},{"line_number":87,"context_line":"                       \u0027rule:load-balancer:admin\u0027),"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    policy.RuleDefault(\u0027load-balancer:read-usage\u0027,"},{"line_number":90,"context_line":"                       \u0027rule:load-balancer:observer_and_owner or \u0027"},{"line_number":91,"context_line":"                       \u0027rule:load-balancer:global_observer or \u0027"},{"line_number":92,"context_line":"                       \u0027rule:load-balancer:member_and_owner or \u0027"},{"line_number":93,"context_line":"                       \u0027role:load-balancer_usage_admin or \u0027"},{"line_number":94,"context_line":"                       \u0027rule:load-balancer:admin\u0027),"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    policy.RuleDefault(\u0027load-balancer:read-usage-global\u0027,"},{"line_number":97,"context_line":"                       \u0027rule:load-balancer:global_observer or \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_6774ff36","line":94,"range":{"start_line":89,"start_character":0,"end_line":94,"end_character":51},"updated":"2018-08-23 08:50:03.000000000","message":"Hmm, I test with devstack.\nWhen I use /opt/stack/devstack/openrc demo demo. Why I can still get the usage info for itselves project_id? But the demo is not a admin. For this part, it doesn\u0027t fit what we proposal.\n\nAlso for role balancer_usage_admin, I guess there are some works left in devstack plugin.sh, right?","commit_id":"67ae2f0cfbfe6bee4977c9ee22844b53c4b19845"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"3b56687eef8f0fa02f1bf1648d908fb410745797","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                       \u0027role:load-balancer_quota_admin or \u0027"},{"line_number":87,"context_line":"                       \u0027rule:load-balancer:admin\u0027),"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    policy.RuleDefault(\u0027load-balancer:read-usage\u0027,"},{"line_number":90,"context_line":"                       \u0027rule:load-balancer:observer_and_owner or \u0027"},{"line_number":91,"context_line":"                       \u0027rule:load-balancer:global_observer or \u0027"},{"line_number":92,"context_line":"                       \u0027rule:load-balancer:member_and_owner or \u0027"},{"line_number":93,"context_line":"                       \u0027role:load-balancer_usage_admin or \u0027"},{"line_number":94,"context_line":"                       \u0027rule:load-balancer:admin\u0027),"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    policy.RuleDefault(\u0027load-balancer:read-usage-global\u0027,"},{"line_number":97,"context_line":"                       \u0027rule:load-balancer:global_observer or \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_efa76f4f","line":94,"range":{"start_line":89,"start_character":0,"end_line":94,"end_character":51},"in_reply_to":"3f79a3b5_4f1f8307","updated":"2018-08-24 08:17:24.000000000","message":"I mean I can get the usage info after \"source openrc demo demo\", the demo user can get the itself usage info, that means we use demo user to login project demo. demo user doesn\u0027t own the admin role(just member and anotherrole). But for the check, towards the demo user, it can not get the usage info, right? But I get the info successful, that means a non admin users(demo) can get the usage info of demo project. Ha, I\u0027m not sure what is the \"local admin\". Just want to raise a issue here, because that maybe a case not fit the requirement of this feature.","commit_id":"67ae2f0cfbfe6bee4977c9ee22844b53c4b19845"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"205f8b7bf34d12650ec3b04b9d45fb6b1cf7fba7","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                       \u0027role:load-balancer_quota_admin or \u0027"},{"line_number":87,"context_line":"                       \u0027rule:load-balancer:admin\u0027),"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    policy.RuleDefault(\u0027load-balancer:read-usage\u0027,"},{"line_number":90,"context_line":"                       \u0027rule:load-balancer:observer_and_owner or \u0027"},{"line_number":91,"context_line":"                       \u0027rule:load-balancer:global_observer or \u0027"},{"line_number":92,"context_line":"                       \u0027rule:load-balancer:member_and_owner or \u0027"},{"line_number":93,"context_line":"                       \u0027role:load-balancer_usage_admin or \u0027"},{"line_number":94,"context_line":"                       \u0027rule:load-balancer:admin\u0027),"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    policy.RuleDefault(\u0027load-balancer:read-usage-global\u0027,"},{"line_number":97,"context_line":"                       \u0027rule:load-balancer:global_observer or \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_4f1f8307","line":94,"range":{"start_line":89,"start_character":0,"end_line":94,"end_character":51},"in_reply_to":"3f79a3b5_6774ff36","updated":"2018-08-24 06:49:35.000000000","message":"Wait, you *can* or *can not* get usage info for the \"demo\" project as the \"demo\" user? According to the definition, you only have to be \"openstack admin\" to get the usage for another user\u0027s project. I think the demo user is the \"local admin\" of the demo project, so would be able to get it?\n\n... Openstack is really confusing sometimes about \"admin\", since there\u0027s multiple levels, so I\u0027m not sure quite what\u0027s happening.","commit_id":"67ae2f0cfbfe6bee4977c9ee22844b53c4b19845"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"a660efe2eb0ba8d7fe02bf966f6f60cdb26c5938","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                       \u0027role:load-balancer_quota_admin or \u0027"},{"line_number":87,"context_line":"                       \u0027rule:load-balancer:admin\u0027),"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    policy.RuleDefault(\u0027load-balancer:read-usage\u0027,"},{"line_number":90,"context_line":"                       \u0027rule:load-balancer:observer_and_owner or \u0027"},{"line_number":91,"context_line":"                       \u0027rule:load-balancer:global_observer or \u0027"},{"line_number":92,"context_line":"                       \u0027rule:load-balancer:member_and_owner or \u0027"},{"line_number":93,"context_line":"                       \u0027role:load-balancer_usage_admin or \u0027"},{"line_number":94,"context_line":"                       \u0027rule:load-balancer:admin\u0027),"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    policy.RuleDefault(\u0027load-balancer:read-usage-global\u0027,"},{"line_number":97,"context_line":"                       \u0027rule:load-balancer:global_observer or \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_ecda0849","line":94,"range":{"start_line":89,"start_character":0,"end_line":94,"end_character":51},"in_reply_to":"3f79a3b5_acde506a","updated":"2018-08-24 20:23:34.000000000","message":"Ah. So... Project owner seems like \"project admin\" to me? So I think that\u0027s by design? Or is the owner of a project not necessarily an admin of it? I feel like they should be treated that way...","commit_id":"67ae2f0cfbfe6bee4977c9ee22844b53c4b19845"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"86bccd0044139a50d7dacd5458308892521c30d8","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                       \u0027role:load-balancer_quota_admin or \u0027"},{"line_number":87,"context_line":"                       \u0027rule:load-balancer:admin\u0027),"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    policy.RuleDefault(\u0027load-balancer:read-usage\u0027,"},{"line_number":90,"context_line":"                       \u0027rule:load-balancer:observer_and_owner or \u0027"},{"line_number":91,"context_line":"                       \u0027rule:load-balancer:global_observer or \u0027"},{"line_number":92,"context_line":"                       \u0027rule:load-balancer:member_and_owner or \u0027"},{"line_number":93,"context_line":"                       \u0027role:load-balancer_usage_admin or \u0027"},{"line_number":94,"context_line":"                       \u0027rule:load-balancer:admin\u0027),"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    policy.RuleDefault(\u0027load-balancer:read-usage-global\u0027,"},{"line_number":97,"context_line":"                       \u0027rule:load-balancer:global_observer or \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_acde506a","line":94,"range":{"start_line":89,"start_character":0,"end_line":94,"end_character":51},"in_reply_to":"3f79a3b5_e9119a5e","updated":"2018-08-24 20:18:25.000000000","message":"rule:load-balancer:observer_and_owner\nrule:load-balancer:member_and_owner\n\nBoth of those rules give the \"owner\" access. So the \"demo\" project would have access to this API as they own the project_ID being queried.\nSo, those two rules open it beyond \"admin\" \"global_observer\" or \"load-balancer_usage_admin\"","commit_id":"67ae2f0cfbfe6bee4977c9ee22844b53c4b19845"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"c85365a9607dd9b0d669c53ada8fa9894fdc7435","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                       \u0027role:load-balancer_quota_admin or \u0027"},{"line_number":87,"context_line":"                       \u0027rule:load-balancer:admin\u0027),"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    policy.RuleDefault(\u0027load-balancer:read-usage\u0027,"},{"line_number":90,"context_line":"                       \u0027rule:load-balancer:observer_and_owner or \u0027"},{"line_number":91,"context_line":"                       \u0027rule:load-balancer:global_observer or \u0027"},{"line_number":92,"context_line":"                       \u0027rule:load-balancer:member_and_owner or \u0027"},{"line_number":93,"context_line":"                       \u0027role:load-balancer_usage_admin or \u0027"},{"line_number":94,"context_line":"                       \u0027rule:load-balancer:admin\u0027),"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    policy.RuleDefault(\u0027load-balancer:read-usage-global\u0027,"},{"line_number":97,"context_line":"                       \u0027rule:load-balancer:global_observer or \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_9e8133fe","line":94,"range":{"start_line":89,"start_character":0,"end_line":94,"end_character":51},"in_reply_to":"3f79a3b5_ecda0849","updated":"2018-08-25 01:43:51.000000000","message":"oh,  http://git.openstack.org/cgit/openstack/octavia/tree/devstack/plugin.sh#n518\n\nSo \u0027rule:load-balancer:member_and_owner\u0027 works before admin in this case.","commit_id":"67ae2f0cfbfe6bee4977c9ee22844b53c4b19845"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"a957cf5c63e717550149bccb8652fcbfb7ff2088","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                       \u0027role:load-balancer_quota_admin or \u0027"},{"line_number":87,"context_line":"                       \u0027rule:load-balancer:admin\u0027),"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    policy.RuleDefault(\u0027load-balancer:read-usage\u0027,"},{"line_number":90,"context_line":"                       \u0027rule:load-balancer:observer_and_owner or \u0027"},{"line_number":91,"context_line":"                       \u0027rule:load-balancer:global_observer or \u0027"},{"line_number":92,"context_line":"                       \u0027rule:load-balancer:member_and_owner or \u0027"},{"line_number":93,"context_line":"                       \u0027role:load-balancer_usage_admin or \u0027"},{"line_number":94,"context_line":"                       \u0027rule:load-balancer:admin\u0027),"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    policy.RuleDefault(\u0027load-balancer:read-usage-global\u0027,"},{"line_number":97,"context_line":"                       \u0027rule:load-balancer:global_observer or \u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f79a3b5_e9119a5e","line":94,"range":{"start_line":89,"start_character":0,"end_line":94,"end_character":51},"in_reply_to":"3f79a3b5_efa76f4f","updated":"2018-08-24 20:09:23.000000000","message":"Hmm, yeah, that\u0027s interesting. I thought I had the policy defined correctly, but maybe not? Michael or someone who also knows the policy stuff, any thoughts?","commit_id":"67ae2f0cfbfe6bee4977c9ee22844b53c4b19845"}],"octavia/tests/functional/api/v2/test_usage.py":[{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6f71bfa0fe6d8637e2c0fff75d20d6f168769aaf","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027, auth_strategy\u003dauth_strategy)"},{"line_number":333,"context_line":"        self.assertEqual(self.NOT_AUTHORIZED_BODY, response.json)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def test_get_for_project_not_authorized_bogus_role(self):"},{"line_number":336,"context_line":"        auth_strategy \u003d self.conf.conf.api_settings.get(\u0027auth_strategy\u0027)"},{"line_number":337,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027, auth_strategy\u003dconstants.TESTING)"},{"line_number":338,"context_line":"        with mock.patch.object(octavia.common.context.Context, \u0027project_id\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_5b7237b2","line":335,"range":{"start_line":335,"start_character":8,"end_line":335,"end_character":54},"updated":"2018-07-16 01:11:32.000000000","message":"test_get_all_authorized_global_observer and test_get_all_authorized_admin maybe refactor is better, so many duplicate code.","commit_id":"2d3614d16f8d80216fb04a7bc41b436877864e6c"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"dbc4ad2a17cfac7e1ec0582102351d0a36b43d09","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027, auth_strategy\u003dauth_strategy)"},{"line_number":333,"context_line":"        self.assertEqual(self.NOT_AUTHORIZED_BODY, response.json)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def test_get_for_project_not_authorized_bogus_role(self):"},{"line_number":336,"context_line":"        auth_strategy \u003d self.conf.conf.api_settings.get(\u0027auth_strategy\u0027)"},{"line_number":337,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027, auth_strategy\u003dconstants.TESTING)"},{"line_number":338,"context_line":"        with mock.patch.object(octavia.common.context.Context, \u0027project_id\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_d120559d","line":335,"range":{"start_line":335,"start_character":8,"end_line":335,"end_character":54},"in_reply_to":"5f7c97a3_5b7237b2","updated":"2018-07-16 18:26:54.000000000","message":"yes, they are a similar test with slightly different data, but refactoring them would not really save any lines. The biggest thing is the override_credentials and it would need to be tweaked specifically for each test... And the asserts are actually different. :(","commit_id":"2d3614d16f8d80216fb04a7bc41b436877864e6c"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"f6b53c8ae4b276678ac539c443c8990453e598e8","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027, auth_strategy\u003dauth_strategy)"},{"line_number":333,"context_line":"        self.assertEqual(self.NOT_AUTHORIZED_BODY, response.json)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def test_get_for_project_not_authorized_bogus_role(self):"},{"line_number":336,"context_line":"        auth_strategy \u003d self.conf.conf.api_settings.get(\u0027auth_strategy\u0027)"},{"line_number":337,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027, auth_strategy\u003dconstants.TESTING)"},{"line_number":338,"context_line":"        with mock.patch.object(octavia.common.context.Context, \u0027project_id\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_33d3bb04","line":335,"range":{"start_line":335,"start_character":8,"end_line":335,"end_character":54},"in_reply_to":"5f7c97a3_d120559d","updated":"2018-07-17 11:42:31.000000000","message":"Ok, it just a small nit. :)","commit_id":"2d3614d16f8d80216fb04a7bc41b436877864e6c"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"6f71bfa0fe6d8637e2c0fff75d20d6f168769aaf","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027, auth_strategy\u003dauth_strategy)"},{"line_number":426,"context_line":"        self.assertEqual(self.NOT_AUTHORIZED_BODY, response.json)"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def test_get_all_not_authorized_no_role(self):"},{"line_number":429,"context_line":"        auth_strategy \u003d self.conf.conf.api_settings.get(\u0027auth_strategy\u0027)"},{"line_number":430,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027, auth_strategy\u003dconstants.TESTING)"},{"line_number":431,"context_line":"        with mock.patch.object(octavia.common.context.Context, \u0027project_id\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_1b6cbfce","line":428,"range":{"start_line":428,"start_character":8,"end_line":428,"end_character":43},"updated":"2018-07-16 01:11:32.000000000","message":"This and test_get_all_not_authorized_bogus_role are the same.","commit_id":"2d3614d16f8d80216fb04a7bc41b436877864e6c"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"dbc4ad2a17cfac7e1ec0582102351d0a36b43d09","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027, auth_strategy\u003dauth_strategy)"},{"line_number":426,"context_line":"        self.assertEqual(self.NOT_AUTHORIZED_BODY, response.json)"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def test_get_all_not_authorized_no_role(self):"},{"line_number":429,"context_line":"        auth_strategy \u003d self.conf.conf.api_settings.get(\u0027auth_strategy\u0027)"},{"line_number":430,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027, auth_strategy\u003dconstants.TESTING)"},{"line_number":431,"context_line":"        with mock.patch.object(octavia.common.context.Context, \u0027project_id\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_5113e559","line":428,"range":{"start_line":428,"start_character":8,"end_line":428,"end_character":43},"in_reply_to":"5f7c97a3_1b6cbfce","updated":"2018-07-16 18:26:54.000000000","message":"It isn\u0027t, it has a different role set (none, versus one that doesn\u0027t exist).\nSee line 346 vs line 439","commit_id":"2d3614d16f8d80216fb04a7bc41b436877864e6c"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"f6b53c8ae4b276678ac539c443c8990453e598e8","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027, auth_strategy\u003dauth_strategy)"},{"line_number":426,"context_line":"        self.assertEqual(self.NOT_AUTHORIZED_BODY, response.json)"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    def test_get_all_not_authorized_no_role(self):"},{"line_number":429,"context_line":"        auth_strategy \u003d self.conf.conf.api_settings.get(\u0027auth_strategy\u0027)"},{"line_number":430,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027, auth_strategy\u003dconstants.TESTING)"},{"line_number":431,"context_line":"        with mock.patch.object(octavia.common.context.Context, \u0027project_id\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_33ec1bbb","line":428,"range":{"start_line":428,"start_character":8,"end_line":428,"end_character":43},"in_reply_to":"5f7c97a3_5113e559","updated":"2018-07-17 11:42:31.000000000","message":"I mean this one and test_get_all_not_authorized_bogus_role, the above two  as another one.. :). Never mind.","commit_id":"2d3614d16f8d80216fb04a7bc41b436877864e6c"}]}
