)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Use Cases: Quantum with the Cisco plugin."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implementation Overview: All the config values contained in the various files in etc/quantum/plugins/cisco will be unified into a single file etc/quantum/plugins/cisco/cisco_plugin.ini. The plugins needs to be modified to read from a single file instead of multiple."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I9ef356eccfe330c3733f441b96400d03c3d7d1df"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAM3%2F%2FIuI%3D","line":13,"updated":"2013-02-05 23:24:56.000000000","message":"This line needs to be no more than 79 chars wide.","commit_id":"ed9a55ccf5cff38fe8c61d225343254e1d450142"}],"etc/quantum/plugins/cisco/cisco_plugins.ini":[{"author":{"_account_id":107,"name":"Arvind Somya","email":"arvind.somya@gmail.com","username":"asomya"},"change_message_id":"4d50416af187ad4b69e0b4671144467d3d83ef11","unresolved":false,"context_lines":[{"line_number":58,"context_line":"#name\u003dquantum.plugins.cisco.nexus.cisco_nexus_network_driver_v2.CiscoNEXUSDriver"},{"line_number":59,"context_line":"name\u003dquantum.plugins.cisco.tests.unit.v2.nexus.fake_nexus_driver.CiscoNEXUSFakeDriver"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"[DATABASE]"},{"line_number":62,"context_line":"name \u003d quantum_l2network"},{"line_number":63,"context_line":"user \u003d \u003cput_db_user_name_here\u003e"},{"line_number":64,"context_line":"pass \u003d \u003cput_db_password_here\u003e"}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAAM3%2F%2FI3M%3D","line":61,"updated":"2013-02-05 21:43:33.000000000","message":"This should be changed from this format to:\n\n[DATABASE]\nsql_connection\u003dengine://user:pass@host/db_name","commit_id":"ed9a55ccf5cff38fe8c61d225343254e1d450142"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"#name\u003dquantum.plugins.cisco.nexus.cisco_nexus_network_driver_v2.CiscoNEXUSDriver"},{"line_number":59,"context_line":"name\u003dquantum.plugins.cisco.tests.unit.v2.nexus.fake_nexus_driver.CiscoNEXUSFakeDriver"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"[DATABASE]"},{"line_number":62,"context_line":"name \u003d quantum_l2network"},{"line_number":63,"context_line":"user \u003d \u003cput_db_user_name_here\u003e"},{"line_number":64,"context_line":"pass \u003d \u003cput_db_password_here\u003e"}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAAM3%2F%2FI2U%3D","line":61,"in_reply_to":"AAAAM3%2F%2FI3M%3D","updated":"2013-02-05 22:04:50.000000000","message":"Not sure I follow. Do you want to change how the [DATABASE] section is defined?","commit_id":"ed9a55ccf5cff38fe8c61d225343254e1d450142"},{"author":{"_account_id":107,"name":"Arvind Somya","email":"arvind.somya@gmail.com","username":"asomya"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":"#name\u003dquantum.plugins.cisco.nexus.cisco_nexus_network_driver_v2.CiscoNEXUSDriver"},{"line_number":59,"context_line":"name\u003dquantum.plugins.cisco.tests.unit.v2.nexus.fake_nexus_driver.CiscoNEXUSFakeDriver"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"[DATABASE]"},{"line_number":62,"context_line":"name \u003d quantum_l2network"},{"line_number":63,"context_line":"user \u003d \u003cput_db_user_name_here\u003e"},{"line_number":64,"context_line":"pass \u003d \u003cput_db_password_here\u003e"}],"source_content_type":"text/x-properties","patch_set":2,"id":"AAAAM3%2F%2B920%3D","line":61,"updated":"2013-02-12 23:21:34.000000000","message":"Change DB connection string to format from the previous comment.","commit_id":"12b43803cd188d29c329795805448990c9604820"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":"#name\u003dquantum.plugins.cisco.nexus.cisco_nexus_network_driver_v2.CiscoNEXUSDriver"},{"line_number":59,"context_line":"name\u003dquantum.plugins.cisco.tests.unit.v2.nexus.fake_nexus_driver.CiscoNEXUSFakeDriver"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"[DATABASE]"},{"line_number":62,"context_line":"name \u003d quantum_l2network"},{"line_number":63,"context_line":"user \u003d \u003cput_db_user_name_here\u003e"},{"line_number":64,"context_line":"pass \u003d \u003cput_db_password_here\u003e"}],"source_content_type":"text/x-properties","patch_set":2,"id":"AAAAM3%2F%2BuBk%3D","line":61,"in_reply_to":"AAAAM3%2F%2B920%3D","updated":"2013-02-20 19:39:49.000000000","message":"You can use etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini as a reference, and the configuration can be read using quantum.db.api::configure_db()","commit_id":"12b43803cd188d29c329795805448990c9604820"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#keystone_password\u003d\u0027rac_password2\u0027"},{"line_number":17,"context_line":"#keystone_auth_url\u003d\u0027http://www.cisco.com\u0027"},{"line_number":18,"context_line":"# IMPORTANT: Comment the following line for production deployments"},{"line_number":19,"context_line":"testhost\u003dtesthost"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"#"},{"line_number":22,"context_line":"# Nexus Switch Format. "}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAOH%2F%2F6UQ%3D","line":19,"updated":"2013-03-21 08:13:54.000000000","message":"If it is only needed for the unit tests, it would be better to handle it in the unit tests.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#keystone_password\u003d\u0027rac_password2\u0027"},{"line_number":17,"context_line":"#keystone_auth_url\u003d\u0027http://www.cisco.com\u0027"},{"line_number":18,"context_line":"# IMPORTANT: Comment the following line for production deployments"},{"line_number":19,"context_line":"testhost\u003dtesthost"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"#"},{"line_number":22,"context_line":"# Nexus Switch Format. "}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAOH%2F%2F6FY%3D","line":19,"in_reply_to":"AAAAOH%2F%2F6UQ%3D","updated":"2013-03-21 13:32:53.000000000","message":"I\u0027m going to let Arvind Somya answer this one.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"testhost\u003dtesthost"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"#"},{"line_number":22,"context_line":"# Nexus Switch Format. "},{"line_number":23,"context_line":"# [NEXUS_SWITCH:\u003cIP address of switch\u003e]"},{"line_number":24,"context_line":"# \u003chost address\u003e\u003d\u003cports\u003e"},{"line_number":25,"context_line":"# ssh_port\u003d\u003cssh port\u003e"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAOH%2F%2F6hk%3D","line":22,"updated":"2013-03-21 03:42:19.000000000","message":"nit: whitespace","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":19,"context_line":"testhost\u003dtesthost"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"#"},{"line_number":22,"context_line":"# Nexus Switch Format. "},{"line_number":23,"context_line":"# [NEXUS_SWITCH:\u003cIP address of switch\u003e]"},{"line_number":24,"context_line":"# \u003chost address\u003e\u003d\u003cports\u003e"},{"line_number":25,"context_line":"# ssh_port\u003d\u003cssh port\u003e"}],"source_content_type":"text/x-properties","patch_set":5,"id":"AAAAOH%2F%2F6FM%3D","line":22,"in_reply_to":"AAAAOH%2F%2F6hk%3D","updated":"2013-03-21 13:32:53.000000000","message":"Removed.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"unresolved":false,"context_lines":[{"line_number":13,"context_line":"#manager_class\u003dquantum.plugins.cisco.segmentation.l2network_vlan_mgr_v2.L2NetworkVLANMgr"},{"line_number":14,"context_line":"#nexus_driver\u003dquantum.plugins.cisco.tests.unit.v2.nexus.fake_nexus_driver.CiscoNEXUSFakeDriver"},{"line_number":15,"context_line":"#keystone_username\u003d\u0027rcurran2\u0027"},{"line_number":16,"context_line":"#keystone_password\u003d\u0027rac_password2\u0027"},{"line_number":17,"context_line":"#keystone_auth_url\u003d\u0027http://www.cisco.com\u0027"},{"line_number":18,"context_line":"# IMPORTANT: Comment the following line for production deployments"},{"line_number":19,"context_line":"testhost\u003dtesthost"}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAOH%2F%2F5Bc%3D","line":16,"updated":"2013-03-21 22:44:57.000000000","message":"nit: are you sure you want to expose this username/password here, maybe just put placeholders","commit_id":"383de08c48fd8dee761da14bceeaba48d83fec62"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#manager_class\u003dquantum.plugins.cisco.segmentation.l2network_vlan_mgr_v2.L2NetworkVLANMgr"},{"line_number":14,"context_line":"#nexus_driver\u003dquantum.plugins.cisco.tests.unit.v2.nexus.fake_nexus_driver.CiscoNEXUSFakeDriver"},{"line_number":15,"context_line":"#keystone_username\u003d\u0027rcurran2\u0027"},{"line_number":16,"context_line":"#keystone_password\u003d\u0027rac_password2\u0027"},{"line_number":17,"context_line":"#keystone_auth_url\u003d\u0027http://www.cisco.com\u0027"},{"line_number":18,"context_line":"# IMPORTANT: Comment the following line for production deployments"},{"line_number":19,"context_line":"testhost\u003dtesthost"}],"source_content_type":"text/x-properties","patch_set":7,"id":"AAAAOH%2F%2F45I%3D","line":16,"in_reply_to":"AAAAOH%2F%2F5Bc%3D","updated":"2013-03-22 13:14:05.000000000","message":"I do not, thank you for catching this.","commit_id":"383de08c48fd8dee761da14bceeaba48d83fec62"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#keystone_password\u003d\u0027\u003cput keystone password here\u003e\u0027"},{"line_number":17,"context_line":"#keystone_auth_url\u003d\u0027\u003cput keystone authorization URL here\u0027"},{"line_number":18,"context_line":"# IMPORTANT: Comment the following line for production deployments"},{"line_number":19,"context_line":"testhost\u003dtesthost"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"#"},{"line_number":22,"context_line":"# Nexus Switch Format."}],"source_content_type":"text/x-properties","patch_set":8,"id":"AAAAOH%2F%2F41M%3D","line":19,"updated":"2013-03-22 01:02:30.000000000","message":"Should this be commented out as well?","commit_id":"54eeac4586fa742ab55eca5ba0d95dda32798e97"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#keystone_password\u003d\u0027\u003cput keystone password here\u003e\u0027"},{"line_number":17,"context_line":"#keystone_auth_url\u003d\u0027\u003cput keystone authorization URL here\u0027"},{"line_number":18,"context_line":"# IMPORTANT: Comment the following line for production deployments"},{"line_number":19,"context_line":"testhost\u003dtesthost"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"#"},{"line_number":22,"context_line":"# Nexus Switch Format."}],"source_content_type":"text/x-properties","patch_set":8,"id":"AAAAOH%2F%2F4SQ%3D","line":19,"in_reply_to":"AAAAOH%2F%2F41M%3D","updated":"2013-03-22 13:13:15.000000000","message":"This will either be removed all together or at the very least will be commented out before any production deployment.\nA few others have also commented on this testhost value. I\u0027ve asked Avind Somya to comment.","commit_id":"54eeac4586fa742ab55eca5ba0d95dda32798e97"},{"author":{"_account_id":107,"name":"Arvind Somya","email":"arvind.somya@gmail.com","username":"asomya"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#keystone_password\u003d\u0027\u003cput keystone password here\u003e\u0027"},{"line_number":17,"context_line":"#keystone_auth_url\u003d\u0027\u003cput keystone authorization URL here\u0027"},{"line_number":18,"context_line":"# IMPORTANT: Comment the following line for production deployments"},{"line_number":19,"context_line":"testhost\u003dtesthost"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"#"},{"line_number":22,"context_line":"# Nexus Switch Format."}],"source_content_type":"text/x-properties","patch_set":8,"id":"AAAAOH%2F%2F3%2Fk%3D","line":19,"in_reply_to":"AAAAOH%2F%2F4SQ%3D","updated":"2013-03-22 16:05:16.000000000","message":"This is a temporary measure to get the tests to pass till we have proper mocking in place. This will likely go away in a bit and the documentation explicitly states to comment this out in production systems.\n\nAlso could you put this in a separate [TEST] section, like:\n# IMPORTANT: Comment the following two lines for production deployments\n[TEST]\ntesthost\u003dtesthost","commit_id":"54eeac4586fa742ab55eca5ba0d95dda32798e97"},{"author":{"_account_id":107,"name":"Arvind Somya","email":"arvind.somya@gmail.com","username":"asomya"},"unresolved":false,"context_lines":[{"line_number":14,"context_line":"#nexus_driver\u003dquantum.plugins.cisco.tests.unit.v2.nexus.fake_nexus_driver.CiscoNEXUSFakeDriver"},{"line_number":15,"context_line":"#keystone_username\u003d\u0027\u003cput keystone username here\u0027"},{"line_number":16,"context_line":"#keystone_password\u003d\u0027\u003cput keystone password here\u003e\u0027"},{"line_number":17,"context_line":"#keystone_auth_url\u003d\u0027\u003cput keystone authorization URL here\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"# IMPORTANT: Comment out the following two lines for production deployments"},{"line_number":20,"context_line":"[CISCO_TEST]"}],"source_content_type":"text/x-properties","patch_set":9,"id":"AAAAOH%2F%2F0zA%3D","line":17,"updated":"2013-03-26 03:06:06.000000000","message":"Remove the keystone lines if they\u0027re not being used from this config","commit_id":"4245cf2898e68aef6593e5421bec435f33f26cb7"}],"quantum/plugins/cisco/common/cisco_credentials_v2.py":[{"author":{"_account_id":107,"name":"Arvind Somya","email":"arvind.somya@gmail.com","username":"asomya"},"change_message_id":"4d50416af187ad4b69e0b4671144467d3d83ef11","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG.getLogger(const.LOGGER_COMPONENT_NAME)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"CREDENTIALS_FILE \u003d find_config_file({\u0027plugin\u0027: \u0027cisco\u0027},"},{"line_number":32,"context_line":"                                    \"cisco_plugins.ini\")"},{"line_number":33,"context_line":"TENANT \u003d const.NETWORK_ADMIN"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"cp \u003d confp.CiscoConfigParser(CREDENTIALS_FILE)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FI3o%3D","line":32,"updated":"2013-02-05 21:43:33.000000000","message":"Instead of parsing the same file in different places, we should only be parsing it once and reusing the config dictionary in all files.","commit_id":"ed9a55ccf5cff38fe8c61d225343254e1d450142"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG.getLogger(const.LOGGER_COMPONENT_NAME)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"CREDENTIALS_FILE \u003d find_config_file({\u0027plugin\u0027: \u0027cisco\u0027},"},{"line_number":32,"context_line":"                                    \"cisco_plugins.ini\")"},{"line_number":33,"context_line":"TENANT \u003d const.NETWORK_ADMIN"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"cp \u003d confp.CiscoConfigParser(CREDENTIALS_FILE)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FI2M%3D","line":32,"in_reply_to":"AAAAM3%2F%2FI3o%3D","updated":"2013-02-05 22:04:50.000000000","message":"Yeah, I thought this may come up. Not knowing the complete file structure I wasn\u0027t sure if we could get rid of some of the find_config_file() calls. \nI\u0027ll take a look at how these files are accessed but may need your help on this one.","commit_id":"ed9a55ccf5cff38fe8c61d225343254e1d450142"},{"author":{"_account_id":107,"name":"Arvind Somya","email":"arvind.somya@gmail.com","username":"asomya"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging as LOG"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from configobj import ConfigObj"},{"line_number":22,"context_line":"from quantum.common.utils import find_config_file"},{"line_number":23,"context_line":"from quantum.plugins.cisco.common import cisco_constants as const"},{"line_number":24,"context_line":"from quantum.plugins.cisco.common import cisco_exceptions as cexc"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B93E%3D","line":21,"updated":"2013-02-12 23:21:34.000000000","message":"To echo garyk\u0027s concern here, we should move away from congifobj and rely on the config dict from quantum.openstack.common.cfg","commit_id":"12b43803cd188d29c329795805448990c9604820"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging as LOG"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from configobj import ConfigObj"},{"line_number":22,"context_line":"from quantum.common.utils import find_config_file"},{"line_number":23,"context_line":"from quantum.plugins.cisco.common import cisco_constants as const"},{"line_number":24,"context_line":"from quantum.plugins.cisco.common import cisco_exceptions as cexc"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B%2Flg%3D","line":21,"updated":"2013-02-12 06:59:11.000000000","message":"any plans to move the openstack common cfg?","commit_id":"12b43803cd188d29c329795805448990c9604820"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging as LOG"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from configobj import ConfigObj"},{"line_number":22,"context_line":"from quantum.common.utils import find_config_file"},{"line_number":23,"context_line":"from quantum.plugins.cisco.common import cisco_constants as const"},{"line_number":24,"context_line":"from quantum.plugins.cisco.common import cisco_exceptions as cexc"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2BuBY%3D","line":21,"in_reply_to":"AAAAM3%2F%2B93E%3D","updated":"2013-02-20 19:39:49.000000000","message":"ConfigObj was being used earlier since it made it easier to \"walk\" nested sections (which was mostly the case for the UCS config). It\u0027s not being used anymore, so you consider moving to using cfg.","commit_id":"12b43803cd188d29c329795805448990c9604820"},{"author":{"_account_id":107,"name":"Arvind Somya","email":"arvind.somya@gmail.com","username":"asomya"},"unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG.basicConfig(level\u003dLOG.WARN)"},{"line_number":29,"context_line":"LOG.getLogger(const.LOGGER_COMPONENT_NAME)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"CONF_FILE \u003d find_config_file({\u0027plugin\u0027: \u0027cisco\u0027}, \"cisco_plugins.ini\")"},{"line_number":32,"context_line":"TENANT \u003d const.NETWORK_ADMIN"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"cp \u003d ConfigObj(CONF_FILE)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B928%3D","line":31,"updated":"2013-02-12 23:21:34.000000000","message":"Multiple parses of the config file.","commit_id":"12b43803cd188d29c329795805448990c9604820"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"TENANT \u003d const.NETWORK_ADMIN"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"_nexus_dict \u003d config.get_nexus_dictionary()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class Store(object):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F58U%3D","line":33,"updated":"2013-03-21 14:23:54.000000000","message":"Is there a reason we capture the dictionary here rather than just calling the function in Store.initialize()?","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"TENANT \u003d const.NETWORK_ADMIN"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"_nexus_dict \u003d config.get_nexus_dictionary()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class Store(object):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F55I%3D","line":33,"in_reply_to":"AAAAOH%2F%2F58U%3D","updated":"2013-03-21 15:01:33.000000000","message":"Not really other than the original code retrieved the information at the top of the file.\n(Note that the credential information is now a part of the NEXUS_SWITCH dictionary.)","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @staticmethod"},{"line_number":40,"context_line":"    def initialize():"},{"line_number":41,"context_line":"        for keys in _nexus_dict.keys():"},{"line_number":42,"context_line":"            if keys[1] \u003d\u003d const.USERNAME:"},{"line_number":43,"context_line":"                try:"},{"line_number":44,"context_line":"                    cdb.add_credential(TENANT, keys[0],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6Lg%3D","line":41,"updated":"2013-03-21 11:29:17.000000000","message":"Could you use a tuple here, and then reference with a more descriptive name, than using keys[0] and keys[1] below?","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @staticmethod"},{"line_number":40,"context_line":"    def initialize():"},{"line_number":41,"context_line":"        for keys in _nexus_dict.keys():"},{"line_number":42,"context_line":"            if keys[1] \u003d\u003d const.USERNAME:"},{"line_number":43,"context_line":"                try:"},{"line_number":44,"context_line":"                    cdb.add_credential(TENANT, keys[0],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F57w%3D","line":41,"in_reply_to":"AAAAOH%2F%2F58o%3D","updated":"2013-03-21 14:29:56.000000000","message":"Not with the way the dictionary is structured.\nx \u003d {\u00271.1.1.1\u0027, \u0027some other key\u0027}\ny \u003d value\n\nso\nx[0] \u003d \u00271.1.1.1\u0027\nx[1] \u003d \u0027some other key\u0027\n\nI created the dictionary like this since both \u00271.1.1.1\u0027 and \u0027some other key\u0027 are the \"keys\" to get to the value.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @staticmethod"},{"line_number":40,"context_line":"    def initialize():"},{"line_number":41,"context_line":"        for keys in _nexus_dict.keys():"},{"line_number":42,"context_line":"            if keys[1] \u003d\u003d const.USERNAME:"},{"line_number":43,"context_line":"                try:"},{"line_number":44,"context_line":"                    cdb.add_credential(TENANT, keys[0],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F58o%3D","line":41,"in_reply_to":"AAAAOH%2F%2F6EQ%3D","updated":"2013-03-21 14:23:54.000000000","message":"So you can\u0027t do:\nfor x,y in _nexus_dict.keys():\n    ...\n\nwhere x and y are meaningful names?","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @staticmethod"},{"line_number":40,"context_line":"    def initialize():"},{"line_number":41,"context_line":"        for keys in _nexus_dict.keys():"},{"line_number":42,"context_line":"            if keys[1] \u003d\u003d const.USERNAME:"},{"line_number":43,"context_line":"                try:"},{"line_number":44,"context_line":"                    cdb.add_credential(TENANT, keys[0],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6EQ%3D","line":41,"in_reply_to":"AAAAOH%2F%2F6Lg%3D","updated":"2013-03-21 13:32:53.000000000","message":"Not given how I\u0027ve structured the dictionary. See my other responses.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"TENANT \u003d const.NETWORK_ADMIN"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"_nexus_dict \u003d config.get_nexus_dictionary()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class Store(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOH%2F%2F53U%3D","line":33,"updated":"2013-03-21 15:16:38.000000000","message":"Any reason why we\u0027re saving a copy of the dict here versus jsut accessing in initialize()?","commit_id":"ae088544e4578e954d7292a99c1dc0abd5b99f4c"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"TENANT \u003d const.NETWORK_ADMIN"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"_nexus_dict \u003d config.get_nexus_dictionary()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class Store(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOH%2F%2F52w%3D","line":33,"in_reply_to":"AAAAOH%2F%2F53U%3D","updated":"2013-03-21 15:28:11.000000000","message":"Not really other than the original code retrieved the information at the top of the file. (Note that the credential information is now a part of the NEXUS_SWITCH dictionary.)","commit_id":"ae088544e4578e954d7292a99c1dc0abd5b99f4c"},{"author":{"_account_id":490,"name":"Sumit Naiksatam","email":"sumitnaiksatam@gmail.com","username":"snaiksat"},"unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"TENANT \u003d const.NETWORK_ADMIN"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"_nexus_dict \u003d config.get_nexus_dictionary()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class Store(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAOH%2F%2F5Ak%3D","line":33,"updated":"2013-03-21 22:44:57.000000000","message":"do you anticipate using credentials only for the nexus switches?","commit_id":"383de08c48fd8dee761da14bceeaba48d83fec62"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"TENANT \u003d const.NETWORK_ADMIN"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"_nexus_dict \u003d config.get_nexus_dictionary()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class Store(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAOH%2F%2F440%3D","line":33,"in_reply_to":"AAAAOH%2F%2F5Ak%3D","updated":"2013-03-22 13:14:05.000000000","message":"For now, yes.","commit_id":"383de08c48fd8dee761da14bceeaba48d83fec62"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Sumit Naiksatam, Cisco Systems, Inc."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging as LOG"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":"from quantum.plugins.cisco.common import config"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOH%2F%2Fs38%3D","line":19,"updated":"2013-04-02 13:45:43.000000000","message":"in the rest of quantum the common logging module is used.","commit_id":"73713112e1a153d68be5e9a24254c3821b83de46"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Sumit Naiksatam, Cisco Systems, Inc."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging as LOG"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":"from quantum.plugins.cisco.common import config"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOH%2F%2Fszc%3D","line":19,"in_reply_to":"AAAAOH%2F%2Fs0s%3D","updated":"2013-04-02 14:35:52.000000000","message":"Got it. I\u0027ll keep this in mind for future commits. Thanks.","commit_id":"73713112e1a153d68be5e9a24254c3821b83de46"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Sumit Naiksatam, Cisco Systems, Inc."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging as LOG"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":"from quantum.plugins.cisco.common import config"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOH%2F%2Fs0s%3D","line":19,"in_reply_to":"AAAAOH%2F%2Fs2Q%3D","updated":"2013-04-02 14:26:41.000000000","message":"The majority of code in quantum makes use of the common logging module. That is:\nfrom quantum.openstack.common import log as logging\nYou should make use of this. I do not expect that you do this in the context of this patch set, but it is worthwhile addressing in the future","commit_id":"73713112e1a153d68be5e9a24254c3821b83de46"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Sumit Naiksatam, Cisco Systems, Inc."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging as LOG"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":"from quantum.plugins.cisco.common import config"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOH%2F%2Fs2Q%3D","line":19,"in_reply_to":"AAAAOH%2F%2Fs38%3D","updated":"2013-04-02 14:11:06.000000000","message":"Hi Gary -\nI\u0027m not following this comment. Please expand.\nThanks,\nRich","commit_id":"73713112e1a153d68be5e9a24254c3821b83de46"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging as LOG"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":"from quantum.plugins.cisco.common import config"},{"line_number":23,"context_line":"from quantum.plugins.cisco.common import cisco_constants as const"},{"line_number":24,"context_line":"from quantum.plugins.cisco.common import cisco_exceptions as cexc"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOH%2F%2Fs4U%3D","line":21,"updated":"2013-04-02 13:44:55.000000000","message":"new line","commit_id":"73713112e1a153d68be5e9a24254c3821b83de46"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging as LOG"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":"from quantum.plugins.cisco.common import config"},{"line_number":23,"context_line":"from quantum.plugins.cisco.common import cisco_constants as const"},{"line_number":24,"context_line":"from quantum.plugins.cisco.common import cisco_exceptions as cexc"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOH%2F%2FszI%3D","line":21,"in_reply_to":"AAAAOH%2F%2Fs1I%3D","updated":"2013-04-02 14:35:52.000000000","message":"I thought you were asking me to remove a new line. :-)\nGraphical diff was throwing me off.\nAdded newline.","commit_id":"73713112e1a153d68be5e9a24254c3821b83de46"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging as LOG"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":"from quantum.plugins.cisco.common import config"},{"line_number":23,"context_line":"from quantum.plugins.cisco.common import cisco_constants as const"},{"line_number":24,"context_line":"from quantum.plugins.cisco.common import cisco_exceptions as cexc"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOH%2F%2Fs1I%3D","line":21,"in_reply_to":"AAAAOH%2F%2Fs2k%3D","updated":"2013-04-02 14:26:41.000000000","message":"Yes, that is correct. The oslo import is now considered a third party import, hence the requirement for the new line.","commit_id":"73713112e1a153d68be5e9a24254c3821b83de46"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging as LOG"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":"from quantum.plugins.cisco.common import config"},{"line_number":23,"context_line":"from quantum.plugins.cisco.common import cisco_constants as const"},{"line_number":24,"context_line":"from quantum.plugins.cisco.common import cisco_exceptions as cexc"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOH%2F%2Fs2k%3D","line":21,"in_reply_to":"AAAAOH%2F%2Fs4U%3D","updated":"2013-04-02 14:11:06.000000000","message":"Looking at other quantum/ files and following the below guidelines I would think that a blank line should be used between the oslo.config and quantum.xxx imports.\n\n\"Imports should be grouped in the following order:\nstandard library imports\nrelated third party imports\nlocal application/library specific imports\nYou should put a blank line between each group of imports.\"","commit_id":"73713112e1a153d68be5e9a24254c3821b83de46"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging as LOG"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":"from quantum.plugins.cisco.common import config"},{"line_number":23,"context_line":"from quantum.plugins.cisco.common import cisco_constants as const"},{"line_number":24,"context_line":"from quantum.plugins.cisco.common import cisco_exceptions as cexc"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOH%2F%2Fsq0%3D","line":21,"in_reply_to":"AAAAOH%2F%2FszI%3D","updated":"2013-04-02 15:33:18.000000000","message":"cool. let me know when you push the patch","commit_id":"73713112e1a153d68be5e9a24254c3821b83de46"}],"quantum/plugins/cisco/common/config.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo.config import cfg"},{"line_number":18,"context_line":"from quantum.agent.common import config"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6Ng%3D","line":17,"updated":"2013-03-21 10:12:25.000000000","message":"new line","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo.config import cfg"},{"line_number":18,"context_line":"from quantum.agent.common import config"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6EA%3D","line":17,"in_reply_to":"AAAAOH%2F%2F6Ng%3D","updated":"2013-03-21 13:32:53.000000000","message":"Not sure where \"oslo.config\" fits in this grouping. That\u0027s why I added the blank line.\n\n\"Imports should be grouped in the following order:\n    standard library imports\n    related third party imports\n    local application/library specific imports\nYou should put a blank line between each group of imports.\"","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"unresolved":false,"context_lines":[{"line_number":81,"context_line":"# Example:"},{"line_number":82,"context_line":"# {(\u00271.1.1.1\u0027, \u0027username\u0027): \u0027admin\u0027,"},{"line_number":83,"context_line":"#  (\u00271.1.1.1\u0027, \u0027password\u0027): \u0027mySecretPassword\u0027,"},{"line_number":84,"context_line":"#  (\u00271.1.1.1\u0027, \u0027compute1\u0027): \u00271/1\u0027, ...}"},{"line_number":85,"context_line":"#"},{"line_number":86,"context_line":"nexus_dictionary \u003d {}"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6Kc%3D","line":84,"updated":"2013-03-21 11:29:17.000000000","message":"Would it be better to have the structure be a dictionary, with a key of the IP address, and a nested dictionary of key/value pairs?\n\n{\u00271.1.1.1\u0027 : {\u0027username\u0027:\u0027admin\u0027, \u0027password\u0027:\u0027mySecretPassword\u0027,...},\n \u00272.2.2.2\u0027: {...}}","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":81,"context_line":"# Example:"},{"line_number":82,"context_line":"# {(\u00271.1.1.1\u0027, \u0027username\u0027): \u0027admin\u0027,"},{"line_number":83,"context_line":"#  (\u00271.1.1.1\u0027, \u0027password\u0027): \u0027mySecretPassword\u0027,"},{"line_number":84,"context_line":"#  (\u00271.1.1.1\u0027, \u0027compute1\u0027): \u00271/1\u0027, ...}"},{"line_number":85,"context_line":"#"},{"line_number":86,"context_line":"nexus_dictionary \u003d {}"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6Dk%3D","line":84,"in_reply_to":"AAAAOH%2F%2F6Kc%3D","updated":"2013-03-21 13:32:53.000000000","message":"The problem that I had in creating this structure was that, in this example, \"compute1\" is not a keyword but an actual \"host name\". \nSo using your example I wouldn\u0027t know if \"username\" meant the keyword \"username\" or if this was a hostname. \nUsing a two-valued key seemed to be the solution.\nSee the comments in cisco_plugins.py.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def __init__(self):"},{"line_number":92,"context_line":"        self._create_nexus_dictionary(cfg)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _create_nexus_dictionary(self, conf):"},{"line_number":95,"context_line":"        \"\"\" Create the Nexus dictionary from cisco_plugins.ini contents. \"\"\""},{"line_number":96,"context_line":"        for parsed_file in cfg.CONF._cparser.parsed:"},{"line_number":97,"context_line":"            for parsed_item in parsed_file.keys():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6T8%3D","line":94,"updated":"2013-03-21 08:13:54.000000000","message":"The argument \u0027conf\u0027 is not used anywhere.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def __init__(self):"},{"line_number":92,"context_line":"        self._create_nexus_dictionary(cfg)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _create_nexus_dictionary(self, conf):"},{"line_number":95,"context_line":"        \"\"\" Create the Nexus dictionary from cisco_plugins.ini contents. \"\"\""},{"line_number":96,"context_line":"        for parsed_file in cfg.CONF._cparser.parsed:"},{"line_number":97,"context_line":"            for parsed_item in parsed_file.keys():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6Dg%3D","line":94,"in_reply_to":"AAAAOH%2F%2F6T8%3D","updated":"2013-03-21 13:32:53.000000000","message":"I\u0027ll remove.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"unresolved":false,"context_lines":[{"line_number":92,"context_line":"        self._create_nexus_dictionary(cfg)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _create_nexus_dictionary(self, conf):"},{"line_number":95,"context_line":"        \"\"\" Create the Nexus dictionary from cisco_plugins.ini contents. \"\"\""},{"line_number":96,"context_line":"        for parsed_file in cfg.CONF._cparser.parsed:"},{"line_number":97,"context_line":"            for parsed_item in parsed_file.keys():"},{"line_number":98,"context_line":"                nexus_name \u003d parsed_item.split(\u0027:\u0027)[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6KU%3D","line":95,"updated":"2013-03-21 11:29:17.000000000","message":"Missing assignment of items to the dictionary.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        self._create_nexus_dictionary(cfg)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _create_nexus_dictionary(self, conf):"},{"line_number":95,"context_line":"        \"\"\" Create the Nexus dictionary from cisco_plugins.ini contents. \"\"\""},{"line_number":96,"context_line":"        for parsed_file in cfg.CONF._cparser.parsed:"},{"line_number":97,"context_line":"            for parsed_item in parsed_file.keys():"},{"line_number":98,"context_line":"                nexus_name \u003d parsed_item.split(\u0027:\u0027)[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6C4%3D","line":95,"in_reply_to":"AAAAOH%2F%2F6KU%3D","updated":"2013-03-21 13:32:53.000000000","message":"Yup! See answer below.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":99,"context_line":"                if nexus_name \u003d\u003d \u0027NEXUS_SWITCH\u0027:"},{"line_number":100,"context_line":"                    nexus_id \u003d parsed_item.split(\u0027:\u0027)[1]"},{"line_number":101,"context_line":"                    for nexus_key in parsed_file[parsed_item].keys():"},{"line_number":102,"context_line":"                        value \u003d parsed_file[parsed_item][nexus_key]"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"def get_nexus_dictionary():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6To%3D","line":102,"updated":"2013-03-21 08:13:54.000000000","message":"This method just assigns local variables (nexus_name,  nexus_id, and value) and does not keep state across multiple method calls. I couldn\u0027t understand why is this method needed (I hope my understanding is correct)","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                if nexus_name \u003d\u003d \u0027NEXUS_SWITCH\u0027:"},{"line_number":100,"context_line":"                    nexus_id \u003d parsed_item.split(\u0027:\u0027)[1]"},{"line_number":101,"context_line":"                    for nexus_key in parsed_file[parsed_item].keys():"},{"line_number":102,"context_line":"                        value \u003d parsed_file[parsed_item][nexus_key]"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"def get_nexus_dictionary():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6C0%3D","line":102,"in_reply_to":"AAAAOH%2F%2F6To%3D","updated":"2013-03-21 13:32:53.000000000","message":"Yikes! Bad cut/paste right before I sent out the review.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"def get_nexus_dictionary():"},{"line_number":106,"context_line":"    return nexus_dictionary"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6Tk%3D","line":106,"updated":"2013-03-21 08:13:54.000000000","message":"Who updates nexus_dictionary? It seems no one updates the dict. If this variable is updated by other modules, it would be better to prepare a method to update it in this module.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"def get_nexus_dictionary():"},{"line_number":106,"context_line":"    return nexus_dictionary"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F590%3D","line":106,"in_reply_to":"AAAAOH%2F%2F6B8%3D","updated":"2013-03-21 14:15:00.000000000","message":"I don\u0027t think we need to change it to a class method. Either of module-level method and class method is okay to me. Perhaps the comments above will address my question.\n\nWhat I wondered in the previous comment is just why nexus_dictionary and get_next_dictionary() are needed since nexus_directory is not updated anywhere.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"def get_nexus_dictionary():"},{"line_number":106,"context_line":"    return nexus_dictionary"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6B8%3D","line":106,"in_reply_to":"AAAAOH%2F%2F6Tk%3D","updated":"2013-03-21 13:32:53.000000000","message":"No code is updating nexus_dictionary. \nAre you suggesting that I make this a method under CiscoConfigOptions instead?","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"unresolved":false,"context_lines":[{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        for parsed_file in cfg.CONF._cparser.parsed:"},{"line_number":101,"context_line":"            for parsed_item in parsed_file.keys():"},{"line_number":102,"context_line":"                nexus_name \u003d parsed_item.split(\u0027:\u0027)[0]"},{"line_number":103,"context_line":"                if nexus_name \u003d\u003d \u0027NEXUS_SWITCH\u0027:"},{"line_number":104,"context_line":"                    nexus_ip \u003d parsed_item.split(\u0027:\u0027)[1]"},{"line_number":105,"context_line":"                    for nexus_key in parsed_file[parsed_item].keys():"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOH%2F%2F54I%3D","line":102,"updated":"2013-03-21 15:16:38.000000000","message":"You can do:\n\nnexus_name, sep, nexus_ip \u003d parsed_item.partition(\u0027:\u0027)\nif nexusname \u003d\u003d \u0027NEXUS_SWITCH\u0027:\n   ...\n\nnexus_ip will be empty string, if no separator.","commit_id":"ae088544e4578e954d7292a99c1dc0abd5b99f4c"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        for parsed_file in cfg.CONF._cparser.parsed:"},{"line_number":101,"context_line":"            for parsed_item in parsed_file.keys():"},{"line_number":102,"context_line":"                nexus_name \u003d parsed_item.split(\u0027:\u0027)[0]"},{"line_number":103,"context_line":"                if nexus_name \u003d\u003d \u0027NEXUS_SWITCH\u0027:"},{"line_number":104,"context_line":"                    nexus_ip \u003d parsed_item.split(\u0027:\u0027)[1]"},{"line_number":105,"context_line":"                    for nexus_key in parsed_file[parsed_item].keys():"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOH%2F%2F52g%3D","line":102,"in_reply_to":"AAAAOH%2F%2F54I%3D","updated":"2013-03-21 15:28:11.000000000","message":"This code was cut/pasted from a similar Nicira implementation.\nI\u0027ll see if your suggestion works.","commit_id":"ae088544e4578e954d7292a99c1dc0abd5b99f4c"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"unresolved":false,"context_lines":[{"line_number":102,"context_line":"                nexus_name \u003d parsed_item.split(\u0027:\u0027)[0]"},{"line_number":103,"context_line":"                if nexus_name \u003d\u003d \u0027NEXUS_SWITCH\u0027:"},{"line_number":104,"context_line":"                    nexus_ip \u003d parsed_item.split(\u0027:\u0027)[1]"},{"line_number":105,"context_line":"                    for nexus_key in parsed_file[parsed_item].keys():"},{"line_number":106,"context_line":"                        value \u003d parsed_file[parsed_item][nexus_key]"},{"line_number":107,"context_line":"                        nexus_dictionary[nexus_ip, nexus_key] \u003d value[0]"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOH%2F%2F53w%3D","line":105,"updated":"2013-03-21 15:16:38.000000000","message":"Rather than getting the keys and then accessing the values, couldn\u0027t you do:\nfor k,v in parsed_file[parsed_item].items():\n    nexus_dictionary[nexus_ip, k] \u003d v[0]\n\nYou can use more descriptive names for k \u0026 v.","commit_id":"ae088544e4578e954d7292a99c1dc0abd5b99f4c"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                nexus_name \u003d parsed_item.split(\u0027:\u0027)[0]"},{"line_number":103,"context_line":"                if nexus_name \u003d\u003d \u0027NEXUS_SWITCH\u0027:"},{"line_number":104,"context_line":"                    nexus_ip \u003d parsed_item.split(\u0027:\u0027)[1]"},{"line_number":105,"context_line":"                    for nexus_key in parsed_file[parsed_item].keys():"},{"line_number":106,"context_line":"                        value \u003d parsed_file[parsed_item][nexus_key]"},{"line_number":107,"context_line":"                        nexus_dictionary[nexus_ip, nexus_key] \u003d value[0]"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOH%2F%2F52U%3D","line":105,"in_reply_to":"AAAAOH%2F%2F53w%3D","updated":"2013-03-21 15:28:11.000000000","message":"Again this is from Nicira. I\u0027ll give it a try.","commit_id":"ae088544e4578e954d7292a99c1dc0abd5b99f4c"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":"               default\u003d\u0027quantum.plugins.cisco.tests.unit.v2.nexus.\u0027"},{"line_number":59,"context_line":"                       \u0027fake_nexus_driver.CiscoNEXUSFakeDriver\u0027,"},{"line_number":60,"context_line":"               help\u003d_(\"Nexus Driver Name\")),"},{"line_number":61,"context_line":"    cfg.StrOpt(\u0027keystone_username\u0027, default\u003d\u0027\u0027,"},{"line_number":62,"context_line":"               help\u003d_(\"Keystone username\")),"},{"line_number":63,"context_line":"    cfg.StrOpt(\u0027keystone_password\u0027, default\u003d\u0027\u0027,"},{"line_number":64,"context_line":"               help\u003d_(\"Keystone password\")),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOH%2F%2F41I%3D","line":61,"updated":"2013-03-22 01:02:30.000000000","message":"I wonder if you could get this from quantum.conf instead of having to duplicate these settings.","commit_id":"54eeac4586fa742ab55eca5ba0d95dda32798e97"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"               default\u003d\u0027quantum.plugins.cisco.tests.unit.v2.nexus.\u0027"},{"line_number":59,"context_line":"                       \u0027fake_nexus_driver.CiscoNEXUSFakeDriver\u0027,"},{"line_number":60,"context_line":"               help\u003d_(\"Nexus Driver Name\")),"},{"line_number":61,"context_line":"    cfg.StrOpt(\u0027keystone_username\u0027, default\u003d\u0027\u0027,"},{"line_number":62,"context_line":"               help\u003d_(\"Keystone username\")),"},{"line_number":63,"context_line":"    cfg.StrOpt(\u0027keystone_password\u0027, default\u003d\u0027\u0027,"},{"line_number":64,"context_line":"               help\u003d_(\"Keystone password\")),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOH%2F%2F4Qo%3D","line":61,"in_reply_to":"AAAAOH%2F%2F41I%3D","updated":"2013-03-22 13:13:15.000000000","message":"I don\u0027t think so. These three keystone values are used by the Cisco nexus port create/update functions to register w/ the Keystone and Nova clients.\nIt\u0027s outside the scope of this BP but I\u0027ll ask around. Thanks.","commit_id":"54eeac4586fa742ab55eca5ba0d95dda32798e97"},{"author":{"_account_id":107,"name":"Arvind Somya","email":"arvind.somya@gmail.com","username":"asomya"},"unresolved":false,"context_lines":[{"line_number":58,"context_line":"               default\u003d\u0027quantum.plugins.cisco.tests.unit.v2.nexus.\u0027"},{"line_number":59,"context_line":"                       \u0027fake_nexus_driver.CiscoNEXUSFakeDriver\u0027,"},{"line_number":60,"context_line":"               help\u003d_(\"Nexus Driver Name\")),"},{"line_number":61,"context_line":"    cfg.StrOpt(\u0027keystone_username\u0027, default\u003d\u0027\u0027,"},{"line_number":62,"context_line":"               help\u003d_(\"Keystone username\")),"},{"line_number":63,"context_line":"    cfg.StrOpt(\u0027keystone_password\u0027, default\u003d\u0027\u0027,"},{"line_number":64,"context_line":"               help\u003d_(\"Keystone password\")),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOH%2F%2F388%3D","line":61,"in_reply_to":"AAAAOH%2F%2F4Qo%3D","updated":"2013-03-22 16:05:16.000000000","message":"Actually, that is a good suggestion. quantum.conf already contains:\n\n[keystone_authtoken]\nauth_host \u003d 172.18.112.47\nauth_port \u003d 35357\nauth_protocol \u003d http\nadmin_tenant_name \u003d service\nadmin_user \u003d quantum\nadmin_password \u003d nova\nsigning_dir \u003d /var/cache/quantum\n\nthis will also ensure that any keystone password changes only have to be made in one place instead of multiple. I believe only place this is used is our models so just need to change virt_phy_sw_v2.py","commit_id":"54eeac4586fa742ab55eca5ba0d95dda32798e97"}],"quantum/plugins/cisco/db/l2network_db.py":[{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def initialize():"},{"line_number":33,"context_line":"    \"\"\"Establish database connection and load models\"\"\""},{"line_number":34,"context_line":"    db.configure_db()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def create_vlanids():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6mc%3D","line":34,"updated":"2013-03-21 02:43:40.000000000","message":"Not related to this patch but this place has a error according to:\n\nPLUGIN_DIR\u003dquantum/plugins/cisco ./run_tests.sh","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def initialize():"},{"line_number":33,"context_line":"    \"\"\"Establish database connection and load models\"\"\""},{"line_number":34,"context_line":"    db.configure_db()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def create_vlanids():"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6Bw%3D","line":34,"in_reply_to":"AAAAOH%2F%2F6mc%3D","updated":"2013-03-21 13:32:53.000000000","message":"Looks like Arvind Somya made this update. I\u0027ll let him comment.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"}],"quantum/plugins/cisco/l2network_plugin_configuration.py":[{"author":{"_account_id":107,"name":"Arvind Somya","email":"arvind.somya@gmail.com","username":"asomya"},"change_message_id":"4d50416af187ad4b69e0b4671144467d3d83ef11","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"CONF_FILE \u003d find_config_file({\u0027plugin\u0027: \u0027cisco\u0027}, \"cisco_plugins.ini\")"},{"line_number":25,"context_line":"CONF_PARSER_OBJ \u003d confp.CiscoConfigParser(CONF_FILE)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"# Read the conf for the l2network_plugin"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FI3k%3D","line":25,"updated":"2013-02-05 21:43:33.000000000","message":"Instead of parsing the same file in different places, we should only be parsing it once and reusing the config dictionary in all files.","commit_id":"ed9a55ccf5cff38fe8c61d225343254e1d450142"},{"author":{"_account_id":107,"name":"Arvind Somya","email":"arvind.somya@gmail.com","username":"asomya"},"unresolved":false,"context_lines":[{"line_number":21,"context_line":"from quantum.common.utils import find_config_file"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"CONF_FILE \u003d find_config_file({\u0027plugin\u0027: \u0027cisco\u0027}, \"cisco_plugins.ini\")"},{"line_number":25,"context_line":"CONF_PARSER_OBJ \u003d ConfigObj(CONF_FILE)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B93k%3D","line":24,"updated":"2013-02-12 23:21:34.000000000","message":"We\u0027re parsing the file in multiple places again.","commit_id":"12b43803cd188d29c329795805448990c9604820"}],"quantum/plugins/cisco/models/virt_phy_sw_v2.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"unresolved":false,"context_lines":[{"line_number":303,"context_line":"            instance_id \u003d port[\u0027port\u0027][\u0027device_id\u0027]"},{"line_number":304,"context_line":"            device_owner \u003d port[\u0027port\u0027][\u0027device_owner\u0027]"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"            if conf.CISCO.testhost \u003d\u003d \u0027TESTHOST\u0027:"},{"line_number":307,"context_line":"                host \u003d conf.CISCO.testhost"},{"line_number":308,"context_line":"            elif device_owner \u003d\u003d \u0027network:dhcp\u0027:"},{"line_number":309,"context_line":"                return ovs_output[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6KE%3D","line":306,"updated":"2013-03-21 11:29:17.000000000","message":"Maybe not part of this commit, but we should remove UT specific code from production code, IMHO.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            instance_id \u003d port[\u0027port\u0027][\u0027device_id\u0027]"},{"line_number":304,"context_line":"            device_owner \u003d port[\u0027port\u0027][\u0027device_owner\u0027]"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"            if conf.CISCO.testhost \u003d\u003d \u0027TESTHOST\u0027:"},{"line_number":307,"context_line":"                host \u003d conf.CISCO.testhost"},{"line_number":308,"context_line":"            elif device_owner \u003d\u003d \u0027network:dhcp\u0027:"},{"line_number":309,"context_line":"                return ovs_output[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6Bo%3D","line":306,"in_reply_to":"AAAAOH%2F%2F6KE%3D","updated":"2013-03-21 13:32:53.000000000","message":"I\u0027ll let Arvind comment.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"unresolved":false,"context_lines":[{"line_number":303,"context_line":"            instance_id \u003d port[\u0027port\u0027][\u0027device_id\u0027]"},{"line_number":304,"context_line":"            device_owner \u003d port[\u0027port\u0027][\u0027device_owner\u0027]"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"            if conf.CISCO.testhost \u003d\u003d \u0027TESTHOST\u0027:"},{"line_number":307,"context_line":"                host \u003d conf.CISCO.testhost"},{"line_number":308,"context_line":"            elif device_owner \u003d\u003d \u0027network:dhcp\u0027:"},{"line_number":309,"context_line":"                return ovs_output[0]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOH%2F%2F16A%3D","line":306,"updated":"2013-03-25 13:45:02.000000000","message":"make sure that the test host name is the same as that defined in the config file, which uses lower case \u0027testhost\u0027","commit_id":"54eeac4586fa742ab55eca5ba0d95dda32798e97"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"unresolved":false,"context_lines":[{"line_number":178,"context_line":"        keystone_config \u003d cfg.CONF.keystone_authtoken"},{"line_number":179,"context_line":"        keystone_admin_user \u003d keystone_config.admin_user"},{"line_number":180,"context_line":"        keystone_admin_password \u003d keystone_config.admin_password"},{"line_number":181,"context_line":"        keystone_auth_url \u003d \u0027%s://%s:%s\u0027 % (keystone_config.auth_protocol,"},{"line_number":182,"context_line":"                                            keystone_config.auth_host,"},{"line_number":183,"context_line":"                                            keystone_config.auth_port)"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAOH%2F%2F0EQ%3D","line":181,"updated":"2013-03-26 15:32:00.000000000","message":"the format string should be \u0027%s://%s:%s/v2.0/\u0027. \nalso, I got authorization failure with this change.","commit_id":"ef0d2c43a48fd395209f6ca484d1b783a7f68ab7"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def _get_instance_host(self, tenant_id, instance_id):"},{"line_number":178,"context_line":"        keystone_conf \u003d cfg.CONF.keystone_authtoken"},{"line_number":179,"context_line":"        keystone_auth_url \u003d \u0027%s://%s:%s/v2_0/\u0027 % (keystone_conf.auth_protocol,"},{"line_number":180,"context_line":"                                                  keystone_conf.auth_host,"},{"line_number":181,"context_line":"                                                  keystone_conf.auth_port)"},{"line_number":182,"context_line":"        nc \u003d nova_client.Client(keystone_conf.admin_user,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAOH%2F%2Fzlg%3D","line":179,"updated":"2013-03-26 20:30:04.000000000","message":"it should be /v2.0/","commit_id":"902af33ce6f5520733842cb4e399fb77a04b37ae"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def _get_instance_host(self, tenant_id, instance_id):"},{"line_number":178,"context_line":"        keystone_conf \u003d cfg.CONF.keystone_authtoken"},{"line_number":179,"context_line":"        keystone_auth_url \u003d \u0027%s://%s:%s/v2_0/\u0027 % (keystone_conf.auth_protocol,"},{"line_number":180,"context_line":"                                                  keystone_conf.auth_host,"},{"line_number":181,"context_line":"                                                  keystone_conf.auth_port)"},{"line_number":182,"context_line":"        nc \u003d nova_client.Client(keystone_conf.admin_user,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAOH%2F%2FzRU%3D","line":179,"in_reply_to":"AAAAOH%2F%2Fzlg%3D","updated":"2013-03-27 00:19:21.000000000","message":"OK. Will update.","commit_id":"902af33ce6f5520733842cb4e399fb77a04b37ae"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":33,"context_line":"from quantum.plugins.cisco.common import cisco_constants as const"},{"line_number":34,"context_line":"from quantum.plugins.cisco.common import cisco_credentials_v2 as cred"},{"line_number":35,"context_line":"from quantum.plugins.cisco.db import network_db_v2 as cdb"},{"line_number":36,"context_line":"from quantum.plugins.cisco.common import config as conf"},{"line_number":37,"context_line":"from quantum.plugins.openvswitch import ovs_db_v2 as odb"},{"line_number":38,"context_line":"from quantum import quantum_plugin_base_v2"},{"line_number":39,"context_line":"from quantum.db import api as db_api"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOH%2F%2Fsvg%3D","line":36,"updated":"2013-04-02 15:13:50.000000000","message":"L.35 and 36 needs to be swapped.","commit_id":"73713112e1a153d68be5e9a24254c3821b83de46"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":36,"context_line":"from quantum.plugins.cisco.common import config as conf"},{"line_number":37,"context_line":"from quantum.plugins.openvswitch import ovs_db_v2 as odb"},{"line_number":38,"context_line":"from quantum import quantum_plugin_base_v2"},{"line_number":39,"context_line":"from quantum.db import api as db_api"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOH%2F%2FsvY%3D","line":39,"updated":"2013-04-02 15:13:50.000000000","message":"L.39 needs to be moved before L.30","commit_id":"73713112e1a153d68be5e9a24254c3821b83de46"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":182,"context_line":"        nc \u003d nova_client.Client(keystone_conf.admin_user,"},{"line_number":183,"context_line":"                                keystone_conf.admin_password,"},{"line_number":184,"context_line":"                                keystone_conf.admin_tenant_name,"},{"line_number":185,"context_line":"                                keystone_auth_url,"},{"line_number":186,"context_line":"                                no_cache\u003dTrue)"},{"line_number":187,"context_line":"        serv \u003d nc.servers.get(instance_id)"},{"line_number":188,"context_line":"        host \u003d serv.__getattr__(\u0027OS-EXT-SRV-ATTR:host\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAOH%2F%2Fsug%3D","line":185,"updated":"2013-04-02 15:13:50.000000000","message":"(just a note) This should be filed as a document bug to remind it (or DocImpact flag).\n\nNow we use cfg.CONF.kyestone_authtoken configured in quantum.conf. This means we make sure to migrate keystone authtoken from api-paste.ini to qunautm.conf to use this version of Cisco plugin.\n\nIn Grizzly release, keystone authtoken both in quantum.conf and api-paste.ini are accepted, but this change requires authtoken in quantum.conf. This should be documented in Havana admin guide.","commit_id":"73713112e1a153d68be5e9a24254c3821b83de46"}],"quantum/plugins/cisco/nexus/cisco_nexus_configuration.py":[{"author":{"_account_id":107,"name":"Arvind Somya","email":"arvind.somya@gmail.com","username":"asomya"},"change_message_id":"4d50416af187ad4b69e0b4671144467d3d83ef11","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CP \u003d confp.CiscoConfigParser(find_config_file({\u0027plugin\u0027: \u0027cisco\u0027},"},{"line_number":31,"context_line":"                             \"cisco_plugins.ini\"))"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"NEXUS_DETAILS \u003d CP[\u0027SWITCH\u0027]"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FI3g%3D","line":31,"updated":"2013-02-05 21:43:33.000000000","message":"Instead of parsing the same file in different places, we should only be parsing it once and reusing the config dictionary in all files.","commit_id":"ed9a55ccf5cff38fe8c61d225343254e1d450142"}],"quantum/plugins/cisco/nexus/cisco_nexus_plugin_v2.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"unresolved":false,"context_lines":[{"line_number":85,"context_line":"        # Grab the switch IP and port for this host"},{"line_number":86,"context_line":"        switch_ip \u003d \u0027\u0027"},{"line_number":87,"context_line":"        port_id \u003d \u0027\u0027"},{"line_number":88,"context_line":"        for keys in self._nexus_switches.keys():"},{"line_number":89,"context_line":"            if str(keys[1]) \u003d\u003d str(host):"},{"line_number":90,"context_line":"                switch_ip \u003d keys[0]"},{"line_number":91,"context_line":"                port_id \u003d self._nexus_switches[keys[0], keys[1]]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6J8%3D","line":88,"updated":"2013-03-21 11:29:17.000000000","message":"Ditto with using a descriptive tuple, instead of array indexing. Aids in readability.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"},{"author":{"_account_id":6694,"name":"rcurran","email":"rcurran@cisco.com","username":"rcurran"},"change_message_id":"47315eceff28019a44a5693ac5ac5ebdaf1fefc7","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        # Grab the switch IP and port for this host"},{"line_number":86,"context_line":"        switch_ip \u003d \u0027\u0027"},{"line_number":87,"context_line":"        port_id \u003d \u0027\u0027"},{"line_number":88,"context_line":"        for keys in self._nexus_switches.keys():"},{"line_number":89,"context_line":"            if str(keys[1]) \u003d\u003d str(host):"},{"line_number":90,"context_line":"                switch_ip \u003d keys[0]"},{"line_number":91,"context_line":"                port_id \u003d self._nexus_switches[keys[0], keys[1]]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F6Bc%3D","line":88,"in_reply_to":"AAAAOH%2F%2F6J8%3D","updated":"2013-03-21 13:32:53.000000000","message":"See other explanation for dictionary format. \nI could add a comment on what key[0],[1] are but it can be gleaned from the assignments below.","commit_id":"5927b749b8ac72ed27a02c44a725b55f4efa4c8b"}]}
