)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3da22068c11ab8750e79efea5f8c55ae863743e8","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"To address backwards compatibility, the new rules added to the"},{"line_number":21,"context_line":"flavor_manage.py policy file, default to the existing rule"},{"line_number":22,"context_line":"(os_compute_api:os-flavor-manage). That way across upgrade this should"},{"line_number":23,"context_line":"ensure if an existing admin has customised the rule, it keeps working,"},{"line_number":24,"context_line":"but folks that know about the new setting can over-ride the default"},{"line_number":25,"context_line":"rule."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5ff73747_e0fdc13a","line":22,"range":{"start_line":22,"start_character":51,"end_line":22,"end_character":58},"updated":"2017-04-26 00:54:33.000000000","message":"upgrades","commit_id":"6565de86705e742568f2418dc5c5e95a912ea31b"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"4b2fc42ab36eebd9af9afc6e0f59ca9d780ed955","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"To address backwards compatibility, the new rules added to the"},{"line_number":21,"context_line":"flavor_manage.py policy file, default to the existing rule"},{"line_number":22,"context_line":"(os_compute_api:os-flavor-manage). That way across upgrade this should"},{"line_number":23,"context_line":"ensure if an existing admin has customised the rule, it keeps working,"},{"line_number":24,"context_line":"but folks that know about the new setting can over-ride the default"},{"line_number":25,"context_line":"rule."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5ff73747_8456f15b","line":22,"range":{"start_line":22,"start_character":51,"end_line":22,"end_character":58},"in_reply_to":"5ff73747_e0fdc13a","updated":"2017-04-26 19:03:16.000000000","message":"fixed in next patch","commit_id":"6565de86705e742568f2418dc5c5e95a912ea31b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3da22068c11ab8750e79efea5f8c55ae863743e8","unresolved":false,"context_lines":[{"line_number":21,"context_line":"flavor_manage.py policy file, default to the existing rule"},{"line_number":22,"context_line":"(os_compute_api:os-flavor-manage). That way across upgrade this should"},{"line_number":23,"context_line":"ensure if an existing admin has customised the rule, it keeps working,"},{"line_number":24,"context_line":"but folks that know about the new setting can over-ride the default"},{"line_number":25,"context_line":"rule."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Closes-Bug: #1675147"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5ff73747_c0f8854a","line":24,"range":{"start_line":24,"start_character":46,"end_line":24,"end_character":55},"updated":"2017-04-26 00:54:33.000000000","message":"override","commit_id":"6565de86705e742568f2418dc5c5e95a912ea31b"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"4b2fc42ab36eebd9af9afc6e0f59ca9d780ed955","unresolved":false,"context_lines":[{"line_number":21,"context_line":"flavor_manage.py policy file, default to the existing rule"},{"line_number":22,"context_line":"(os_compute_api:os-flavor-manage). That way across upgrade this should"},{"line_number":23,"context_line":"ensure if an existing admin has customised the rule, it keeps working,"},{"line_number":24,"context_line":"but folks that know about the new setting can over-ride the default"},{"line_number":25,"context_line":"rule."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Closes-Bug: #1675147"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5ff73747_6451a562","line":24,"range":{"start_line":24,"start_character":46,"end_line":24,"end_character":55},"in_reply_to":"5ff73747_c0f8854a","updated":"2017-04-26 19:03:16.000000000","message":"fixed in next patch","commit_id":"6565de86705e742568f2418dc5c5e95a912ea31b"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"ebc020439dbfed79e9626a83ecdf359f775f9bb2","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Most other places in nova (and OpenStack in general) have separate"},{"line_number":16,"context_line":"policy rules for each action. This affords the ultimate flexibility"},{"line_number":17,"context_line":"to deployers, who can obviously use the same rule if that is what they"},{"line_number":18,"context_line":"want."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"To address backwards compatibility, the new rules added to the"},{"line_number":21,"context_line":"flavor_manage.py policy file, default to the existing rule"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"bf091321_89189b1d","line":18,"updated":"2017-06-08 23:39:46.000000000","message":"I am not sure what is actual merit which is provided with this patch.\n\nI can see the inconsistency of policy checks in Nova because the API is huge and hard to keep the consistency. That is general thing.\n\nWhat is actual problem by using the same policy on create/delete flavor for production?\nIn general/default, the policy is admin and I could not find an issue on the situation both \"create a flavor\" person and \"delete a flavor\" person are the same.","commit_id":"c9fd9772c790ca7188e5279b6f838e960da17f97"}],"nova/api/openstack/compute/flavor_manage.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"757a65a85b25e5c1ede104c3a09d2bc8c0316367","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    @wsgi.action(\"delete\")"},{"line_number":42,"context_line":"    def _delete(self, req, id):"},{"line_number":43,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":44,"context_line":"        context.can(fm_policies.POLICY_ROOT % \u0027delete\u0027)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        flavor \u003d objects.Flavor(context\u003dcontext, flavorid\u003did)"},{"line_number":47,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f201791_7e89a524","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":55},"updated":"2017-06-20 14:40:50.000000000","message":"This is where the checks should be going - you need to check if the policy corresponding to \u0027fm_policies.BASE_POLICY_NAME\u0027 is set to a non-default value. If it is, you should use the old value but emit a warning that the new value will be used in a future release and the old value must be unset.\n\nYou can probably use \u0027nova.policy.get_rules\u0027 to get the registered rules/values","commit_id":"6530d8f4f6b27585bcc08ee1529b744a2b72da9a"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"9302dcdbb7a3d6f7fbf53e4a45b98d50df728309","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    @wsgi.action(\"delete\")"},{"line_number":42,"context_line":"    def _delete(self, req, id):"},{"line_number":43,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":44,"context_line":"        context.can(fm_policies.POLICY_ROOT % \u0027delete\u0027)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        flavor \u003d objects.Flavor(context\u003dcontext, flavorid\u003did)"},{"line_number":47,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f201791_e8916ef3","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":55},"in_reply_to":"5f201791_7e89a524","updated":"2017-06-20 21:09:29.000000000","message":"Thanks for the review. Updated in next patch.","commit_id":"6530d8f4f6b27585bcc08ee1529b744a2b72da9a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"757a65a85b25e5c1ede104c3a09d2bc8c0316367","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    @validation.schema(flavor_manage.create, \u00272.1\u0027)"},{"line_number":58,"context_line":"    def _create(self, req, body):"},{"line_number":59,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":60,"context_line":"        context.can(fm_policies.POLICY_ROOT % \u0027create\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        vals \u003d body[\u0027flavor\u0027]"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5f201791_de51d964","line":60,"range":{"start_line":60,"start_character":0,"end_line":60,"end_character":55},"updated":"2017-06-20 14:40:50.000000000","message":"ditto","commit_id":"6530d8f4f6b27585bcc08ee1529b744a2b72da9a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1875a67c3aeb01deafdb7832d4747ed26c4f6908","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":75,"context_line":"        context.can(fm_policies.POLICY_ROOT % \u0027create\u0027)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # TODO(rb560u): remove this check in future release"},{"line_number":78,"context_line":"        existing_policy_default_rule \u003d \"rule:admin_api\""},{"line_number":79,"context_line":"        current_rule \u003d str(policy.get_rules()[fm_policies.BASE_POLICY_NAME])"},{"line_number":80,"context_line":"        if current_rule !\u003d existing_policy_default_rule:"},{"line_number":81,"context_line":"            LOG.warning(\"Start setting the new rule for creating flavors \""},{"line_number":82,"context_line":"                        \"using the new action \u0027{0}:create\u0027. The existing \""},{"line_number":83,"context_line":"                        \"action \u0027{0}\u0027 is deprecated in Pike and will be \""},{"line_number":84,"context_line":"                        \"removed in future release.\".format(fm_policies."},{"line_number":85,"context_line":"                                                            BASE_POLICY_NAME))"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        vals \u003d body[\u0027flavor\u0027]"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"5f201791_2023cc07","line":85,"range":{"start_line":77,"start_character":0,"end_line":85,"end_character":78},"updated":"2017-06-22 08:41:36.000000000","message":"So I\u0027ve one final request - can we formalize this in nova/policies? fwict, this is the exact same as the rule above _except_ that it references \u0027create\u0027 instead of \u0027delete\u0027. Perhaps a function like so, would do the job?\n\n    def verify_deprecated_policy(old_policy, new_policy, default):\n\nAlso, rather than hardcoding the \u0027existing_policy_default_rule\u0027 above, couldn\u0027t we read this with \u0027flavor_manage_policies[0].check_str\u0027 from \u0027nova/policies/flavor_manage.py\u0027, or \u0027base.RULE_ADMIN_API\u0027?\n\nWe might want to formalize this process in the docs once you\u0027re done.","commit_id":"abf559aa78217ae5ff49f02062fa6ba6c810bcd1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"420e77194127ed7cd4b6c9f76c82bcddfb75b88b","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    @wsgi.action(\"delete\")"},{"line_number":48,"context_line":"    def _delete(self, req, id):"},{"line_number":49,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":50,"context_line":"        context.can(fm_policies.POLICY_ROOT % \u0027delete\u0027)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        # TODO(rb560u): remove this check in future release"},{"line_number":53,"context_line":"        base.verify_deprecated_policy(fm_policies.BASE_POLICY_NAME,"},{"line_number":54,"context_line":"                                      fm_policies.POLICY_ROOT % \u0027delete\u0027,"},{"line_number":55,"context_line":"                                      base.RULE_ADMIN_API,"},{"line_number":56,"context_line":"                                      str(policy.get_rules()"},{"line_number":57,"context_line":"                                          [fm_policies.BASE_POLICY_NAME]))"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        flavor \u003d objects.Flavor(context\u003dcontext, flavorid\u003did)"},{"line_number":60,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f201791_c0d4a122","line":57,"range":{"start_line":50,"start_character":0,"end_line":57,"end_character":74},"updated":"2017-06-27 08:21:05.000000000","message":"So what I\u0027m trying to accomplish here is the following flow:\n\n    old rule  |  new rule  | comments\n  ------------+------------+--------------------------------\n     default  | configured | -\n     default  |  default   | -\n   configured |  default   | warn user, use \"old rule\"\n   configured | configured | warn user, use \"old rule\"\n\nIn your current flow, you will warn the user but never use the old rule. To preserve backwards compatibility, we need to ensure folks have switched over to the newer rule before we can remove the older one.\n\nI guess to do this, we need to either modify that \u0027verify_deprecated_policy\u0027 function above to make the appropriate \u0027context.can\u0027 call?\n\nDoes this make sense? Ping me on IRC (sfinucan) if not","commit_id":"dbd993726da3b177bde0d35661fde46a4869bdaf"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"420e77194127ed7cd4b6c9f76c82bcddfb75b88b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    @validation.schema(flavor_manage.create, \u00272.1\u0027)"},{"line_number":71,"context_line":"    def _create(self, req, body):"},{"line_number":72,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":73,"context_line":"        context.can(fm_policies.POLICY_ROOT % \u0027create\u0027)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        # TODO(rb560u): remove this check in future release"},{"line_number":76,"context_line":"        base.verify_deprecated_policy(fm_policies.BASE_POLICY_NAME,"},{"line_number":77,"context_line":"                                      fm_policies.POLICY_ROOT % \u0027create\u0027,"},{"line_number":78,"context_line":"                                      base.RULE_ADMIN_API,"},{"line_number":79,"context_line":"                                      str(policy.get_rules()"},{"line_number":80,"context_line":"                                          [fm_policies.BASE_POLICY_NAME]))"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        vals \u003d body[\u0027flavor\u0027]"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5f201791_4029b1e3","line":80,"range":{"start_line":73,"start_character":0,"end_line":80,"end_character":74},"updated":"2017-06-27 08:21:05.000000000","message":"See above. I don\u0027t think we should just warn the user. We should fall back to using the old rule if necessary","commit_id":"dbd993726da3b177bde0d35661fde46a4869bdaf"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"363658ce680c3511a00519834c4ed879f6b96bd2","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            base.verify_deprecated_policy(fm_policies.BASE_POLICY_NAME,"},{"line_number":53,"context_line":"                fm_policies.POLICY_ROOT % \u0027delete\u0027,"},{"line_number":54,"context_line":"                base.RULE_ADMIN_API,"},{"line_number":55,"context_line":"                str(policy.get_rules()[fm_policies.BASE_POLICY_NAME]),"},{"line_number":56,"context_line":"                context)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        if not using_old_action:"}],"source_content_type":"text/x-python","patch_set":19,"id":"1f1a1f67_06b6b1fb","line":55,"range":{"start_line":55,"start_character":16,"end_line":55,"end_character":70},"updated":"2017-07-13 15:11:00.000000000","message":"Given that we have the old policy name available to us in verify_deprecated_policy, can we move this retrieval of the current policy value there? We can\u0027t do this for the old/default value as there\u0027s no way to access this from oslo.policy, but this isn\u0027t the case for the current one","commit_id":"debe4cbd162050a7a6aac2edd01db4f4103ca523"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"e69c10d60e840ef7e4ea9f84a4d7f36e2705458b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            base.verify_deprecated_policy(fm_policies.BASE_POLICY_NAME,"},{"line_number":53,"context_line":"                fm_policies.POLICY_ROOT % \u0027delete\u0027,"},{"line_number":54,"context_line":"                base.RULE_ADMIN_API,"},{"line_number":55,"context_line":"                str(policy.get_rules()[fm_policies.BASE_POLICY_NAME]),"},{"line_number":56,"context_line":"                context)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        if not using_old_action:"}],"source_content_type":"text/x-python","patch_set":19,"id":"1f1a1f67_4d80e1bf","line":55,"range":{"start_line":55,"start_character":16,"end_line":55,"end_character":70},"in_reply_to":"1f1a1f67_06b6b1fb","updated":"2017-07-18 19:14:49.000000000","message":"Updated in the next PS. Moving the verify_deprecated_policy method to nova/policy.py","commit_id":"debe4cbd162050a7a6aac2edd01db4f4103ca523"}],"nova/policies/flavor_manage.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d67a3bcfe9ab222a28127a9127e3f1dccd3e449a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    policy.RuleDefault("},{"line_number":26,"context_line":"        name\u003dPOLICY_ROOT % \u0027discoverable\u0027,"},{"line_number":27,"context_line":"        check_str\u003dbase.RULE_ANY),"},{"line_number":28,"context_line":"    policy.RuleDefault("},{"line_number":29,"context_line":"        name\u003dPOLICY_ROOT % \u0027create\u0027,"},{"line_number":30,"context_line":"        check_str\u003dbase.RULE_ADMIN_API),"},{"line_number":31,"context_line":"    policy.RuleDefault("},{"line_number":32,"context_line":"        name\u003dPOLICY_ROOT % \u0027delete\u0027,"},{"line_number":33,"context_line":"        check_str\u003dbase.RULE_ADMIN_API),"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7ffa3b31_cd2bce92","line":33,"range":{"start_line":28,"start_character":0,"end_line":33,"end_character":39},"updated":"2017-04-20 16:35:30.000000000","message":"These rules should be documented now. See [1] for details on how to do this\n\n[1] https://review.openstack.org/#/q/project:openstack/nova+branch:master+topic:bp/policy-docs","commit_id":"8b6c9666264ac191e2c3e36c1d56b69edf047350"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3da22068c11ab8750e79efea5f8c55ae863743e8","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    policy.RuleDefault("},{"line_number":31,"context_line":"        BASE_POLICY_NAME,"},{"line_number":32,"context_line":"        base.RULE_ADMIN_API),"},{"line_number":33,"context_line":"    policy.RuleDefault("},{"line_number":34,"context_line":"        POLICY_ROOT % \u0027create\u0027,"},{"line_number":35,"context_line":"        BASE_POLICY_RULE,"},{"line_number":36,"context_line":"        \"Create Flavor\","}],"source_content_type":"text/x-python","patch_set":7,"id":"5ff73747_e0da6115","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":22},"updated":"2017-04-26 00:54:33.000000000","message":"base.create_rule_default","commit_id":"6565de86705e742568f2418dc5c5e95a912ea31b"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"4b2fc42ab36eebd9af9afc6e0f59ca9d780ed955","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    policy.RuleDefault("},{"line_number":31,"context_line":"        BASE_POLICY_NAME,"},{"line_number":32,"context_line":"        base.RULE_ADMIN_API),"},{"line_number":33,"context_line":"    policy.RuleDefault("},{"line_number":34,"context_line":"        POLICY_ROOT % \u0027create\u0027,"},{"line_number":35,"context_line":"        BASE_POLICY_RULE,"},{"line_number":36,"context_line":"        \"Create Flavor\","}],"source_content_type":"text/x-python","patch_set":7,"id":"5ff73747_df2e04f9","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":22},"in_reply_to":"5ff73747_e0da6115","updated":"2017-04-26 19:03:16.000000000","message":"fixed in next patch","commit_id":"6565de86705e742568f2418dc5c5e95a912ea31b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3da22068c11ab8750e79efea5f8c55ae863743e8","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    policy.RuleDefault("},{"line_number":34,"context_line":"        POLICY_ROOT % \u0027create\u0027,"},{"line_number":35,"context_line":"        BASE_POLICY_RULE,"},{"line_number":36,"context_line":"        \"Create Flavor\","},{"line_number":37,"context_line":"        ["},{"line_number":38,"context_line":"            {"},{"line_number":39,"context_line":"                \u0027method\u0027: \u0027POST\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5ff73747_802efdf7","line":36,"range":{"start_line":36,"start_character":9,"end_line":36,"end_character":22},"updated":"2017-04-26 00:54:33.000000000","message":"Creates a flavor\n\n(I looked out evacuate as an example: the description is \"Evacuate a server from a failed host to a new host\" which is taken from the description under \"Create Flavor\" from the API docs).","commit_id":"6565de86705e742568f2418dc5c5e95a912ea31b"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"4b2fc42ab36eebd9af9afc6e0f59ca9d780ed955","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    policy.RuleDefault("},{"line_number":34,"context_line":"        POLICY_ROOT % \u0027create\u0027,"},{"line_number":35,"context_line":"        BASE_POLICY_RULE,"},{"line_number":36,"context_line":"        \"Create Flavor\","},{"line_number":37,"context_line":"        ["},{"line_number":38,"context_line":"            {"},{"line_number":39,"context_line":"                \u0027method\u0027: \u0027POST\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5ff73747_ff1420a2","line":36,"range":{"start_line":36,"start_character":9,"end_line":36,"end_character":22},"in_reply_to":"5ff73747_802efdf7","updated":"2017-04-26 19:03:16.000000000","message":"fixed in next patch","commit_id":"6565de86705e742568f2418dc5c5e95a912ea31b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3da22068c11ab8750e79efea5f8c55ae863743e8","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                \u0027path\u0027: \u0027/flavors\u0027"},{"line_number":41,"context_line":"            }"},{"line_number":42,"context_line":"        ]),"},{"line_number":43,"context_line":"    policy.RuleDefault("},{"line_number":44,"context_line":"        POLICY_ROOT % \u0027delete\u0027,"},{"line_number":45,"context_line":"        BASE_POLICY_RULE,"},{"line_number":46,"context_line":"        \"Delete Flavor\","}],"source_content_type":"text/x-python","patch_set":7,"id":"5ff73747_c0d525e7","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":22},"updated":"2017-04-26 00:54:33.000000000","message":"base.create_rule_default","commit_id":"6565de86705e742568f2418dc5c5e95a912ea31b"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"4b2fc42ab36eebd9af9afc6e0f59ca9d780ed955","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                \u0027path\u0027: \u0027/flavors\u0027"},{"line_number":41,"context_line":"            }"},{"line_number":42,"context_line":"        ]),"},{"line_number":43,"context_line":"    policy.RuleDefault("},{"line_number":44,"context_line":"        POLICY_ROOT % \u0027delete\u0027,"},{"line_number":45,"context_line":"        BASE_POLICY_RULE,"},{"line_number":46,"context_line":"        \"Delete Flavor\","}],"source_content_type":"text/x-python","patch_set":7,"id":"5ff73747_9f387c3d","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":22},"in_reply_to":"5ff73747_c0d525e7","updated":"2017-04-26 19:03:16.000000000","message":"fixed in next patch","commit_id":"6565de86705e742568f2418dc5c5e95a912ea31b"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3da22068c11ab8750e79efea5f8c55ae863743e8","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    policy.RuleDefault("},{"line_number":44,"context_line":"        POLICY_ROOT % \u0027delete\u0027,"},{"line_number":45,"context_line":"        BASE_POLICY_RULE,"},{"line_number":46,"context_line":"        \"Delete Flavor\","},{"line_number":47,"context_line":"        ["},{"line_number":48,"context_line":"            {"},{"line_number":49,"context_line":"                \u0027method\u0027: \u0027DELETE\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5ff73747_60353146","line":46,"range":{"start_line":46,"start_character":9,"end_line":46,"end_character":22},"updated":"2017-04-26 00:54:33.000000000","message":"Deletes a flavor","commit_id":"6565de86705e742568f2418dc5c5e95a912ea31b"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"4b2fc42ab36eebd9af9afc6e0f59ca9d780ed955","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    policy.RuleDefault("},{"line_number":44,"context_line":"        POLICY_ROOT % \u0027delete\u0027,"},{"line_number":45,"context_line":"        BASE_POLICY_RULE,"},{"line_number":46,"context_line":"        \"Delete Flavor\","},{"line_number":47,"context_line":"        ["},{"line_number":48,"context_line":"            {"},{"line_number":49,"context_line":"                \u0027method\u0027: \u0027DELETE\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5ff73747_9f119caf","line":46,"range":{"start_line":46,"start_character":9,"end_line":46,"end_character":22},"in_reply_to":"5ff73747_60353146","updated":"2017-04-26 19:03:16.000000000","message":"fixed in next patch","commit_id":"6565de86705e742568f2418dc5c5e95a912ea31b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2a2e7c31b173cd993c5a89e063d05550c4682124","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"flavor_manage_policies \u003d ["},{"line_number":28,"context_line":"    policy.RuleDefault("},{"line_number":29,"context_line":"        name\u003dBASE_POLICY_NAME,"},{"line_number":30,"context_line":"        check_str\u003dbase.RULE_ADMIN_API),"},{"line_number":31,"context_line":"    base.create_rule_default("},{"line_number":32,"context_line":"        POLICY_ROOT % \u0027create\u0027,"},{"line_number":33,"context_line":"        BASE_POLICY_RULE,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f0e0f27_bd2d07aa","line":30,"range":{"start_line":28,"start_character":0,"end_line":30,"end_character":39},"updated":"2017-06-09 08:41:48.000000000","message":"At some point in the future, we\u0027re going to want to delete this, right? Maybe a TODO?","commit_id":"c9fd9772c790ca7188e5279b6f838e960da17f97"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2a2e7c31b173cd993c5a89e063d05550c4682124","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    base.create_rule_default("},{"line_number":32,"context_line":"        POLICY_ROOT % \u0027create\u0027,"},{"line_number":33,"context_line":"        BASE_POLICY_RULE,"},{"line_number":34,"context_line":"        \"Creates a flavor\","},{"line_number":35,"context_line":"        ["},{"line_number":36,"context_line":"            {"},{"line_number":37,"context_line":"                \u0027method\u0027: \u0027POST\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f0e0f27_9d7c83b6","line":34,"range":{"start_line":34,"start_character":9,"end_line":34,"end_character":16},"updated":"2017-06-09 08:41:48.000000000","message":"Let\u0027s use imperative:\n\n   Create a flavor","commit_id":"c9fd9772c790ca7188e5279b6f838e960da17f97"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2a2e7c31b173cd993c5a89e063d05550c4682124","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    base.create_rule_default("},{"line_number":42,"context_line":"        POLICY_ROOT % \u0027delete\u0027,"},{"line_number":43,"context_line":"        BASE_POLICY_RULE,"},{"line_number":44,"context_line":"        \"Deletes a flavor\","},{"line_number":45,"context_line":"        ["},{"line_number":46,"context_line":"            {"},{"line_number":47,"context_line":"                \u0027method\u0027: \u0027DELETE\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f0e0f27_1d3f53d7","line":44,"range":{"start_line":44,"start_character":9,"end_line":44,"end_character":16},"updated":"2017-06-09 08:41:48.000000000","message":"ditto","commit_id":"c9fd9772c790ca7188e5279b6f838e960da17f97"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"757a65a85b25e5c1ede104c3a09d2bc8c0316367","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        ]),"},{"line_number":55,"context_line":"]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"# TODO(rb560u): remove this check in future release"},{"line_number":58,"context_line":"existing_policy_default_rule \u003d base.RULE_ADMIN_API"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"if flavor_manage_policies[0].check_str is not existing_policy_default_rule:"},{"line_number":61,"context_line":"    LOG.warning(\"Start setting the new rules for flavor create and flavor \""},{"line_number":62,"context_line":"                \"delete using the new actions: \u0027{0}:create\u0027 and \u0027{0}:delete\u0027. \""},{"line_number":63,"context_line":"                \"The existing action \u0027{0}\u0027 is deprecated in Pike and will be \""},{"line_number":64,"context_line":"                \"removed in the future.\").format(BASE_POLICY_NAME)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def list_rules():"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f201791_be6cdd9c","line":64,"range":{"start_line":57,"start_character":0,"end_line":64,"end_character":66},"updated":"2017-06-20 14:40:50.000000000","message":"Not quite - you don\u0027t modify source files to modify policy. Rather, you create a policy file. This check needs to go where the policy is actually checked","commit_id":"6530d8f4f6b27585bcc08ee1529b744a2b72da9a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"363658ce680c3511a00519834c4ed879f6b96bd2","unresolved":false,"context_lines":[{"line_number":26,"context_line":"flavor_manage_policies \u003d ["},{"line_number":27,"context_line":"    # TODO(rb560u): remove this rule in future release"},{"line_number":28,"context_line":"    policy.RuleDefault("},{"line_number":29,"context_line":"        name\u003dBASE_POLICY_NAME,"},{"line_number":30,"context_line":"        check_str\u003dbase.RULE_ADMIN_API,"},{"line_number":31,"context_line":"        description\u003d\u0027Deprecated in Pike and will be removed in future \u0027"},{"line_number":32,"context_line":"            \u0027release\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"1f1a1f67_6b2bee93","line":29,"range":{"start_line":29,"start_character":8,"end_line":29,"end_character":13},"updated":"2017-07-13 15:11:00.000000000","message":"nit: guess these aren\u0027t _realllly_ needed?","commit_id":"debe4cbd162050a7a6aac2edd01db4f4103ca523"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"e69c10d60e840ef7e4ea9f84a4d7f36e2705458b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"flavor_manage_policies \u003d ["},{"line_number":27,"context_line":"    # TODO(rb560u): remove this rule in future release"},{"line_number":28,"context_line":"    policy.RuleDefault("},{"line_number":29,"context_line":"        name\u003dBASE_POLICY_NAME,"},{"line_number":30,"context_line":"        check_str\u003dbase.RULE_ADMIN_API,"},{"line_number":31,"context_line":"        description\u003d\u0027Deprecated in Pike and will be removed in future \u0027"},{"line_number":32,"context_line":"            \u0027release\u0027),"}],"source_content_type":"text/x-python","patch_set":19,"id":"1f1a1f67_75a2a04d","line":29,"range":{"start_line":29,"start_character":8,"end_line":29,"end_character":13},"in_reply_to":"1f1a1f67_6b2bee93","updated":"2017-07-18 19:14:49.000000000","message":"fixed in next PS","commit_id":"debe4cbd162050a7a6aac2edd01db4f4103ca523"}],"nova/tests/unit/api/openstack/compute/test_flavor_manage.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b1a365661aa9fba7e9b408dcf080b273bac34045","unresolved":false,"context_lines":[{"line_number":378,"context_line":"    def setUp(self):"},{"line_number":379,"context_line":"        super(FlavorManagerPolicyEnforcementV21, self).setUp()"},{"line_number":380,"context_line":"        self.controller \u003d flavormanage_v21.FlavorManageController()"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def test_create_policy_failed(self):"},{"line_number":383,"context_line":"        rule_name \u003d \"os_compute_api:os-flavor-manage:create\""},{"line_number":384,"context_line":"        self.policy.set_rules({rule_name: \"project:non_fake\"})"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ff73747_8b06c21b","line":381,"updated":"2017-04-28 08:45:11.000000000","message":"maybe add a test case to ensure the \u0027inherit\u0027 works as expected? which is old env has this os_compute_api:os-flavor-manage to different value ?","commit_id":"69b6bfe651537306f9c2e37106ffa1917f7723d4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2a2e7c31b173cd993c5a89e063d05550c4682124","unresolved":false,"context_lines":[{"line_number":411,"context_line":"            exc.format_message())"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    def test_create_policy_rbac_default(self):"},{"line_number":414,"context_line":"        \u0027\u0027\u0027Test to verify inherited rule is working\u0027\u0027\u0027"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        default_flavor_policy \u003d \"os_compute_api:os-flavor-manage\""},{"line_number":417,"context_line":"        create_flavor_policy \u003d \"os_compute_api:os-flavor-manage:create\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9f0e0f27_fd5edf43","line":414,"range":{"start_line":414,"start_character":8,"end_line":414,"end_character":11},"updated":"2017-06-09 08:41:48.000000000","message":"nit: Could you use \"\"\" instead, for consistency with most of the codebase?\n\nAlso, thanks for including docstrings, btw","commit_id":"c9fd9772c790ca7188e5279b6f838e960da17f97"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"363658ce680c3511a00519834c4ed879f6b96bd2","unresolved":false,"context_lines":[{"line_number":373,"context_line":"            self.assertEqual(body[\"flavor\"][key], self.expected[\"flavor\"][key])"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"class FlavorManagerPolicyEnforcementV21(test.TestCase):"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def setUp(self):"},{"line_number":379,"context_line":"        super(FlavorManagerPolicyEnforcementV21, self).setUp()"}],"source_content_type":"text/x-python","patch_set":19,"id":"1f1a1f67_eb181e82","line":376,"range":{"start_line":376,"start_character":45,"end_line":376,"end_character":53},"updated":"2017-07-13 15:11:00.000000000","message":"Why did this change?","commit_id":"debe4cbd162050a7a6aac2edd01db4f4103ca523"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"e69c10d60e840ef7e4ea9f84a4d7f36e2705458b","unresolved":false,"context_lines":[{"line_number":373,"context_line":"            self.assertEqual(body[\"flavor\"][key], self.expected[\"flavor\"][key])"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"class FlavorManagerPolicyEnforcementV21(test.TestCase):"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def setUp(self):"},{"line_number":379,"context_line":"        super(FlavorManagerPolicyEnforcementV21, self).setUp()"}],"source_content_type":"text/x-python","patch_set":19,"id":"1f1a1f67_31796093","line":376,"range":{"start_line":376,"start_character":45,"end_line":376,"end_character":53},"in_reply_to":"1f1a1f67_eb181e82","updated":"2017-07-18 19:14:49.000000000","message":"In a previous review, someone requested that I write a test to verify that the inherited rule is working as intended. To do so, I added `test_create_policy_rbac_inherit_default` and `test_delete_policy_rbac_inherit_default` both of these tests include a flavor being created, consequently I had to change `test.NoDBTestCase` to `test.TestCase`.","commit_id":"debe4cbd162050a7a6aac2edd01db4f4103ca523"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"363658ce680c3511a00519834c4ed879f6b96bd2","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                                body\u003dbody)"},{"line_number":447,"context_line":"        # The deprecated action is being enforced since the rule that is set"},{"line_number":448,"context_line":"        # is different than the default rule"},{"line_number":449,"context_line":"        self.assertEqual("},{"line_number":450,"context_line":"            \"Policy doesn\u0027t allow %s to be performed.\" % default_flavor_policy,"},{"line_number":451,"context_line":"            exc.format_message())"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    def test_delete_policy_rbac_inherit_default(self):"},{"line_number":454,"context_line":"        \"\"\"Test to verify inherited rule is working. The rule of the"}],"source_content_type":"text/x-python","patch_set":19,"id":"1f1a1f67_863521dd","line":451,"range":{"start_line":449,"start_character":0,"end_line":451,"end_character":33},"updated":"2017-07-13 15:11:00.000000000","message":"Could you check for the log here?","commit_id":"debe4cbd162050a7a6aac2edd01db4f4103ca523"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"e69c10d60e840ef7e4ea9f84a4d7f36e2705458b","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                                body\u003dbody)"},{"line_number":447,"context_line":"        # The deprecated action is being enforced since the rule that is set"},{"line_number":448,"context_line":"        # is different than the default rule"},{"line_number":449,"context_line":"        self.assertEqual("},{"line_number":450,"context_line":"            \"Policy doesn\u0027t allow %s to be performed.\" % default_flavor_policy,"},{"line_number":451,"context_line":"            exc.format_message())"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    def test_delete_policy_rbac_inherit_default(self):"},{"line_number":454,"context_line":"        \"\"\"Test to verify inherited rule is working. The rule of the"}],"source_content_type":"text/x-python","patch_set":19,"id":"1f1a1f67_6ab91a13","line":451,"range":{"start_line":449,"start_character":0,"end_line":451,"end_character":33},"in_reply_to":"1f1a1f67_863521dd","updated":"2017-07-18 19:14:49.000000000","message":"Added in next PS","commit_id":"debe4cbd162050a7a6aac2edd01db4f4103ca523"}],"releasenotes/notes/flavor-api-policy-granularity-f563d621c615fd64.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"eb33ee5162415cd0507660ea4d74db6d38519678","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":"    Add granularity to the os_compute_api:os-flavor-manage"},{"line_number":5,"context_line":"    policy with the addition of distict actions for create"},{"line_number":6,"context_line":"    and delete. The following policy actions are added and"},{"line_number":7,"context_line":"    enforced-"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7ffa3b31_8dbf0660","line":4,"range":{"start_line":4,"start_character":27,"end_line":4,"end_character":58},"updated":"2017-04-20 16:32:46.000000000","message":"This should be formatted as ``code``","commit_id":"8b6c9666264ac191e2c3e36c1d56b69edf047350"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"eb33ee5162415cd0507660ea4d74db6d38519678","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Add granularity to the os_compute_api:os-flavor-manage"},{"line_number":5,"context_line":"    policy with the addition of distict actions for create"},{"line_number":6,"context_line":"    and delete. The following policy actions are added and"},{"line_number":7,"context_line":"    enforced-"},{"line_number":8,"context_line":"    os_compute_api:os-flavor-manage:create"},{"line_number":9,"context_line":"    os_compute_api:os-flavor-manage:delete"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"7ffa3b31_0d8ad6bd","line":7,"range":{"start_line":7,"start_character":12,"end_line":7,"end_character":13},"updated":"2017-04-20 16:32:46.000000000","message":"change this to a \u0027::\u0027, add a new line after it, and indent the last two lines. That\u0027ll make your reno all nice and pretty :)","commit_id":"8b6c9666264ac191e2c3e36c1d56b69edf047350"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3da22068c11ab8750e79efea5f8c55ae863743e8","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Add granularity to the ``os_compute_api:os-flavor-manage`` policy"},{"line_number":5,"context_line":"    with the addition of distict actions for create and delete. To"},{"line_number":6,"context_line":"    address backwards compatibility, the new rules added to the"},{"line_number":7,"context_line":"    flavor_manage.py policy file, default to the existing rule::"},{"line_number":8,"context_line":"    ``os_compute_api:os-flavor-manage``. The following policy actions"},{"line_number":9,"context_line":"    are added and enforced::"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5ff73747_80983d1b","line":7,"range":{"start_line":7,"start_character":62,"end_line":7,"end_character":64},"updated":"2017-04-26 00:54:33.000000000","message":":","commit_id":"6565de86705e742568f2418dc5c5e95a912ea31b"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"4b2fc42ab36eebd9af9afc6e0f59ca9d780ed955","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Add granularity to the ``os_compute_api:os-flavor-manage`` policy"},{"line_number":5,"context_line":"    with the addition of distict actions for create and delete. To"},{"line_number":6,"context_line":"    address backwards compatibility, the new rules added to the"},{"line_number":7,"context_line":"    flavor_manage.py policy file, default to the existing rule::"},{"line_number":8,"context_line":"    ``os_compute_api:os-flavor-manage``. The following policy actions"},{"line_number":9,"context_line":"    are added and enforced::"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5ff73747_1a18fa72","line":7,"range":{"start_line":7,"start_character":62,"end_line":7,"end_character":64},"in_reply_to":"5ff73747_80983d1b","updated":"2017-04-26 19:03:16.000000000","message":"Please see the previous comment here:\nhttps://review.openstack.org/#/c/449288/4/releasenotes/notes/flavor-api-policy-granularity-f563d621c615fd64.yaml","commit_id":"6565de86705e742568f2418dc5c5e95a912ea31b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"363658ce680c3511a00519834c4ed879f6b96bd2","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add granularity to the ``os_compute_api:os-flavor-manage`` policy"},{"line_number":5,"context_line":"    with the addition of distict actions for create and delete. To"},{"line_number":6,"context_line":"    address backwards compatibility, the new rules added to the"},{"line_number":7,"context_line":"    flavor_manage.py policy file, default to the existing rule"},{"line_number":8,"context_line":"    ``os_compute_api:os-flavor-manage``. In addtion,"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"1f1a1f67_c64af925","line":5,"range":{"start_line":5,"start_character":45,"end_line":5,"end_character":64},"updated":"2017-07-13 15:11:00.000000000","message":"Let\u0027s try:\n\n  create and delete:\n\n  - ``os_compute_api:os-flavor-manage:create``\n  - ``os_compute_api:os-flavor-manage:delete``\n\n  To address...","commit_id":"debe4cbd162050a7a6aac2edd01db4f4103ca523"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"e69c10d60e840ef7e4ea9f84a4d7f36e2705458b","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add granularity to the ``os_compute_api:os-flavor-manage`` policy"},{"line_number":5,"context_line":"    with the addition of distict actions for create and delete. To"},{"line_number":6,"context_line":"    address backwards compatibility, the new rules added to the"},{"line_number":7,"context_line":"    flavor_manage.py policy file, default to the existing rule"},{"line_number":8,"context_line":"    ``os_compute_api:os-flavor-manage``. In addtion,"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"1f1a1f67_155a4c4e","line":5,"range":{"start_line":5,"start_character":45,"end_line":5,"end_character":64},"in_reply_to":"1f1a1f67_c64af925","updated":"2017-07-18 19:14:49.000000000","message":"fixed in next PS","commit_id":"debe4cbd162050a7a6aac2edd01db4f4103ca523"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"363658ce680c3511a00519834c4ed879f6b96bd2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Add granularity to the ``os_compute_api:os-flavor-manage`` policy"},{"line_number":5,"context_line":"    with the addition of distict actions for create and delete. To"},{"line_number":6,"context_line":"    address backwards compatibility, the new rules added to the"},{"line_number":7,"context_line":"    flavor_manage.py policy file, default to the existing rule"},{"line_number":8,"context_line":"    ``os_compute_api:os-flavor-manage``. In addtion,"},{"line_number":9,"context_line":"    a verify_deprecated_policy method is added to see if the old"},{"line_number":10,"context_line":"    policy action is being configured instead of the new actions. The"},{"line_number":11,"context_line":"    following policy actions are added and enforced::"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"      ``os_compute_api:os-flavor-manage:create``"},{"line_number":14,"context_line":"      ``os_compute_api:os-flavor-manage:delete``"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"1f1a1f67_46d2695e","line":11,"range":{"start_line":7,"start_character":45,"end_line":11,"end_character":53},"updated":"2017-07-13 15:11:00.000000000","message":"Let\u0027s try:\n\n    ...the existing rule, ``xxx``, if it is set to a non-default value.\n\nHow this is implemented is of no relevance to readers of the release notes","commit_id":"debe4cbd162050a7a6aac2edd01db4f4103ca523"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"e69c10d60e840ef7e4ea9f84a4d7f36e2705458b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Add granularity to the ``os_compute_api:os-flavor-manage`` policy"},{"line_number":5,"context_line":"    with the addition of distict actions for create and delete. To"},{"line_number":6,"context_line":"    address backwards compatibility, the new rules added to the"},{"line_number":7,"context_line":"    flavor_manage.py policy file, default to the existing rule"},{"line_number":8,"context_line":"    ``os_compute_api:os-flavor-manage``. In addtion,"},{"line_number":9,"context_line":"    a verify_deprecated_policy method is added to see if the old"},{"line_number":10,"context_line":"    policy action is being configured instead of the new actions. The"},{"line_number":11,"context_line":"    following policy actions are added and enforced::"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"      ``os_compute_api:os-flavor-manage:create``"},{"line_number":14,"context_line":"      ``os_compute_api:os-flavor-manage:delete``"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"1f1a1f67_309316a6","line":11,"range":{"start_line":7,"start_character":45,"end_line":11,"end_character":53},"in_reply_to":"1f1a1f67_46d2695e","updated":"2017-07-18 19:14:49.000000000","message":"fixed in next PS","commit_id":"debe4cbd162050a7a6aac2edd01db4f4103ca523"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"363658ce680c3511a00519834c4ed879f6b96bd2","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    ``os_compute_api:os-flavor-manage``. In addtion,"},{"line_number":9,"context_line":"    a verify_deprecated_policy method is added to see if the old"},{"line_number":10,"context_line":"    policy action is being configured instead of the new actions. The"},{"line_number":11,"context_line":"    following policy actions are added and enforced::"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"      ``os_compute_api:os-flavor-manage:create``"},{"line_number":14,"context_line":"      ``os_compute_api:os-flavor-manage:delete``"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"1f1a1f67_2633edad","line":14,"range":{"start_line":11,"start_character":52,"end_line":14,"end_character":48},"updated":"2017-07-13 15:11:00.000000000","message":"You should use either a literal block or literal inlines. If the former, this would look like so:\n\n  and enforced::\n\n      os_compute_api:os-flavor-manage:create\n      os_compute_api:os-flavor-manage:delete\n\nIf the latter:\n\n  and enforced:\n\n  - ``os_compute_api:os-flavor-manage:create``\n  - ``os_compute_api:os-flavor-manage:delete``\n\nI would prefer the latter, personally, as seen above","commit_id":"debe4cbd162050a7a6aac2edd01db4f4103ca523"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"e69c10d60e840ef7e4ea9f84a4d7f36e2705458b","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    ``os_compute_api:os-flavor-manage``. In addtion,"},{"line_number":9,"context_line":"    a verify_deprecated_policy method is added to see if the old"},{"line_number":10,"context_line":"    policy action is being configured instead of the new actions. The"},{"line_number":11,"context_line":"    following policy actions are added and enforced::"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"      ``os_compute_api:os-flavor-manage:create``"},{"line_number":14,"context_line":"      ``os_compute_api:os-flavor-manage:delete``"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"1f1a1f67_f08c7e80","line":14,"range":{"start_line":11,"start_character":52,"end_line":14,"end_character":48},"in_reply_to":"1f1a1f67_2633edad","updated":"2017-07-18 19:14:49.000000000","message":"thanks for explaining this","commit_id":"debe4cbd162050a7a6aac2edd01db4f4103ca523"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5ee3e49b19a55484ea016c74fa813a166d89e63f","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add granularity to the ``os_compute_api:os-flavor-manage`` policy"},{"line_number":5,"context_line":"    with the addition of distinct actions for create and delete:"},{"line_number":6,"context_line":"    - ``os_compute_api:os-flavor-manage:create``"},{"line_number":7,"context_line":"    - ``os_compute_api:os-flavor-manage:delete``"},{"line_number":8,"context_line":"    To address backwards compatibility, the new rules added to the"},{"line_number":9,"context_line":"    flavor_manage.py policy file, default to the existing rule,"},{"line_number":10,"context_line":"    ``os_compute_api:os-flavor-manage``, if it is set to a non-default"}],"source_content_type":"text/x-yaml","patch_set":21,"id":"1f1a1f67_70c9f756","line":7,"range":{"start_line":6,"start_character":0,"end_line":7,"end_character":48},"updated":"2017-07-19 08:42:18.000000000","message":"I _think_ you need newlines before and after this list?","commit_id":"2f9ba5f7f586f3c4b8aeb7db62755feb69bd8016"},{"author":{"_account_id":17896,"name":"Rick Bartra","email":"rickbartra@microsoft.com","username":"rb560u"},"change_message_id":"15a1306be524c3c67b3d6626e675b6eec65c6740","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add granularity to the ``os_compute_api:os-flavor-manage`` policy"},{"line_number":5,"context_line":"    with the addition of distinct actions for create and delete:"},{"line_number":6,"context_line":"    - ``os_compute_api:os-flavor-manage:create``"},{"line_number":7,"context_line":"    - ``os_compute_api:os-flavor-manage:delete``"},{"line_number":8,"context_line":"    To address backwards compatibility, the new rules added to the"},{"line_number":9,"context_line":"    flavor_manage.py policy file, default to the existing rule,"},{"line_number":10,"context_line":"    ``os_compute_api:os-flavor-manage``, if it is set to a non-default"}],"source_content_type":"text/x-yaml","patch_set":21,"id":"1f1a1f67_5b128563","line":7,"range":{"start_line":6,"start_character":0,"end_line":7,"end_character":48},"in_reply_to":"1f1a1f67_70c9f756","updated":"2017-07-19 19:56:17.000000000","message":"ok will do","commit_id":"2f9ba5f7f586f3c4b8aeb7db62755feb69bd8016"}]}
