)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b69f7b7dcbe4ca4f178a3c2330dba3dde23f7777","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Raise better exception if duplicate security groups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previouly a 500 error was raised if one was trying to launch an instance"},{"line_number":10,"context_line":"with a security group that shared the name as another security group. With"},{"line_number":11,"context_line":"this patch a more clear error message is raised."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAPn%2F%2Fi9o%3D","line":9,"updated":"2013-06-28 01:43:13.000000000","message":"Typo, s/Previouly/Previously","commit_id":"45d07342fa4b5f263cdbcf92c4666f2dfdba9bb4"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"01c005076e91c8c01cd9f2abc4466d27e028bfcd","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Raise better exception if duplicate security groups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previouly a 500 error was raised if one was trying to launch an instance"},{"line_number":10,"context_line":"with a security group that shared the name as another security group. With"},{"line_number":11,"context_line":"this patch a more clear error message is raised."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAPn%2F%2Fi6w%3D","line":9,"in_reply_to":"AAAAPn%2F%2Fi9o%3D","updated":"2013-06-28 16:30:35.000000000","message":"Done","commit_id":"45d07342fa4b5f263cdbcf92c4666f2dfdba9bb4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b69f7b7dcbe4ca4f178a3c2330dba3dde23f7777","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Raise better exception if duplicate security groups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previouly a 500 error was raised if one was trying to launch an instance"},{"line_number":10,"context_line":"with a security group that shared the name as another security group. With"},{"line_number":11,"context_line":"this patch a more clear error message is raised."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Fixes bug 1161472"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAPn%2F%2Fi9k%3D","line":10,"updated":"2013-06-28 01:43:13.000000000","message":"s/shared the name/shared the same name","commit_id":"45d07342fa4b5f263cdbcf92c4666f2dfdba9bb4"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"01c005076e91c8c01cd9f2abc4466d27e028bfcd","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Raise better exception if duplicate security groups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previouly a 500 error was raised if one was trying to launch an instance"},{"line_number":10,"context_line":"with a security group that shared the name as another security group. With"},{"line_number":11,"context_line":"this patch a more clear error message is raised."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Fixes bug 1161472"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAPn%2F%2Fi6o%3D","line":10,"in_reply_to":"AAAAPn%2F%2Fi9k%3D","updated":"2013-06-28 16:30:35.000000000","message":"Done","commit_id":"45d07342fa4b5f263cdbcf92c4666f2dfdba9bb4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95f3870e0b3912e337c84d3f3ccf226831b174ab","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Raise better exception if duplicate security groups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previouly a 500 error was raised if one was trying to launch an instance"},{"line_number":10,"context_line":"with a security group that shared the name as another security group. With"},{"line_number":11,"context_line":"this patch a more clear error message is raised."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAS3%2F%2F8HM%3D","line":9,"updated":"2013-09-16 21:13:03.000000000","message":"s/Previouly/Previously/","commit_id":"3d0e7c23cc39e6b5f5ed510a76220ec00d405d2e"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"aa325450f2e820af17cfb773f2607d959f3680a0","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Raise better exception if duplicate security groups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previouly a 500 error was raised if one was trying to launch an instance"},{"line_number":10,"context_line":"with a security group that shared the name as another security group. With"},{"line_number":11,"context_line":"this patch a more clear error message is raised."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAS3%2F%2F8FM%3D","line":9,"in_reply_to":"AAAAS3%2F%2F8HM%3D","updated":"2013-09-16 21:23:16.000000000","message":"Done","commit_id":"3d0e7c23cc39e6b5f5ed510a76220ec00d405d2e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"95f3870e0b3912e337c84d3f3ccf226831b174ab","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Raise better exception if duplicate security groups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previouly a 500 error was raised if one was trying to launch an instance"},{"line_number":10,"context_line":"with a security group that shared the name as another security group. With"},{"line_number":11,"context_line":"this patch a more clear error message is raised."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Fixes bug 1161472"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAS3%2F%2F8HI%3D","line":10,"updated":"2013-09-16 21:13:03.000000000","message":"s/shared the name/shared the same name/","commit_id":"3d0e7c23cc39e6b5f5ed510a76220ec00d405d2e"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"aa325450f2e820af17cfb773f2607d959f3680a0","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Raise better exception if duplicate security groups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previouly a 500 error was raised if one was trying to launch an instance"},{"line_number":10,"context_line":"with a security group that shared the name as another security group. With"},{"line_number":11,"context_line":"this patch a more clear error message is raised."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Fixes bug 1161472"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAS3%2F%2F8E4%3D","line":10,"in_reply_to":"AAAAS3%2F%2F8HI%3D","updated":"2013-09-16 21:23:16.000000000","message":"Done","commit_id":"3d0e7c23cc39e6b5f5ed510a76220ec00d405d2e"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"703b64791ceee43dd64175ed0bc392b8559016db","unresolved":false,"context_lines":[{"line_number":10,"context_line":"with a security group that shared the same name as another security group."},{"line_number":11,"context_line":"With this patch a more clear error message is raised."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Fixes bug 1161472"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I285bedbb2e0b3f4cd24cfa3a9b17131ad0200afa"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAATn%2F%2BbeE%3D","line":13,"updated":"2013-11-26 07:33:22.000000000","message":"nit: Closes-Bug: #1161472","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"db41069ee557b6b480b99fdd2cf2d77d015117d6","unresolved":false,"context_lines":[{"line_number":10,"context_line":"with a security group that shared the same name as another security group."},{"line_number":11,"context_line":"With this patch a more clear error message is raised."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Fixes bug 1161472"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I285bedbb2e0b3f4cd24cfa3a9b17131ad0200afa"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAATn%2F%2BJmg%3D","line":13,"in_reply_to":"AAAATn%2F%2BbeE%3D","updated":"2013-12-01 18:59:43.000000000","message":"I\u0027ll make that change if there are additional nits.","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"}],"nova/api/openstack/compute/contrib/security_groups.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"338a180ecfc01f973f45c7dae0eb2933f32383e9","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        return sg_rule"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"@contextlib.contextmanager"},{"line_number":183,"context_line":"def translate_exceptions():"},{"line_number":184,"context_line":"    \"\"\"Translate nova exceptions to http exceptions.\"\"\""},{"line_number":185,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BEgg%3D","line":182,"updated":"2013-12-02 21:32:34.000000000","message":"Wondering why this isn\u0027t the nova v3 security_groups API, looks like because the same set of controllers isn\u0027t in the v3 API.","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"87204cc89a29da3f63e73fcfceba05bf4089b265","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        return sg_rule"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"@contextlib.contextmanager"},{"line_number":183,"context_line":"def translate_exceptions():"},{"line_number":184,"context_line":"    \"\"\"Translate nova exceptions to http exceptions.\"\"\""},{"line_number":185,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BD2U%3D","line":182,"in_reply_to":"AAAATn%2F%2BEgg%3D","updated":"2013-12-02 23:15:20.000000000","message":"Yea we don\u0027t support proxying of security group information to neutron in the V3 API.","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"}],"nova/api/openstack/compute/plugins/v3/security_groups.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"dc6169cf6737a6baa52153940a516df58a0c1515","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    @staticmethod"},{"line_number":246,"context_line":"    def raise_not_unique(msg):"},{"line_number":247,"context_line":"            raise exception.NoUniqueMatch(msg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2Fuvk%3D","line":247,"updated":"2013-09-20 13:21:04.000000000","message":"There have extra indent","commit_id":"ee6064419b6c4062880ca3995e38f5e62701b5bd"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"997637738d2f73e1ef571a8867917896069b4db7","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    @staticmethod"},{"line_number":246,"context_line":"    def raise_not_unique(msg):"},{"line_number":247,"context_line":"            raise exception.NoUniqueMatch(msg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2FtGk%3D","line":247,"in_reply_to":"AAAAS3%2F%2Fuvk%3D","updated":"2013-09-24 22:20:39.000000000","message":"Done","commit_id":"ee6064419b6c4062880ca3995e38f5e62701b5bd"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"3558a8fe33f8549bc8cb372ec5760acc7998f335","unresolved":false,"context_lines":[{"line_number":953,"context_line":"                exception.PortNotFound,"},{"line_number":954,"context_line":"                exception.SecurityGroupNotFound,"},{"line_number":955,"context_line":"                exception.InvalidBDM,"},{"line_number":956,"context_line":"                exception.NoUniqueMatch) as error:"},{"line_number":957,"context_line":"            raise exc.HTTPBadRequest(explanation\u003derror.format_message())"},{"line_number":958,"context_line":"        except exception.PortInUse as error:"},{"line_number":959,"context_line":"            raise exc.HTTPConflict(explanation\u003derror.format_message())"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2FBZI%3D","line":956,"updated":"2013-09-13 11:07:04.000000000","message":"nit: HTTPConflict more suitable than BadRequest IMHO","commit_id":"c90e0c3f893fcc8347634e251d5918dfe4e9ecb7"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"c52272eaf30618d82647e1d51cbb1e3066f28be4","unresolved":false,"context_lines":[{"line_number":953,"context_line":"                exception.PortNotFound,"},{"line_number":954,"context_line":"                exception.SecurityGroupNotFound,"},{"line_number":955,"context_line":"                exception.InvalidBDM,"},{"line_number":956,"context_line":"                exception.NoUniqueMatch) as error:"},{"line_number":957,"context_line":"            raise exc.HTTPBadRequest(explanation\u003derror.format_message())"},{"line_number":958,"context_line":"        except exception.PortInUse as error:"},{"line_number":959,"context_line":"            raise exc.HTTPConflict(explanation\u003derror.format_message())"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2FAQQ%3D","line":956,"in_reply_to":"AAAASn%2F%2FBZI%3D","updated":"2013-09-13 17:20:45.000000000","message":"Good catch, thanks i agree.","commit_id":"c90e0c3f893fcc8347634e251d5918dfe4e9ecb7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"dc6169cf6737a6baa52153940a516df58a0c1515","unresolved":false,"context_lines":[{"line_number":955,"context_line":"                exception.InvalidBDM) as error:"},{"line_number":956,"context_line":"            raise exc.HTTPBadRequest(explanation\u003derror.format_message())"},{"line_number":957,"context_line":"        except (exception.PortInUse,"},{"line_number":958,"context_line":"                exception.NoUniqueMatch) as error:"},{"line_number":959,"context_line":"            raise exc.HTTPConflict(explanation\u003derror.format_message())"},{"line_number":960,"context_line":""},{"line_number":961,"context_line":"        # If the caller wanted a reservation_id, return it"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2Futk%3D","line":958,"updated":"2013-09-20 13:21:04.000000000","message":"we need doing same change for v3 \u0027nova.api.openstack.compute.plugins.v3.servers\u0027. And do we need api layer test?","commit_id":"ee6064419b6c4062880ca3995e38f5e62701b5bd"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"997637738d2f73e1ef571a8867917896069b4db7","unresolved":false,"context_lines":[{"line_number":955,"context_line":"                exception.InvalidBDM) as error:"},{"line_number":956,"context_line":"            raise exc.HTTPBadRequest(explanation\u003derror.format_message())"},{"line_number":957,"context_line":"        except (exception.PortInUse,"},{"line_number":958,"context_line":"                exception.NoUniqueMatch) as error:"},{"line_number":959,"context_line":"            raise exc.HTTPConflict(explanation\u003derror.format_message())"},{"line_number":960,"context_line":""},{"line_number":961,"context_line":"        # If the caller wanted a reservation_id, return it"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2Fmag%3D","line":958,"in_reply_to":"AAAAS3%2F%2Futk%3D","updated":"2013-09-24 22:20:39.000000000","message":"Done","commit_id":"ee6064419b6c4062880ca3995e38f5e62701b5bd"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a7e9f5405f6103258fe176698e3f982c8b48428d","unresolved":false,"context_lines":[{"line_number":956,"context_line":"                exception.InvalidBDM) as error:"},{"line_number":957,"context_line":"            raise exc.HTTPBadRequest(explanation\u003derror.format_message())"},{"line_number":958,"context_line":"        except (exception.PortInUse,"},{"line_number":959,"context_line":"                exception.NoUniqueMatch) as error:"},{"line_number":960,"context_line":"            raise exc.HTTPConflict(explanation\u003derror.format_message())"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"        # If the caller wanted a reservation_id, return it"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAS3%2F%2Fgp4%3D","line":959,"updated":"2013-09-25 13:55:16.000000000","message":"Should we add unittest for this case?","commit_id":"93b72e35db62ba60ba931b70e2e7bf0cc34ba871"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"1d5501d0ed086bc30b6e12ac45d4d0074b551c9a","unresolved":false,"context_lines":[{"line_number":956,"context_line":"                exception.InvalidBDM) as error:"},{"line_number":957,"context_line":"            raise exc.HTTPBadRequest(explanation\u003derror.format_message())"},{"line_number":958,"context_line":"        except (exception.PortInUse,"},{"line_number":959,"context_line":"                exception.NoUniqueMatch) as error:"},{"line_number":960,"context_line":"            raise exc.HTTPConflict(explanation\u003derror.format_message())"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"        # If the caller wanted a reservation_id, return it"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2BeUU%3D","line":959,"in_reply_to":"AAAAS3%2F%2Fgp4%3D","updated":"2013-11-25 17:47:20.000000000","message":"Done","commit_id":"93b72e35db62ba60ba931b70e2e7bf0cc34ba871"}],"nova/network/security_group/neutron_driver.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"dc6169cf6737a6baa52153940a516df58a0c1515","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                    neutron, \u0027security_group\u0027, name)"},{"line_number":129,"context_line":"            group \u003d neutron.show_security_group(id).get(\u0027security_group\u0027)"},{"line_number":130,"context_line":"        except n_exc.NeutronClientNoUniqueMatch as e:"},{"line_number":131,"context_line":"            self.raise_not_unique(e)"},{"line_number":132,"context_line":"        except n_exc.NeutronClientException as e:"},{"line_number":133,"context_line":"            exc_info \u003d sys.exc_info()"},{"line_number":134,"context_line":"            if e.status_code \u003d\u003d 404:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2Fut0%3D","line":131,"updated":"2013-09-20 13:21:04.000000000","message":"Why we need this wrap function? can we raise exception.NoUniqueMatch directly at here?","commit_id":"ee6064419b6c4062880ca3995e38f5e62701b5bd"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"997637738d2f73e1ef571a8867917896069b4db7","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                    neutron, \u0027security_group\u0027, name)"},{"line_number":129,"context_line":"            group \u003d neutron.show_security_group(id).get(\u0027security_group\u0027)"},{"line_number":130,"context_line":"        except n_exc.NeutronClientNoUniqueMatch as e:"},{"line_number":131,"context_line":"            self.raise_not_unique(e)"},{"line_number":132,"context_line":"        except n_exc.NeutronClientException as e:"},{"line_number":133,"context_line":"            exc_info \u003d sys.exc_info()"},{"line_number":134,"context_line":"            if e.status_code \u003d\u003d 404:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2FixA%3D","line":131,"in_reply_to":"AAAAS3%2F%2Fut0%3D","updated":"2013-09-24 22:20:39.000000000","message":"Right  - we don\u0027t need to do this for this exception.","commit_id":"ee6064419b6c4062880ca3995e38f5e62701b5bd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"338a180ecfc01f973f45c7dae0eb2933f32383e9","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                id \u003d neutronv20.find_resourceid_by_name_or_id("},{"line_number":128,"context_line":"                    neutron, \u0027security_group\u0027, name)"},{"line_number":129,"context_line":"            group \u003d neutron.show_security_group(id).get(\u0027security_group\u0027)"},{"line_number":130,"context_line":"        except n_exc.NeutronClientNoUniqueMatch as e:"},{"line_number":131,"context_line":"            raise exception.NoUniqueMatch(unicode(e))"},{"line_number":132,"context_line":"        except n_exc.NeutronClientException as e:"},{"line_number":133,"context_line":"            exc_info \u003d sys.exc_info()"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BEX4%3D","line":130,"updated":"2013-12-02 21:32:34.000000000","message":"I\u0027m not seeing a test for this change?","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"476a6ba27423b5e01f842c6aa362280bd8748bf1","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                id \u003d neutronv20.find_resourceid_by_name_or_id("},{"line_number":128,"context_line":"                    neutron, \u0027security_group\u0027, name)"},{"line_number":129,"context_line":"            group \u003d neutron.show_security_group(id).get(\u0027security_group\u0027)"},{"line_number":130,"context_line":"        except n_exc.NeutronClientNoUniqueMatch as e:"},{"line_number":131,"context_line":"            raise exception.NoUniqueMatch(unicode(e))"},{"line_number":132,"context_line":"        except n_exc.NeutronClientException as e:"},{"line_number":133,"context_line":"            exc_info \u003d sys.exc_info()"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BDh4%3D","line":130,"in_reply_to":"AAAATn%2F%2BEX4%3D","updated":"2013-12-03 01:18:28.000000000","message":"Done","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"338a180ecfc01f973f45c7dae0eb2933f32383e9","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                    neutron, \u0027security_group\u0027, name)"},{"line_number":129,"context_line":"            group \u003d neutron.show_security_group(id).get(\u0027security_group\u0027)"},{"line_number":130,"context_line":"        except n_exc.NeutronClientNoUniqueMatch as e:"},{"line_number":131,"context_line":"            raise exception.NoUniqueMatch(unicode(e))"},{"line_number":132,"context_line":"        except n_exc.NeutronClientException as e:"},{"line_number":133,"context_line":"            exc_info \u003d sys.exc_info()"},{"line_number":134,"context_line":"            if e.status_code \u003d\u003d 404:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BEfc%3D","line":131,"updated":"2013-12-02 21:32:34.000000000","message":"Rather than using unicode(), should be wrapping in six.text_type here right?","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"476a6ba27423b5e01f842c6aa362280bd8748bf1","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                    neutron, \u0027security_group\u0027, name)"},{"line_number":129,"context_line":"            group \u003d neutron.show_security_group(id).get(\u0027security_group\u0027)"},{"line_number":130,"context_line":"        except n_exc.NeutronClientNoUniqueMatch as e:"},{"line_number":131,"context_line":"            raise exception.NoUniqueMatch(unicode(e))"},{"line_number":132,"context_line":"        except n_exc.NeutronClientException as e:"},{"line_number":133,"context_line":"            exc_info \u003d sys.exc_info()"},{"line_number":134,"context_line":"            if e.status_code \u003d\u003d 404:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BDiU%3D","line":131,"in_reply_to":"AAAATn%2F%2BEfc%3D","updated":"2013-12-03 01:18:28.000000000","message":"Done","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"338a180ecfc01f973f45c7dae0eb2933f32383e9","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            search_opts[\u0027id\u0027] \u003d ids"},{"line_number":152,"context_line":"        if project:"},{"line_number":153,"context_line":"            search_opts[\u0027tenant_id\u0027] \u003d project"},{"line_number":154,"context_line":"        try:"},{"line_number":155,"context_line":"            security_groups \u003d neutron.list_security_groups(**search_opts).get("},{"line_number":156,"context_line":"                \u0027security_groups\u0027)"},{"line_number":157,"context_line":"        except n_exc.NeutronClientException:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BEe4%3D","line":154,"updated":"2013-12-02 21:32:34.000000000","message":"Could you get a 409 here too?","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"476a6ba27423b5e01f842c6aa362280bd8748bf1","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            search_opts[\u0027id\u0027] \u003d ids"},{"line_number":152,"context_line":"        if project:"},{"line_number":153,"context_line":"            search_opts[\u0027tenant_id\u0027] \u003d project"},{"line_number":154,"context_line":"        try:"},{"line_number":155,"context_line":"            security_groups \u003d neutron.list_security_groups(**search_opts).get("},{"line_number":156,"context_line":"                \u0027security_groups\u0027)"},{"line_number":157,"context_line":"        except n_exc.NeutronClientException:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BDiY%3D","line":154,"in_reply_to":"AAAATn%2F%2BEe4%3D","updated":"2013-12-03 01:18:28.000000000","message":"Nope, this is only used for nova secgroup-list (and in the ec2 that does some listing operations). The show operation is the only one that raises 409","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"338a180ecfc01f973f45c7dae0eb2933f32383e9","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            security_group_id \u003d neutronv20.find_resourceid_by_name_or_id("},{"line_number":368,"context_line":"                neutron, \u0027security_group\u0027, security_group_name)"},{"line_number":369,"context_line":"        except n_exc.NeutronClientNoUniqueMatch as e:"},{"line_number":370,"context_line":"            raise exception.NoUniqueMatch(unicode(e))"},{"line_number":371,"context_line":"        except n_exc.NeutronClientException as e:"},{"line_number":372,"context_line":"            exc_info \u003d sys.exc_info()"},{"line_number":373,"context_line":"            if e.status_code \u003d\u003d 404:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BEfQ%3D","line":370,"updated":"2013-12-02 21:32:34.000000000","message":"ditto","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"476a6ba27423b5e01f842c6aa362280bd8748bf1","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            security_group_id \u003d neutronv20.find_resourceid_by_name_or_id("},{"line_number":368,"context_line":"                neutron, \u0027security_group\u0027, security_group_name)"},{"line_number":369,"context_line":"        except n_exc.NeutronClientNoUniqueMatch as e:"},{"line_number":370,"context_line":"            raise exception.NoUniqueMatch(unicode(e))"},{"line_number":371,"context_line":"        except n_exc.NeutronClientException as e:"},{"line_number":372,"context_line":"            exc_info \u003d sys.exc_info()"},{"line_number":373,"context_line":"            if e.status_code \u003d\u003d 404:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BDh8%3D","line":370,"in_reply_to":"AAAATn%2F%2BEfQ%3D","updated":"2013-12-03 01:18:28.000000000","message":"def test_associate_duplicate_names(self): covers this change.","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"338a180ecfc01f973f45c7dae0eb2933f32383e9","unresolved":false,"context_lines":[{"line_number":414,"context_line":"    def remove_from_instance(self, context, instance, security_group_name):"},{"line_number":415,"context_line":"        \"\"\"Remove the security group associated with the instance.\"\"\""},{"line_number":416,"context_line":"        neutron \u003d neutronv2.get_client(context)"},{"line_number":417,"context_line":"        try:"},{"line_number":418,"context_line":"            security_group_id \u003d neutronv20.find_resourceid_by_name_or_id("},{"line_number":419,"context_line":"                neutron, \u0027security_group\u0027, security_group_name)"},{"line_number":420,"context_line":"        except n_exc.NeutronClientException as e:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BEd0%3D","line":417,"updated":"2013-12-02 21:32:34.000000000","message":"If we can\u0027t add the duplicate security group name, we can\u0027t get a 409 here right? Just making sure we don\u0027t need to cover the NoUniqueMatch here also.","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"476a6ba27423b5e01f842c6aa362280bd8748bf1","unresolved":false,"context_lines":[{"line_number":414,"context_line":"    def remove_from_instance(self, context, instance, security_group_name):"},{"line_number":415,"context_line":"        \"\"\"Remove the security group associated with the instance.\"\"\""},{"line_number":416,"context_line":"        neutron \u003d neutronv2.get_client(context)"},{"line_number":417,"context_line":"        try:"},{"line_number":418,"context_line":"            security_group_id \u003d neutronv20.find_resourceid_by_name_or_id("},{"line_number":419,"context_line":"                neutron, \u0027security_group\u0027, security_group_name)"},{"line_number":420,"context_line":"        except n_exc.NeutronClientException as e:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BDiA%3D","line":417,"in_reply_to":"AAAATn%2F%2BEd0%3D","updated":"2013-12-03 01:18:28.000000000","message":"Nope the api makes you pass in a uuid here: \n\n/v2/?{tenant_id}?/os-security-groups/?{security_group_id}?\n\ncurl -i \u0027http://10.24.115.45:8774/v2/1718ad63c78644749db5079df6a2f03a/os-security-groups/a\u0027 -X DELETE -H \"X-Auth-Project-Id: demo\" -H \"User-Agent: python-novaclient\" -H \"Accept: application/json\" -H \"X-Auth-Token: \u003csnip\u003e\"\nHTTP/1.1 400 Bad Request\nContent-Length: 76\nContent-Type: application/json; charset\u003dUTF-8\nX-Compute-Request-Id: req-376ec30b-81e0-4eac-afcf-b17e0f2129b1\nDate: Tue, 03 Dec 2013 01:00:55 GMT\n\n{\"badRequest\": {\"message\": \"Security group id should be uuid\", \"code\": 400}}","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"}],"nova/network/security_group/quantum_driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b69f7b7dcbe4ca4f178a3c2330dba3dde23f7777","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                LOG.debug(_(\"Quantum security group %s not found\"), name)"},{"line_number":130,"context_line":"                self.raise_not_found(e.message)"},{"line_number":131,"context_line":"            # Poor hack to raise the right exception"},{"line_number":132,"context_line":"            elif \u0027matches found for name\u0027 in e.message:"},{"line_number":133,"context_line":"                self.raise_not_unique(e.message)"},{"line_number":134,"context_line":"            else:"},{"line_number":135,"context_line":"                LOG.error(_(\"Quantum Error: %s\"), e)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fi9I%3D","line":132,"updated":"2013-06-28 01:43:13.000000000","message":"I see where this is coming from:\n\nhttps://github.com/openstack/python-quantumclient/blob/master/quantumclient/quantum/v2_0/__init__.py#L54\n\nI\u0027d rather see quantum client changed first so that it uses a 409 status code for NoUniqueFound and then you could check for that here, but I guess you don\u0027t know what version of quantum client is necessarily being used...so you\u0027re kind of stuck and if that ever changes in the client this is broken again.\n\nCould we change the quantum client down to the min version that nova is requiring (2.2.0 right now: https://github.com/openstack/nova/blob/master/requirements.txt#L26)?","commit_id":"45d07342fa4b5f263cdbcf92c4666f2dfdba9bb4"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"b152527a6838bceaddcf6da323a6c0e1ea0535f6","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                LOG.debug(_(\"Quantum security group %s not found\"), name)"},{"line_number":130,"context_line":"                self.raise_not_found(e.message)"},{"line_number":131,"context_line":"            # Poor hack to raise the right exception"},{"line_number":132,"context_line":"            elif \u0027matches found for name\u0027 in e.message:"},{"line_number":133,"context_line":"                self.raise_not_unique(e.message)"},{"line_number":134,"context_line":"            else:"},{"line_number":135,"context_line":"                LOG.error(_(\"Quantum Error: %s\"), e)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FgHM%3D","line":132,"in_reply_to":"AAAAPn%2F%2Fgr8%3D","updated":"2013-06-29 01:01:01.000000000","message":"I agree with Matt - I think the quantum client should return more explict exceptions.","commit_id":"45d07342fa4b5f263cdbcf92c4666f2dfdba9bb4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ba92802f8ce51bab2328f15a76a1625861402eb8","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                LOG.debug(_(\"Quantum security group %s not found\"), name)"},{"line_number":130,"context_line":"                self.raise_not_found(e.message)"},{"line_number":131,"context_line":"            # Poor hack to raise the right exception"},{"line_number":132,"context_line":"            elif \u0027matches found for name\u0027 in e.message:"},{"line_number":133,"context_line":"                self.raise_not_unique(e.message)"},{"line_number":134,"context_line":"            else:"},{"line_number":135,"context_line":"                LOG.error(_(\"Quantum Error: %s\"), e)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Fgr8%3D","line":132,"in_reply_to":"AAAAPn%2F%2FhRE%3D","updated":"2013-06-28 19:55:30.000000000","message":"I don\u0027t like checking for specific strings in messages and I don\u0027t like duplicating code because either way you introduce maintenance issues which eventually regress.\n\nI prefer setting a 409 code in that specific part of the quantum client or introducing a QuantumClientNoUniqueMatch exception like you mentioned (which would have a 409 code probably).\n\nDoing a whole new exception would probably be cleanest.","commit_id":"45d07342fa4b5f263cdbcf92c4666f2dfdba9bb4"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"01c005076e91c8c01cd9f2abc4466d27e028bfcd","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                LOG.debug(_(\"Quantum security group %s not found\"), name)"},{"line_number":130,"context_line":"                self.raise_not_found(e.message)"},{"line_number":131,"context_line":"            # Poor hack to raise the right exception"},{"line_number":132,"context_line":"            elif \u0027matches found for name\u0027 in e.message:"},{"line_number":133,"context_line":"                self.raise_not_unique(e.message)"},{"line_number":134,"context_line":"            else:"},{"line_number":135,"context_line":"                LOG.error(_(\"Quantum Error: %s\"), e)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FhRE%3D","line":132,"in_reply_to":"AAAAPn%2F%2Fi9I%3D","updated":"2013-06-28 16:30:35.000000000","message":"I\u0027m not sure if we want to change the client to raise a 409 in this case because quantum server didn\u0027t actually return that http code? \n\nWe\u0027ve talked about change the exception handling in quantum so that it would raise other exceptions like QuantumClientNoUniqueMatch instead.  Do you think this would be a better solution? \n\nAlternatively, we could also duplicate the code in quantumv20.find_resourceid_by_name_or_id() on line 123 so we don\u0027t have to rely on this quantum client method as a work around  :/ . What do you think?","commit_id":"45d07342fa4b5f263cdbcf92c4666f2dfdba9bb4"}],"nova/tests/api/openstack/compute/contrib/test_neutron_security_groups.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a7e9f5405f6103258fe176698e3f982c8b48428d","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/servers/1/action\u0027)"},{"line_number":230,"context_line":"        self.assertRaises(n_exc.NeutronClientNoUniqueMatch,"},{"line_number":231,"context_line":"                          self.manager._addSecurityGroup, req, \u00271\u0027, body)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def test_associate_port_security_enabled_true(self):"},{"line_number":234,"context_line":"        sg \u003d self._create_sg_template().get(\u0027security_group\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAS3%2F%2Fgqk%3D","line":231,"updated":"2013-09-25 13:55:16.000000000","message":"Sorry, i missed this from previous review. Should we doing same translate between \u0027NeutronClientNoUniqueMatch\u0027 and \u0027NoUniqueMatch\u0027 in \u0027nova.network.security_group.neutron_driver.SecurityGroupAPI.add_to_instance\u0027? And doing HTTP* exception translate in \u0027nova.api.openstack.compute.contrib.security_groups.translate_exceptions\u0027?","commit_id":"93b72e35db62ba60ba931b70e2e7bf0cc34ba871"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"1d5501d0ed086bc30b6e12ac45d4d0074b551c9a","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/servers/1/action\u0027)"},{"line_number":230,"context_line":"        self.assertRaises(n_exc.NeutronClientNoUniqueMatch,"},{"line_number":231,"context_line":"                          self.manager._addSecurityGroup, req, \u00271\u0027, body)"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    def test_associate_port_security_enabled_true(self):"},{"line_number":234,"context_line":"        sg \u003d self._create_sg_template().get(\u0027security_group\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2Betw%3D","line":231,"in_reply_to":"AAAAS3%2F%2Fgqk%3D","updated":"2013-11-25 17:47:20.000000000","message":"Thanks for pointing this out. Yes","commit_id":"93b72e35db62ba60ba931b70e2e7bf0cc34ba871"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"338a180ecfc01f973f45c7dae0eb2933f32383e9","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        return neutron.create_security_group(body)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def test_create_security_group_with_no_description(self):"},{"line_number":93,"context_line":"        # Neutron\u0027s security group description field is optional."},{"line_number":94,"context_line":"        pass"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_create_security_group_with_blank_name(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BEbk%3D","line":93,"updated":"2013-12-02 21:32:34.000000000","message":"not really related to this patch","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"476a6ba27423b5e01f842c6aa362280bd8748bf1","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        return neutron.create_security_group(body)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def test_create_security_group_with_no_description(self):"},{"line_number":93,"context_line":"        # Neutron\u0027s security group description field is optional."},{"line_number":94,"context_line":"        pass"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_create_security_group_with_blank_name(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BDh0%3D","line":93,"in_reply_to":"AAAATn%2F%2BEbk%3D","updated":"2013-12-03 01:18:28.000000000","message":"I can fix it in a different patch.","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"338a180ecfc01f973f45c7dae0eb2933f32383e9","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        res_dict \u003d self.server_controller.index("},{"line_number":154,"context_line":"            req, test_security_groups.FAKE_UUID1)[\u0027security_groups\u0027]"},{"line_number":155,"context_line":"        self.assertEqual(expected, res_dict)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def test_get_security_group_by_id(self):"},{"line_number":158,"context_line":"        sg \u003d self._create_sg_template().get(\u0027security_group\u0027)"},{"line_number":159,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/os-security-groups/%s\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BEYI%3D","line":156,"updated":"2013-12-02 21:32:34.000000000","message":"Shouldn\u0027t there now be a negative test_get_security_group_by_duplicate_name that raises a 409?","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"476a6ba27423b5e01f842c6aa362280bd8748bf1","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        res_dict \u003d self.server_controller.index("},{"line_number":154,"context_line":"            req, test_security_groups.FAKE_UUID1)[\u0027security_groups\u0027]"},{"line_number":155,"context_line":"        self.assertEqual(expected, res_dict)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def test_get_security_group_by_id(self):"},{"line_number":158,"context_line":"        sg \u003d self._create_sg_template().get(\u0027security_group\u0027)"},{"line_number":159,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/os-security-groups/%s\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BDhk%3D","line":156,"in_reply_to":"AAAATn%2F%2BEYI%3D","updated":"2013-12-03 01:18:28.000000000","message":"Nope, you can only pass in the id of the security_group here not the name.\n\nThe duplicate error occurs because we allow passing in the security_group as a name on /v2/\u003ctenant_id\u003e/servers for creating the server and adding security groups to the instance.","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"338a180ecfc01f973f45c7dae0eb2933f32383e9","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/servers/1/action\u0027)"},{"line_number":214,"context_line":"        self.manager._addSecurityGroup(req, \u00271\u0027, body)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def test_associate_duplicate_names(self):"},{"line_number":217,"context_line":"        sg1 \u003d self._create_security_group(name\u003d\u0027sg1\u0027,"},{"line_number":218,"context_line":"                                          description\u003d\u0027sg1\u0027)[\u0027security_group\u0027]"},{"line_number":219,"context_line":"        self._create_security_group(name\u003d\u0027sg1\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BEbA%3D","line":216,"updated":"2013-12-02 21:32:34.000000000","message":"Does there need to be a v3 version of this?  See bug 1229520.","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"476a6ba27423b5e01f842c6aa362280bd8748bf1","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/fake/servers/1/action\u0027)"},{"line_number":214,"context_line":"        self.manager._addSecurityGroup(req, \u00271\u0027, body)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def test_associate_duplicate_names(self):"},{"line_number":217,"context_line":"        sg1 \u003d self._create_security_group(name\u003d\u0027sg1\u0027,"},{"line_number":218,"context_line":"                                          description\u003d\u0027sg1\u0027)[\u0027security_group\u0027]"},{"line_number":219,"context_line":"        self._create_security_group(name\u003d\u0027sg1\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2BDhc%3D","line":216,"in_reply_to":"AAAATn%2F%2BEbA%3D","updated":"2013-12-03 01:18:28.000000000","message":"I don\u0027t think so since we are not proxying between neutron and nova in v3.","commit_id":"4cd15b9a4282bd16f7b6e724578f2c95512c6158"}]}
