)]}'
{"quantum/plugins/cisco/db/api.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":94,"context_line":"      all()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def network_id_get(net_name):"},{"line_number":98,"context_line":"    session \u003d get_session()"},{"line_number":99,"context_line":"    try:"},{"line_number":100,"context_line":"        return  session.query(models.Network).\\"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAC3%2F%2F90U%3D","line":97,"updated":"2011-12-11 09:15:33.000000000","message":"seems like an odd name given that we\u0027re fetching by net-name and returning the entire net.","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"}],"quantum/plugins/cisco/db/l2network_db.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":26,"context_line":"import quantum.plugins.cisco.db.api as db"},{"line_number":27,"context_line":"import quantum.plugins.cisco.db.nexus_db as ndb"},{"line_number":28,"context_line":"import quantum.plugins.cisco.db.ucs_db as udb"},{"line_number":29,"context_line":"import quantum.plugins.cisco.db.services_db as sdb"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def initialize():"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAC3%2F%2F90Q%3D","line":29,"updated":"2011-12-11 09:15:33.000000000","message":"is this needed?  I don\u0027t see it used elsewhere in the file in this diff.","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"}],"quantum/plugins/cisco/tests/unit/test_database.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":216,"context_line":"            bind \u003d services_db.get_service_bindings(service_id)"},{"line_number":217,"context_line":"            LOG.debug(\"Getting service binding : %s\" % bind.service_id)"},{"line_number":218,"context_line":"        except Exception, exc:"},{"line_number":219,"context_line":"            LOG.error(\"Failed to get all bindings: %s\" % str(exc))"},{"line_number":220,"context_line":"        return bind"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def create_servicebinding(self, service_id, mngnet_id, nbnet_id, sbnet_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAC3%2F%2F90M%3D","line":219,"updated":"2011-12-11 09:15:33.000000000","message":"copy-pasto... not fetching all bindings.","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            LOG.debug(\"Getting service binding : %s\" % bind.service_id)"},{"line_number":218,"context_line":"        except Exception, exc:"},{"line_number":219,"context_line":"            LOG.error(\"Failed to get all bindings: %s\" % str(exc))"},{"line_number":220,"context_line":"        return bind"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def create_servicebinding(self, service_id, mngnet_id, nbnet_id, sbnet_id):"},{"line_number":223,"context_line":"        \"\"\"create service binding\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAC3%2F%2F90I%3D","line":220,"updated":"2011-12-11 09:15:33.000000000","message":"if there is an exception, it seems unlikely that bind here is meaningful.  Should these exceptions be propagating higher up the stack?","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":811,"context_line":"        \"\"\"create service binding\"\"\""},{"line_number":812,"context_line":"        service_id \u003d self.dbtest.create_servicebinding(\"i-00001\", \\"},{"line_number":813,"context_line":"                                    \"mng_net\", \"northb_net\", \"northb_net\")"},{"line_number":814,"context_line":"        print service_id"},{"line_number":815,"context_line":"        self.assertTrue(service_id[\"service_id\"] \u003d\u003d \"i-00001\")"},{"line_number":816,"context_line":"        self.tearDown_servicebinding()"},{"line_number":817,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAC3%2F%2F90E%3D","line":814,"updated":"2011-12-11 09:15:33.000000000","message":"left-over?","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"}],"quantum/services/README":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"README: L2 Network Services Insertion Utility"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":":Authors:  Edgar Magana, Mani Ramasamy, Ram Durairaj"},{"line_number":6,"context_line":":Collaborators: Deepak Khanorkar, Sumit Naiksatam, Nat Chidambaram, Dan Wendlandt"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAC3%2F%2F90A%3D","line":3,"updated":"2011-12-11 09:15:33.000000000","message":"Need to get rid of trailing whitespace \u0026 tabs in this file.","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":26,"context_line":"------------------------------------------------------"},{"line_number":27,"context_line":"This utility offer four functionalities:"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"1. insert_inpath_service \u003ctenant_id\u003e \u003cservice_image_id\u003e "},{"line_number":30,"context_line":"    \u003cmanagement_net_name\u003e \u003cnorthbound_net_name\u003e \u003csouthbound_net_name\u003e"},{"line_number":31,"context_line":"Creates two networks and insert a service vm between them bridging the traffic path"},{"line_number":32,"context_line":"It also creates a management network to access the service configuration"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAC3%2F%2F9z4%3D","line":29,"updated":"2011-12-11 09:15:33.000000000","message":"is this ID a nova image ID?","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"1. insert_inpath_service \u003ctenant_id\u003e \u003cservice_image_id\u003e "},{"line_number":30,"context_line":"    \u003cmanagement_net_name\u003e \u003cnorthbound_net_name\u003e \u003csouthbound_net_name\u003e"},{"line_number":31,"context_line":"Creates two networks and insert a service vm between them bridging the traffic path"},{"line_number":32,"context_line":"It also creates a management network to access the service configuration"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"2. delete_service \u003ctenant_id\u003e \u003cservice_image_id\u003e"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAC3%2F%2F9z8%3D","line":31,"updated":"2011-12-11 09:15:33.000000000","message":"do you mean bridging literally here (i.e. layer-2 bridging) or can the VM provide any service model?","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"2. delete_service \u003ctenant_id\u003e \u003cservice_image_id\u003e"},{"line_number":35,"context_line":"Deletes the service prevopusly inserted as well as the network dependencies"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"connect_vm \u003ctenant_id\u003e \u003cvm_image_id\u003e \u003cservice_image_id\u003e"},{"line_number":38,"context_line":"Instanciate a VM which is connected to the southbound network created by the insert_inpath_service"},{"line_number":39,"context_line":"Facilitates the connections of server vms in to the tenant\u0027s network."}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAC3%2F%2F9zw%3D","line":36,"updated":"2011-12-11 09:15:33.000000000","message":"prevopusly -\u003e previously?","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":34,"context_line":"2. delete_service \u003ctenant_id\u003e \u003cservice_image_id\u003e"},{"line_number":35,"context_line":"Deletes the service prevopusly inserted as well as the network dependencies"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"connect_vm \u003ctenant_id\u003e \u003cvm_image_id\u003e \u003cservice_image_id\u003e"},{"line_number":38,"context_line":"Instanciate a VM which is connected to the southbound network created by the insert_inpath_service"},{"line_number":39,"context_line":"Facilitates the connections of server vms in to the tenant\u0027s network."},{"line_number":40,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAC3%2F%2F9zo%3D","line":37,"updated":"2011-12-11 09:15:33.000000000","message":"Here i think the last parameter should be \u003cservice-image-instance-id\u003e, not \u003cservice-image-id\u003e, as the image-id does not actually uniquely identify a service?","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"4. disconnect_vm \u003cvm_image_id\u003e"},{"line_number":42,"context_line":"Disconnect from the southbound network and terminates the server vm"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Example"},{"line_number":45,"context_line":"------------------------------------------------------"},{"line_number":46,"context_line":"Let\u0027s insert a Firewall service between northbound and southbound networks, "}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAC3%2F%2F9zs%3D","line":43,"updated":"2011-12-11 09:15:33.000000000","message":"similar to above, I think this should be an vm-instance-id, not vm-image-id.","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":56,"context_line":"#PYTHONPATH\u003d. python quantum/services/service_insertion.py connect_vm "},{"line_number":57,"context_line":"\t\t\t\t\t\tnaas ami-0000002b i-00000091"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"\"ami-0000002b\" is the reference id provided by Glace for the Web Server image and"},{"line_number":60,"context_line":"\"i-00000091\" is the image id provided by Nova for the FW service instance previously created."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"The network topology build will be something like this:"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAC3%2F%2F9zk%3D","line":59,"updated":"2011-12-11 09:15:33.000000000","message":"Glace -\u003e Glance","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":68,"context_line":"Path\t    |\t\t|\t|"},{"line_number":69,"context_line":"\t\t\t|\t|____More Servers VMs"},{"line_number":70,"context_line":"\t\t   management"},{"line_number":71,"context_line":"\t\t       net"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAC3%2F%2F9zg%3D","line":71,"updated":"2011-12-11 09:15:33.000000000","message":"not totally clear on this diagram.","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"}],"quantum/services/service_insertion.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from quantum.plugins.cisco.db import api as db"},{"line_number":40,"context_line":"from quantum.plugins.cisco.db import l2network_db as l2db"},{"line_number":41,"context_line":"from quantum.plugins.cisco.db import services_db as sdb"},{"line_number":42,"context_line":"from quantum.plugins.cisco.common import cisco_constants as const"},{"line_number":43,"context_line":"from quantum.services import services_constants as servconts"},{"line_number":44,"context_line":"from quantum.services import services_logistics as servlogcs"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAC3%2F%2F9zY%3D","line":42,"updated":"2011-12-11 09:15:33.000000000","message":"This code imports a lot of stuff from the cisco plugin, and also calls cisco plugin specific APIs.  I suspect it should be packaged with the Cisco plugin.","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    print \"Completed\""},{"line_number":89,"context_line":"    try:"},{"line_number":90,"context_line":"        create_vm_args \u003d []"},{"line_number":91,"context_line":"        create_vm_args.append(servconts.CREATE_VM_CMD)"},{"line_number":92,"context_line":"        create_vm_args.append(service_image_id)"},{"line_number":93,"context_line":"        print (\"Creating VM with image: %s\" % (service_image_id))"},{"line_number":94,"context_line":"        process \u003d subprocess.Popen(create_vm_args, stdout\u003dsubprocess.PIPE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAC3%2F%2F9zc%3D","line":91,"updated":"2011-12-11 09:15:33.000000000","message":"this should just import the nova client API client and call the nova API programmatically, rather than invoking a client to do it on our behalf.  This will give much cleaner error handling, be more clear, and make the dependencies of this code obvious (right now it is confusing, as this code does not import a nova client library, yet depends on it)","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        print (\"Image: %s instantiated successfully\" % (service_vm_name))"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    except Exception as exc:"},{"line_number":101,"context_line":"        print exc"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    service_logic.image_status(service_vm_name)"},{"line_number":104,"context_line":"    print \"Completed\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAC3%2F%2F9zU%3D","line":101,"updated":"2011-12-11 09:15:33.000000000","message":"if there\u0027s an exception here, is carrying on really the right thing to be doing?","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":284,"context_line":"    \"args\": [\"vm_image_id\"]}}"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"if __name__ \u003d\u003d \"__main__\":"},{"line_number":288,"context_line":"    os.system(\"clear\")"},{"line_number":289,"context_line":"    usagestr \u003d \"Usage: %prog [OPTIONS] \u003ccommand\u003e [args]\""},{"line_number":290,"context_line":"    PARSER \u003d OptionParser(usage\u003dusagestr)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAC3%2F%2F9zI%3D","line":287,"updated":"2011-12-11 09:15:33.000000000","message":"may want to separate the main function out into a separate file that can be placed in a bin directory.","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"if __name__ \u003d\u003d \"__main__\":"},{"line_number":288,"context_line":"    os.system(\"clear\")"},{"line_number":289,"context_line":"    usagestr \u003d \"Usage: %prog [OPTIONS] \u003ccommand\u003e [args]\""},{"line_number":290,"context_line":"    PARSER \u003d OptionParser(usage\u003dusagestr)"},{"line_number":291,"context_line":"    PARSER.add_option(\"-H\", \"--host\", dest\u003d\"host\","}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAC3%2F%2F9zE%3D","line":288,"updated":"2011-12-11 09:15:33.000000000","message":"i\u0027m not sure everyone would want this.","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"}],"quantum/services/services_constants.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":23,"context_line":"FORMAT \u003d \u0027json\u0027"},{"line_number":24,"context_line":"ACTION_PREFIX_EXT \u003d \u0027/v1.0\u0027"},{"line_number":25,"context_line":"ACTION_PREFIX_CSCO \u003d ACTION_PREFIX_EXT + \\"},{"line_number":26,"context_line":"        \u0027/extensions/csco/tenants/{tenant_id}\u0027"},{"line_number":27,"context_line":"NETWORK \u003d \u0027network\u0027"},{"line_number":28,"context_line":"ID \u003d \u0027id\u0027"},{"line_number":29,"context_line":"PORTS \u003d \u0027ports\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAC3%2F%2F9zM%3D","line":26,"updated":"2011-12-11 09:15:33.000000000","message":"cisco specific extension, suggests that this code should probably be packaged with the cisco plugin.","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2a12855126190fa0d9594fc9a1539580ec02cf43","unresolved":false,"context_lines":[{"line_number":32,"context_line":"ATTACHMENT \u003d \u0027attachment\u0027"},{"line_number":33,"context_line":"CREATE_VM_CMD \u003d \u0027/usr/bin/euca-run-instances\u0027"},{"line_number":34,"context_line":"DELETE_VM_CMD \u003d \u0027/usr/bin/euca-terminate-instances\u0027"},{"line_number":35,"context_line":"DESCRIBE_VM_CMD \u003d \u0027/usr/bin/euca-describe-instances\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAC3%2F%2F9zQ%3D","line":35,"updated":"2011-12-11 09:15:33.000000000","message":"as mentioned elsewhere, we should make direct call using the python nova API client whenever possible over invoking CLI utilities from python.","commit_id":"616163a3304a2db322cd9146ee1c03df42105324"}]}
