)]}'
{"etc/policy.json":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":8,"context_line":"    \"extension:provider_network:view\": [[\"rule:admin_only\"]],"},{"line_number":9,"context_line":"    \"extension:provider_network:set\": [[\"rule:admin_only\"]],"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    \"extension:router:view\": [[\"rule:regular_user\"]],"},{"line_number":12,"context_line":"    \"extension:router:set\": [[\"rule:admin_only\"]],"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    \"networks:private:read\": [[\"rule:admin_or_owner\"]],"}],"source_content_type":"application/json","patch_set":5,"id":"AAAALH%2F%2FgCg%3D","line":11,"updated":"2012-09-05 21:37:00.000000000","message":"We should use same style.\n extension:l3:view is not make sense, because we can also see floating ips.\nSo I prefer\n\nextension:l3:router:view \nor \nextension:l3:get_router ( same style with network )","commit_id":"cb55eccd867ce4a8186e70dcfeebd1e33cdc6511"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"unresolved":false,"context_lines":[{"line_number":8,"context_line":"    \"extension:provider_network:view\": [[\"rule:admin_only\"]],"},{"line_number":9,"context_line":"    \"extension:provider_network:set\": [[\"rule:admin_only\"]],"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    \"extension:router:view\": [[\"rule:regular_user\"]],"},{"line_number":12,"context_line":"    \"extension:router:set\": [[\"rule:admin_only\"]],"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"    \"networks:private:read\": [[\"rule:admin_or_owner\"]],"}],"source_content_type":"application/json","patch_set":5,"id":"AAAALH%2F%2Ff3E%3D","line":11,"in_reply_to":"AAAALH%2F%2FgCg%3D","updated":"2012-09-06 00:40:22.000000000","message":"I am a little bit confused since this patch is not using extension:l3:view. I think it is just basing the name on the above provider_network extension rules.","commit_id":"cb55eccd867ce4a8186e70dcfeebd1e33cdc6511"}],"quantum/db/l3_db.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9b9fdd5112198ee23102351730611d402259c45f","unresolved":false,"context_lines":[{"line_number":589,"context_line":"                context, network[\u0027id\u0027])"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"    def _process_l3_create(self, context, net_data, net_id):"},{"line_number":592,"context_line":"        external \u003d net_data.get(\u0027router:external\u0027)"},{"line_number":593,"context_line":"        external_set \u003d attributes.is_attr_set(external)"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"        if not external_set:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FiYw%3D","line":592,"updated":"2012-09-03 10:31:29.000000000","message":"Maybe \u0027router:external\u0027 should be a define?","commit_id":"0588f5e0034e705643810660f27d8f0ca5cae2c6"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"d32bb91b8a3e54c364e49cc71e7bee711ff3b9ed","unresolved":false,"context_lines":[{"line_number":614,"context_line":"            return"},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"        if new_value:"},{"line_number":617,"context_line":"            context.session.add(ExternalNetwork(network_id\u003dnet_id))"},{"line_number":618,"context_line":"        else:"},{"line_number":619,"context_line":"            # must make sure we do not have any external gateway ports"},{"line_number":620,"context_line":"            # (and thus, possible floating IPs) on this network before"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FiZU%3D","line":617,"updated":"2012-09-03 08:58:47.000000000","message":"We should check the network is not in use at the moment. (ie: ports associated with VMs / dhcp agent)","commit_id":"0588f5e0034e705643810660f27d8f0ca5cae2c6"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":614,"context_line":"            return"},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"        if new_value:"},{"line_number":617,"context_line":"            context.session.add(ExternalNetwork(network_id\u003dnet_id))"},{"line_number":618,"context_line":"        else:"},{"line_number":619,"context_line":"            # must make sure we do not have any external gateway ports"},{"line_number":620,"context_line":"            # (and thus, possible floating IPs) on this network before"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FiXQ%3D","line":617,"in_reply_to":"AAAALH%2F%2FiXs%3D","updated":"2012-09-03 10:06:16.000000000","message":"I think this makes sense as a use case. \nIn this case, do you think floating IPs and VMs on public network should share the same subnet, or do we want to allow multiple subnets (for instance a per-tenant public cidr which could be a /29, /30, /31 or /32 subnet - I recall hosting provider used to assign a small batch of contiguous public IP addresses for a fee) ?\nI reckon both cases are meaningful, but in the latter one we should ensure the external gateway for the NAT service is set appropriately (I think currently we just pick the first ip address on the ex gw port).","commit_id":"0588f5e0034e705643810660f27d8f0ca5cae2c6"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"54004273b1ae89419347e2ad1830252b604cb2e9","unresolved":false,"context_lines":[{"line_number":614,"context_line":"            return"},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"        if new_value:"},{"line_number":617,"context_line":"            context.session.add(ExternalNetwork(network_id\u003dnet_id))"},{"line_number":618,"context_line":"        else:"},{"line_number":619,"context_line":"            # must make sure we do not have any external gateway ports"},{"line_number":620,"context_line":"            # (and thus, possible floating IPs) on this network before"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FiXs%3D","line":617,"in_reply_to":"AAAALH%2F%2FiZU%3D","updated":"2012-09-03 09:52:16.000000000","message":"This is tricky.  Do we want to make it impossible for a provider to have a network that is both external and used by VMs?  If a cloud had only a single large public subnet, yet wanted both a \"public\" VM network and a pool for floating IPs, I imagine it might be used as both. What do you think?","commit_id":"0588f5e0034e705643810660f27d8f0ca5cae2c6"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":618,"context_line":"        else:"},{"line_number":619,"context_line":"            # must make sure we do not have any external gateway ports"},{"line_number":620,"context_line":"            # (and thus, possible floating IPs) on this network before"},{"line_number":621,"context_line":"            # allow it to be update to external\u003dFalse"},{"line_number":622,"context_line":"            try:"},{"line_number":623,"context_line":"                context.session.query(models_v2.Port).filter_by("},{"line_number":624,"context_line":"                    device_owner\u003dDEVICE_OWNER_ROUTER_GW,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FiXM%3D","line":621,"updated":"2012-09-03 10:06:16.000000000","message":"Assuming we can have VMs directly connected on the public network, what would be the correct behavior here? Would it make sense make them private, even if their ports have public IP addresses? Also, this might cause disruption to users running instances on an external network.","commit_id":"0588f5e0034e705643810660f27d8f0ca5cae2c6"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"d32bb91b8a3e54c364e49cc71e7bee711ff3b9ed","unresolved":false,"context_lines":[{"line_number":640,"context_line":"        if vals[0]:"},{"line_number":641,"context_line":"            return [n for n in nets if n[\u0027id\u0027] in ext_nets]"},{"line_number":642,"context_line":"        else:"},{"line_number":643,"context_line":"            return [n for n in nets if n[\u0027id\u0027] not in ext_nets]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FiY8%3D","line":643,"updated":"2012-09-03 08:58:47.000000000","message":"return [n for n in nets if (n[\u0027id\u0027] in ext_nets) \u003d\u003d vals[0] ]\n\nseems to work. If you can confirm this, we could remove a conditional statement, which is always good","commit_id":"0588f5e0034e705643810660f27d8f0ca5cae2c6"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"54004273b1ae89419347e2ad1830252b604cb2e9","unresolved":false,"context_lines":[{"line_number":640,"context_line":"        if vals[0]:"},{"line_number":641,"context_line":"            return [n for n in nets if n[\u0027id\u0027] in ext_nets]"},{"line_number":642,"context_line":"        else:"},{"line_number":643,"context_line":"            return [n for n in nets if n[\u0027id\u0027] not in ext_nets]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FiXo%3D","line":643,"in_reply_to":"AAAALH%2F%2FiY8%3D","updated":"2012-09-03 09:52:16.000000000","message":"good point, will do.","commit_id":"0588f5e0034e705643810660f27d8f0ca5cae2c6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":588,"context_line":"            network[\u0027router:external\u0027] \u003d self._network_is_external("},{"line_number":589,"context_line":"                context, network[\u0027id\u0027])"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"    def _process_l3_create(self, context, net_data, net_id):"},{"line_number":592,"context_line":"        external \u003d net_data.get(\u0027router:external\u0027)"},{"line_number":593,"context_line":"        external_set \u003d attributes.is_attr_set(external)"},{"line_number":594,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2FhpQ%3D","line":591,"updated":"2012-09-04 13:24:04.000000000","message":"Both methods called in plugins and methods for internal use in L3 mixin have method names starting with \u0027_\u0027. From the point of plugin developer\u0027s view, these two types of methods should be distinguished clearly. One idea is that some prefix is added to method name called from plugins.\n\nThis comment applies to _extend_network_dict_l3() to _filter_nets_l3().","commit_id":"85f03cde7f4e029f66668724962f64c057d1a48a"}],"quantum/extensions/l3.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9b9fdd5112198ee23102351730611d402259c45f","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class ExternalNetworkInUse(qexception.InUse):"},{"line_number":63,"context_line":"    message \u003d _(\"External network %(net_id) cannot be updated to be made \""},{"line_number":64,"context_line":"                \"non-external, since it has existing gateway ports\")"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FiYk%3D","line":63,"updated":"2012-09-03 10:31:29.000000000","message":"%(net_id)s","commit_id":"0588f5e0034e705643810660f27d8f0ca5cae2c6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9b9fdd5112198ee23102351730611d402259c45f","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    @classmethod"},{"line_number":154,"context_line":"    def get_namespace(cls):"},{"line_number":155,"context_line":"        return \"http://docs.openstack.org/ext/quantum/router/api/v1.0\""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    @classmethod"},{"line_number":158,"context_line":"    def get_updated(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALH%2F%2FiYg%3D","line":155,"updated":"2012-09-03 10:31:29.000000000","message":"Not related to this patch, but I guess that we need to start to fill all of these docs for the extensions. Any idea how?","commit_id":"0588f5e0034e705643810660f27d8f0ca5cae2c6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class ExternalNetworkInUse(qexception.InUse):"},{"line_number":63,"context_line":"    message \u003d _(\"External network %(net_id) cannot be updated to be made \""},{"line_number":64,"context_line":"                \"non-external, since it has existing gateway ports\")"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2Fgzc%3D","line":63,"updated":"2012-09-05 08:26:17.000000000","message":"%(net_id)s","commit_id":"cb55eccd867ce4a8186e70dcfeebd1e33cdc6511"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class ExternalNetworkInUse(qexception.InUse):"},{"line_number":63,"context_line":"    message \u003d _(\"External network %(net_id) cannot be updated to be made \""},{"line_number":64,"context_line":"                \"non-external, since it has existing gateway ports\")"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FfvM%3D","line":63,"updated":"2012-09-06 05:06:37.000000000","message":"This is lacking the s. It will just print %(net_id) instaed of the actual network id.","commit_id":"d9d6e3c724c33a9afc7346f092bf7753bac09f55"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class ExternalNetworkInUse(qexception.InUse):"},{"line_number":63,"context_line":"    message \u003d _(\"External network %(net_id) cannot be updated to be made \""},{"line_number":64,"context_line":"                \"non-external, since it has existing gateway ports\")"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2Fft4%3D","line":63,"in_reply_to":"AAAALH%2F%2FfvM%3D","updated":"2012-09-06 05:45:46.000000000","message":"Done","commit_id":"d9d6e3c724c33a9afc7346f092bf7753bac09f55"}],"quantum/tests/unit/test_l3_plugin.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"aee6ff7014a3d86f7da6f8bb85f060f3d84ae57b","unresolved":false,"context_lines":[{"line_number":400,"context_line":"                body \u003d self._router_interface_action(\u0027add\u0027,"},{"line_number":401,"context_line":"                                                     r[\u0027router\u0027][\u0027id\u0027],"},{"line_number":402,"context_line":"                                                     s[\u0027subnet\u0027][\u0027id\u0027],"},{"line_number":403,"context_line":"                                                     None,"},{"line_number":404,"context_line":"                                                     expected_code\u003d"},{"line_number":405,"context_line":"                                                     exc.HTTPBadRequest.code)"},{"line_number":406,"context_line":"                body \u003d self._router_interface_action(\u0027remove\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fhes%3D","line":403,"updated":"2012-09-04 15:59:55.000000000","message":"\u003d(\n exc.HTTPBadRequest.code))","commit_id":"85f03cde7f4e029f66668724962f64c057d1a48a"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"aee6ff7014a3d86f7da6f8bb85f060f3d84ae57b","unresolved":false,"context_lines":[{"line_number":419,"context_line":"                                                      p1[\u0027port\u0027][\u0027id\u0027])"},{"line_number":420,"context_line":"                        self._router_interface_action(\u0027add\u0027,"},{"line_number":421,"context_line":"                                                      r[\u0027router\u0027][\u0027id\u0027],"},{"line_number":422,"context_line":"                                                      None,"},{"line_number":423,"context_line":"                                                      p2[\u0027port\u0027][\u0027id\u0027],"},{"line_number":424,"context_line":"                                                      expected_code\u003d"},{"line_number":425,"context_line":"                                                      exc.HTTPBadRequest.code)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fhew%3D","line":422,"updated":"2012-09-04 15:59:55.000000000","message":"\u003d(\n exc.HTTPBadRequest.code))","commit_id":"85f03cde7f4e029f66668724962f64c057d1a48a"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"aee6ff7014a3d86f7da6f8bb85f060f3d84ae57b","unresolved":false,"context_lines":[{"line_number":435,"context_line":"                                                 r[\u0027router\u0027][\u0027id\u0027],"},{"line_number":436,"context_line":"                                                 None,"},{"line_number":437,"context_line":"                                                 None,"},{"line_number":438,"context_line":"                                                 expected_code\u003d"},{"line_number":439,"context_line":"                                                 exc.HTTPBadRequest.code)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def test_router_add_gateway(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fhe0%3D","line":438,"updated":"2012-09-04 15:59:55.000000000","message":"\u003d(\n exc.HTTPBadRequest.code))","commit_id":"85f03cde7f4e029f66668724962f64c057d1a48a"}]}
