)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"735e53c8f24e43f1d09c828f1e3aa234bcdfa5ba","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        self.conductor_api \u003d conductor.API()"},{"line_number":335,"context_line":"        self.is_quantum_v2 \u003d utils.is_quantum_v2()"},{"line_number":336,"context_line":"        self.is_quantum_security_groups \u003d ("},{"line_number":337,"context_line":"            sg_driver.is_quantum_security_groups())"},{"line_number":338,"context_line":"        super(ComputeManager, self).__init__(service_name\u003d\"compute\","},{"line_number":339,"context_line":"                                             *args, **kwargs)"},{"line_number":340,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B3tg%3D","line":337,"updated":"2013-02-15 22:25:19.000000000","message":"i don\u0027t think any of this is necessary, see below.","commit_id":"ad313d014c991c9fffd0cb182a2e6bd1e907666a"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"978359810b3f621cf7f3259e2a7eb0775d854ecf","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        self.conductor_api \u003d conductor.API()"},{"line_number":335,"context_line":"        self.is_quantum_v2 \u003d utils.is_quantum_v2()"},{"line_number":336,"context_line":"        self.is_quantum_security_groups \u003d ("},{"line_number":337,"context_line":"            sg_driver.is_quantum_security_groups())"},{"line_number":338,"context_line":"        super(ComputeManager, self).__init__(service_name\u003d\"compute\","},{"line_number":339,"context_line":"                                             *args, **kwargs)"},{"line_number":340,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B3so%3D","line":337,"in_reply_to":"AAAAM3%2F%2B3tg%3D","updated":"2013-02-15 22:31:07.000000000","message":"Yup, I agree.","commit_id":"ad313d014c991c9fffd0cb182a2e6bd1e907666a"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"735e53c8f24e43f1d09c828f1e3aa234bcdfa5ba","unresolved":false,"context_lines":[{"line_number":679,"context_line":"        if request_spec and self.is_quantum_security_groups:"},{"line_number":680,"context_line":"            security_groups \u003d request_spec.get(\u0027security_group\u0027)"},{"line_number":681,"context_line":"        else:"},{"line_number":682,"context_line":"            security_groups \u003d []"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"        try:"},{"line_number":685,"context_line":"            self._check_instance_exists(context, instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B3t0%3D","line":682,"updated":"2013-02-15 22:25:19.000000000","message":"why not just skip this","commit_id":"ad313d014c991c9fffd0cb182a2e6bd1e907666a"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"978359810b3f621cf7f3259e2a7eb0775d854ecf","unresolved":false,"context_lines":[{"line_number":679,"context_line":"        if request_spec and self.is_quantum_security_groups:"},{"line_number":680,"context_line":"            security_groups \u003d request_spec.get(\u0027security_group\u0027)"},{"line_number":681,"context_line":"        else:"},{"line_number":682,"context_line":"            security_groups \u003d []"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"        try:"},{"line_number":685,"context_line":"            self._check_instance_exists(context, instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B3s8%3D","line":682,"in_reply_to":"AAAAM3%2F%2B3t0%3D","updated":"2013-02-15 22:31:07.000000000","message":"See comment below.","commit_id":"ad313d014c991c9fffd0cb182a2e6bd1e907666a"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"735e53c8f24e43f1d09c828f1e3aa234bcdfa5ba","unresolved":false,"context_lines":[{"line_number":712,"context_line":"                    macs \u003d self.driver.macs_for_instance(instance)"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"                    network_info \u003d self._allocate_network(context, instance,"},{"line_number":715,"context_line":"                            requested_networks, macs, security_groups)"},{"line_number":716,"context_line":""},{"line_number":717,"context_line":"                    self._instance_update("},{"line_number":718,"context_line":"                            context, instance[\u0027uuid\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B3tw%3D","line":715,"updated":"2013-02-15 22:25:19.000000000","message":"and always pass get.(\u0027security_group\u0027)","commit_id":"ad313d014c991c9fffd0cb182a2e6bd1e907666a"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"978359810b3f621cf7f3259e2a7eb0775d854ecf","unresolved":false,"context_lines":[{"line_number":712,"context_line":"                    macs \u003d self.driver.macs_for_instance(instance)"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"                    network_info \u003d self._allocate_network(context, instance,"},{"line_number":715,"context_line":"                            requested_networks, macs, security_groups)"},{"line_number":716,"context_line":""},{"line_number":717,"context_line":"                    self._instance_update("},{"line_number":718,"context_line":"                            context, instance[\u0027uuid\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B3tA%3D","line":715,"in_reply_to":"AAAAM3%2F%2B3tw%3D","updated":"2013-02-15 22:31:07.000000000","message":"The reason why I cannot do request_spec.get(\u0027security_group\u0027) and pass that is because request_spec can be None. That\u0027s why I did what I did on lines 679-682.","commit_id":"ad313d014c991c9fffd0cb182a2e6bd1e907666a"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"735e53c8f24e43f1d09c828f1e3aa234bcdfa5ba","unresolved":false,"context_lines":[{"line_number":957,"context_line":"        is_vpn \u003d pipelib.is_vpn_image(instance[\u0027image_ref\u0027])"},{"line_number":958,"context_line":"        try:"},{"line_number":959,"context_line":"            # allocate and get network info"},{"line_number":960,"context_line":"            if self.is_quantum_v2:"},{"line_number":961,"context_line":"                network_info \u003d self.network_api.allocate_for_instance("},{"line_number":962,"context_line":"                                    context, instance, vpn\u003dis_vpn,"},{"line_number":963,"context_line":"                                    requested_networks\u003drequested_networks,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B3to%3D","line":960,"updated":"2013-02-15 22:25:19.000000000","message":"I don\u0027t like this logic, just add security_groups as an optional api parameter and pass it. The other nw drivers will just ignore it.","commit_id":"ad313d014c991c9fffd0cb182a2e6bd1e907666a"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"978359810b3f621cf7f3259e2a7eb0775d854ecf","unresolved":false,"context_lines":[{"line_number":957,"context_line":"        is_vpn \u003d pipelib.is_vpn_image(instance[\u0027image_ref\u0027])"},{"line_number":958,"context_line":"        try:"},{"line_number":959,"context_line":"            # allocate and get network info"},{"line_number":960,"context_line":"            if self.is_quantum_v2:"},{"line_number":961,"context_line":"                network_info \u003d self.network_api.allocate_for_instance("},{"line_number":962,"context_line":"                                    context, instance, vpn\u003dis_vpn,"},{"line_number":963,"context_line":"                                    requested_networks\u003drequested_networks,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B3s0%3D","line":960,"in_reply_to":"AAAAM3%2F%2B3to%3D","updated":"2013-02-15 22:31:07.000000000","message":"Sure will update","commit_id":"ad313d014c991c9fffd0cb182a2e6bd1e907666a"}],"nova/network/quantumv2/api.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"49062a805cdfd5dd582bc1db7ba983685aa140ba","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        # TODO(arosen) Should optimize more to do direct query for security"},{"line_number":172,"context_line":"        # group if len(security_groups) \u003d\u003d 1"},{"line_number":173,"context_line":"        if len(security_groups):"},{"line_number":174,"context_line":"            user_security_groups \u003d quantum.list_security_groups().get("},{"line_number":175,"context_line":"                \u0027security_groups\u0027)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        for security_group in security_groups:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1CA%3D","line":174,"updated":"2013-02-18 11:23:42.000000000","message":"When a user is admin, list_security_group() returns all security groups on the system. As each tenant has a \"default\" security group, does it lead to NoUniqueMatch if security_group[\u0027name\u0027] is \"default\"?","commit_id":"5f1cae1445ffdc8053ba5a876e043a4c4bdd74e7"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"be76cb55a7494e7857f1f71c08cc89f2346b7502","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        # TODO(arosen) Should optimize more to do direct query for security"},{"line_number":172,"context_line":"        # group if len(security_groups) \u003d\u003d 1"},{"line_number":173,"context_line":"        if len(security_groups):"},{"line_number":174,"context_line":"            user_security_groups \u003d quantum.list_security_groups().get("},{"line_number":175,"context_line":"                \u0027security_groups\u0027)"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        for security_group in security_groups:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B0D0%3D","line":174,"in_reply_to":"AAAAM3%2F%2B1CA%3D","updated":"2013-02-18 18:42:24.000000000","message":"Yes it would return an error as it\u0027s currently written they would have to use the id. I\u0027ll fix this. Thanks for finding this!","commit_id":"5f1cae1445ffdc8053ba5a876e043a4c4bdd74e7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"49062a805cdfd5dd582bc1db7ba983685aa140ba","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            # is not found."},{"line_number":211,"context_line":"            if (security_groups and not (network[\u0027subnets\u0027] and"},{"line_number":212,"context_line":"                network.get(\u0027port_security_enabled\u0027, True))):"},{"line_number":213,"context_line":"                raise exception.SecurityGroupCannotBeApplied()"},{"line_number":214,"context_line":"            network_id \u003d network[\u0027id\u0027]"},{"line_number":215,"context_line":"            zone \u003d \u0027compute:%s\u0027 % instance[\u0027availability_zone\u0027]"},{"line_number":216,"context_line":"            port_req_body \u003d {\u0027port\u0027: {\u0027device_id\u0027: instance[\u0027uuid\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1Bg%3D","line":213,"updated":"2013-02-18 11:23:42.000000000","message":"Does \"port_secuirty_enabled \u003d\u003d False\" mean security group cannot be applied? I think it just means no security group is not applied. I am not sure which is the expected behavior.","commit_id":"5f1cae1445ffdc8053ba5a876e043a4c4bdd74e7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c97f87afc139ed2f589baeee9a34df8fcade909a","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            # is not found."},{"line_number":211,"context_line":"            if (security_groups and not (network[\u0027subnets\u0027] and"},{"line_number":212,"context_line":"                network.get(\u0027port_security_enabled\u0027, True))):"},{"line_number":213,"context_line":"                raise exception.SecurityGroupCannotBeApplied()"},{"line_number":214,"context_line":"            network_id \u003d network[\u0027id\u0027]"},{"line_number":215,"context_line":"            zone \u003d \u0027compute:%s\u0027 % instance[\u0027availability_zone\u0027]"},{"line_number":216,"context_line":"            port_req_body \u003d {\u0027port\u0027: {\u0027device_id\u0027: instance[\u0027uuid\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bzdo%3D","line":213,"in_reply_to":"AAAAM3%2F%2B0Dw%3D","updated":"2013-02-18 22:24:28.000000000","message":"Thanks for the clarification.\nI have not had a chance to test port security extension :-)","commit_id":"5f1cae1445ffdc8053ba5a876e043a4c4bdd74e7"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"be76cb55a7494e7857f1f71c08cc89f2346b7502","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            # is not found."},{"line_number":211,"context_line":"            if (security_groups and not (network[\u0027subnets\u0027] and"},{"line_number":212,"context_line":"                network.get(\u0027port_security_enabled\u0027, True))):"},{"line_number":213,"context_line":"                raise exception.SecurityGroupCannotBeApplied()"},{"line_number":214,"context_line":"            network_id \u003d network[\u0027id\u0027]"},{"line_number":215,"context_line":"            zone \u003d \u0027compute:%s\u0027 % instance[\u0027availability_zone\u0027]"},{"line_number":216,"context_line":"            port_req_body \u003d {\u0027port\u0027: {\u0027device_id\u0027: instance[\u0027uuid\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B0Dw%3D","line":213,"in_reply_to":"AAAAM3%2F%2B1Bg%3D","updated":"2013-02-18 18:42:24.000000000","message":"It means that a security group cannot be applied.","commit_id":"5f1cae1445ffdc8053ba5a876e043a4c4bdd74e7"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"9839b7b77cf49440d031c59454f9362e75eb9b96","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                if user_security_group[\u0027name\u0027] \u003d\u003d security_group:"},{"line_number":195,"context_line":"                    if name_match:"},{"line_number":196,"context_line":"                        msg \u003d (_(\"Multiple security groups found matching\""},{"line_number":197,"context_line":"                               \" \u0027%s\u0027. Use an ID to be more specific.\"),"},{"line_number":198,"context_line":"                                 security_group)"},{"line_number":199,"context_line":"                        raise exception.NoUniqueMatch(msg)"},{"line_number":200,"context_line":"                    name_match \u003d user_security_group[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2BuXc%3D","line":197,"updated":"2013-02-20 18:08:17.000000000","message":"femtonit: indent two more spaces to line up with the second open parenthesis…","commit_id":"ac0fc4467d197460b90539378982125ecd922125"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"025299bb8e4b3ff796464414c32f7596b9aabb06","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                if user_security_group[\u0027name\u0027] \u003d\u003d security_group:"},{"line_number":195,"context_line":"                    if name_match:"},{"line_number":196,"context_line":"                        msg \u003d (_(\"Multiple security groups found matching\""},{"line_number":197,"context_line":"                               \" \u0027%s\u0027. Use an ID to be more specific.\"),"},{"line_number":198,"context_line":"                                 security_group)"},{"line_number":199,"context_line":"                        raise exception.NoUniqueMatch(msg)"},{"line_number":200,"context_line":"                    name_match \u003d user_security_group[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2BuTU%3D","line":197,"in_reply_to":"AAAAM3%2F%2BuXc%3D","updated":"2013-02-20 18:29:58.000000000","message":"Done","commit_id":"ac0fc4467d197460b90539378982125ecd922125"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"9839b7b77cf49440d031c59454f9362e75eb9b96","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            # That is why True is returned if \u0027port_security_enabled\u0027"},{"line_number":223,"context_line":"            # is not found."},{"line_number":224,"context_line":"            if (security_groups and not (network[\u0027subnets\u0027] and"},{"line_number":225,"context_line":"                network.get(\u0027port_security_enabled\u0027, True))):"},{"line_number":226,"context_line":"                raise exception.SecurityGroupCannotBeApplied()"},{"line_number":227,"context_line":"            network_id \u003d network[\u0027id\u0027]"},{"line_number":228,"context_line":"            zone \u003d \u0027compute:%s\u0027 % instance[\u0027availability_zone\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2BuXE%3D","line":225,"updated":"2013-02-20 18:08:17.000000000","message":"femtonit: Add indentation to this line to help visually distinguish it from the following code line.","commit_id":"ac0fc4467d197460b90539378982125ecd922125"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"025299bb8e4b3ff796464414c32f7596b9aabb06","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            # That is why True is returned if \u0027port_security_enabled\u0027"},{"line_number":223,"context_line":"            # is not found."},{"line_number":224,"context_line":"            if (security_groups and not (network[\u0027subnets\u0027] and"},{"line_number":225,"context_line":"                network.get(\u0027port_security_enabled\u0027, True))):"},{"line_number":226,"context_line":"                raise exception.SecurityGroupCannotBeApplied()"},{"line_number":227,"context_line":"            network_id \u003d network[\u0027id\u0027]"},{"line_number":228,"context_line":"            zone \u003d \u0027compute:%s\u0027 % instance[\u0027availability_zone\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2BuS8%3D","line":225,"in_reply_to":"AAAAM3%2F%2BuXE%3D","updated":"2013-02-20 18:29:58.000000000","message":"Done","commit_id":"ac0fc4467d197460b90539378982125ecd922125"}],"nova/network/security_group/quantum_driver.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"49062a805cdfd5dd582bc1db7ba983685aa140ba","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        \"\"\"Returns list of security group rules owned by tenant.\"\"\""},{"line_number":121,"context_line":"        quantum \u003d quantumv2.get_client(context)"},{"line_number":122,"context_line":"        try:"},{"line_number":123,"context_line":"            return quantum.list_security_groups().get(\u0027security_groups\u0027)"},{"line_number":124,"context_line":"        except q_exc.QuantumClientException as e:"},{"line_number":125,"context_line":"            LOG.exception(_(\"Quantum Error getting security groups\"))"},{"line_number":126,"context_line":"            raise e"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1BY%3D","line":123,"updated":"2013-02-18 11:23:42.000000000","message":"tenant_id needs to be specified since all secuirty groups are returned if context is admin.","commit_id":"5f1cae1445ffdc8053ba5a876e043a4c4bdd74e7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c97f87afc139ed2f589baeee9a34df8fcade909a","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        \"\"\"Returns list of security group rules owned by tenant.\"\"\""},{"line_number":121,"context_line":"        quantum \u003d quantumv2.get_client(context)"},{"line_number":122,"context_line":"        try:"},{"line_number":123,"context_line":"            return quantum.list_security_groups().get(\u0027security_groups\u0027)"},{"line_number":124,"context_line":"        except q_exc.QuantumClientException as e:"},{"line_number":125,"context_line":"            LOG.exception(_(\"Quantum Error getting security groups\"))"},{"line_number":126,"context_line":"            raise e"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2BzcY%3D","line":123,"in_reply_to":"AAAAM3%2F%2B0Eg%3D","updated":"2013-02-18 22:24:28.000000000","message":"We need to take care of --all_tenants option.\nhttps://github.com/openstack/nova/blob/master/nova/compute/api.py#L2812\n\nIf --all_tenant option is specified, all secgroups will be returned. Otherwise, only secgroups of admin tenant will be returned.\n\nThe following code will work I believe:\nif (search_opts and \u0027all_tenants\u0027 in search_opts):\n    search_filter \u003d {}\nelse:\n    search_filter \u003d {\u0027tenant_id\u0027: project}\nreturn quantum.list_security_groups(**search_filter).get(\u0027security_groups\u0027)\n\nMy understanding is correct?","commit_id":"5f1cae1445ffdc8053ba5a876e043a4c4bdd74e7"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"be76cb55a7494e7857f1f71c08cc89f2346b7502","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        \"\"\"Returns list of security group rules owned by tenant.\"\"\""},{"line_number":121,"context_line":"        quantum \u003d quantumv2.get_client(context)"},{"line_number":122,"context_line":"        try:"},{"line_number":123,"context_line":"            return quantum.list_security_groups().get(\u0027security_groups\u0027)"},{"line_number":124,"context_line":"        except q_exc.QuantumClientException as e:"},{"line_number":125,"context_line":"            LOG.exception(_(\"Quantum Error getting security groups\"))"},{"line_number":126,"context_line":"            raise e"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B0Eg%3D","line":123,"in_reply_to":"AAAAM3%2F%2B1BY%3D","updated":"2013-02-18 18:42:24.000000000","message":"This is intentional so the admin can inspect all group. This is the same behavior within nova for security groups.","commit_id":"5f1cae1445ffdc8053ba5a876e043a4c4bdd74e7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"49062a805cdfd5dd582bc1db7ba983685aa140ba","unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        for port in ports:"},{"line_number":310,"context_line":"            if not self._has_security_group_requirements(port):"},{"line_number":311,"context_line":"                LOG.warn(\"Cannot add security group %s to %s since the port\""},{"line_number":312,"context_line":"                         \"%s does not meet security requirements\" %"},{"line_number":313,"context_line":"                         (security_group_name, instance[\u0027uuid\u0027], port[\u0027id\u0027]))"},{"line_number":314,"context_line":"                raise exception.SecurityGroupCannotBeApplied()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1BU%3D","line":311,"updated":"2013-02-18 11:23:42.000000000","message":"i18n","commit_id":"5f1cae1445ffdc8053ba5a876e043a4c4bdd74e7"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"be76cb55a7494e7857f1f71c08cc89f2346b7502","unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        for port in ports:"},{"line_number":310,"context_line":"            if not self._has_security_group_requirements(port):"},{"line_number":311,"context_line":"                LOG.warn(\"Cannot add security group %s to %s since the port\""},{"line_number":312,"context_line":"                         \"%s does not meet security requirements\" %"},{"line_number":313,"context_line":"                         (security_group_name, instance[\u0027uuid\u0027], port[\u0027id\u0027]))"},{"line_number":314,"context_line":"                raise exception.SecurityGroupCannotBeApplied()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B0Ec%3D","line":311,"in_reply_to":"AAAAM3%2F%2B1BU%3D","updated":"2013-02-18 18:42:24.000000000","message":"Done","commit_id":"5f1cae1445ffdc8053ba5a876e043a4c4bdd74e7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"49062a805cdfd5dd582bc1db7ba983685aa140ba","unresolved":false,"context_lines":[{"line_number":317,"context_line":"            port[\u0027security_groups\u0027].append(security_group_id)"},{"line_number":318,"context_line":"            updated_port \u003d {\u0027security_groups\u0027: port[\u0027security_groups\u0027]}"},{"line_number":319,"context_line":"            try:"},{"line_number":320,"context_line":"                LOG.info(\"Adding security group %s to port %s\" %"},{"line_number":321,"context_line":"                         (security_group_id, port[\u0027id\u0027]))"},{"line_number":322,"context_line":"                quantum.update_port(port[\u0027id\u0027], {\u0027port\u0027: updated_port})"},{"line_number":323,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1BE%3D","line":320,"updated":"2013-02-18 11:23:42.000000000","message":"i18n","commit_id":"5f1cae1445ffdc8053ba5a876e043a4c4bdd74e7"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"be76cb55a7494e7857f1f71c08cc89f2346b7502","unresolved":false,"context_lines":[{"line_number":317,"context_line":"            port[\u0027security_groups\u0027].append(security_group_id)"},{"line_number":318,"context_line":"            updated_port \u003d {\u0027security_groups\u0027: port[\u0027security_groups\u0027]}"},{"line_number":319,"context_line":"            try:"},{"line_number":320,"context_line":"                LOG.info(\"Adding security group %s to port %s\" %"},{"line_number":321,"context_line":"                         (security_group_id, port[\u0027id\u0027]))"},{"line_number":322,"context_line":"                quantum.update_port(port[\u0027id\u0027], {\u0027port\u0027: updated_port})"},{"line_number":323,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B0EU%3D","line":320,"in_reply_to":"AAAAM3%2F%2B1BE%3D","updated":"2013-02-18 18:42:24.000000000","message":"Done","commit_id":"5f1cae1445ffdc8053ba5a876e043a4c4bdd74e7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"49062a805cdfd5dd582bc1db7ba983685aa140ba","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"            updated_port \u003d {\u0027security_groups\u0027: port[\u0027security_groups\u0027]}"},{"line_number":367,"context_line":"            try:"},{"line_number":368,"context_line":"                LOG.info(\"Adding security group %s to port %s\" %"},{"line_number":369,"context_line":"                         (security_group_id, port[\u0027id\u0027]))"},{"line_number":370,"context_line":"                quantum.update_port(port[\u0027id\u0027], {\u0027port\u0027: updated_port})"},{"line_number":371,"context_line":"                found_security_group \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B1BA%3D","line":368,"updated":"2013-02-18 11:23:42.000000000","message":"i18n","commit_id":"5f1cae1445ffdc8053ba5a876e043a4c4bdd74e7"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"be76cb55a7494e7857f1f71c08cc89f2346b7502","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"            updated_port \u003d {\u0027security_groups\u0027: port[\u0027security_groups\u0027]}"},{"line_number":367,"context_line":"            try:"},{"line_number":368,"context_line":"                LOG.info(\"Adding security group %s to port %s\" %"},{"line_number":369,"context_line":"                         (security_group_id, port[\u0027id\u0027]))"},{"line_number":370,"context_line":"                quantum.update_port(port[\u0027id\u0027], {\u0027port\u0027: updated_port})"},{"line_number":371,"context_line":"                found_security_group \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B0EQ%3D","line":368,"in_reply_to":"AAAAM3%2F%2B1BA%3D","updated":"2013-02-18 18:42:24.000000000","message":"Done","commit_id":"5f1cae1445ffdc8053ba5a876e043a4c4bdd74e7"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"69298a175026d608ade3012fd7a30b957d2dcc6a","unresolved":false,"context_lines":[{"line_number":17,"context_line":"#"},{"line_number":18,"context_line":"# @author: Aaron Rosen, Nicira Networks, Inc."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from webob import exc"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from nova.compute import api as compute_api"},{"line_number":23,"context_line":"from nova import context"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2BunY%3D","line":20,"updated":"2013-02-20 16:21:39.000000000","message":"Oops.. I need to remove all these too where i raise these.","commit_id":"ac0fc4467d197460b90539378982125ecd922125"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"025299bb8e4b3ff796464414c32f7596b9aabb06","unresolved":false,"context_lines":[{"line_number":17,"context_line":"#"},{"line_number":18,"context_line":"# @author: Aaron Rosen, Nicira Networks, Inc."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from webob import exc"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from nova.compute import api as compute_api"},{"line_number":23,"context_line":"from nova import context"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2BuQI%3D","line":20,"in_reply_to":"AAAAM3%2F%2BuUc%3D","updated":"2013-02-20 18:29:58.000000000","message":"The reason why i say this is because using the EC2 vs  Openstack api errors raise different errors/http codes.   So I should not be raising anything from webob.exc instead i should be calling one of these:  \n\nraise_invalid_property(msg):\nraise_group_already_exists(msg):\nraise_invalid_group(msg):\nraise_invalid_cidr(cidr, decoding_exception\u003dNone): \nraise_over_quota(msg):\nraise_not_found(msg):\n\nwhich will raise the right type of error. In my next patch I call those functions where I can. But unfortunately for create_security_group() quantum will return a 401 for multiple different error codes (over_quota, bad input, etc) so for now i\u0027m just  raising  exc.HTTPBadRequest(). I\u0027d like to give a shot at  improving/removing that in a bug fix if that\u0027s okay with the reviewers. To do this I\u0027ll need to parse e.message from quantum to figure out which one to raise.  Everything here will still work with the ec2 api but if you generate an error it would be hard for the user to figure out why.","commit_id":"ac0fc4467d197460b90539378982125ecd922125"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"9839b7b77cf49440d031c59454f9362e75eb9b96","unresolved":false,"context_lines":[{"line_number":17,"context_line":"#"},{"line_number":18,"context_line":"# @author: Aaron Rosen, Nicira Networks, Inc."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from webob import exc"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from nova.compute import api as compute_api"},{"line_number":23,"context_line":"from nova import context"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2BuUc%3D","line":20,"in_reply_to":"AAAAM3%2F%2BunY%3D","updated":"2013-02-20 18:08:17.000000000","message":"I don\u0027t understand your comment here; do you mean you have more work to do on this file?","commit_id":"ac0fc4467d197460b90539378982125ecd922125"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"9839b7b77cf49440d031c59454f9362e75eb9b96","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from nova.openstack.common import log as logging"},{"line_number":29,"context_line":"from nova.openstack.common import uuidutils"},{"line_number":30,"context_line":"from quantumclient.common import exceptions as q_exc"},{"line_number":31,"context_line":"from quantumclient.quantum import v2_0 as quantumv20"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from nova import utils"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2BuU8%3D","line":31,"updated":"2013-02-20 18:08:17.000000000","message":"I would count \"quantumclient\" as a third-party import, meaning these should be grouped with the webob.exc import.","commit_id":"ac0fc4467d197460b90539378982125ecd922125"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"025299bb8e4b3ff796464414c32f7596b9aabb06","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from nova.openstack.common import log as logging"},{"line_number":29,"context_line":"from nova.openstack.common import uuidutils"},{"line_number":30,"context_line":"from quantumclient.common import exceptions as q_exc"},{"line_number":31,"context_line":"from quantumclient.quantum import v2_0 as quantumv20"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from nova import utils"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2BuPI%3D","line":31,"in_reply_to":"AAAAM3%2F%2BuU8%3D","updated":"2013-02-20 18:29:58.000000000","message":"Done, i agree.","commit_id":"ac0fc4467d197460b90539378982125ecd922125"}],"nova/tests/api/openstack/compute/contrib/test_quantum_security_groups.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"9839b7b77cf49440d031c59454f9362e75eb9b96","unresolved":false,"context_lines":[{"line_number":18,"context_line":"# @author: Aaron Rosen, Nicira Networks, Inc."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from lxml import etree"},{"line_number":21,"context_line":"import uuid"},{"line_number":22,"context_line":"import webob"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2BuVg%3D","line":21,"updated":"2013-02-20 18:08:17.000000000","message":"uuid is a standard import and should be in a separate group of imports preceding the other two imports here.","commit_id":"ac0fc4467d197460b90539378982125ecd922125"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"025299bb8e4b3ff796464414c32f7596b9aabb06","unresolved":false,"context_lines":[{"line_number":18,"context_line":"# @author: Aaron Rosen, Nicira Networks, Inc."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from lxml import etree"},{"line_number":21,"context_line":"import uuid"},{"line_number":22,"context_line":"import webob"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2BuO4%3D","line":21,"in_reply_to":"AAAAM3%2F%2BuVg%3D","updated":"2013-02-20 18:29:58.000000000","message":"Done","commit_id":"ac0fc4467d197460b90539378982125ecd922125"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"9839b7b77cf49440d031c59454f9362e75eb9b96","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import uuid"},{"line_number":22,"context_line":"import webob"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from nova.api.openstack.compute.contrib import security_groups"},{"line_number":26,"context_line":"from nova.api.openstack import xmlutil"},{"line_number":27,"context_line":"from nova import compute"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2BuVc%3D","line":24,"updated":"2013-02-20 18:08:17.000000000","message":"One too many blank lines here…","commit_id":"ac0fc4467d197460b90539378982125ecd922125"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"025299bb8e4b3ff796464414c32f7596b9aabb06","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import uuid"},{"line_number":22,"context_line":"import webob"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from nova.api.openstack.compute.contrib import security_groups"},{"line_number":26,"context_line":"from nova.api.openstack import xmlutil"},{"line_number":27,"context_line":"from nova import compute"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2BuO0%3D","line":24,"in_reply_to":"AAAAM3%2F%2BuVc%3D","updated":"2013-02-20 18:29:58.000000000","message":"Done","commit_id":"ac0fc4467d197460b90539378982125ecd922125"}]}
