)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"cc8bc175ea0313a3a027769130c1f9d61cbb31a1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rudra Rugge \u003crrugge@juniper.net\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-08-11 16:00:17 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add support for Amazon VPC APIs in Openstack"},{"line_number":8,"context_line":"- Created a separate file (vpc.py) to handle VPC APIs"},{"line_number":9,"context_line":"- Added unit tests for VPC (test_vpc.py)"},{"line_number":10,"context_line":"- Used Mock for unit testing"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAQ3%2F%2F6DI%3D","line":7,"updated":"2013-08-13 06:06:59.000000000","message":"Please make sure the title did not exceed 79 characters.","commit_id":"38d12b083d5247bb336ba01d9e51a4f78892c0a9"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"32e9ecbd53c12403e24597bc1b58957d271996b7","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Nova EC2 currently supports EC2 APIS"},{"line_number":14,"context_line":"This has been enhanced to support Amazon VPC APIs"},{"line_number":15,"context_line":"Corresponding Neutron changes will be reviewed as a separate commit"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Implements: blueprint aws-vpc-support"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAQ3%2F%2F24U%3D","line":15,"updated":"2013-08-13 21:09:59.000000000","message":"What are the neutron changes?  Can you provide a reference?","commit_id":"a96a49e12fdf4d41ed9ad8379a8c2646e5709d48"}],"nova/api/ec2/cloud.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"60cea633f91941a674104bdbe9cde49524baa72a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"from nova import servicegroup"},{"line_number":53,"context_line":"from nova import utils"},{"line_number":54,"context_line":"from nova import volume"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"from nova.api.ec2.vpc import VpcController as vpc"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"ec2_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFGo%3D","line":55,"updated":"2013-10-04 18:36:59.000000000","message":"excess whitespace here","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dd871d7d90cb9bcb6948fabe1aa0157dd14f3905","unresolved":false,"context_lines":[{"line_number":52,"context_line":"from nova import servicegroup"},{"line_number":53,"context_line":"from nova import utils"},{"line_number":54,"context_line":"from nova import volume"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"from nova.api.ec2.vpc import VpcController as vpc"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"ec2_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFD8%3D","line":55,"in_reply_to":"AAAAS3%2F%2FFGo%3D","updated":"2013-10-04 19:16:59.000000000","message":"Done","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"60cea633f91941a674104bdbe9cde49524baa72a","unresolved":false,"context_lines":[{"line_number":1321,"context_line":"        (instances, resv_id) \u003d self.compute_api.create(context,"},{"line_number":1322,"context_line":"            instance_type\u003dflavors.get_flavor_by_name("},{"line_number":1323,"context_line":"                kwargs.get(\u0027instance_type\u0027, None)),"},{"line_number":1324,"context_line":"            image_href\u003dimage_uuid,"},{"line_number":1325,"context_line":"            max_count\u003dint(kwargs.get(\u0027max_count\u0027, min_count)),"},{"line_number":1326,"context_line":"            min_count\u003dmin_count,"},{"line_number":1327,"context_line":"            kernel_id\u003dkwargs.get(\u0027kernel_id\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFGg%3D","line":1324,"updated":"2013-10-04 18:36:59.000000000","message":"these parameters need more indentation for readability","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dd871d7d90cb9bcb6948fabe1aa0157dd14f3905","unresolved":false,"context_lines":[{"line_number":1321,"context_line":"        (instances, resv_id) \u003d self.compute_api.create(context,"},{"line_number":1322,"context_line":"            instance_type\u003dflavors.get_flavor_by_name("},{"line_number":1323,"context_line":"                kwargs.get(\u0027instance_type\u0027, None)),"},{"line_number":1324,"context_line":"            image_href\u003dimage_uuid,"},{"line_number":1325,"context_line":"            max_count\u003dint(kwargs.get(\u0027max_count\u0027, min_count)),"},{"line_number":1326,"context_line":"            min_count\u003dmin_count,"},{"line_number":1327,"context_line":"            kernel_id\u003dkwargs.get(\u0027kernel_id\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFD0%3D","line":1324,"in_reply_to":"AAAAS3%2F%2FFGg%3D","updated":"2013-10-04 19:16:59.000000000","message":"Done","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"20d733458031a6ba9a4de7e5295886c8a127e3ab","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from nova.api.ec2 import ec2utils"},{"line_number":31,"context_line":"from nova.api.ec2 import inst_state"},{"line_number":32,"context_line":"from nova.api.ec2.vpc import VpcController as vpc"},{"line_number":33,"context_line":"from nova.api.metadata import password"},{"line_number":34,"context_line":"from nova.api import validator"},{"line_number":35,"context_line":"from nova import availability_zones"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F%2F44%3D","line":32,"updated":"2013-10-24 02:46:29.000000000","message":"nit:  see HACKING; this should be: \n\nfrom nova.api.ec2 import vpc\nThen use: vpc.VpcController","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from nova.api.ec2 import ec2utils"},{"line_number":31,"context_line":"from nova.api.ec2 import inst_state"},{"line_number":32,"context_line":"from nova.api.ec2.vpc import VpcController as vpc"},{"line_number":33,"context_line":"from nova.api.metadata import password"},{"line_number":34,"context_line":"from nova.api import validator"},{"line_number":35,"context_line":"from nova import availability_zones"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8PY%3D","line":32,"in_reply_to":"AAAATn%2F%2F%2F44%3D","updated":"2013-10-24 21:07:36.000000000","message":"Done","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":7962,"name":"Ronak Shah","email":"ronak.malav.shah@gmail.com","username":"ronak"},"change_message_id":"fc375111c6effdee7109101a00b8972900314faa","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    return inst_obj"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"class CloudController(vpc, object):"},{"line_number":223,"context_line":"    \"\"\"CloudController provides the critical dispatch between"},{"line_number":224,"context_line":" inbound API calls through the endpoint and messages"},{"line_number":225,"context_line":" sent to the other nodes."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATX%2F%2F71M%3D","line":222,"updated":"2013-10-24 01:16:53.000000000","message":"Do we need to subclass from object anymore?","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"20d733458031a6ba9a4de7e5295886c8a127e3ab","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    return inst_obj"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"class CloudController(vpc, object):"},{"line_number":223,"context_line":"    \"\"\"CloudController provides the critical dispatch between"},{"line_number":224,"context_line":" inbound API calls through the endpoint and messages"},{"line_number":225,"context_line":" sent to the other nodes."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F%2F40%3D","line":222,"in_reply_to":"AAAATX%2F%2F71M%3D","updated":"2013-10-24 02:46:29.000000000","message":"shouldn\u0027t","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    return inst_obj"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"class CloudController(vpc, object):"},{"line_number":223,"context_line":"    \"\"\"CloudController provides the critical dispatch between"},{"line_number":224,"context_line":" inbound API calls through the endpoint and messages"},{"line_number":225,"context_line":" sent to the other nodes."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8Pc%3D","line":222,"in_reply_to":"AAAATn%2F%2F%2F40%3D","updated":"2013-10-24 21:07:36.000000000","message":"Done","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":7962,"name":"Ronak Shah","email":"ronak.malav.shah@gmail.com","username":"ronak"},"change_message_id":"fc375111c6effdee7109101a00b8972900314faa","unresolved":false,"context_lines":[{"line_number":1307,"context_line":"        if kwargs.get(\u0027network_interfaces\u0027):"},{"line_number":1308,"context_line":"            neutron \u003d neutronv2.get_client(context)"},{"line_number":1309,"context_line":"            nw_list \u003d neutron.list_networks()"},{"line_number":1310,"context_line":"            nw_ifs \u003d kwargs.get(\u0027network_interface\u0027)"},{"line_number":1311,"context_line":"            for nw_if in nw_ifs:"},{"line_number":1312,"context_line":"                for nw in nw_list[\u0027networks\u0027]:"},{"line_number":1313,"context_line":"                    if nw[\u0027name\u0027] \u003d\u003d nw_if[\u0027subnet_id\u0027]:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATX%2F%2F7zI%3D","line":1310,"updated":"2013-10-24 01:16:53.000000000","message":"Can we do:\nnetworks \u003d []\nnw_ifs \u003d kwargs.get(\u0027network_interface\u0027, None)\nif nw_ifs:\n    ...\n\nThis shall save us 1 dict lookup.","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":1307,"context_line":"        if kwargs.get(\u0027network_interfaces\u0027):"},{"line_number":1308,"context_line":"            neutron \u003d neutronv2.get_client(context)"},{"line_number":1309,"context_line":"            nw_list \u003d neutron.list_networks()"},{"line_number":1310,"context_line":"            nw_ifs \u003d kwargs.get(\u0027network_interface\u0027)"},{"line_number":1311,"context_line":"            for nw_if in nw_ifs:"},{"line_number":1312,"context_line":"                for nw in nw_list[\u0027networks\u0027]:"},{"line_number":1313,"context_line":"                    if nw[\u0027name\u0027] \u003d\u003d nw_if[\u0027subnet_id\u0027]:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8PU%3D","line":1310,"in_reply_to":"AAAATX%2F%2F7zI%3D","updated":"2013-10-24 21:07:36.000000000","message":"Done","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":7962,"name":"Ronak Shah","email":"ronak.malav.shah@gmail.com","username":"ronak"},"change_message_id":"879be1a05372425a9b5c8fb23f08c8d9d9ea0a3b","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    return inst_obj"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"class CloudController(vpc.VpcController, object):"},{"line_number":223,"context_line":"    \"\"\"CloudController provides the critical dispatch between"},{"line_number":224,"context_line":" inbound API calls through the endpoint and messages"},{"line_number":225,"context_line":" sent to the other nodes."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F7p4%3D","line":222,"updated":"2013-10-25 01:21:44.000000000","message":"What I referred in the earlier comments was the second parameter here : object.\nSince you are subclassing from vpc.VpcController, I dont see a reason to pass object anymore.","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"311ae3e80d853cfba55ba0ce14e45eb03cd99c18","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    return inst_obj"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"class CloudController(vpc.VpcController, object):"},{"line_number":223,"context_line":"    \"\"\"CloudController provides the critical dispatch between"},{"line_number":224,"context_line":" inbound API calls through the endpoint and messages"},{"line_number":225,"context_line":" sent to the other nodes."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F7s8%3D","line":222,"updated":"2013-10-25 01:22:56.000000000","message":"object no longer needed here.","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"3ce710b27d2486ae6d0191c8ad2c64831cd63ade","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    return inst_obj"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"class CloudController(vpc.VpcController, object):"},{"line_number":223,"context_line":"    \"\"\"CloudController provides the critical dispatch between"},{"line_number":224,"context_line":" inbound API calls through the endpoint and messages"},{"line_number":225,"context_line":" sent to the other nodes."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F4k8%3D","line":222,"in_reply_to":"AAAATn%2F%2F7p4%3D","updated":"2013-10-25 18:49:23.000000000","message":"Done","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"3ce710b27d2486ae6d0191c8ad2c64831cd63ade","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    return inst_obj"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"class CloudController(vpc.VpcController, object):"},{"line_number":223,"context_line":"    \"\"\"CloudController provides the critical dispatch between"},{"line_number":224,"context_line":" inbound API calls through the endpoint and messages"},{"line_number":225,"context_line":" sent to the other nodes."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F4k4%3D","line":222,"in_reply_to":"AAAATn%2F%2F7s8%3D","updated":"2013-10-25 18:49:23.000000000","message":"Done","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"987b82957eb2b357caf9912644a8bae9310df9b2","unresolved":false,"context_lines":[{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":"        # get network for requested subnets"},{"line_number":1309,"context_line":"        networks \u003d []"},{"line_number":1310,"context_line":"        nw_ifs \u003d kwargs.get(\u0027network_interface\u0027, None)"},{"line_number":1311,"context_line":"        if nw_ifs:"},{"line_number":1312,"context_line":"            neutron \u003d neutronv2.get_client(context)"},{"line_number":1313,"context_line":"            nw_list \u003d neutron.list_networks()"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2B8%2Bs%3D","line":1310,"updated":"2013-11-18 07:35:46.000000000","message":"nit; default return value of get method is None, so actually we don\u0027t need explicitly None here.","commit_id":"4ebfb8c803df6f93334b3bec148466ae38663f52"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dc91e26e496c25fffcc3ea3512eb683170198215","unresolved":false,"context_lines":[{"line_number":1307,"context_line":""},{"line_number":1308,"context_line":"        # get network for requested subnets"},{"line_number":1309,"context_line":"        networks \u003d []"},{"line_number":1310,"context_line":"        nw_ifs \u003d kwargs.get(\u0027network_interface\u0027, None)"},{"line_number":1311,"context_line":"        if nw_ifs:"},{"line_number":1312,"context_line":"            neutron \u003d neutronv2.get_client(context)"},{"line_number":1313,"context_line":"            nw_list \u003d neutron.list_networks()"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2B5ME%3D","line":1310,"in_reply_to":"AAAATn%2F%2B8%2Bs%3D","updated":"2013-11-18 21:48:37.000000000","message":"Done","commit_id":"4ebfb8c803df6f93334b3bec148466ae38663f52"}],"nova/api/ec2/vpc.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"60cea633f91941a674104bdbe9cde49524baa72a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from keystoneclient import exceptions as ke"},{"line_number":29,"context_line":"import keystoneclient.v2_0"},{"line_number":30,"context_line":"from nova.network import neutronv2"},{"line_number":31,"context_line":"import uuid"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class VpcController(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFIo%3D","line":31,"updated":"2013-10-04 18:36:59.000000000","message":"Builtin imports first.  Third-party imports next.  nova imports last.","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dd871d7d90cb9bcb6948fabe1aa0157dd14f3905","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from keystoneclient import exceptions as ke"},{"line_number":29,"context_line":"import keystoneclient.v2_0"},{"line_number":30,"context_line":"from nova.network import neutronv2"},{"line_number":31,"context_line":"import uuid"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class VpcController(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFCA%3D","line":31,"in_reply_to":"AAAAS3%2F%2FFIo%3D","updated":"2013-10-04 19:16:59.000000000","message":"Done","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"60cea633f91941a674104bdbe9cde49524baa72a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            found \u003d False"},{"line_number":56,"context_line":"            for tenant in tenant_list:"},{"line_number":57,"context_line":"                if tenant.name \u003d\u003d vpc_id:"},{"line_number":58,"context_line":"                    tenant_id \u003d tenant.id"},{"line_number":59,"context_line":"                    found \u003d True"},{"line_number":60,"context_line":"                    break"},{"line_number":61,"context_line":"            if not found:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFII%3D","line":58,"updated":"2013-10-04 18:36:59.000000000","message":"Why not just return early here?  Would save you the found variable and extra checks.","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dd871d7d90cb9bcb6948fabe1aa0157dd14f3905","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            found \u003d False"},{"line_number":56,"context_line":"            for tenant in tenant_list:"},{"line_number":57,"context_line":"                if tenant.name \u003d\u003d vpc_id:"},{"line_number":58,"context_line":"                    tenant_id \u003d tenant.id"},{"line_number":59,"context_line":"                    found \u003d True"},{"line_number":60,"context_line":"                    break"},{"line_number":61,"context_line":"            if not found:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFAg%3D","line":58,"in_reply_to":"AAAAS3%2F%2FFII%3D","updated":"2013-10-04 19:16:59.000000000","message":"Done","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"60cea633f91941a674104bdbe9cde49524baa72a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                    break"},{"line_number":61,"context_line":"            if not found:"},{"line_number":62,"context_line":"                raise exception.InvalidParameterValue(err\u003d\u0027No VPC found\u0027)"},{"line_number":63,"context_line":"        except Exception as e:"},{"line_number":64,"context_line":"            raise exception.EC2APIError(\u0027Keystone exception %s\u0027 % e)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        return tenant_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFIg%3D","line":63,"updated":"2013-10-04 18:36:59.000000000","message":"I think only the first two lines that hit keystone need to be in the try block.","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dd871d7d90cb9bcb6948fabe1aa0157dd14f3905","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                    break"},{"line_number":61,"context_line":"            if not found:"},{"line_number":62,"context_line":"                raise exception.InvalidParameterValue(err\u003d\u0027No VPC found\u0027)"},{"line_number":63,"context_line":"        except Exception as e:"},{"line_number":64,"context_line":"            raise exception.EC2APIError(\u0027Keystone exception %s\u0027 % e)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        return tenant_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFAc%3D","line":63,"in_reply_to":"AAAAS3%2F%2FFIg%3D","updated":"2013-10-04 19:16:59.000000000","message":"Done","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"60cea633f91941a674104bdbe9cde49524baa72a","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            try:"},{"line_number":202,"context_line":"                subnets_rsp \u003d neutron.list_subnets(network_id\u003dnetwork[\u0027id\u0027])"},{"line_number":203,"context_line":"                for subnet in subnets_rsp[\u0027subnets\u0027]:"},{"line_number":204,"context_line":"                    vpc_cidr \u003d subnet[\u0027cidr\u0027]"},{"line_number":205,"context_line":"            except Exception as e:"},{"line_number":206,"context_line":"                raise exception.EC2APIError(e)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFHk%3D","line":204,"updated":"2013-10-04 18:36:59.000000000","message":"This ends up setting vpc_cidr to a random subnet\u0027s cidr.  Is that the behavior you really want?  Why not just break on the first one rather than looping over all of them?","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dd871d7d90cb9bcb6948fabe1aa0157dd14f3905","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            try:"},{"line_number":202,"context_line":"                subnets_rsp \u003d neutron.list_subnets(network_id\u003dnetwork[\u0027id\u0027])"},{"line_number":203,"context_line":"                for subnet in subnets_rsp[\u0027subnets\u0027]:"},{"line_number":204,"context_line":"                    vpc_cidr \u003d subnet[\u0027cidr\u0027]"},{"line_number":205,"context_line":"            except Exception as e:"},{"line_number":206,"context_line":"                raise exception.EC2APIError(e)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FE%2Fg%3D","line":204,"in_reply_to":"AAAAS3%2F%2FFHk%3D","updated":"2013-10-04 19:16:59.000000000","message":"There is only one subnet in this network and hence loop was as good as one. But for readability I agree with you and I have made the change to read from the first one.","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"60cea633f91941a674104bdbe9cde49524baa72a","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            first_subnet_add \u003d subnet_ip_block[0]"},{"line_number":212,"context_line":"            last_subnet_add \u003d subnet_ip_block[-1]"},{"line_number":213,"context_line":"            if first_subnet_add \u003c first_vpc_add or \\"},{"line_number":214,"context_line":"               last_subnet_add \u003e last_vpc_add:"},{"line_number":215,"context_line":"                msg \u003d \"subnet ip block not in vpc ip block\""},{"line_number":216,"context_line":"                raise exception.InvalidParameterValue(err\u003dmsg)"},{"line_number":217,"context_line":"            break"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFHQ%3D","line":214,"updated":"2013-10-04 18:36:59.000000000","message":"It would be better to use parentheses than \\ here.","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dd871d7d90cb9bcb6948fabe1aa0157dd14f3905","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            first_subnet_add \u003d subnet_ip_block[0]"},{"line_number":212,"context_line":"            last_subnet_add \u003d subnet_ip_block[-1]"},{"line_number":213,"context_line":"            if first_subnet_add \u003c first_vpc_add or \\"},{"line_number":214,"context_line":"               last_subnet_add \u003e last_vpc_add:"},{"line_number":215,"context_line":"                msg \u003d \"subnet ip block not in vpc ip block\""},{"line_number":216,"context_line":"                raise exception.InvalidParameterValue(err\u003dmsg)"},{"line_number":217,"context_line":"            break"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FE%2FU%3D","line":214,"in_reply_to":"AAAAS3%2F%2FFHQ%3D","updated":"2013-10-04 19:16:59.000000000","message":"Done","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"60cea633f91941a674104bdbe9cde49524baa72a","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        for network in network_rsp[\u0027networks\u0027]:"},{"line_number":251,"context_line":"            if not network[\u0027name\u0027].startswith(\u0027subnet-\u0027):"},{"line_number":252,"context_line":"                continue"},{"line_number":253,"context_line":"            if network[\u0027name\u0027] !\u003d subnet_id:"},{"line_number":254,"context_line":"                continue"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFG4%3D","line":252,"updated":"2013-10-04 18:36:59.000000000","message":"I don\u0027t understand the point of this comparison.  The next one demands an exact match so the substring check won\u0027t add anything useful.  Is one of the dict keys supposed to be something else?","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dd871d7d90cb9bcb6948fabe1aa0157dd14f3905","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        for network in network_rsp[\u0027networks\u0027]:"},{"line_number":251,"context_line":"            if not network[\u0027name\u0027].startswith(\u0027subnet-\u0027):"},{"line_number":252,"context_line":"                continue"},{"line_number":253,"context_line":"            if network[\u0027name\u0027] !\u003d subnet_id:"},{"line_number":254,"context_line":"                continue"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FE%2FI%3D","line":252,"in_reply_to":"AAAAS3%2F%2FFG4%3D","updated":"2013-10-04 19:16:59.000000000","message":"Done","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"6467d2332cdccaeaea92c8af64f2bddf963f9781","unresolved":false,"context_lines":[{"line_number":22,"context_line":"datastore."},{"line_number":23,"context_line":"\"\"\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from netaddr import IPNetwork"},{"line_number":26,"context_line":"import uuid"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from keystoneclient import exceptions as ke"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2F8bk%3D","line":25,"updated":"2013-10-07 17:13:11.000000000","message":"netaddr is third-party and goes down a block","commit_id":"aa9294de7d5314b10550d26daf81f41c813e2053"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"ccc5f1a4b87cf57439900248620f10a70dcd0bea","unresolved":false,"context_lines":[{"line_number":22,"context_line":"datastore."},{"line_number":23,"context_line":"\"\"\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from netaddr import IPNetwork"},{"line_number":26,"context_line":"import uuid"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from keystoneclient import exceptions as ke"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATH%2F%2F8SQ%3D","line":25,"in_reply_to":"AAAATH%2F%2F8bk%3D","updated":"2013-10-07 17:54:15.000000000","message":"Done","commit_id":"aa9294de7d5314b10550d26daf81f41c813e2053"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"2b6f3b51779592b5b311d6ab3376ca035c6357e0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2010 United States Government as represented by the"},{"line_number":4,"context_line":"# Administrator of the National Aeronautics and Space Administration."},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FtVs%3D","line":3,"updated":"2013-10-10 21:52:55.000000000","message":"Is this copyright correct?","commit_id":"184de77f6c6d647b51cc0cf1032e65de67d63d2e"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"15ffad175af1a656e8f15e8df0564bbe3391f17b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2010 United States Government as represented by the"},{"line_number":4,"context_line":"# Administrator of the National Aeronautics and Space Administration."},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FtQQ%3D","line":3,"in_reply_to":"AAAATH%2F%2FtVs%3D","updated":"2013-10-10 22:12:16.000000000","message":"I copied this from cloud.py. I am not sure what the copyright should be.","commit_id":"184de77f6c6d647b51cc0cf1032e65de67d63d2e"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"dc5c81fb7e3b48b3d62a95cd8f8cbc8c335052de","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    sent to the other nodes."},{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    def _get_keystone_client(self, context):"},{"line_number":47,"context_line":"        auth_url \u003d \"http://%s:5000/v2.0\" % CONF.my_ip"},{"line_number":48,"context_line":"        kc \u003d keystoneclient.v2_0.client.Client("},{"line_number":49,"context_line":"            token\u003dcontext.auth_token,"},{"line_number":50,"context_line":"            username\u003dcontext.user_name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATH%2F%2FHGU%3D","line":47,"updated":"2013-10-23 03:04:25.000000000","message":"schema, port and version all should not be hard coded, \u0027%s://%s:%s\u0027 % (scheme, host, port) would be better","commit_id":"93dba26a961a0624c19a9998d58b9f5e4bfe8434"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"4435cd7b9f596b9427294c072ec1fd1daea4a66e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    sent to the other nodes."},{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    def _get_keystone_client(self, context):"},{"line_number":47,"context_line":"        auth_url \u003d \"http://%s:5000/v2.0\" % CONF.my_ip"},{"line_number":48,"context_line":"        kc \u003d keystoneclient.v2_0.client.Client("},{"line_number":49,"context_line":"            token\u003dcontext.auth_token,"},{"line_number":50,"context_line":"            username\u003dcontext.user_name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATX%2F%2F8O8%3D","line":47,"in_reply_to":"AAAATH%2F%2FHGU%3D","updated":"2013-10-23 22:02:14.000000000","message":"Done","commit_id":"93dba26a961a0624c19a9998d58b9f5e4bfe8434"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"20d733458031a6ba9a4de7e5295886c8a127e3ab","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import uuid"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from netaddr import IPNetwork"},{"line_number":28,"context_line":"from oslo.config import cfg"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from keystoneclient import exceptions as ke"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F%2F4s%3D","line":27,"updated":"2013-10-24 02:46:29.000000000","message":"ditto: import netaddr","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import uuid"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from netaddr import IPNetwork"},{"line_number":28,"context_line":"from oslo.config import cfg"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from keystoneclient import exceptions as ke"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8PI%3D","line":27,"in_reply_to":"AAAATn%2F%2F%2F4s%3D","updated":"2013-10-24 21:07:36.000000000","message":"Done","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"20d733458031a6ba9a4de7e5295886c8a127e3ab","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        for tenant in tenant_list:"},{"line_number":63,"context_line":"            if tenant.name \u003d\u003d vpc_id:"},{"line_number":64,"context_line":"                tenant_id \u003d tenant.id"},{"line_number":65,"context_line":"                return tenant_id"},{"line_number":66,"context_line":"        raise exception.InvalidParameterValue(err\u003d\u0027No VPC found\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def create_vpc(self, context, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F%2F4g%3D","line":65,"updated":"2013-10-24 02:46:29.000000000","message":"nit: no need to create another variable tenant_id; return tenant.id","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        for tenant in tenant_list:"},{"line_number":63,"context_line":"            if tenant.name \u003d\u003d vpc_id:"},{"line_number":64,"context_line":"                tenant_id \u003d tenant.id"},{"line_number":65,"context_line":"                return tenant_id"},{"line_number":66,"context_line":"        raise exception.InvalidParameterValue(err\u003d\u0027No VPC found\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def create_vpc(self, context, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8O8%3D","line":65,"in_reply_to":"AAAATn%2F%2F%2F4g%3D","updated":"2013-10-24 21:07:36.000000000","message":"Done","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"20d733458031a6ba9a4de7e5295886c8a127e3ab","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def create_vpc(self, context, **kwargs):"},{"line_number":69,"context_line":"        # check if cidr address mask between 16 and 28"},{"line_number":70,"context_line":"        if int(kwargs[\u0027cidr_block\u0027].split(\u0027/\u0027)[1]) not in range(16, 29):"},{"line_number":71,"context_line":"            msg \u003d \u0027Subnet Mask should be between 16 and 28\u0027"},{"line_number":72,"context_line":"            raise exception.InvalidParameterValue(err\u003dmsg)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # create project for vpc"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F%2F4c%3D","line":71,"updated":"2013-10-24 02:46:29.000000000","message":"why is it limited between 16 and 28 is this something that vpc does?","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def create_vpc(self, context, **kwargs):"},{"line_number":69,"context_line":"        # check if cidr address mask between 16 and 28"},{"line_number":70,"context_line":"        if int(kwargs[\u0027cidr_block\u0027].split(\u0027/\u0027)[1]) not in range(16, 29):"},{"line_number":71,"context_line":"            msg \u003d \u0027Subnet Mask should be between 16 and 28\u0027"},{"line_number":72,"context_line":"            raise exception.InvalidParameterValue(err\u003dmsg)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # create project for vpc"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8O0%3D","line":71,"in_reply_to":"AAAATn%2F%2F%2F4c%3D","updated":"2013-10-24 21:07:36.000000000","message":"AWS VPC restriction.","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"de921b3862fe310943b9e84a957c3b5747e51db1","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def create_vpc(self, context, **kwargs):"},{"line_number":69,"context_line":"        # check if cidr address mask between 16 and 28"},{"line_number":70,"context_line":"        if int(kwargs[\u0027cidr_block\u0027].split(\u0027/\u0027)[1]) not in range(16, 29):"},{"line_number":71,"context_line":"            msg \u003d \u0027Subnet Mask should be between 16 and 28\u0027"},{"line_number":72,"context_line":"            raise exception.InvalidParameterValue(err\u003dmsg)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # create project for vpc"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F7%2Fk%3D","line":71,"in_reply_to":"AAAATn%2F%2F8O0%3D","updated":"2013-10-25 00:44:30.000000000","message":"Could we add a comment that it\u0027s an AWS VPC restriction so we know why it\u0027s down.","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"20d733458031a6ba9a4de7e5295886c8a127e3ab","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            net_rsp \u003d neutron.create_network({\u0027network\u0027: net_req})"},{"line_number":88,"context_line":"            subnet_req \u003d {\u0027network_id\u0027: net_rsp[\u0027network\u0027][\u0027id\u0027],"},{"line_number":89,"context_line":"                          \u0027cidr\u0027: unicode(kwargs[\u0027cidr_block\u0027]),"},{"line_number":90,"context_line":"                          \u0027ip_version\u0027: 4,"},{"line_number":91,"context_line":"                          \u0027tenant_id\u0027: tenant_id.id}"},{"line_number":92,"context_line":"            neutron.create_subnet({\u0027subnet\u0027: subnet_req})"},{"line_number":93,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F%2F4I%3D","line":90,"updated":"2013-10-24 02:46:29.000000000","message":"nit: it would be nice to detect the ip_version from the cidr this way if they every add support for v6 we won\u0027t have to update this code here.","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            net_rsp \u003d neutron.create_network({\u0027network\u0027: net_req})"},{"line_number":88,"context_line":"            subnet_req \u003d {\u0027network_id\u0027: net_rsp[\u0027network\u0027][\u0027id\u0027],"},{"line_number":89,"context_line":"                          \u0027cidr\u0027: unicode(kwargs[\u0027cidr_block\u0027]),"},{"line_number":90,"context_line":"                          \u0027ip_version\u0027: 4,"},{"line_number":91,"context_line":"                          \u0027tenant_id\u0027: tenant_id.id}"},{"line_number":92,"context_line":"            neutron.create_subnet({\u0027subnet\u0027: subnet_req})"},{"line_number":93,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8Oc%3D","line":90,"in_reply_to":"AAAATn%2F%2F%2F4I%3D","updated":"2013-10-24 21:07:36.000000000","message":"AWS VPC does not have v6 support planned.","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"de921b3862fe310943b9e84a957c3b5747e51db1","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            net_rsp \u003d neutron.create_network({\u0027network\u0027: net_req})"},{"line_number":88,"context_line":"            subnet_req \u003d {\u0027network_id\u0027: net_rsp[\u0027network\u0027][\u0027id\u0027],"},{"line_number":89,"context_line":"                          \u0027cidr\u0027: unicode(kwargs[\u0027cidr_block\u0027]),"},{"line_number":90,"context_line":"                          \u0027ip_version\u0027: 4,"},{"line_number":91,"context_line":"                          \u0027tenant_id\u0027: tenant_id.id}"},{"line_number":92,"context_line":"            neutron.create_subnet({\u0027subnet\u0027: subnet_req})"},{"line_number":93,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F7u4%3D","line":90,"in_reply_to":"AAAATn%2F%2F8Oc%3D","updated":"2013-10-25 00:44:30.000000000","message":"still probably not a bad thing to make it more robust when/if they do.  There is a method in nova/utils.py that does this for you anyways : \n\ndef get_ip_version(network):\n    \"\"\"Returns the IP version of a network (IPv4 or IPv6).\n\n    Raises AddrFormatError if invalid network.\n    \"\"\"\n    if netaddr.IPNetwork(network).version \u003d\u003d 6:\n        return \"IPv6\"\n    elif netaddr.IPNetwork(network).version \u003d\u003d 4:\n        return \"IPv4\"","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"20d733458031a6ba9a4de7e5295886c8a127e3ab","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        except ke.ClientException as e:"},{"line_number":130,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        return {\u0027return\u0027: \u0027true\u0027}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def describe_vpcs(self, context, **kwargs):"},{"line_number":135,"context_line":"        # fetch tenant list"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F%2F30%3D","line":132,"updated":"2013-10-24 02:46:29.000000000","message":"It seems like this return statement isn\u0027t very helpful as this method will either  return here or raise an exception.","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        except ke.ClientException as e:"},{"line_number":130,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        return {\u0027return\u0027: \u0027true\u0027}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def describe_vpcs(self, context, **kwargs):"},{"line_number":135,"context_line":"        # fetch tenant list"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8OY%3D","line":132,"in_reply_to":"AAAATn%2F%2F%2F30%3D","updated":"2013-10-24 21:07:36.000000000","message":"This is expected for API response.","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"20d733458031a6ba9a4de7e5295886c8a127e3ab","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                tenant_id \u003d self._get_tenantid_from_vpcid(tenant.name, context)"},{"line_number":153,"context_line":"                network_rsp \u003d neutron.list_networks(tenant_id\u003dtenant_id)"},{"line_number":154,"context_line":"            except Exception as e:"},{"line_number":155,"context_line":"                raise exception.InternalError(message\u003de)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"            item \u003d {}"},{"line_number":158,"context_line":"            cidr_network \u003d \u0027subnet-\u0027 + tenant.name"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F%2F3s%3D","line":155,"updated":"2013-10-24 02:46:29.000000000","message":"we should have LOG.exception() to all of these","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                tenant_id \u003d self._get_tenantid_from_vpcid(tenant.name, context)"},{"line_number":153,"context_line":"                network_rsp \u003d neutron.list_networks(tenant_id\u003dtenant_id)"},{"line_number":154,"context_line":"            except Exception as e:"},{"line_number":155,"context_line":"                raise exception.InternalError(message\u003de)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"            item \u003d {}"},{"line_number":158,"context_line":"            cidr_network \u003d \u0027subnet-\u0027 + tenant.name"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8OQ%3D","line":155,"in_reply_to":"AAAATn%2F%2F%2F3s%3D","updated":"2013-10-24 21:07:36.000000000","message":"Done","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"20d733458031a6ba9a4de7e5295886c8a127e3ab","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                    for subnet in subnets_rsp[\u0027subnets\u0027]:"},{"line_number":167,"context_line":"                        cidr_block \u003d subnet[\u0027cidr\u0027]"},{"line_number":168,"context_line":"                except Exception as e:"},{"line_number":169,"context_line":"                    raise exception.InternalError(message\u003de)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"                # populate the VPC entry in response"},{"line_number":172,"context_line":"                item[\u0027vpcId\u0027] \u003d tenant.name"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F%2F3o%3D","line":169,"updated":"2013-10-24 02:46:29.000000000","message":"ditto","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                    for subnet in subnets_rsp[\u0027subnets\u0027]:"},{"line_number":167,"context_line":"                        cidr_block \u003d subnet[\u0027cidr\u0027]"},{"line_number":168,"context_line":"                except Exception as e:"},{"line_number":169,"context_line":"                    raise exception.InternalError(message\u003de)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"                # populate the VPC entry in response"},{"line_number":172,"context_line":"                item[\u0027vpcId\u0027] \u003d tenant.name"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8OM%3D","line":169,"in_reply_to":"AAAATn%2F%2F%2F3o%3D","updated":"2013-10-24 21:07:36.000000000","message":"Done","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":7962,"name":"Ronak Shah","email":"ronak.malav.shah@gmail.com","username":"ronak"},"change_message_id":"fc375111c6effdee7109101a00b8972900314faa","unresolved":false,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        return {\u0027return\u0027: \u0027true\u0027}"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def describe_subnets(self, context, **kwargs):"},{"line_number":264,"context_line":"        # fetch tenant list"},{"line_number":265,"context_line":"        try:"},{"line_number":266,"context_line":"            kc \u003d self._get_keystone_client(context)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATX%2F%2F7wQ%3D","line":263,"updated":"2013-10-24 01:16:53.000000000","message":"How does this method gets called?","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        return {\u0027return\u0027: \u0027true\u0027}"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def describe_subnets(self, context, **kwargs):"},{"line_number":264,"context_line":"        # fetch tenant list"},{"line_number":265,"context_line":"        try:"},{"line_number":266,"context_line":"            kc \u003d self._get_keystone_client(context)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8OA%3D","line":263,"in_reply_to":"AAAATX%2F%2F7wQ%3D","updated":"2013-10-24 21:07:36.000000000","message":"Same manner as the rest of the functions - triggered from the API handler.","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":7962,"name":"Ronak Shah","email":"ronak.malav.shah@gmail.com","username":"ronak"},"change_message_id":"fc375111c6effdee7109101a00b8972900314faa","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        try:"},{"line_number":273,"context_line":"            network_rsp \u003d neutron.list_networks()"},{"line_number":274,"context_line":"        except Exception as e:"},{"line_number":275,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        # list of subnets/VNs"},{"line_number":278,"context_line":"        subnets \u003d []"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATX%2F%2F7uQ%3D","line":275,"updated":"2013-10-24 01:16:53.000000000","message":"Through out the file, I am not sure whether InternalError is a right exception to raise. But at the same time did not found any good exception @ nova/network/neutronv2/api.py either.","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"20d733458031a6ba9a4de7e5295886c8a127e3ab","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            if network[\u0027name\u0027].startswith(\u0027subnet-vpc-\u0027):"},{"line_number":283,"context_line":"                continue"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"            cidr_block \u003d network[\u0027contrail:subnet_ipam\u0027][0][\u0027subnet_cidr\u0027]"},{"line_number":286,"context_line":"            item \u003d {\u0027subnetId\u0027: network[\u0027name\u0027],"},{"line_number":287,"context_line":"                    \u0027state\u0027: \u0027available\u0027,"},{"line_number":288,"context_line":"                    \u0027vpcId\u0027: network[\u0027contrail:fq_name\u0027][1],"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F%2F3Y%3D","line":285,"updated":"2013-10-24 02:46:29.000000000","message":"why does this have contrail:subnet_ipam here?  This isn\u0027t something that is in networks today, same with subnet_cidr","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            if network[\u0027name\u0027].startswith(\u0027subnet-vpc-\u0027):"},{"line_number":283,"context_line":"                continue"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"            cidr_block \u003d network[\u0027contrail:subnet_ipam\u0027][0][\u0027subnet_cidr\u0027]"},{"line_number":286,"context_line":"            item \u003d {\u0027subnetId\u0027: network[\u0027name\u0027],"},{"line_number":287,"context_line":"                    \u0027state\u0027: \u0027available\u0027,"},{"line_number":288,"context_line":"                    \u0027vpcId\u0027: network[\u0027contrail:fq_name\u0027][1],"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8N4%3D","line":285,"in_reply_to":"AAAATn%2F%2F%2F3Y%3D","updated":"2013-10-24 21:07:36.000000000","message":"Done","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"b04bfaeaba1cefe0219db62de9f3a558b586f49c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2010 United States Government as represented by the"},{"line_number":4,"context_line":"# Administrator of the National Aeronautics and Space Administration."},{"line_number":5,"context_line":"# All Rights Reserved."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F7oM%3D","line":3,"updated":"2013-10-25 01:27:55.000000000","message":"ditto","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"311ae3e80d853cfba55ba0ce14e45eb03cd99c18","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        return kc"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _get_tenantid_from_vpcid(self, vpc_id, context):"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":62,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F7qg%3D","line":59,"updated":"2013-10-25 01:22:56.000000000","message":"I don\u0027t believe you need to go though all of this to get the tenant_id. I believe it\u0027s stored in context.project_id","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"54e52bc6279e470e5ae549497cec3b79e4e8484f","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        return kc"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _get_tenantid_from_vpcid(self, vpc_id, context):"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":62,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F3mA%3D","line":59,"in_reply_to":"AAAATn%2F%2F4jA%3D","updated":"2013-10-25 22:50:50.000000000","message":"Sure but in those cases the admin should be able to do it directly and not  need the tenant_id. Also, this is the only place in the nova code base that is importing keystoneclient which is why i\u0027m slight skeptical that this is needed.","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"3ce710b27d2486ae6d0191c8ad2c64831cd63ade","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        return kc"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def _get_tenantid_from_vpcid(self, vpc_id, context):"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":62,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F4jA%3D","line":59,"in_reply_to":"AAAATn%2F%2F7qg%3D","updated":"2013-10-25 18:49:23.000000000","message":"There are cases where admin user may need to get a list of all the projects. There are additional cases where admin may have to perform actions on different VPCs","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"311ae3e80d853cfba55ba0ce14e45eb03cd99c18","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                          \u0027tenant_id\u0027: tenant_id.id}"},{"line_number":97,"context_line":"            neutron.create_subnet({\u0027subnet\u0027: subnet_req})"},{"line_number":98,"context_line":"        except Exception as e:"},{"line_number":99,"context_line":"            LOG.exception(_(\u0027%s\u0027), e)"},{"line_number":100,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        return {\u0027vpc\u0027: {\u0027vpcId\u0027: tenant_name, \u0027state\u0027: \u0027available\u0027}}"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F7qI%3D","line":99,"updated":"2013-10-25 01:22:56.000000000","message":"all these LOG.exceptions should have some string before: LOG.exception(_(\"Neutron raised: %s), e) etc.","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"3ce710b27d2486ae6d0191c8ad2c64831cd63ade","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                          \u0027tenant_id\u0027: tenant_id.id}"},{"line_number":97,"context_line":"            neutron.create_subnet({\u0027subnet\u0027: subnet_req})"},{"line_number":98,"context_line":"        except Exception as e:"},{"line_number":99,"context_line":"            LOG.exception(_(\u0027%s\u0027), e)"},{"line_number":100,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        return {\u0027vpc\u0027: {\u0027vpcId\u0027: tenant_name, \u0027state\u0027: \u0027available\u0027}}"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F4fU%3D","line":99,"in_reply_to":"AAAATn%2F%2F7qI%3D","updated":"2013-10-25 18:49:23.000000000","message":"Done","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"311ae3e80d853cfba55ba0ce14e45eb03cd99c18","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                item[\u0027vpcId\u0027] \u003d tenant.name"},{"line_number":185,"context_line":"                item[\u0027state\u0027] \u003d \u0027available\u0027"},{"line_number":186,"context_line":"                item[\u0027cidrBlock\u0027] \u003d str(cidr_block)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"            if item:"},{"line_number":189,"context_line":"                vpcs.append(item)"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F7p8%3D","line":187,"updated":"2013-10-25 01:22:56.000000000","message":"break?","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"3ce710b27d2486ae6d0191c8ad2c64831cd63ade","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                item[\u0027vpcId\u0027] \u003d tenant.name"},{"line_number":185,"context_line":"                item[\u0027state\u0027] \u003d \u0027available\u0027"},{"line_number":186,"context_line":"                item[\u0027cidrBlock\u0027] \u003d str(cidr_block)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"            if item:"},{"line_number":189,"context_line":"                vpcs.append(item)"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F4fY%3D","line":187,"in_reply_to":"AAAATn%2F%2F7p8%3D","updated":"2013-10-25 18:49:23.000000000","message":"Done","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import netaddr"},{"line_number":24,"context_line":"from oslo.config import cfg"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from keystoneclient import exceptions as ke"},{"line_number":27,"context_line":"import keystoneclient.v2_0"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmUg%3D","line":25,"updated":"2013-10-31 17:16:40.000000000","message":"nit: the extra blank line can be removed.","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import netaddr"},{"line_number":24,"context_line":"from oslo.config import cfg"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from keystoneclient import exceptions as ke"},{"line_number":27,"context_line":"import keystoneclient.v2_0"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlwQ%3D","line":25,"in_reply_to":"AAAATn%2F%2FmUg%3D","updated":"2013-10-31 23:44:01.000000000","message":"Done","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _get_tenantid_from_vpcid(self, vpc_id, context):"},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":58,"context_line":"        except Exception as e:"},{"line_number":59,"context_line":"            LOG.exception(_(\u0027Keystone raised: %s\u0027), e)"},{"line_number":60,"context_line":"            raise exception.InternalError(message\u003de)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmLs%3D","line":57,"updated":"2013-10-31 17:16:40.000000000","message":"there are lots of get_keystone_client all over this file, consider to add __init__ method to the class and initialize the kc at there, then just call self.kc.","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _get_tenantid_from_vpcid(self, vpc_id, context):"},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":58,"context_line":"        except Exception as e:"},{"line_number":59,"context_line":"            LOG.exception(_(\u0027Keystone raised: %s\u0027), e)"},{"line_number":60,"context_line":"            raise exception.InternalError(message\u003de)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlNg%3D","line":57,"in_reply_to":"AAAATn%2F%2FmLs%3D","updated":"2013-10-31 23:44:01.000000000","message":"Still need to call this since the context from the API call has the credentials to get the client. I now save this into self.kc so if none its initialized only once.","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def _get_tenantid_from_vpcid(self, vpc_id, context):"},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":58,"context_line":"        except Exception as e:"},{"line_number":59,"context_line":"            LOG.exception(_(\u0027Keystone raised: %s\u0027), e)"},{"line_number":60,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmQY%3D","line":58,"updated":"2013-10-31 17:16:40.000000000","message":"here we should catch the appropriate exception like 79 does","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def _get_tenantid_from_vpcid(self, vpc_id, context):"},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":58,"context_line":"        except Exception as e:"},{"line_number":59,"context_line":"            LOG.exception(_(\u0027Keystone raised: %s\u0027), e)"},{"line_number":60,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlNc%3D","line":58,"in_reply_to":"AAAATn%2F%2FmQY%3D","updated":"2013-10-31 23:44:01.000000000","message":"Done","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def create_vpc(self, context, **kwargs):"},{"line_number":69,"context_line":"        # aws vpc restriction: check if cidr address mask between 16 and 28"},{"line_number":70,"context_line":"        if int(kwargs[\u0027cidr_block\u0027].split(\u0027/\u0027)[1]) not in range(16, 29):"},{"line_number":71,"context_line":"            msg \u003d \u0027Subnet Mask should be between 16 and 28\u0027"},{"line_number":72,"context_line":"            raise exception.InvalidParameterValue(err\u003dmsg)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # create project for vpc"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmRc%3D","line":71,"updated":"2013-10-31 17:16:40.000000000","message":"i18n issue, it should be msg \u003d _(\u0027xxx\u0027), besides we could log the invalid cidr_block for debugging purpose.","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def create_vpc(self, context, **kwargs):"},{"line_number":69,"context_line":"        # aws vpc restriction: check if cidr address mask between 16 and 28"},{"line_number":70,"context_line":"        if int(kwargs[\u0027cidr_block\u0027].split(\u0027/\u0027)[1]) not in range(16, 29):"},{"line_number":71,"context_line":"            msg \u003d \u0027Subnet Mask should be between 16 and 28\u0027"},{"line_number":72,"context_line":"            raise exception.InvalidParameterValue(err\u003dmsg)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # create project for vpc"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlMs%3D","line":71,"in_reply_to":"AAAATn%2F%2FmRc%3D","updated":"2013-10-31 23:44:01.000000000","message":"Done","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        # create project for vpc"},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            tenant_name \u003d \u0027vpc-\u0027 + (\u0027%x\u0027 % uuid.uuid4().time_low)"},{"line_number":77,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":78,"context_line":"            tenant_id \u003d kc.tenants.create(tenant_name)"},{"line_number":79,"context_line":"        except ke.ClientException as e:"},{"line_number":80,"context_line":"            LOG.exception(_(\u0027Keystone raised: %s\u0027), e)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmLg%3D","line":77,"updated":"2013-10-31 17:16:40.000000000","message":"ditto","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        # create project for vpc"},{"line_number":75,"context_line":"        try:"},{"line_number":76,"context_line":"            tenant_name \u003d \u0027vpc-\u0027 + (\u0027%x\u0027 % uuid.uuid4().time_low)"},{"line_number":77,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":78,"context_line":"            tenant_id \u003d kc.tenants.create(tenant_name)"},{"line_number":79,"context_line":"        except ke.ClientException as e:"},{"line_number":80,"context_line":"            LOG.exception(_(\u0027Keystone raised: %s\u0027), e)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlMk%3D","line":77,"in_reply_to":"AAAATn%2F%2FmLg%3D","updated":"2013-10-31 23:44:01.000000000","message":"Done","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # create a network to store vpc cidr"},{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            neutron \u003d neutronv2.get_client(context)"},{"line_number":86,"context_line":"            nw_name \u003d \u0027subnet-\u0027 + tenant_name"},{"line_number":87,"context_line":"            net_req \u003d {\u0027name\u0027: nw_name, \u0027tenant_id\u0027: tenant_id.id}"},{"line_number":88,"context_line":"            net_rsp \u003d neutron.create_network({\u0027network\u0027: net_req})"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmKU%3D","line":85,"updated":"2013-10-31 17:16:40.000000000","message":"same as kc client.","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # create a network to store vpc cidr"},{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            neutron \u003d neutronv2.get_client(context)"},{"line_number":86,"context_line":"            nw_name \u003d \u0027subnet-\u0027 + tenant_name"},{"line_number":87,"context_line":"            net_req \u003d {\u0027name\u0027: nw_name, \u0027tenant_id\u0027: tenant_id.id}"},{"line_number":88,"context_line":"            net_rsp \u003d neutron.create_network({\u0027network\u0027: net_req})"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlMg%3D","line":85,"in_reply_to":"AAAATn%2F%2FmKU%3D","updated":"2013-10-31 23:44:01.000000000","message":"Neutron client depends on the context and hence needs to be fetched for each API call.","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    def delete_vpc(self, context, **kwargs):"},{"line_number":101,"context_line":"        vpc_id \u003d kwargs[\u0027vpc_id\u0027]"},{"line_number":102,"context_line":"        tenant_id \u003d self._get_tenantid_from_vpcid(vpc_id, context)"},{"line_number":103,"context_line":"        neutron \u003d neutronv2.get_client(context)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        # delete network and subnet that stores VPC cidr"},{"line_number":106,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmKM%3D","line":103,"updated":"2013-10-31 17:16:40.000000000","message":"same as kc client.","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    def delete_vpc(self, context, **kwargs):"},{"line_number":101,"context_line":"        vpc_id \u003d kwargs[\u0027vpc_id\u0027]"},{"line_number":102,"context_line":"        tenant_id \u003d self._get_tenantid_from_vpcid(vpc_id, context)"},{"line_number":103,"context_line":"        neutron \u003d neutronv2.get_client(context)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        # delete network and subnet that stores VPC cidr"},{"line_number":106,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlMc%3D","line":103,"in_reply_to":"AAAATn%2F%2FmKM%3D","updated":"2013-10-31 23:44:01.000000000","message":"Done","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        try:"},{"line_number":107,"context_line":"            network_rsp \u003d neutron.list_networks(tenant_id\u003dtenant_id)"},{"line_number":108,"context_line":"        except Exception as e:"},{"line_number":109,"context_line":"            LOG.exception(_(\u0027Neutron raised: %s\u0027), e)"},{"line_number":110,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        cidr_network \u003d \u0027subnet-\u0027 + str(vpc_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmNo%3D","line":109,"updated":"2013-10-31 17:16:40.000000000","message":"this kind of message doesn\u0027t help so much, we might need meaningful error message and provide the context info as much as possible.","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        try:"},{"line_number":107,"context_line":"            network_rsp \u003d neutron.list_networks(tenant_id\u003dtenant_id)"},{"line_number":108,"context_line":"        except Exception as e:"},{"line_number":109,"context_line":"            LOG.exception(_(\u0027Neutron raised: %s\u0027), e)"},{"line_number":110,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        cidr_network \u003d \u0027subnet-\u0027 + str(vpc_id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlKU%3D","line":109,"in_reply_to":"AAAATn%2F%2FmNo%3D","updated":"2013-10-31 23:44:01.000000000","message":"Done","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # delete project for the passed vpc"},{"line_number":127,"context_line":"        try:"},{"line_number":128,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":129,"context_line":"            vpc_list \u003d kc.tenants.list()"},{"line_number":130,"context_line":"            for vpc in vpc_list:"},{"line_number":131,"context_line":"                if vpc.name \u003d\u003d vpc_id:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmK8%3D","line":128,"updated":"2013-10-31 17:16:40.000000000","message":"ditto","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # delete project for the passed vpc"},{"line_number":127,"context_line":"        try:"},{"line_number":128,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":129,"context_line":"            vpc_list \u003d kc.tenants.list()"},{"line_number":130,"context_line":"            for vpc in vpc_list:"},{"line_number":131,"context_line":"                if vpc.name \u003d\u003d vpc_id:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlMY%3D","line":128,"in_reply_to":"AAAATn%2F%2FmK8%3D","updated":"2013-10-31 23:44:01.000000000","message":"Done","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    def describe_vpcs(self, context, **kwargs):"},{"line_number":140,"context_line":"        # fetch tenant list"},{"line_number":141,"context_line":"        try:"},{"line_number":142,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":143,"context_line":"            tenant_list \u003d kc.tenants.list()"},{"line_number":144,"context_line":"        except ke.ClientException as e:"},{"line_number":145,"context_line":"            LOG.exception(_(\u0027Keystone raised: %s\u0027), e)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmK0%3D","line":142,"updated":"2013-10-31 17:16:40.000000000","message":"ditto","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    def describe_vpcs(self, context, **kwargs):"},{"line_number":140,"context_line":"        # fetch tenant list"},{"line_number":141,"context_line":"        try:"},{"line_number":142,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":143,"context_line":"            tenant_list \u003d kc.tenants.list()"},{"line_number":144,"context_line":"        except ke.ClientException as e:"},{"line_number":145,"context_line":"            LOG.exception(_(\u0027Keystone raised: %s\u0027), e)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlMU%3D","line":142,"in_reply_to":"AAAATn%2F%2FmK0%3D","updated":"2013-10-31 23:44:01.000000000","message":"Done","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                continue"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"            try:"},{"line_number":157,"context_line":"                neutron \u003d neutronv2.get_client(context)"},{"line_number":158,"context_line":"                tenant_id \u003d self._get_tenantid_from_vpcid(tenant.name, context)"},{"line_number":159,"context_line":"                network_rsp \u003d neutron.list_networks(tenant_id\u003dtenant_id)"},{"line_number":160,"context_line":"            except Exception as e:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmKI%3D","line":157,"updated":"2013-10-31 17:16:40.000000000","message":"same as kc client.","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                continue"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"            try:"},{"line_number":157,"context_line":"                neutron \u003d neutronv2.get_client(context)"},{"line_number":158,"context_line":"                tenant_id \u003d self._get_tenantid_from_vpcid(tenant.name, context)"},{"line_number":159,"context_line":"                network_rsp \u003d neutron.list_networks(tenant_id\u003dtenant_id)"},{"line_number":160,"context_line":"            except Exception as e:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlMQ%3D","line":157,"in_reply_to":"AAAATn%2F%2FmKI%3D","updated":"2013-10-31 23:44:01.000000000","message":"Done","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        # get project id"},{"line_number":196,"context_line":"        tenant_id \u003d self._get_tenantid_from_vpcid(vpc_id, context)"},{"line_number":197,"context_line":"        neutron \u003d neutronv2.get_client(context)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        # check if subnet cidr in vpc cidr"},{"line_number":200,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmKE%3D","line":197,"updated":"2013-10-31 17:16:40.000000000","message":"same as kc client.","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        # get project id"},{"line_number":196,"context_line":"        tenant_id \u003d self._get_tenantid_from_vpcid(vpc_id, context)"},{"line_number":197,"context_line":"        neutron \u003d neutronv2.get_client(context)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        # check if subnet cidr in vpc cidr"},{"line_number":200,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlMM%3D","line":197,"in_reply_to":"AAAATn%2F%2FmKE%3D","updated":"2013-10-31 23:44:01.000000000","message":"Done","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":252,"context_line":"    def delete_subnet(self, context, **kwargs):"},{"line_number":253,"context_line":"        # delete VN for the passed subnet_id"},{"line_number":254,"context_line":"        subnet_id \u003d kwargs[\u0027subnet_id\u0027]"},{"line_number":255,"context_line":"        neutron \u003d neutronv2.get_client(context)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        try:"},{"line_number":258,"context_line":"            network_rsp \u003d neutron.list_networks()"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmKA%3D","line":255,"updated":"2013-10-31 17:16:40.000000000","message":"same as kc client.","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":252,"context_line":"    def delete_subnet(self, context, **kwargs):"},{"line_number":253,"context_line":"        # delete VN for the passed subnet_id"},{"line_number":254,"context_line":"        subnet_id \u003d kwargs[\u0027subnet_id\u0027]"},{"line_number":255,"context_line":"        neutron \u003d neutronv2.get_client(context)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        try:"},{"line_number":258,"context_line":"            network_rsp \u003d neutron.list_networks()"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlMI%3D","line":255,"in_reply_to":"AAAATn%2F%2FmKA%3D","updated":"2013-10-31 23:44:01.000000000","message":"Done","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":278,"context_line":"    def describe_subnets(self, context, **kwargs):"},{"line_number":279,"context_line":"        # fetch tenant list"},{"line_number":280,"context_line":"        try:"},{"line_number":281,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":282,"context_line":"        except kc.ClientException as e:"},{"line_number":283,"context_line":"            LOG.exception(_(\u0027Keystone raised: %s\u0027), e)"},{"line_number":284,"context_line":"            raise exception.InternalError(message\u003de)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmKw%3D","line":281,"updated":"2013-10-31 17:16:40.000000000","message":"ditto","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":278,"context_line":"    def describe_subnets(self, context, **kwargs):"},{"line_number":279,"context_line":"        # fetch tenant list"},{"line_number":280,"context_line":"        try:"},{"line_number":281,"context_line":"            kc \u003d self._get_keystone_client(context)"},{"line_number":282,"context_line":"        except kc.ClientException as e:"},{"line_number":283,"context_line":"            LOG.exception(_(\u0027Keystone raised: %s\u0027), e)"},{"line_number":284,"context_line":"            raise exception.InternalError(message\u003de)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlME%3D","line":281,"in_reply_to":"AAAATn%2F%2FmKw%3D","updated":"2013-10-31 23:44:01.000000000","message":"Done","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"47f54a0c88a043bc43e1fb98eae3bd97f9b7bd49","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        # fetch network list"},{"line_number":287,"context_line":"        neutron \u003d neutronv2.get_client(context)"},{"line_number":288,"context_line":"        try:"},{"line_number":289,"context_line":"            network_rsp \u003d neutron.list_networks()"},{"line_number":290,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FmJ8%3D","line":287,"updated":"2013-10-31 17:16:40.000000000","message":"same as kc client.","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"985d241176a48afdbb5c4e212348b4e052af8517","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        # fetch network list"},{"line_number":287,"context_line":"        neutron \u003d neutronv2.get_client(context)"},{"line_number":288,"context_line":"        try:"},{"line_number":289,"context_line":"            network_rsp \u003d neutron.list_networks()"},{"line_number":290,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2FlMA%3D","line":287,"in_reply_to":"AAAATn%2F%2FmJ8%3D","updated":"2013-10-31 23:44:01.000000000","message":"Done","commit_id":"5a067fbfb84ff0483fd66b8029f17d9d9219e2b7"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"983d2a0807990e010a49eed6d3a80d0c2430188b","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import netaddr"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from keystoneclient import exceptions as ke"},{"line_number":26,"context_line":"import keystoneclient.v2_0"},{"line_number":27,"context_line":"from nova import exception"},{"line_number":28,"context_line":"from nova.network import neutronv2"},{"line_number":29,"context_line":"from nova.openstack.common.gettextutils import _"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2FBag%3D","line":26,"updated":"2013-11-15 15:29:20.000000000","message":"The keystone and oslo imports should be up with netaddr, and the nova imports alone in the third block.","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"9e8701cf0738a17ea2e128d39b2ccd78787085c9","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import netaddr"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from keystoneclient import exceptions as ke"},{"line_number":26,"context_line":"import keystoneclient.v2_0"},{"line_number":27,"context_line":"from nova import exception"},{"line_number":28,"context_line":"from nova.network import neutronv2"},{"line_number":29,"context_line":"from nova.openstack.common.gettextutils import _"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2B%2BLk%3D","line":26,"in_reply_to":"AAAATn%2F%2FBag%3D","updated":"2013-11-17 19:01:26.000000000","message":"Done","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"983d2a0807990e010a49eed6d3a80d0c2430188b","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def create_vpc(self, context, **kwargs):"},{"line_number":78,"context_line":"        # aws vpc restriction: check if cidr address mask between 16 and 28"},{"line_number":79,"context_line":"        if int(kwargs[\u0027cidr_block\u0027].split(\u0027/\u0027)[1]) not in range(16, 29):"},{"line_number":80,"context_line":"            msg \u003d _(\u0027Mask %s not between 16 and 28\u0027) % kwargs[\u0027cidr_block\u0027]"},{"line_number":81,"context_line":"            raise exception.InvalidParameterValue(err\u003dmsg)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # create project for vpc"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2FBaE%3D","line":80,"updated":"2013-11-15 15:29:20.000000000","message":"Maybe add the world \"inclusive\" to the msg to make it clear exactly what the edges of the boundaries are.","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"9e8701cf0738a17ea2e128d39b2ccd78787085c9","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    def create_vpc(self, context, **kwargs):"},{"line_number":78,"context_line":"        # aws vpc restriction: check if cidr address mask between 16 and 28"},{"line_number":79,"context_line":"        if int(kwargs[\u0027cidr_block\u0027].split(\u0027/\u0027)[1]) not in range(16, 29):"},{"line_number":80,"context_line":"            msg \u003d _(\u0027Mask %s not between 16 and 28\u0027) % kwargs[\u0027cidr_block\u0027]"},{"line_number":81,"context_line":"            raise exception.InvalidParameterValue(err\u003dmsg)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # create project for vpc"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2B%2BLY%3D","line":80,"in_reply_to":"AAAATn%2F%2FBaE%3D","updated":"2013-11-17 19:01:26.000000000","message":"Done","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"983d2a0807990e010a49eed6d3a80d0c2430188b","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                    neutron.delete_subnet(subnet[\u0027id\u0027])"},{"line_number":130,"context_line":"                neutron.delete_network(network[\u0027id\u0027])"},{"line_number":131,"context_line":"            except Exception as e:"},{"line_number":132,"context_line":"                LOG.exception(_(\u0027Neutron delete network failed: %s\u0027), e)"},{"line_number":133,"context_line":"                raise exception.InternalError(message\u003de)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # delete project for the passed vpc"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2FBZg%3D","line":132,"updated":"2013-11-15 15:29:20.000000000","message":"Should probably be \"Neutron delete network or subnet failed\" since both are in the try block.  (Could do 2 try blocks for precision but that\u0027s probably overkill.)","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"9e8701cf0738a17ea2e128d39b2ccd78787085c9","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                    neutron.delete_subnet(subnet[\u0027id\u0027])"},{"line_number":130,"context_line":"                neutron.delete_network(network[\u0027id\u0027])"},{"line_number":131,"context_line":"            except Exception as e:"},{"line_number":132,"context_line":"                LOG.exception(_(\u0027Neutron delete network failed: %s\u0027), e)"},{"line_number":133,"context_line":"                raise exception.InternalError(message\u003de)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # delete project for the passed vpc"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2B%2BLQ%3D","line":132,"in_reply_to":"AAAATn%2F%2FBZg%3D","updated":"2013-11-17 19:01:26.000000000","message":"Done","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"983d2a0807990e010a49eed6d3a80d0c2430188b","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        # create network"},{"line_number":239,"context_line":"        try:"},{"line_number":240,"context_line":"            nw_name \u003d \u0027subnet-\u0027 + (\u0027%x\u0027 % uuid.uuid4().time_low)"},{"line_number":241,"context_line":"            net_req \u003d {\u0027name\u0027: nw_name, \u0027tenant_id\u0027: tenant_id}"},{"line_number":242,"context_line":"            net_rsp \u003d neutron.create_network({\u0027network\u0027: net_req})"},{"line_number":243,"context_line":"        except Exception as e:"},{"line_number":244,"context_line":"            LOG.exception(_(\u0027Neutron create network failed: %s\u0027), e)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2FBZQ%3D","line":241,"updated":"2013-11-15 15:29:20.000000000","message":"I would move the first two outside the try block, since they shouldn\u0027t fail and if they do the error message will be wrong.","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"9e8701cf0738a17ea2e128d39b2ccd78787085c9","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        # create network"},{"line_number":239,"context_line":"        try:"},{"line_number":240,"context_line":"            nw_name \u003d \u0027subnet-\u0027 + (\u0027%x\u0027 % uuid.uuid4().time_low)"},{"line_number":241,"context_line":"            net_req \u003d {\u0027name\u0027: nw_name, \u0027tenant_id\u0027: tenant_id}"},{"line_number":242,"context_line":"            net_rsp \u003d neutron.create_network({\u0027network\u0027: net_req})"},{"line_number":243,"context_line":"        except Exception as e:"},{"line_number":244,"context_line":"            LOG.exception(_(\u0027Neutron create network failed: %s\u0027), e)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2B%2BLM%3D","line":241,"in_reply_to":"AAAATn%2F%2FBZQ%3D","updated":"2013-11-17 19:01:26.000000000","message":"Done","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"b2e2c4504da68e0d41847b32b0cc164c30e52cb3","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            last_subnet_add \u003d subnet_ip_block[-1]"},{"line_number":232,"context_line":"            if ((first_subnet_add \u003c first_vpc_add) or"},{"line_number":233,"context_line":"                    (last_subnet_add \u003e last_vpc_add)):"},{"line_number":234,"context_line":"                msg \u003d \"subnet ip block not in vpc ip block\""},{"line_number":235,"context_line":"                raise exception.InvalidParameterValue(err\u003dmsg)"},{"line_number":236,"context_line":"            break"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F%2BuII%3D","line":234,"updated":"2013-11-21 04:12:55.000000000","message":"This msg should surround by translate method _, sorry for haven\u0027t found it before.","commit_id":"e615133f11540706a73a1c0b1491871f0a3dcbde"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"9f18419eabe171b6ebfbe3205f8f59a56bc58b1a","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            last_subnet_add \u003d subnet_ip_block[-1]"},{"line_number":232,"context_line":"            if ((first_subnet_add \u003c first_vpc_add) or"},{"line_number":233,"context_line":"                    (last_subnet_add \u003e last_vpc_add)):"},{"line_number":234,"context_line":"                msg \u003d \"subnet ip block not in vpc ip block\""},{"line_number":235,"context_line":"                raise exception.InvalidParameterValue(err\u003dmsg)"},{"line_number":236,"context_line":"            break"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAATn%2F%2Bt0w%3D","line":234,"in_reply_to":"AAAATn%2F%2BuII%3D","updated":"2013-11-21 06:14:29.000000000","message":"Done","commit_id":"e615133f11540706a73a1c0b1491871f0a3dcbde"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"a43cf7d9bd59969ccebfe56195bf319895821114","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        tenant_list \u003d kc.tenants.list()"},{"line_number":72,"context_line":"        for tenant in tenant_list:"},{"line_number":73,"context_line":"            if tenant.name \u003d\u003d vpc_id:"},{"line_number":74,"context_line":"                return tenant.id"},{"line_number":75,"context_line":"        raise exception.InvalidParameterValue(err\u003d\u0027No VPC found\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2Bk8Y%3D","line":72,"updated":"2013-11-22 21:52:38.000000000","message":"This could just be for tenant in kc.tenants_list(), saving a local that\u0027s only used once, but that\u0027s minor.","commit_id":"bfa34e71ec0c1967ad495f9ec00787b6fb8cadd1"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"6c3b9858bede94ed2f55de75914951457e0c8e86","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        tenant_list \u003d kc.tenants.list()"},{"line_number":72,"context_line":"        for tenant in tenant_list:"},{"line_number":73,"context_line":"            if tenant.name \u003d\u003d vpc_id:"},{"line_number":74,"context_line":"                return tenant.id"},{"line_number":75,"context_line":"        raise exception.InvalidParameterValue(err\u003d\u0027No VPC found\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2BkbI%3D","line":72,"in_reply_to":"AAAATn%2F%2Bk8Y%3D","updated":"2013-11-23 01:09:08.000000000","message":"Done","commit_id":"bfa34e71ec0c1967ad495f9ec00787b6fb8cadd1"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"a43cf7d9bd59969ccebfe56195bf319895821114","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                          \u0027tenant_id\u0027: tenant_id.id}"},{"line_number":102,"context_line":"            neutron.create_subnet({\u0027subnet\u0027: subnet_req})"},{"line_number":103,"context_line":"        except Exception as e:"},{"line_number":104,"context_line":"            LOG.exception(_(\u0027Neutron subnet create failed: %s\u0027), e)"},{"line_number":105,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        return {\u0027vpc\u0027: {\u0027vpcId\u0027: tenant_name, \u0027state\u0027: \u0027available\u0027}}"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2Bk7s%3D","line":104,"updated":"2013-11-22 21:52:38.000000000","message":"You wrap the try block around get_client here, but not in the next method.  I\u0027d like to see only create_subnet in the try if possible, so you know that the error message is correct.","commit_id":"bfa34e71ec0c1967ad495f9ec00787b6fb8cadd1"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"6c3b9858bede94ed2f55de75914951457e0c8e86","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                          \u0027tenant_id\u0027: tenant_id.id}"},{"line_number":102,"context_line":"            neutron.create_subnet({\u0027subnet\u0027: subnet_req})"},{"line_number":103,"context_line":"        except Exception as e:"},{"line_number":104,"context_line":"            LOG.exception(_(\u0027Neutron subnet create failed: %s\u0027), e)"},{"line_number":105,"context_line":"            raise exception.InternalError(message\u003de)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        return {\u0027vpc\u0027: {\u0027vpcId\u0027: tenant_name, \u0027state\u0027: \u0027available\u0027}}"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAATn%2F%2Bkbg%3D","line":104,"in_reply_to":"AAAATn%2F%2Bk7s%3D","updated":"2013-11-23 01:09:08.000000000","message":"Done","commit_id":"bfa34e71ec0c1967ad495f9ec00787b6fb8cadd1"}],"nova/tests/api/ec2/test_vpc.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"60cea633f91941a674104bdbe9cde49524baa72a","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from nova import volume"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"from mock import MagicMock"},{"line_number":39,"context_line":"from mock import Mock"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"CONF \u003d cfg.CONF"},{"line_number":42,"context_line":"CONF.import_opt(\u0027compute_driver\u0027, \u0027nova.virt.driver\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFJQ%3D","line":39,"updated":"2013-10-04 18:36:59.000000000","message":"mock goes with the other third-party imports","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dd871d7d90cb9bcb6948fabe1aa0157dd14f3905","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from nova import volume"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"from mock import MagicMock"},{"line_number":39,"context_line":"from mock import Mock"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"CONF \u003d cfg.CONF"},{"line_number":42,"context_line":"CONF.import_opt(\u0027compute_driver\u0027, \u0027nova.virt.driver\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAS3%2F%2FFBk%3D","line":39,"in_reply_to":"AAAAS3%2F%2FFJQ%3D","updated":"2013-10-04 19:16:59.000000000","message":"Done","commit_id":"d4ffc2cee39fa4e86bafa844d5d265f5e501a776"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"dc5c81fb7e3b48b3d62a95cd8f8cbc8c335052de","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    return instances"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class VpcTestCase(test.TestCase):"},{"line_number":89,"context_line":"    def setUp(self):"},{"line_number":90,"context_line":"        super(VpcTestCase, self).setUp()"},{"line_number":91,"context_line":"        self.useFixture(test.SampleNetworks())"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATH%2F%2FHG8%3D","line":88,"updated":"2013-10-23 03:04:25.000000000","message":"NoDBTestCase","commit_id":"93dba26a961a0624c19a9998d58b9f5e4bfe8434"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"4435cd7b9f596b9427294c072ec1fd1daea4a66e","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    return instances"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class VpcTestCase(test.TestCase):"},{"line_number":89,"context_line":"    def setUp(self):"},{"line_number":90,"context_line":"        super(VpcTestCase, self).setUp()"},{"line_number":91,"context_line":"        self.useFixture(test.SampleNetworks())"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATX%2F%2F8PA%3D","line":88,"in_reply_to":"AAAATH%2F%2FHG8%3D","updated":"2013-10-23 22:02:14.000000000","message":"Same as test_cloud.py as required here.","commit_id":"93dba26a961a0624c19a9998d58b9f5e4bfe8434"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"3b95eb3c6baadac1bec0300ab3613c0364b01970","unresolved":false,"context_lines":[{"line_number":18,"context_line":"#    under the License."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import fixtures"},{"line_number":21,"context_line":"from mock import MagicMock"},{"line_number":22,"context_line":"from mock import Mock"},{"line_number":23,"context_line":"from oslo.config import cfg"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F%2Fo8%3D","line":21,"updated":"2013-10-24 05:38:33.000000000","message":"ditto 21-22","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"#    under the License."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import fixtures"},{"line_number":21,"context_line":"from mock import MagicMock"},{"line_number":22,"context_line":"from mock import Mock"},{"line_number":23,"context_line":"from oslo.config import cfg"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8N0%3D","line":21,"in_reply_to":"AAAATn%2F%2F%2Fo8%3D","updated":"2013-10-24 21:07:36.000000000","message":"Done","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"3b95eb3c6baadac1bec0300ab3613c0364b01970","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.useFixture(fixtures.FakeLogger(\u0027boto\u0027))"},{"line_number":96,"context_line":"        fake_utils.stub_out_utils_spawn_n(self.stubs)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        def fake_show(meh, context, id):"},{"line_number":99,"context_line":"            return {\u0027id\u0027: id,"},{"line_number":100,"context_line":"                    \u0027name\u0027: \u0027fake_name\u0027,"},{"line_number":101,"context_line":"                    \u0027container_format\u0027: \u0027ami\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F%2Foo%3D","line":98,"updated":"2013-10-24 05:38:33.000000000","message":"meh param is unused.","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.useFixture(fixtures.FakeLogger(\u0027boto\u0027))"},{"line_number":96,"context_line":"        fake_utils.stub_out_utils_spawn_n(self.stubs)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        def fake_show(meh, context, id):"},{"line_number":99,"context_line":"            return {\u0027id\u0027: id,"},{"line_number":100,"context_line":"                    \u0027name\u0027: \u0027fake_name\u0027,"},{"line_number":101,"context_line":"                    \u0027container_format\u0027: \u0027ami\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8Nw%3D","line":98,"in_reply_to":"AAAATn%2F%2F%2Foo%3D","updated":"2013-10-24 21:07:36.000000000","message":"Done","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"3b95eb3c6baadac1bec0300ab3613c0364b01970","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        super(VpcTestCase, self).tearDown()"},{"line_number":193,"context_line":"        fake.FakeImageService_reset()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def fake_get_target(obj, iqn):"},{"line_number":196,"context_line":"        return 1"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def fake_remove_iscsi_target(obj, tid, lun, vol_id, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F%2FoU%3D","line":195,"updated":"2013-10-24 05:38:33.000000000","message":"s/obj/self (all through out)","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"b1165f744eee165ba2e686ffeda5b5cc85f12c8f","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        super(VpcTestCase, self).tearDown()"},{"line_number":193,"context_line":"        fake.FakeImageService_reset()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def fake_get_target(obj, iqn):"},{"line_number":196,"context_line":"        return 1"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def fake_remove_iscsi_target(obj, tid, lun, vol_id, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2F8Ns%3D","line":195,"in_reply_to":"AAAATn%2F%2F%2FoU%3D","updated":"2013-10-24 21:07:36.000000000","message":"Done","commit_id":"47cc8240cdd3619dddf896f54f26876d62c32f62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"b04bfaeaba1cefe0219db62de9f3a558b586f49c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2011 X.commerce, a business unit of eBay Inc."},{"line_number":4,"context_line":"# Copyright 2010 United States Government as represented by the"},{"line_number":5,"context_line":"# Administrator of the National Aeronautics and Space Administration."},{"line_number":6,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F7oo%3D","line":3,"updated":"2013-10-25 01:27:55.000000000","message":"I think you can remove these copy rights? Guessing they are copied?","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"3ce710b27d2486ae6d0191c8ad2c64831cd63ade","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright (c) 2011 X.commerce, a business unit of eBay Inc."},{"line_number":4,"context_line":"# Copyright 2010 United States Government as represented by the"},{"line_number":5,"context_line":"# Administrator of the National Aeronautics and Space Administration."},{"line_number":6,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F4fI%3D","line":3,"in_reply_to":"AAAATn%2F%2F7oo%3D","updated":"2013-10-25 18:49:23.000000000","message":"Done","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"b04bfaeaba1cefe0219db62de9f3a558b586f49c","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        # set up our cloud"},{"line_number":60,"context_line":"        self.cloud \u003d cloud.CloudController()"},{"line_number":61,"context_line":"        self.flags(scheduler_driver\u003d\u0027nova.scheduler.chance.ChanceScheduler\u0027)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        # Short-circuit the conductor service"},{"line_number":64,"context_line":"        self.flags(use_local\u003dTrue, group\u003d\u0027conductor\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F%2F7oQ%3D","line":61,"updated":"2013-10-25 01:27:55.000000000","message":"nit: I don\u0027t think you need to do this","commit_id":"a76388fb1ae19b3a5603090869c662b7ed511b4b"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"983d2a0807990e010a49eed6d3a80d0c2430188b","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        subnet_name \u003d result[\u0027subnet\u0027][\u0027subnetId\u0027]"},{"line_number":138,"context_line":"        new_subnet \u003d {\u0027id\u0027: \u0027123456\u0027, \u0027name\u0027: subnet_name}"},{"line_number":139,"context_line":"        self.fake_networks[\u0027networks\u0027].append(new_subnet)"},{"line_number":140,"context_line":"        self.assertTrue(result)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        kwargs[\u0027subnet_id\u0027] \u003d subnet_name"},{"line_number":143,"context_line":"        delete_subnet \u003d self.cloud.delete_subnet"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2FBZA%3D","line":140,"updated":"2013-11-15 15:29:20.000000000","message":"Can you assert something a bit tighter than just that it\u0027s true?","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"9e8701cf0738a17ea2e128d39b2ccd78787085c9","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        subnet_name \u003d result[\u0027subnet\u0027][\u0027subnetId\u0027]"},{"line_number":138,"context_line":"        new_subnet \u003d {\u0027id\u0027: \u0027123456\u0027, \u0027name\u0027: subnet_name}"},{"line_number":139,"context_line":"        self.fake_networks[\u0027networks\u0027].append(new_subnet)"},{"line_number":140,"context_line":"        self.assertTrue(result)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        kwargs[\u0027subnet_id\u0027] \u003d subnet_name"},{"line_number":143,"context_line":"        delete_subnet \u003d self.cloud.delete_subnet"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2B%2BKs%3D","line":140,"in_reply_to":"AAAATn%2F%2FBZA%3D","updated":"2013-11-17 19:01:26.000000000","message":"Done","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"983d2a0807990e010a49eed6d3a80d0c2430188b","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        delete_subnet \u003d self.cloud.delete_subnet"},{"line_number":144,"context_line":"        result \u003d delete_subnet(self.context, **kwargs)"},{"line_number":145,"context_line":"        self.fake_networks[\u0027networks\u0027].pop()"},{"line_number":146,"context_line":"        self.assertTrue(result)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def test_create_delete_vpc(self):"},{"line_number":149,"context_line":"        self._get_mock_neutron()"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2FBY8%3D","line":146,"updated":"2013-11-15 15:29:20.000000000","message":"Again, can you assert a bit more than that it\u0027s true?","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"9e8701cf0738a17ea2e128d39b2ccd78787085c9","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        delete_subnet \u003d self.cloud.delete_subnet"},{"line_number":144,"context_line":"        result \u003d delete_subnet(self.context, **kwargs)"},{"line_number":145,"context_line":"        self.fake_networks[\u0027networks\u0027].pop()"},{"line_number":146,"context_line":"        self.assertTrue(result)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def test_create_delete_vpc(self):"},{"line_number":149,"context_line":"        self._get_mock_neutron()"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2B%2BKo%3D","line":146,"in_reply_to":"AAAATn%2F%2FBY8%3D","updated":"2013-11-17 19:01:26.000000000","message":"For delete the only return value is true or false. Hence true check.","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"983d2a0807990e010a49eed6d3a80d0c2430188b","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        create_vpc \u003d self.cloud.create_vpc"},{"line_number":153,"context_line":"        result \u003d create_vpc(self.context, **kwargs)"},{"line_number":154,"context_line":"        vpc_name \u003d result[\u0027vpc\u0027][\u0027vpcId\u0027]"},{"line_number":155,"context_line":"        self.assertTrue(result)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        kwargs[\u0027vpc_id\u0027] \u003d vpc_name"},{"line_number":158,"context_line":"        delete_vpc \u003d self.cloud.delete_vpc"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2FBY0%3D","line":155,"updated":"2013-11-15 15:29:20.000000000","message":"More than just true?","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"9e8701cf0738a17ea2e128d39b2ccd78787085c9","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        create_vpc \u003d self.cloud.create_vpc"},{"line_number":153,"context_line":"        result \u003d create_vpc(self.context, **kwargs)"},{"line_number":154,"context_line":"        vpc_name \u003d result[\u0027vpc\u0027][\u0027vpcId\u0027]"},{"line_number":155,"context_line":"        self.assertTrue(result)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        kwargs[\u0027vpc_id\u0027] \u003d vpc_name"},{"line_number":158,"context_line":"        delete_vpc \u003d self.cloud.delete_vpc"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2B%2BKk%3D","line":155,"in_reply_to":"AAAATn%2F%2FBY0%3D","updated":"2013-11-17 19:01:26.000000000","message":"Done","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"983d2a0807990e010a49eed6d3a80d0c2430188b","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        kwargs[\u0027vpc_id\u0027] \u003d vpc_name"},{"line_number":158,"context_line":"        delete_vpc \u003d self.cloud.delete_vpc"},{"line_number":159,"context_line":"        result \u003d delete_vpc(self.context, **kwargs)"},{"line_number":160,"context_line":"        self.assertTrue(result)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2FBYw%3D","line":160,"updated":"2013-11-15 15:29:20.000000000","message":"More than just true?","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"9e8701cf0738a17ea2e128d39b2ccd78787085c9","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        kwargs[\u0027vpc_id\u0027] \u003d vpc_name"},{"line_number":158,"context_line":"        delete_vpc \u003d self.cloud.delete_vpc"},{"line_number":159,"context_line":"        result \u003d delete_vpc(self.context, **kwargs)"},{"line_number":160,"context_line":"        self.assertTrue(result)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F%2B%2BKg%3D","line":160,"in_reply_to":"AAAATn%2F%2FBYw%3D","updated":"2013-11-17 19:01:26.000000000","message":"For delete the only return value is true or false. Hence true check.","commit_id":"1223b3b199dec4d76abd6d37a84526a017cb9ed8"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"987b82957eb2b357caf9912644a8bae9310df9b2","unresolved":false,"context_lines":[{"line_number":36,"context_line":"HOST \u003d \"testhost\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class VpcTestCase(test.TestCase):"},{"line_number":40,"context_line":"    def setUp(self):"},{"line_number":41,"context_line":"        super(VpcTestCase, self).setUp()"},{"line_number":42,"context_line":"        self.useFixture(test.SampleNetworks())"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2B87Y%3D","line":39,"updated":"2013-11-18 07:35:46.000000000","message":"Since the test_cloud using db for test_key_generation, I can\u0027t see any reason which preventing to use NoDBTestCase here.","commit_id":"4ebfb8c803df6f93334b3bec148466ae38663f52"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dc91e26e496c25fffcc3ea3512eb683170198215","unresolved":false,"context_lines":[{"line_number":36,"context_line":"HOST \u003d \"testhost\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class VpcTestCase(test.TestCase):"},{"line_number":40,"context_line":"    def setUp(self):"},{"line_number":41,"context_line":"        super(VpcTestCase, self).setUp()"},{"line_number":42,"context_line":"        self.useFixture(test.SampleNetworks())"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2B5Mk%3D","line":39,"in_reply_to":"AAAATn%2F%2B87Y%3D","updated":"2013-11-18 21:48:37.000000000","message":"test_cloud is also not using NoDBTestCase. VPC testing is based on the same.","commit_id":"4ebfb8c803df6f93334b3bec148466ae38663f52"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"987b82957eb2b357caf9912644a8bae9310df9b2","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.useFixture(fixtures.FakeLogger(\u0027boto\u0027))"},{"line_number":47,"context_line":"        fake_utils.stub_out_utils_spawn_n(self.stubs)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        def dumb(*args, **kwargs):"},{"line_number":50,"context_line":"            pass"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        fake_network.set_stub_network_methods(self.stubs)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2B89s%3D","line":49,"updated":"2013-11-18 07:35:46.000000000","message":"it seems like the dumb method is useless in this test case.","commit_id":"4ebfb8c803df6f93334b3bec148466ae38663f52"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dc91e26e496c25fffcc3ea3512eb683170198215","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.useFixture(fixtures.FakeLogger(\u0027boto\u0027))"},{"line_number":47,"context_line":"        fake_utils.stub_out_utils_spawn_n(self.stubs)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        def dumb(*args, **kwargs):"},{"line_number":50,"context_line":"            pass"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        fake_network.set_stub_network_methods(self.stubs)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2B51I%3D","line":49,"in_reply_to":"AAAATn%2F%2B89s%3D","updated":"2013-11-18 21:48:37.000000000","message":"Done","commit_id":"4ebfb8c803df6f93334b3bec148466ae38663f52"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"987b82957eb2b357caf9912644a8bae9310df9b2","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # NOTE(comstud): Make \u0027cast\u0027 behave like a \u0027call\u0027 which will"},{"line_number":74,"context_line":"        # ensure that operations complete"},{"line_number":75,"context_line":"        self.stubs.Set(rpc, \u0027cast\u0027, rpc.call)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # mock keystone client for vpc"},{"line_number":78,"context_line":"        self.mock_tenant \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2B89E%3D","line":75,"updated":"2013-11-18 07:35:46.000000000","message":"since we are moving to mock, it is inappropriate to using mox in new unit test.","commit_id":"4ebfb8c803df6f93334b3bec148466ae38663f52"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dc91e26e496c25fffcc3ea3512eb683170198215","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # NOTE(comstud): Make \u0027cast\u0027 behave like a \u0027call\u0027 which will"},{"line_number":74,"context_line":"        # ensure that operations complete"},{"line_number":75,"context_line":"        self.stubs.Set(rpc, \u0027cast\u0027, rpc.call)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # mock keystone client for vpc"},{"line_number":78,"context_line":"        self.mock_tenant \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2B5pw%3D","line":75,"in_reply_to":"AAAATn%2F%2B89E%3D","updated":"2013-11-18 21:48:37.000000000","message":"Done","commit_id":"4ebfb8c803df6f93334b3bec148466ae38663f52"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"987b82957eb2b357caf9912644a8bae9310df9b2","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        cloud.neutronv2.get_client \u003d self.original_client"},{"line_number":113,"context_line":"        super(VpcTestCase, self).tearDown()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def _create_key(self, name):"},{"line_number":116,"context_line":"        # NOTE(vish): create depends on pool, so just call helper directly"},{"line_number":117,"context_line":"        keypair_api \u003d compute_api.KeypairAPI()"},{"line_number":118,"context_line":"        return keypair_api.create_key_pair(self.context, self.context.user_id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2B880%3D","line":115,"updated":"2013-11-18 07:35:46.000000000","message":"I might missing something here, but where is this method being used?","commit_id":"4ebfb8c803df6f93334b3bec148466ae38663f52"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dc91e26e496c25fffcc3ea3512eb683170198215","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        cloud.neutronv2.get_client \u003d self.original_client"},{"line_number":113,"context_line":"        super(VpcTestCase, self).tearDown()"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def _create_key(self, name):"},{"line_number":116,"context_line":"        # NOTE(vish): create depends on pool, so just call helper directly"},{"line_number":117,"context_line":"        keypair_api \u003d compute_api.KeypairAPI()"},{"line_number":118,"context_line":"        return keypair_api.create_key_pair(self.context, self.context.user_id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2B51E%3D","line":115,"in_reply_to":"AAAATn%2F%2B880%3D","updated":"2013-11-18 21:48:37.000000000","message":"Done","commit_id":"4ebfb8c803df6f93334b3bec148466ae38663f52"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"987b82957eb2b357caf9912644a8bae9310df9b2","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    def _get_mock_neutron(self):"},{"line_number":122,"context_line":"        def fake_get_client(req):"},{"line_number":123,"context_line":"            return self.mock_neutron"},{"line_number":124,"context_line":"        self.stubs.Set(cloud.neutronv2, \u0027get_client\u0027, fake_get_client)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def _get_mock_keystone(self):"},{"line_number":127,"context_line":"        def fake_client(token, username, tenant_name, auth_url):"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2B88w%3D","line":124,"updated":"2013-11-18 07:35:46.000000000","message":"we should not using mox longer in new test IMHO.","commit_id":"4ebfb8c803df6f93334b3bec148466ae38663f52"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dc91e26e496c25fffcc3ea3512eb683170198215","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    def _get_mock_neutron(self):"},{"line_number":122,"context_line":"        def fake_get_client(req):"},{"line_number":123,"context_line":"            return self.mock_neutron"},{"line_number":124,"context_line":"        self.stubs.Set(cloud.neutronv2, \u0027get_client\u0027, fake_get_client)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def _get_mock_keystone(self):"},{"line_number":127,"context_line":"        def fake_client(token, username, tenant_name, auth_url):"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2B5qA%3D","line":124,"in_reply_to":"AAAATn%2F%2B88w%3D","updated":"2013-11-18 21:48:37.000000000","message":"Done","commit_id":"4ebfb8c803df6f93334b3bec148466ae38663f52"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"987b82957eb2b357caf9912644a8bae9310df9b2","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    def _get_mock_keystone(self):"},{"line_number":127,"context_line":"        def fake_client(token, username, tenant_name, auth_url):"},{"line_number":128,"context_line":"            return self.mock_keystone"},{"line_number":129,"context_line":"        self.stubs.Set(vpc.keystoneclient.v2_0.client,"},{"line_number":130,"context_line":"                       \u0027Client\u0027, fake_client)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_create_delete_subnet(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2B88o%3D","line":129,"updated":"2013-11-18 07:35:46.000000000","message":"ditto","commit_id":"4ebfb8c803df6f93334b3bec148466ae38663f52"},{"author":{"_account_id":8306,"name":"Rudra Rugge","email":"rrugge@juniper.net","username":"rudrarugge"},"change_message_id":"dc91e26e496c25fffcc3ea3512eb683170198215","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    def _get_mock_keystone(self):"},{"line_number":127,"context_line":"        def fake_client(token, username, tenant_name, auth_url):"},{"line_number":128,"context_line":"            return self.mock_keystone"},{"line_number":129,"context_line":"        self.stubs.Set(vpc.keystoneclient.v2_0.client,"},{"line_number":130,"context_line":"                       \u0027Client\u0027, fake_client)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_create_delete_subnet(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2B5p8%3D","line":129,"in_reply_to":"AAAATn%2F%2B88o%3D","updated":"2013-11-18 21:48:37.000000000","message":"Done","commit_id":"4ebfb8c803df6f93334b3bec148466ae38663f52"}]}
