)]}'
{"etc/neutron/plugins/cisco/cisco_cfg_agent.ini":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"9cf2fa69ecfaaf556a3d1df03ae213f3daa2bf85","unresolved":false,"context_lines":[{"line_number":7,"context_line":"# (StrOpt) Period-separated module path to the routing service helper class."},{"line_number":8,"context_line":"# routing_svc_helper_class \u003d neutron.plugins.cisco.cfg_agent.service_helpers.routing_svc_helper.RoutingServiceHelper"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"# (IntOpt) Timeout value for connecting to a hosting device"},{"line_number":11,"context_line":"# device_connection_timeout \u003d 30"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"# (IntOpt) The time in seconds until a backlogged hosting device is presumed dead"}],"source_content_type":"text/x-properties","patch_set":5,"id":"fa98f980_fe2031fa","line":10,"updated":"2014-09-09 13:56:20.000000000","message":"units?","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"a27c9299dead3265818ebc886a08764df16c0ea3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"# (StrOpt) Period-separated module path to the routing service helper class."},{"line_number":8,"context_line":"# routing_svc_helper_class \u003d neutron.plugins.cisco.cfg_agent.service_helpers.routing_svc_helper.RoutingServiceHelper"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"# (IntOpt) Timeout value for connecting to a hosting device"},{"line_number":11,"context_line":"# device_connection_timeout \u003d 30"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"# (IntOpt) The time in seconds until a backlogged hosting device is presumed dead"}],"source_content_type":"text/x-properties","patch_set":5,"id":"fa98f980_e7ada432","line":10,"in_reply_to":"fa98f980_fe2031fa","updated":"2014-09-15 16:28:34.000000000","message":"Should be seconds. Will be addressed by bug https://bugs.launchpad.net/tripleo/+bug/1351466.","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"}],"neutron/plugins/cisco/cfg_agent/cfg_exceptions.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4ac093e0d2c5ffe54db3707bac9899b0149147e6","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class CSR1kvRestException(DriverException):"},{"line_number":44,"context_line":"    \"\"\"Configuration exception thrown when modifying the running config.\"\"\""},{"line_number":45,"context_line":"    message \u003d (_(\"Error:%(error)s. \""},{"line_number":46,"context_line":"                 \"Executing REST API:%(api)s.\"))"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_7d4d1a72","line":44,"updated":"2014-11-20 13:44:43.000000000","message":"Nit: Can this exception ONLY occur when modifying the config, or could it fail with read operations? May want to clarify on docstring.","commit_id":"563e0d332cf0c829ac44ee3f4c0b7c6bca02ab7a"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"dc1bf417a3a3058a59eae2e7f603e746e1b6a963","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class CSR1kvRestException(DriverException):"},{"line_number":44,"context_line":"    \"\"\"Configuration exception thrown when modifying the running config.\"\"\""},{"line_number":45,"context_line":"    message \u003d (_(\"Error:%(error)s. \""},{"line_number":46,"context_line":"                 \"Executing REST API:%(api)s.\"))"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_caf5a285","line":44,"in_reply_to":"5a890539_7d4d1a72","updated":"2014-12-11 21:42:24.000000000","message":"Done","commit_id":"563e0d332cf0c829ac44ee3f4c0b7c6bca02ab7a"}],"neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_rest_routing_driver.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"9cf2fa69ecfaaf556a3d1df03ae213f3daa2bf85","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":"# @author: Hareesh Puthalath, Tom Holtzen Cisco Systems, Inc."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":"import netaddr"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_314bc75a","line":15,"updated":"2014-09-09 13:56:20.000000000","message":"They\u0027re removing author lines from all commits now.","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"a27c9299dead3265818ebc886a08764df16c0ea3","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":"# @author: Hareesh Puthalath, Tom Holtzen Cisco Systems, Inc."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":"import netaddr"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_f2dac476","line":15,"in_reply_to":"fa98f980_314bc75a","updated":"2014-09-15 16:28:34.000000000","message":"Done","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"9cf2fa69ecfaaf556a3d1df03ae213f3daa2bf85","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            credentials \u003d device_params[\u0027credentials\u0027]"},{"line_number":56,"context_line":"            settings \u003d {\u0027rest_mgmt\u0027: device_params[\u0027management_ip_address\u0027] +"},{"line_number":57,"context_line":"                        \u0027:\u0027 + str(cfg.CONF.csr1kv_rest_api_mgmt_port),"},{"line_number":58,"context_line":"                        \u0027username\u0027: credentials[\u0027username\u0027],"},{"line_number":59,"context_line":"                        \u0027password\u0027: credentials[\u0027password\u0027],"},{"line_number":60,"context_line":"                        \u0027timeout\u0027: cfg.CONF.device_connection_timeout,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_91d3935e","line":57,"updated":"2014-09-09 13:56:20.000000000","message":"I think CsrRestClient upstream already has protocol_port dict key so these should be separate.","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"a27c9299dead3265818ebc886a08764df16c0ea3","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        try:"},{"line_number":55,"context_line":"            credentials \u003d device_params[\u0027credentials\u0027]"},{"line_number":56,"context_line":"            settings \u003d {\u0027rest_mgmt\u0027: device_params[\u0027management_ip_address\u0027] +"},{"line_number":57,"context_line":"                        \u0027:\u0027 + str(cfg.CONF.csr1kv_rest_api_mgmt_port),"},{"line_number":58,"context_line":"                        \u0027username\u0027: credentials[\u0027username\u0027],"},{"line_number":59,"context_line":"                        \u0027password\u0027: credentials[\u0027password\u0027],"},{"line_number":60,"context_line":"                        \u0027timeout\u0027: cfg.CONF.device_connection_timeout,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_2e34c748","line":57,"in_reply_to":"fa98f980_91d3935e","updated":"2014-09-15 16:28:34.000000000","message":"Done","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"9cf2fa69ecfaaf556a3d1df03ae213f3daa2bf85","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            credentials \u003d device_params[\u0027credentials\u0027]"},{"line_number":56,"context_line":"            settings \u003d {\u0027rest_mgmt\u0027: device_params[\u0027management_ip_address\u0027] +"},{"line_number":57,"context_line":"                        \u0027:\u0027 + str(cfg.CONF.csr1kv_rest_api_mgmt_port),"},{"line_number":58,"context_line":"                        \u0027username\u0027: credentials[\u0027username\u0027],"},{"line_number":59,"context_line":"                        \u0027password\u0027: credentials[\u0027password\u0027],"},{"line_number":60,"context_line":"                        \u0027timeout\u0027: cfg.CONF.device_connection_timeout,"},{"line_number":61,"context_line":"                        \u0027tunnel_ip\u0027: \u0027\u0027}"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_51b92b14","line":58,"updated":"2014-09-09 13:56:20.000000000","message":"Should username and password be configurable via config setting?","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"a27c9299dead3265818ebc886a08764df16c0ea3","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            credentials \u003d device_params[\u0027credentials\u0027]"},{"line_number":56,"context_line":"            settings \u003d {\u0027rest_mgmt\u0027: device_params[\u0027management_ip_address\u0027] +"},{"line_number":57,"context_line":"                        \u0027:\u0027 + str(cfg.CONF.csr1kv_rest_api_mgmt_port),"},{"line_number":58,"context_line":"                        \u0027username\u0027: credentials[\u0027username\u0027],"},{"line_number":59,"context_line":"                        \u0027password\u0027: credentials[\u0027password\u0027],"},{"line_number":60,"context_line":"                        \u0027timeout\u0027: cfg.CONF.device_connection_timeout,"},{"line_number":61,"context_line":"                        \u0027tunnel_ip\u0027: \u0027\u0027}"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_ae7517fb","line":58,"in_reply_to":"fa98f980_51b92b14","updated":"2014-09-15 16:28:34.000000000","message":"According to Bob, the username and password are managed by the plugin. Any changes to this should be done by a separate bug fix","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"9cf2fa69ecfaaf556a3d1df03ae213f3daa2bf85","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        self._remove_subinterface(subinterface)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _csr_add_ha(self, ri, port):"},{"line_number":133,"context_line":"        func_dict \u003d {"},{"line_number":134,"context_line":"            \u0027HSRP\u0027: CSR1kvRoutingDriver._csr_add_ha_HSRP,"},{"line_number":135,"context_line":"            \u0027VRRP\u0027: CSR1kvRoutingDriver._csr_add_ha_VRRP,"},{"line_number":136,"context_line":"            \u0027GBLP\u0027: CSR1kvRoutingDriver._csr_add_ha_GBLP"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_712b8feb","line":133,"updated":"2014-09-09 13:56:20.000000000","message":"define at top of module? more descriptive name?","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"a27c9299dead3265818ebc886a08764df16c0ea3","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        self._remove_subinterface(subinterface)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _csr_add_ha(self, ri, port):"},{"line_number":133,"context_line":"        func_dict \u003d {"},{"line_number":134,"context_line":"            \u0027HSRP\u0027: CSR1kvRoutingDriver._csr_add_ha_HSRP,"},{"line_number":135,"context_line":"            \u0027VRRP\u0027: CSR1kvRoutingDriver._csr_add_ha_VRRP,"},{"line_number":136,"context_line":"            \u0027GBLP\u0027: CSR1kvRoutingDriver._csr_add_ha_GBLP"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_0e9b8318","line":133,"in_reply_to":"fa98f980_712b8feb","updated":"2014-09-15 16:28:34.000000000","message":"Done","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"9cf2fa69ecfaaf556a3d1df03ae213f3daa2bf85","unresolved":false,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        #ToDo(Hareesh): Interfaces are hard coded for now."},{"line_number":297,"context_line":"        interface_names \u003d [\u0027GigabitEthernet2\u0027, \u0027GigabitEthernet3\u0027]"},{"line_number":298,"context_line":"        for i in interface_names:"},{"line_number":299,"context_line":"            response \u003d self.csr.get_request(\u0027interfaces/%s/state\u0027 % i)"},{"line_number":300,"context_line":"            self._check_response(response)"},{"line_number":301,"context_line":"            if response and not response[\u0027enabled\u0027]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_913473fc","line":298,"updated":"2014-09-09 13:56:20.000000000","message":"nit: could remove temp variable","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"a27c9299dead3265818ebc886a08764df16c0ea3","unresolved":false,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        #ToDo(Hareesh): Interfaces are hard coded for now."},{"line_number":297,"context_line":"        interface_names \u003d [\u0027GigabitEthernet2\u0027, \u0027GigabitEthernet3\u0027]"},{"line_number":298,"context_line":"        for i in interface_names:"},{"line_number":299,"context_line":"            response \u003d self.csr.get_request(\u0027interfaces/%s/state\u0027 % i)"},{"line_number":300,"context_line":"            self._check_response(response)"},{"line_number":301,"context_line":"            if response and not response[\u0027enabled\u0027]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_ce8c1bda","line":298,"in_reply_to":"fa98f980_913473fc","updated":"2014-09-15 16:28:34.000000000","message":"Done","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"9cf2fa69ecfaaf556a3d1df03ae213f3daa2bf85","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        self._check_response(acl_list)"},{"line_number":333,"context_line":"        for acl in acl_list[\u0027items\u0027]:"},{"line_number":334,"context_line":"            for rule in acl[\u0027rules\u0027]:"},{"line_number":335,"context_line":"                address \u003d rule[\u0027source\u0027].split(\u0027/\u0027)[0]"},{"line_number":336,"context_line":"                mask \u003d rule[\u0027source\u0027].split(\u0027/\u0027)[1]"},{"line_number":337,"context_line":"                hostmask_len \u003d 32 - acl_addr.prefixlen"},{"line_number":338,"context_line":"                if rule[\u0027action\u0027] \u003d\u003d \u0027permit\u0027 and \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_545d9914","line":335,"updated":"2014-09-09 13:56:20.000000000","message":"could combine the two lines:\n    address, mask \u003d rule[\u0027source\u0027].split(\u0027/\u0027, 1)","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"a27c9299dead3265818ebc886a08764df16c0ea3","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        self._check_response(acl_list)"},{"line_number":333,"context_line":"        for acl in acl_list[\u0027items\u0027]:"},{"line_number":334,"context_line":"            for rule in acl[\u0027rules\u0027]:"},{"line_number":335,"context_line":"                address \u003d rule[\u0027source\u0027].split(\u0027/\u0027)[0]"},{"line_number":336,"context_line":"                mask \u003d rule[\u0027source\u0027].split(\u0027/\u0027)[1]"},{"line_number":337,"context_line":"                hostmask_len \u003d 32 - acl_addr.prefixlen"},{"line_number":338,"context_line":"                if rule[\u0027action\u0027] \u003d\u003d \u0027permit\u0027 and \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_09053d10","line":335,"in_reply_to":"fa98f980_545d9914","updated":"2014-09-15 16:28:34.000000000","message":"Done","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"9cf2fa69ecfaaf556a3d1df03ae213f3daa2bf85","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                address \u003d rule[\u0027source\u0027].split(\u0027/\u0027)[0]"},{"line_number":336,"context_line":"                mask \u003d rule[\u0027source\u0027].split(\u0027/\u0027)[1]"},{"line_number":337,"context_line":"                hostmask_len \u003d 32 - acl_addr.prefixlen"},{"line_number":338,"context_line":"                if rule[\u0027action\u0027] \u003d\u003d \u0027permit\u0027 and \\"},{"line_number":339,"context_line":"                        address \u003d\u003d str(acl_addr.network) and \\"},{"line_number":340,"context_line":"                        mask \u003d\u003d str(hostmask_len) and \\"},{"line_number":341,"context_line":"                        rule[\u0027destination\u0027] \u003d\u003d \u00270.0.0.0/32\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_d4a8a9dd","line":338,"updated":"2014-09-09 13:56:20.000000000","message":"Use parens vs backslashes for line continuation","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"a27c9299dead3265818ebc886a08764df16c0ea3","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                address \u003d rule[\u0027source\u0027].split(\u0027/\u0027)[0]"},{"line_number":336,"context_line":"                mask \u003d rule[\u0027source\u0027].split(\u0027/\u0027)[1]"},{"line_number":337,"context_line":"                hostmask_len \u003d 32 - acl_addr.prefixlen"},{"line_number":338,"context_line":"                if rule[\u0027action\u0027] \u003d\u003d \u0027permit\u0027 and \\"},{"line_number":339,"context_line":"                        address \u003d\u003d str(acl_addr.network) and \\"},{"line_number":340,"context_line":"                        mask \u003d\u003d str(hostmask_len) and \\"},{"line_number":341,"context_line":"                        rule[\u0027destination\u0027] \u003d\u003d \u00270.0.0.0/32\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_09a1bdf7","line":338,"in_reply_to":"fa98f980_d4a8a9dd","updated":"2014-09-15 16:28:34.000000000","message":"Done","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"9cf2fa69ecfaaf556a3d1df03ae213f3daa2bf85","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            # The ACL id is returned in the response as below"},{"line_number":475,"context_line":"            # Location: http://host/api/v1/acl-svc/acl/acl-id"},{"line_number":476,"context_line":"            acl_location_str \u003d response.split(\u0027/\u0027)"},{"line_number":477,"context_line":"            acl_id \u003d acl_location_str[len(acl_location_str) - 1]"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        outer_intfc_info \u003d self.csr.get_request(\u0027interfaces/%s\u0027 % outer_intfc)"},{"line_number":480,"context_line":"        # need to use nat pool as NAT on an interface does not exist"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_1446b121","line":477,"updated":"2014-09-09 13:56:20.000000000","message":"acl_id \u003d acl_location_str[-1]","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"a27c9299dead3265818ebc886a08764df16c0ea3","unresolved":false,"context_lines":[{"line_number":474,"context_line":"            # The ACL id is returned in the response as below"},{"line_number":475,"context_line":"            # Location: http://host/api/v1/acl-svc/acl/acl-id"},{"line_number":476,"context_line":"            acl_location_str \u003d response.split(\u0027/\u0027)"},{"line_number":477,"context_line":"            acl_id \u003d acl_location_str[len(acl_location_str) - 1]"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        outer_intfc_info \u003d self.csr.get_request(\u0027interfaces/%s\u0027 % outer_intfc)"},{"line_number":480,"context_line":"        # need to use nat pool as NAT on an interface does not exist"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_49a7450b","line":477,"in_reply_to":"fa98f980_1446b121","updated":"2014-09-15 16:28:34.000000000","message":"Done","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"9cf2fa69ecfaaf556a3d1df03ae213f3daa2bf85","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        outer_intfc_info \u003d self.csr.get_request(\u0027interfaces/%s\u0027 % outer_intfc)"},{"line_number":480,"context_line":"        # need to use nat pool as NAT on an interface does not exist"},{"line_number":481,"context_line":"        # for REST API yet"},{"line_number":482,"context_line":"        response \u003d self.csr.get_request(\u0027nat-svc/pool/%s\u0027 %"},{"line_number":483,"context_line":"                                        \u0027pool-\u0027 + inner_intfc)"},{"line_number":484,"context_line":"        if self.csr.status \u003d\u003d requests.codes.NOT_FOUND:"},{"line_number":485,"context_line":"            pool_info \u003d {\u0027nat-pool-id\u0027: \u0027pool-\u0027 + inner_intfc,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_346c959c","line":482,"updated":"2014-09-09 13:56:20.000000000","message":"\u0027nat-svc/pool/pool-%s\u0027 % inner_intfc","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"a27c9299dead3265818ebc886a08764df16c0ea3","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        outer_intfc_info \u003d self.csr.get_request(\u0027interfaces/%s\u0027 % outer_intfc)"},{"line_number":480,"context_line":"        # need to use nat pool as NAT on an interface does not exist"},{"line_number":481,"context_line":"        # for REST API yet"},{"line_number":482,"context_line":"        response \u003d self.csr.get_request(\u0027nat-svc/pool/%s\u0027 %"},{"line_number":483,"context_line":"                                        \u0027pool-\u0027 + inner_intfc)"},{"line_number":484,"context_line":"        if self.csr.status \u003d\u003d requests.codes.NOT_FOUND:"},{"line_number":485,"context_line":"            pool_info \u003d {\u0027nat-pool-id\u0027: \u0027pool-\u0027 + inner_intfc,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_49f585eb","line":482,"in_reply_to":"fa98f980_346c959c","updated":"2014-09-15 16:28:34.000000000","message":"Done","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"9cf2fa69ecfaaf556a3d1df03ae213f3daa2bf85","unresolved":false,"context_lines":[{"line_number":490,"context_line":"            self._check_response(response)"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        # create the rule to NAT all internal address to the outer pool address"},{"line_number":493,"context_line":"        response \u003d self.csr.get_request(\u0027/vrf/%s/nat-svc/dynamic/%s\u0027 %"},{"line_number":494,"context_line":"                                        (vrf_name, \u0027nat-\u0027 + inner_intfc))"},{"line_number":495,"context_line":"        if self.csr.status \u003d\u003d requests.codes.NOT_FOUND:"},{"line_number":496,"context_line":"            nat_info \u003d {\u0027nat-rule-id\u0027: \u0027nat-\u0027 + inner_intfc,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_14e23101","line":493,"updated":"2014-09-09 13:56:20.000000000","message":"For clarity, could use named string formatter specifications and dict. Can add \u0027nat-\u0027 to string, rather than concatenating. Here and other places L529, 532, 554, 568, 582, 596.","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"a27c9299dead3265818ebc886a08764df16c0ea3","unresolved":false,"context_lines":[{"line_number":490,"context_line":"            self._check_response(response)"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"        # create the rule to NAT all internal address to the outer pool address"},{"line_number":493,"context_line":"        response \u003d self.csr.get_request(\u0027/vrf/%s/nat-svc/dynamic/%s\u0027 %"},{"line_number":494,"context_line":"                                        (vrf_name, \u0027nat-\u0027 + inner_intfc))"},{"line_number":495,"context_line":"        if self.csr.status \u003d\u003d requests.codes.NOT_FOUND:"},{"line_number":496,"context_line":"            nat_info \u003d {\u0027nat-rule-id\u0027: \u0027nat-\u0027 + inner_intfc,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_c94ed537","line":493,"in_reply_to":"fa98f980_14e23101","updated":"2014-09-15 16:28:34.000000000","message":"Done","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"9cf2fa69ecfaaf556a3d1df03ae213f3daa2bf85","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        \"\"\""},{"line_number":606,"context_line":"        if self.csr.status \u003e\u003d requests.codes.BAD_REQUEST and response:"},{"line_number":607,"context_line":"            # Fill in the error info with what is known"},{"line_number":608,"context_line":"            params \u003d {\u0027snippet\u0027: \u0027\u0027,"},{"line_number":609,"context_line":"                      \u0027type\u0027: \"HTTP response %s\" % self.csr.status,"},{"line_number":610,"context_line":"                      \u0027tag\u0027: \"Error in Sending REST request\"}"},{"line_number":611,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_34dbb51c","line":608,"updated":"2014-09-09 13:56:20.000000000","message":"Snippet used anywhere?","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"a27c9299dead3265818ebc886a08764df16c0ea3","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        \"\"\""},{"line_number":606,"context_line":"        if self.csr.status \u003e\u003d requests.codes.BAD_REQUEST and response:"},{"line_number":607,"context_line":"            # Fill in the error info with what is known"},{"line_number":608,"context_line":"            params \u003d {\u0027snippet\u0027: \u0027\u0027,"},{"line_number":609,"context_line":"                      \u0027type\u0027: \"HTTP response %s\" % self.csr.status,"},{"line_number":610,"context_line":"                      \u0027tag\u0027: \"Error in Sending REST request\"}"},{"line_number":611,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_6997a948","line":608,"in_reply_to":"fa98f980_34dbb51c","updated":"2014-09-15 16:28:34.000000000","message":"Not right now. Snippit is the CLI applied in NETCONF. I would like to replace this with the REST API called and possibly a new exception as a bug fix.","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"68b064157bcaece0897450c91e0bd48abc9e2399","unresolved":false,"context_lines":[{"line_number":477,"context_line":"            self._check_response(response)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        # create the rule to NAT all internal address to the outer pool address"},{"line_number":480,"context_line":"        response \u003d self.csr.get_request(\u0027/vrf/%s/nat-svc/dynamic/nat-%s\u0027 %"},{"line_number":481,"context_line":"                                        (vrf_name, inner_intfc))"},{"line_number":482,"context_line":"        if self.csr.status \u003d\u003d requests.codes.NOT_FOUND:"},{"line_number":483,"context_line":"            nat_info \u003d {\u0027nat-rule-id\u0027: \u0027nat-\u0027 + inner_intfc,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_074c1ac7","line":480,"updated":"2014-09-15 20:51:01.000000000","message":"For readability, you can do...\n    response \u003d self.csr.get_request(\u0027/vrf/%(name)s/nat-svc/dynamic/nat-%(interface)s\u0027 %\n        {\u0027name\u0027: vrf_name, \u0027interface\u0027: inner_intfc})\n\nAlso, the string itself, should probably be made a constant at the top of the file and used in each of the places needed below.","commit_id":"1695ddf8498611fad397bd3725d6fb6f5d2ef778"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"8c5e783e65b03c022cb092f27f39dd29aec51711","unresolved":false,"context_lines":[{"line_number":477,"context_line":"            self._check_response(response)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        # create the rule to NAT all internal address to the outer pool address"},{"line_number":480,"context_line":"        response \u003d self.csr.get_request(\u0027/vrf/%s/nat-svc/dynamic/nat-%s\u0027 %"},{"line_number":481,"context_line":"                                        (vrf_name, inner_intfc))"},{"line_number":482,"context_line":"        if self.csr.status \u003d\u003d requests.codes.NOT_FOUND:"},{"line_number":483,"context_line":"            nat_info \u003d {\u0027nat-rule-id\u0027: \u0027nat-\u0027 + inner_intfc,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_1f3c2993","line":480,"in_reply_to":"fa98f980_074c1ac7","updated":"2014-11-19 18:52:13.000000000","message":"Done","commit_id":"1695ddf8498611fad397bd3725d6fb6f5d2ef778"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"68b064157bcaece0897450c91e0bd48abc9e2399","unresolved":false,"context_lines":[{"line_number":537,"context_line":"        self._check_response(response)"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"    def _add_floating_ip(self, floating_ip, fixed_ip, vrf):"},{"line_number":540,"context_line":"        response \u003d self.csr.get_request(\u0027vrf/%s/nat-svc/static/static-%s\u0027 %"},{"line_number":541,"context_line":"                                        (vrf, floating_ip))"},{"line_number":542,"context_line":"        if self.csr.status \u003d\u003d requests.codes.NOT_FOUND:"},{"line_number":543,"context_line":"            ip_mapping_info \u003d {\u0027local-ip\u0027: fixed_ip,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_876baaef","line":540,"updated":"2014-09-15 20:51:01.000000000","message":"Can do the same with this string too... make a constant at top and use dict for mapping to the format specifiers.","commit_id":"1695ddf8498611fad397bd3725d6fb6f5d2ef778"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"8c5e783e65b03c022cb092f27f39dd29aec51711","unresolved":false,"context_lines":[{"line_number":537,"context_line":"        self._check_response(response)"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"    def _add_floating_ip(self, floating_ip, fixed_ip, vrf):"},{"line_number":540,"context_line":"        response \u003d self.csr.get_request(\u0027vrf/%s/nat-svc/static/static-%s\u0027 %"},{"line_number":541,"context_line":"                                        (vrf, floating_ip))"},{"line_number":542,"context_line":"        if self.csr.status \u003d\u003d requests.codes.NOT_FOUND:"},{"line_number":543,"context_line":"            ip_mapping_info \u003d {\u0027local-ip\u0027: fixed_ip,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_3f41e50b","line":540,"in_reply_to":"fa98f980_876baaef","updated":"2014-11-19 18:52:13.000000000","message":"Done","commit_id":"1695ddf8498611fad397bd3725d6fb6f5d2ef778"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"68b064157bcaece0897450c91e0bd48abc9e2399","unresolved":false,"context_lines":[{"line_number":566,"context_line":"    def _remove_static_route(self, dest, dest_mask, next_hop, vrf):"},{"line_number":567,"context_line":"        ip \u003d netaddr.IPNetwork(str(dest) + \u0027/\u0027 + str(dest_mask))"},{"line_number":568,"context_line":"        resp \u003d self.csr.delete_request("},{"line_number":569,"context_line":"            \u0027vrf/%s/routing-svc/static-routes/%s_%s_%s\u0027 %"},{"line_number":570,"context_line":"            (vrf, str(dest), str(ip.prefixlen), str(next_hop)))"},{"line_number":571,"context_line":"        self._check_response(resp)"},{"line_number":572,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_077fbaab","line":569,"updated":"2014-09-15 20:51:01.000000000","message":"Same here and below, can just add 0.0.0.0 and 32 to the dict.","commit_id":"1695ddf8498611fad397bd3725d6fb6f5d2ef778"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"8c5e783e65b03c022cb092f27f39dd29aec51711","unresolved":false,"context_lines":[{"line_number":566,"context_line":"    def _remove_static_route(self, dest, dest_mask, next_hop, vrf):"},{"line_number":567,"context_line":"        ip \u003d netaddr.IPNetwork(str(dest) + \u0027/\u0027 + str(dest_mask))"},{"line_number":568,"context_line":"        resp \u003d self.csr.delete_request("},{"line_number":569,"context_line":"            \u0027vrf/%s/routing-svc/static-routes/%s_%s_%s\u0027 %"},{"line_number":570,"context_line":"            (vrf, str(dest), str(ip.prefixlen), str(next_hop)))"},{"line_number":571,"context_line":"        self._check_response(resp)"},{"line_number":572,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_5f46b124","line":569,"in_reply_to":"fa98f980_077fbaab","updated":"2014-11-19 18:52:13.000000000","message":"Done","commit_id":"1695ddf8498611fad397bd3725d6fb6f5d2ef778"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"68b064157bcaece0897450c91e0bd48abc9e2399","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        \"\"\""},{"line_number":591,"context_line":"        if self.csr.status \u003e\u003d requests.codes.BAD_REQUEST and response:"},{"line_number":592,"context_line":"            # Fill in the error info with what is known"},{"line_number":593,"context_line":"            params \u003d {\u0027snippet\u0027: \u0027\u0027,"},{"line_number":594,"context_line":"                      \u0027type\u0027: \"HTTP response %s\" % self.csr.status,"},{"line_number":595,"context_line":"                      \u0027tag\u0027: \"Error in Sending REST request\"}"},{"line_number":596,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_c70db23f","line":593,"updated":"2014-09-15 20:51:01.000000000","message":"Regarding comment in rev 5, you can add a TODO comment indicating the work to do later.\n     # TODO(tom_holtzen): blah.....","commit_id":"1695ddf8498611fad397bd3725d6fb6f5d2ef778"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"8c5e783e65b03c022cb092f27f39dd29aec51711","unresolved":false,"context_lines":[{"line_number":590,"context_line":"        \"\"\""},{"line_number":591,"context_line":"        if self.csr.status \u003e\u003d requests.codes.BAD_REQUEST and response:"},{"line_number":592,"context_line":"            # Fill in the error info with what is known"},{"line_number":593,"context_line":"            params \u003d {\u0027snippet\u0027: \u0027\u0027,"},{"line_number":594,"context_line":"                      \u0027type\u0027: \"HTTP response %s\" % self.csr.status,"},{"line_number":595,"context_line":"                      \u0027tag\u0027: \"Error in Sending REST request\"}"},{"line_number":596,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_3f5805fa","line":593,"in_reply_to":"fa98f980_c70db23f","updated":"2014-11-19 18:52:13.000000000","message":"Added a new exception and modified accordingly","commit_id":"1695ddf8498611fad397bd3725d6fb6f5d2ef778"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4ac093e0d2c5ffe54db3707bac9899b0149147e6","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"URI_STATIC_NAT_BY_NAME \u003d URI_STATIC_NAT + \u0027/static-%s\u0027"},{"line_number":48,"context_line":"URI_STATIC_ROUTE \u003d \u0027vrf/%s/routing-svc/static-routes\u0027"},{"line_number":49,"context_line":"URI_STATIC_ROUTE_BY_NAME \u003d URI_STATIC_ROUTE + \u0027/%s_%s_%s\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"ERROR_URL \u003d \u0027%s https://%s/api/v1/%s\u0027"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_bd5a2281","line":49,"updated":"2014-11-20 13:44:43.000000000","message":"For strings like this, that have several format specifier, you should use named specifiers, so that, in use, you can use a dict, instead of a tuple and it will be easier (less error prone) to match up values with the specifier. See my comment in L480 of patch 6 for example.","commit_id":"563e0d332cf0c829ac44ee3f4c0b7c6bca02ab7a"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"dc1bf417a3a3058a59eae2e7f603e746e1b6a963","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"URI_STATIC_NAT_BY_NAME \u003d URI_STATIC_NAT + \u0027/static-%s\u0027"},{"line_number":48,"context_line":"URI_STATIC_ROUTE \u003d \u0027vrf/%s/routing-svc/static-routes\u0027"},{"line_number":49,"context_line":"URI_STATIC_ROUTE_BY_NAME \u003d URI_STATIC_ROUTE + \u0027/%s_%s_%s\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"ERROR_URL \u003d \u0027%s https://%s/api/v1/%s\u0027"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_40e497e0","line":49,"in_reply_to":"5a890539_bd5a2281","updated":"2014-12-11 21:42:24.000000000","message":"Done","commit_id":"563e0d332cf0c829ac44ee3f4c0b7c6bca02ab7a"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4ac093e0d2c5ffe54db3707bac9899b0149147e6","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        self.csr.get_request(URI_INTERFACE_BY_NAME % outer_intfc)"},{"line_number":180,"context_line":"        if self.csr.status \u003d\u003d requests.codes.NOT_FOUND:"},{"line_number":181,"context_line":"            # subinterface is not created for some reason"},{"line_number":182,"context_line":"            #self._csr_create_subinterface(ri, ex_port)"},{"line_number":183,"context_line":"            msg \u003d \"Gateway interface %s not created\" % outer_intfc"},{"line_number":184,"context_line":"            url \u003d ERROR_URL % (\u0027GET\u0027, self.csr.host,"},{"line_number":185,"context_line":"                               URI_INTERFACE_BY_NAME % outer_intfc)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_5d5dbe14","line":182,"updated":"2014-11-20 13:44:43.000000000","message":"remove dead code","commit_id":"563e0d332cf0c829ac44ee3f4c0b7c6bca02ab7a"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"dc1bf417a3a3058a59eae2e7f603e746e1b6a963","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        self.csr.get_request(URI_INTERFACE_BY_NAME % outer_intfc)"},{"line_number":180,"context_line":"        if self.csr.status \u003d\u003d requests.codes.NOT_FOUND:"},{"line_number":181,"context_line":"            # subinterface is not created for some reason"},{"line_number":182,"context_line":"            #self._csr_create_subinterface(ri, ex_port)"},{"line_number":183,"context_line":"            msg \u003d \"Gateway interface %s not created\" % outer_intfc"},{"line_number":184,"context_line":"            url \u003d ERROR_URL % (\u0027GET\u0027, self.csr.host,"},{"line_number":185,"context_line":"                               URI_INTERFACE_BY_NAME % outer_intfc)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_cace825b","line":182,"in_reply_to":"5a890539_5d5dbe14","updated":"2014-12-11 21:42:24.000000000","message":"Done","commit_id":"563e0d332cf0c829ac44ee3f4c0b7c6bca02ab7a"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4ac093e0d2c5ffe54db3707bac9899b0149147e6","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        change on future releases."},{"line_number":316,"context_line":"        \"\"\""},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        #ToDo: Interfaces are hard coded for now."},{"line_number":319,"context_line":"        for i in [\u0027GigabitEthernet2\u0027, \u0027GigabitEthernet3\u0027]:"},{"line_number":320,"context_line":"            api \u003d URI_INTERFACE_STATE % i"},{"line_number":321,"context_line":"            response \u003d self.csr.get_request(api)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_bdf30209","line":318,"updated":"2014-11-20 13:44:43.000000000","message":"Should be TODO(tom_holtzen): ...","commit_id":"563e0d332cf0c829ac44ee3f4c0b7c6bca02ab7a"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"dc1bf417a3a3058a59eae2e7f603e746e1b6a963","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        change on future releases."},{"line_number":316,"context_line":"        \"\"\""},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        #ToDo: Interfaces are hard coded for now."},{"line_number":319,"context_line":"        for i in [\u0027GigabitEthernet2\u0027, \u0027GigabitEthernet3\u0027]:"},{"line_number":320,"context_line":"            api \u003d URI_INTERFACE_STATE % i"},{"line_number":321,"context_line":"            response \u003d self.csr.get_request(api)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_4a029273","line":318,"in_reply_to":"5a890539_bdf30209","updated":"2014-12-11 21:42:24.000000000","message":"Done","commit_id":"563e0d332cf0c829ac44ee3f4c0b7c6bca02ab7a"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"4ac093e0d2c5ffe54db3707bac9899b0149147e6","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        for i in [\u0027GigabitEthernet2\u0027, \u0027GigabitEthernet3\u0027]:"},{"line_number":320,"context_line":"            api \u003d URI_INTERFACE_STATE % i"},{"line_number":321,"context_line":"            response \u003d self.csr.get_request(api)"},{"line_number":322,"context_line":"            self._check_response(response, api, \u0027Get\u0027)"},{"line_number":323,"context_line":"            if response and not response[\u0027enabled\u0027]:"},{"line_number":324,"context_line":"                state_info \u003d {\u0027if-name\u0027: i, \u0027enabled\u0027: True}"},{"line_number":325,"context_line":"                response \u003d self.csr.put_request(api,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_bd5862fb","line":322,"updated":"2014-11-20 13:44:43.000000000","message":"Get -\u003e GET?","commit_id":"563e0d332cf0c829ac44ee3f4c0b7c6bca02ab7a"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"dc1bf417a3a3058a59eae2e7f603e746e1b6a963","unresolved":false,"context_lines":[{"line_number":319,"context_line":"        for i in [\u0027GigabitEthernet2\u0027, \u0027GigabitEthernet3\u0027]:"},{"line_number":320,"context_line":"            api \u003d URI_INTERFACE_STATE % i"},{"line_number":321,"context_line":"            response \u003d self.csr.get_request(api)"},{"line_number":322,"context_line":"            self._check_response(response, api, \u0027Get\u0027)"},{"line_number":323,"context_line":"            if response and not response[\u0027enabled\u0027]:"},{"line_number":324,"context_line":"                state_info \u003d {\u0027if-name\u0027: i, \u0027enabled\u0027: True}"},{"line_number":325,"context_line":"                response \u003d self.csr.put_request(api,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_6a074e82","line":322,"in_reply_to":"5a890539_bd5862fb","updated":"2014-12-11 21:42:24.000000000","message":"Done","commit_id":"563e0d332cf0c829ac44ee3f4c0b7c6bca02ab7a"},{"author":{"_account_id":9820,"name":"Liping Mao","email":"limao@cisco.com","username":"LipingMao"},"change_message_id":"ba1e1a8b7668e319604f195bcf04499441dcde46","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo.config import cfg"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from neutron.openstack.common.gettextutils import _LI, _LW, _LE"},{"line_number":22,"context_line":"from neutron.plugins.cisco.cfg_agent import cfg_exceptions as cfg_exc"},{"line_number":23,"context_line":"from neutron.plugins.cisco.cfg_agent.device_drivers import devicedriver_api"},{"line_number":24,"context_line":"from neutron.services.vpn.device_drivers import cisco_csr_rest_client"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_92608ea6","line":21,"updated":"2014-12-12 00:59:01.000000000","message":"from neutron.i18n import _LE, _LI, _LW","commit_id":"5317fda3180875a4a0dd6f15fdafcfb8ab73b4bd"}],"neutron/plugins/cisco/cfg_agent/device_drivers/csr1kv/csr1kv_routing_driver.py":[{"author":{"_account_id":162,"name":"Bob Melander","email":"bob.melander@gmail.com","username":"bob-melander"},"change_message_id":"86b0630f4159d84e9004316820cc3b02a4af2dc6","unresolved":false,"context_lines":[{"line_number":30,"context_line":"T1_PORT_NAME_PREFIX \u003d \u0027t1_p:\u0027  # T1 port/network is for VXLAN"},{"line_number":31,"context_line":"T2_PORT_NAME_PREFIX \u003d \u0027t2_p:\u0027  # T2 port/network is for VLAN"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"#STATUS_OPTS \u003d ["},{"line_number":34,"context_line":"#    cfg.IntOpt(\u0027csr1kv_rest_port\u0027, default\u003d55443,"},{"line_number":35,"context_line":"#               help\u003d_(\"Default port for connecting to via the REST API\")),"},{"line_number":36,"context_line":"#]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_f6249161","line":33,"updated":"2014-08-20 19:00:06.000000000","message":"Chosen name not very intuitive. Plz pick a better one.","commit_id":"69e45a2c9ae9ecaef7c7cd0c34b788cd2740ff40"},{"author":{"_account_id":162,"name":"Bob Melander","email":"bob.melander@gmail.com","username":"bob-melander"},"change_message_id":"86b0630f4159d84e9004316820cc3b02a4af2dc6","unresolved":false,"context_lines":[{"line_number":33,"context_line":"#STATUS_OPTS \u003d ["},{"line_number":34,"context_line":"#    cfg.IntOpt(\u0027csr1kv_rest_port\u0027, default\u003d55443,"},{"line_number":35,"context_line":"#               help\u003d_(\"Default port for connecting to via the REST API\")),"},{"line_number":36,"context_line":"#]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"cfg.CONF.register_opts(STATUS_OPTS)"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_f6dbb14c","line":36,"updated":"2014-08-20 19:00:06.000000000","message":"If there are no options then remove rather than comment out.","commit_id":"69e45a2c9ae9ecaef7c7cd0c34b788cd2740ff40"},{"author":{"_account_id":162,"name":"Bob Melander","email":"bob.melander@gmail.com","username":"bob-melander"},"change_message_id":"86b0630f4159d84e9004316820cc3b02a4af2dc6","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        for i in interface_names:"},{"line_number":297,"context_line":"            response \u003d self.csr.get_request(\u0027interfaces/%s/state\u0027 % i)"},{"line_number":298,"context_line":"            if response and not response[\u0027enabled\u0027]:"},{"line_number":299,"context_line":"                state_info \u003d {u\u0027if-name\u0027: i, u\u0027enabled\u0027: True}"},{"line_number":300,"context_line":"                response \u003d self.csr.put_request(\u0027interfaces/%s/state\u0027 % i,"},{"line_number":301,"context_line":"                                                payload\u003dstate_info)"},{"line_number":302,"context_line":"                self._check_response(response)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_16166d55","line":299,"updated":"2014-08-20 19:00:06.000000000","message":"is unicode needed for the messages?","commit_id":"69e45a2c9ae9ecaef7c7cd0c34b788cd2740ff40"},{"author":{"_account_id":162,"name":"Bob Melander","email":"bob.melander@gmail.com","username":"bob-melander"},"change_message_id":"86b0630f4159d84e9004316820cc3b02a4af2dc6","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        \"\"\""},{"line_number":309,"context_line":"        vrfs \u003d []"},{"line_number":310,"context_line":"        response \u003d self.csr.get_request(\u0027vrf\u0027)"},{"line_number":311,"context_line":"        LOG.debug(\"Interface get response %s\" % response)"},{"line_number":312,"context_line":"        if response:"},{"line_number":313,"context_line":"            for vrf in response[\u0027items\u0027]:"},{"line_number":314,"context_line":"                vrfs.append(vrf[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_b6b859c9","line":311,"updated":"2014-08-20 19:00:06.000000000","message":"Use ... response %s\", response) instead","commit_id":"69e45a2c9ae9ecaef7c7cd0c34b788cd2740ff40"},{"author":{"_account_id":162,"name":"Bob Melander","email":"bob.melander@gmail.com","username":"bob-melander"},"change_message_id":"86b0630f4159d84e9004316820cc3b02a4af2dc6","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        acl_list \u003d self.csr.get_request(\u0027acl\u0027)"},{"line_number":329,"context_line":"        self._check_response(acl_list)"},{"line_number":330,"context_line":"        if len(acl_list[\u0027items\u0027]):"},{"line_number":331,"context_line":"            for acl in acl_list[\u0027items\u0027]:"},{"line_number":332,"context_line":"                for rule in acl[\u0027rules\u0027]:"},{"line_number":333,"context_line":"                    address \u003d rule[\u0027source\u0027].split(\u0027/\u0027)[0]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_76f08191","line":330,"updated":"2014-08-20 19:00:06.000000000","message":"Seems to me this if clause can be skipped. The for loop will handle it.","commit_id":"69e45a2c9ae9ecaef7c7cd0c34b788cd2740ff40"}],"neutron/tests/unit/cisco/cfg_agent/test_csr1kv_rest_routing_driver.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"9cf2fa69ecfaaf556a3d1df03ae213f3daa2bf85","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        csr.put_request \u003d mock.MagicMock()"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_csr_get_vrf_name(self):"},{"line_number":94,"context_line":"        self.assertEqual(self.driver._csr_get_vrf_name(self.ri), self.vrf)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_create_vrf(self):"},{"line_number":97,"context_line":"        vrf_info \u003d {\u0027name\u0027: self.vrf}"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_742b7deb","line":94,"updated":"2014-09-09 13:56:20.000000000","message":"assertEqual args should be expected, actual.","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"},{"author":{"_account_id":10344,"name":"Tom Holtzen","email":"tholtzen@cisco.com","username":"tholtzen"},"change_message_id":"a27c9299dead3265818ebc886a08764df16c0ea3","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        csr.put_request \u003d mock.MagicMock()"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_csr_get_vrf_name(self):"},{"line_number":94,"context_line":"        self.assertEqual(self.driver._csr_get_vrf_name(self.ri), self.vrf)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_create_vrf(self):"},{"line_number":97,"context_line":"        vrf_info \u003d {\u0027name\u0027: self.vrf}"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_b222fca0","line":94,"in_reply_to":"fa98f980_742b7deb","updated":"2014-09-15 16:28:34.000000000","message":"Done","commit_id":"ef2fbc3d126a01a2fa33ea8a4fbaed198d786952"}]}
