)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"ba0b0f2ae1a26acb58b091669dd769c149bcc6c8","unresolved":false,"context_lines":[{"line_number":14,"context_line":"in neutron project are not merged yet"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Extension code is not a part of this change set."},{"line_number":17,"context_line":"Extension resources are proposed to neutron at https://review.openstack.org/#/c/148896"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I4c5c494370479176af6f80623ae3a0c6af30ef14"},{"line_number":20,"context_line":"Implements: blueprint lbaas-ssl-termination"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"da86d52c_a0c8d5a8","line":17,"updated":"2015-02-05 06:00:52.000000000","message":"should remove this since the extension is now a part of the review.","commit_id":"f99ebe38337e0ca46db12b1383b4b16f315c7b40"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"ebb09253e1205161a089fbed8a4c7482eab4654d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Including db model unit testing"},{"line_number":12,"context_line":"Including alembic migration"},{"line_number":13,"context_line":"Including usage of new common module for TLS containers retrieval and validation"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I4c5c494370479176af6f80623ae3a0c6af30ef14"},{"line_number":16,"context_line":"Implements: blueprint lbaas-ssl-termination"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"da86d52c_e3561729","line":14,"updated":"2015-02-06 15:50:11.000000000","message":"DocImpact\nAPIImpact","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"6731eea052576f36d0d7ce98fb57db299801612c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"Including db model unit testing"},{"line_number":12,"context_line":"Including alembic migration"},{"line_number":13,"context_line":"Including usage of new common module for TLS containers retrieval and validation"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I4c5c494370479176af6f80623ae3a0c6af30ef14"},{"line_number":16,"context_line":"Implements: blueprint lbaas-ssl-termination"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"da86d52c_569b0772","line":14,"in_reply_to":"da86d52c_e3561729","updated":"2015-02-08 15:27:34.000000000","message":"What should be added here?","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"}],"neutron_lbaas/db/loadbalancer/loadbalancer_dbv2.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5890c0812fe59e1e14f48f8b6746d5a286e27659","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        if pool_id:"},{"line_number":251,"context_line":"            pool \u003d self._get_resource(context, models.PoolV2, pool_id)"},{"line_number":252,"context_line":"            if ((pool.protocol, listener.get(\u0027protocol\u0027))"},{"line_number":253,"context_line":"                not in lb_const.LISTENER_POOL_COMPATIBLE_PROTOCOLS):"},{"line_number":254,"context_line":"                raise loadbalancerv2.ListenerPoolProtocolMismatch("},{"line_number":255,"context_line":"                    listener_proto\u003dlistener[\u0027protocol\u0027],"},{"line_number":256,"context_line":"                    pool_proto\u003dpool.protocol)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_8792e7f3","line":253,"updated":"2015-02-06 05:46:04.000000000","message":"this validation should be moved to the plugin layer, in the create_pool method.","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"6731eea052576f36d0d7ce98fb57db299801612c","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        if pool_id:"},{"line_number":251,"context_line":"            pool \u003d self._get_resource(context, models.PoolV2, pool_id)"},{"line_number":252,"context_line":"            if ((pool.protocol, listener.get(\u0027protocol\u0027))"},{"line_number":253,"context_line":"                not in lb_const.LISTENER_POOL_COMPATIBLE_PROTOCOLS):"},{"line_number":254,"context_line":"                raise loadbalancerv2.ListenerPoolProtocolMismatch("},{"line_number":255,"context_line":"                    listener_proto\u003dlistener[\u0027protocol\u0027],"},{"line_number":256,"context_line":"                    pool_proto\u003dpool.protocol)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_d6ce17b4","line":253,"in_reply_to":"da86d52c_8792e7f3","updated":"2015-02-08 15:27:34.000000000","message":"This change does not add this validation but modifies it, hence I think it\u0027s not right to do the move as part of this change set. But I can do it, I just do not understand why create_pool? is pool created with listener always?","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"c64c1e758c82aef1bf3a5d063ada2223d32b72a3","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        if pool_id:"},{"line_number":251,"context_line":"            pool \u003d self._get_resource(context, models.PoolV2, pool_id)"},{"line_number":252,"context_line":"            if ((pool.protocol, listener.get(\u0027protocol\u0027))"},{"line_number":253,"context_line":"                not in lb_const.LISTENER_POOL_COMPATIBLE_PROTOCOLS):"},{"line_number":254,"context_line":"                raise loadbalancerv2.ListenerPoolProtocolMismatch("},{"line_number":255,"context_line":"                    listener_proto\u003dlistener[\u0027protocol\u0027],"},{"line_number":256,"context_line":"                    pool_proto\u003dpool.protocol)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_f7f035cb","line":253,"in_reply_to":"da86d52c_d6ce17b4","updated":"2015-02-10 06:07:05.000000000","message":"you\u0027re right, no need to move it in this review.  keep it as is.  No a user can\u0027t create a pool with a listener, but a pool now needs a listener to be created, so if it is assumed a listener exists, then only on create pool does the protocol of the pool need to be checked for compatibility with the listener protocol.  Also, right now a listener\u0027s pool cannot be changed once it is set.  This will most likely change in the future but all of these restrictions were put into place to make this simple at first, and then iterate the changes over time.  Instead of trying to get it all working from the beginning.","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5890c0812fe59e1e14f48f8b6746d5a286e27659","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            protocol \u003d listener.get(\u0027protocol\u0027)"},{"line_number":301,"context_line":"            if protocol:"},{"line_number":302,"context_line":"                raise loadbalancerv2.AttributeIDImmutable("},{"line_number":303,"context_line":"                    attribute\u003d\u0027protocol\u0027)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"            # Do not allow changing loadbalancer ids"},{"line_number":306,"context_line":"            if listener_db.loadbalancer_id and listener.get(\u0027loadbalancer_id\u0027):"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_c734dffd","line":303,"updated":"2015-02-06 05:46:04.000000000","message":"this isn\u0027t allowed by the extensions so this isn\u0027t needed anymore.","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"6731eea052576f36d0d7ce98fb57db299801612c","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            protocol \u003d listener.get(\u0027protocol\u0027)"},{"line_number":301,"context_line":"            if protocol:"},{"line_number":302,"context_line":"                raise loadbalancerv2.AttributeIDImmutable("},{"line_number":303,"context_line":"                    attribute\u003d\u0027protocol\u0027)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"            # Do not allow changing loadbalancer ids"},{"line_number":306,"context_line":"            if listener_db.loadbalancer_id and listener.get(\u0027loadbalancer_id\u0027):"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_3654d3c9","line":303,"in_reply_to":"da86d52c_c734dffd","updated":"2015-02-08 15:27:34.000000000","message":"Done","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5890c0812fe59e1e14f48f8b6746d5a286e27659","unresolved":false,"context_lines":[{"line_number":305,"context_line":"            # Do not allow changing loadbalancer ids"},{"line_number":306,"context_line":"            if listener_db.loadbalancer_id and listener.get(\u0027loadbalancer_id\u0027):"},{"line_number":307,"context_line":"                raise loadbalancerv2.AttributeIDImmutable("},{"line_number":308,"context_line":"                    attribute\u003d\u0027loadbalancer_id\u0027)"},{"line_number":309,"context_line":"            # Do not allow changing pool ids"},{"line_number":310,"context_line":"            if listener_db.default_pool_id and listener.get(\u0027default_pool_id\u0027):"},{"line_number":311,"context_line":"                raise loadbalancerv2.AttributeIDImmutable("}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_0209852b","line":308,"updated":"2015-02-06 05:46:04.000000000","message":"this isn\u0027t allowed by the extension anymore, so it is unneeded.","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"6731eea052576f36d0d7ce98fb57db299801612c","unresolved":false,"context_lines":[{"line_number":305,"context_line":"            # Do not allow changing loadbalancer ids"},{"line_number":306,"context_line":"            if listener_db.loadbalancer_id and listener.get(\u0027loadbalancer_id\u0027):"},{"line_number":307,"context_line":"                raise loadbalancerv2.AttributeIDImmutable("},{"line_number":308,"context_line":"                    attribute\u003d\u0027loadbalancer_id\u0027)"},{"line_number":309,"context_line":"            # Do not allow changing pool ids"},{"line_number":310,"context_line":"            if listener_db.default_pool_id and listener.get(\u0027default_pool_id\u0027):"},{"line_number":311,"context_line":"                raise loadbalancerv2.AttributeIDImmutable("}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_565147d7","line":308,"in_reply_to":"da86d52c_0209852b","updated":"2015-02-08 15:27:34.000000000","message":"Done","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5890c0812fe59e1e14f48f8b6746d5a286e27659","unresolved":false,"context_lines":[{"line_number":309,"context_line":"            # Do not allow changing pool ids"},{"line_number":310,"context_line":"            if listener_db.default_pool_id and listener.get(\u0027default_pool_id\u0027):"},{"line_number":311,"context_line":"                raise loadbalancerv2.AttributeIDImmutable("},{"line_number":312,"context_line":"                    attribute\u003d\u0027default_pool_id\u0027)"},{"line_number":313,"context_line":"            if not listener.get(\u0027protocol\u0027):"},{"line_number":314,"context_line":"                # User did not intend to change the protocol so we will just"},{"line_number":315,"context_line":"                # use the same protocol already stored so the validation knows"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_220cc93a","line":312,"updated":"2015-02-06 05:46:04.000000000","message":"this isn\u0027t allowed by the extension anymore, so it is unneeded","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"6731eea052576f36d0d7ce98fb57db299801612c","unresolved":false,"context_lines":[{"line_number":309,"context_line":"            # Do not allow changing pool ids"},{"line_number":310,"context_line":"            if listener_db.default_pool_id and listener.get(\u0027default_pool_id\u0027):"},{"line_number":311,"context_line":"                raise loadbalancerv2.AttributeIDImmutable("},{"line_number":312,"context_line":"                    attribute\u003d\u0027default_pool_id\u0027)"},{"line_number":313,"context_line":"            if not listener.get(\u0027protocol\u0027):"},{"line_number":314,"context_line":"                # User did not intend to change the protocol so we will just"},{"line_number":315,"context_line":"                # use the same protocol already stored so the validation knows"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_765d6bec","line":312,"in_reply_to":"da86d52c_220cc93a","updated":"2015-02-08 15:27:34.000000000","message":"Done","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5890c0812fe59e1e14f48f8b6746d5a286e27659","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                # User did not intend to change the protocol so we will just"},{"line_number":315,"context_line":"                # use the same protocol already stored so the validation knows"},{"line_number":316,"context_line":"                listener[\u0027protocol\u0027] \u003d listener_db.protocol"},{"line_number":317,"context_line":"            self._validate_listener_data(context, listener)"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"            if tls_containers_changed:"},{"line_number":320,"context_line":"                listener_db.sni_containers \u003d []"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_2223e9a7","line":317,"updated":"2015-02-06 05:46:04.000000000","message":"this isn\u0027t the concern of this review, but just a note that this method is probably unneeded now with the workflow changes.","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"}],"neutron_lbaas/db/migration/alembic_migrations/versions/lbaasv2_tls.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5890c0812fe59e1e14f48f8b6746d5a286e27659","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"old_listener_protocols \u003d sa.Enum(\"HTTP\", \"HTTPS\", \"TCP\","},{"line_number":35,"context_line":"                             name\u003d\"listener_protocolsv2\")"},{"line_number":36,"context_line":"new_listener_protocols \u003d sa.Enum(\"HTTP\", \"HTTPS\", \"TCP\", \"TERMINATED_HTTPS\","},{"line_number":37,"context_line":"                             name\u003d\"listener_protocolsv2\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_20e5a008","line":36,"updated":"2015-02-06 05:46:04.000000000","message":"we just decided to remove TERMINATED_HTTPS.  TCP will now be used as HTTPS pass-through and if HTTPS is chosen then it must have a default_tls_container_id.","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"ebb09253e1205161a089fbed8a4c7482eab4654d","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"old_listener_protocols \u003d sa.Enum(\"HTTP\", \"HTTPS\", \"TCP\","},{"line_number":35,"context_line":"                             name\u003d\"listener_protocolsv2\")"},{"line_number":36,"context_line":"new_listener_protocols \u003d sa.Enum(\"HTTP\", \"HTTPS\", \"TCP\", \"TERMINATED_HTTPS\","},{"line_number":37,"context_line":"                             name\u003d\"listener_protocolsv2\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_5ec97aaa","line":36,"in_reply_to":"da86d52c_20e5a008","updated":"2015-02-06 15:50:11.000000000","message":"I think the TERM -\u003e HTTPS change should be a follow-up.","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"6731eea052576f36d0d7ce98fb57db299801612c","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"old_listener_protocols \u003d sa.Enum(\"HTTP\", \"HTTPS\", \"TCP\","},{"line_number":35,"context_line":"                             name\u003d\"listener_protocolsv2\")"},{"line_number":36,"context_line":"new_listener_protocols \u003d sa.Enum(\"HTTP\", \"HTTPS\", \"TCP\", \"TERMINATED_HTTPS\","},{"line_number":37,"context_line":"                             name\u003d\"listener_protocolsv2\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_56ff87aa","line":36,"in_reply_to":"da86d52c_20e5a008","updated":"2015-02-08 15:27:34.000000000","message":"We agreed to add TERMINATED_HTTPS while reviewing RST document.","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"c64c1e758c82aef1bf3a5d063ada2223d32b72a3","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"old_listener_protocols \u003d sa.Enum(\"HTTP\", \"HTTPS\", \"TCP\","},{"line_number":35,"context_line":"                             name\u003d\"listener_protocolsv2\")"},{"line_number":36,"context_line":"new_listener_protocols \u003d sa.Enum(\"HTTP\", \"HTTPS\", \"TCP\", \"TERMINATED_HTTPS\","},{"line_number":37,"context_line":"                             name\u003d\"listener_protocolsv2\")"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_979c595f","line":36,"in_reply_to":"da86d52c_56ff87aa","updated":"2015-02-10 06:07:05.000000000","message":"I\u0027m fine with leaving it for now until another review changes it.","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"}],"neutron_lbaas/extensions/loadbalancerv2.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"106ea424a443e4ba750d46fed7f45010609330a3","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from neutron.services import service_base"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# TODO(dougw) - stop hard-coding these constants when this extension moves"},{"line_number":32,"context_line":"# to the neutron-lbaas repo"},{"line_number":33,"context_line":"#from neutron.services.loadbalancer import constants as lb_const"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LB_METHOD_ROUND_ROBIN \u003d \u0027ROUND_ROBIN\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"da86d52c_95a77ea6","line":32,"updated":"2015-02-05 16:34:33.000000000","message":"We should clean up these constants.","commit_id":"5e4f9c6be11bccbb9aa8736a8aa415ff6109812e"}],"neutron_lbaas/services/loadbalancer/constants.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5890c0812fe59e1e14f48f8b6746d5a286e27659","unresolved":false,"context_lines":[{"line_number":23,"context_line":"PROTOCOL_TCP \u003d \u0027TCP\u0027"},{"line_number":24,"context_line":"PROTOCOL_HTTP \u003d \u0027HTTP\u0027"},{"line_number":25,"context_line":"PROTOCOL_HTTPS \u003d \u0027HTTPS\u0027"},{"line_number":26,"context_line":"PROTOCOL_TERMINATED_HTTPS \u003d \u0027TERMINATED_HTTPS\u0027"},{"line_number":27,"context_line":"POOL_SUPPORTED_PROTOCOLS \u003d (PROTOCOL_TCP, PROTOCOL_HTTPS, PROTOCOL_HTTP)"},{"line_number":28,"context_line":"LISTENER_SUPPORTED_PROTOCOLS \u003d (PROTOCOL_TCP, PROTOCOL_HTTPS, PROTOCOL_HTTP,"},{"line_number":29,"context_line":"                                PROTOCOL_TERMINATED_HTTPS)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_5c7c38ec","line":26,"updated":"2015-02-06 05:46:04.000000000","message":"same comment as in the migration.  We decided we\u0027re just going to drop the TERMINATED_HTTPS protocol.  If a user wants to use HTTPS pass-through they then should choose TCP.  If they want to use TLS termination then they should use HTTPS and provide a default_tls_container_id.","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"58d918a1f5ed9249b93d7242e65440f5ae9b34b3","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    (PROTOCOL_TCP, PROTOCOL_TCP),"},{"line_number":33,"context_line":"    (PROTOCOL_HTTP, PROTOCOL_HTTP),"},{"line_number":34,"context_line":"    (PROTOCOL_HTTPS, PROTOCOL_HTTPS),"},{"line_number":35,"context_line":"    (PROTOCOL_HTTP, PROTOCOL_TERMINATED_HTTPS))"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"HEALTH_MONITOR_PING \u003d \u0027PING\u0027"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_82ec5d94","line":35,"updated":"2015-03-17 03:49:49.000000000","message":"Is there a reason we\u0027re not letting them do re-encryption?","commit_id":"0cc103564b6ddf881c76140a2c413fa9488ea9f6"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"953b6f621fe76af7aefa3ff6c64c839694260107","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    (PROTOCOL_TCP, PROTOCOL_TCP),"},{"line_number":33,"context_line":"    (PROTOCOL_HTTP, PROTOCOL_HTTP),"},{"line_number":34,"context_line":"    (PROTOCOL_HTTPS, PROTOCOL_HTTPS),"},{"line_number":35,"context_line":"    (PROTOCOL_HTTP, PROTOCOL_TERMINATED_HTTPS))"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"HEALTH_MONITOR_PING \u003d \u0027PING\u0027"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_b8cfce28","line":35,"in_reply_to":"9a80dd14_82ec5d94","updated":"2015-03-17 07:13:35.000000000","message":"id say put that feature in Liberty, would require time we dont have yet, even if it would be a small amount of time","commit_id":"0cc103564b6ddf881c76140a2c413fa9488ea9f6"},{"author":{"_account_id":11302,"name":"Phillip Toohill","email":"phillip.toohill@rackspace.com","username":"ptoohill1"},"change_message_id":"1d11e84efd5615db0544d3e06d4418f8749a3f6b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    (PROTOCOL_TCP, PROTOCOL_TCP),"},{"line_number":33,"context_line":"    (PROTOCOL_HTTP, PROTOCOL_HTTP),"},{"line_number":34,"context_line":"    (PROTOCOL_HTTPS, PROTOCOL_HTTPS),"},{"line_number":35,"context_line":"    (PROTOCOL_HTTP, PROTOCOL_TERMINATED_HTTPS))"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"HEALTH_MONITOR_PING \u003d \u0027PING\u0027"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_be7f9faa","line":35,"in_reply_to":"9a80dd14_b8cfce28","updated":"2015-03-17 15:13:27.000000000","message":"I thought at some point we had discussed this being in L","commit_id":"0cc103564b6ddf881c76140a2c413fa9488ea9f6"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"24fb83f2ae4aea6471ce4c146b5a45009490e0da","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    (PROTOCOL_TCP, PROTOCOL_TCP),"},{"line_number":33,"context_line":"    (PROTOCOL_HTTP, PROTOCOL_HTTP),"},{"line_number":34,"context_line":"    (PROTOCOL_HTTPS, PROTOCOL_HTTPS),"},{"line_number":35,"context_line":"    (PROTOCOL_HTTP, PROTOCOL_TERMINATED_HTTPS))"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"HEALTH_MONITOR_PING \u003d \u0027PING\u0027"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_526bef1e","line":35,"in_reply_to":"9a80dd14_be7f9faa","updated":"2015-03-17 17:26:57.000000000","message":"I am not a big fan of re-encryption, My philosophical stance is that they should just run a VPN... so I am fine with deferring for now","commit_id":"0cc103564b6ddf881c76140a2c413fa9488ea9f6"}],"neutron_lbaas/services/loadbalancer/data_models.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"419d77f6e23fa9d2b527177a539078d4e50e856b","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        self.position \u003d position"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def attached_to_loadbalancer(self):"},{"line_number":275,"context_line":"        return True"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"class Listener(BaseDataModel):"}],"source_content_type":"text/x-python","patch_set":19,"id":"da86d52c_f5033f3f","line":275,"updated":"2015-02-12 21:51:26.000000000","message":"Shouldn\u0027t there be some logic here somewhere?  Something to evaluate to True, rather than just always returning such?","commit_id":"946bc49eb88464d708fb3da8c880c24d760d1a39"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"e274338c3cd106622dc29a37e721998fd5d1a644","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        self.position \u003d position"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def attached_to_loadbalancer(self):"},{"line_number":275,"context_line":"        return True"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"class Listener(BaseDataModel):"}],"source_content_type":"text/x-python","patch_set":19,"id":"da86d52c_dce0df98","line":275,"in_reply_to":"da86d52c_f5033f3f","updated":"2015-02-15 13:47:36.000000000","message":"Done","commit_id":"946bc49eb88464d708fb3da8c880c24d760d1a39"}],"neutron_lbaas/services/loadbalancer/plugin.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"ebb09253e1205161a089fbed8a4c7482eab4654d","unresolved":false,"context_lines":[{"line_number":600,"context_line":"            try:"},{"line_number":601,"context_line":"                cert_container \u003d CERT_MANAGER_PLUGIN.CertManager.get_cert("},{"line_number":602,"context_line":"                    container_ref, check_only\u003dTrue)"},{"line_number":603,"context_line":"            except Exception as e:"},{"line_number":604,"context_line":"                raise loadbalancerv2.TLSContainerNotFound("},{"line_number":605,"context_line":"                    container_id\u003dcontainer_ref)"},{"line_number":606,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_7ea71e0b","line":603,"updated":"2015-02-06 15:50:11.000000000","message":"you\u0027re not using e","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"6731eea052576f36d0d7ce98fb57db299801612c","unresolved":false,"context_lines":[{"line_number":600,"context_line":"            try:"},{"line_number":601,"context_line":"                cert_container \u003d CERT_MANAGER_PLUGIN.CertManager.get_cert("},{"line_number":602,"context_line":"                    container_ref, check_only\u003dTrue)"},{"line_number":603,"context_line":"            except Exception as e:"},{"line_number":604,"context_line":"                raise loadbalancerv2.TLSContainerNotFound("},{"line_number":605,"context_line":"                    container_id\u003dcontainer_ref)"},{"line_number":606,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_d62a972b","line":603,"in_reply_to":"da86d52c_7ea71e0b","updated":"2015-02-08 15:27:34.000000000","message":"Done","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5890c0812fe59e1e14f48f8b6746d5a286e27659","unresolved":false,"context_lines":[{"line_number":636,"context_line":"            if (listener[\u0027sni_container_ids\u0027] is not None and"},{"line_number":637,"context_line":"                    old_listener[\u0027sni_container_ids\u0027] !\u003d"},{"line_number":638,"context_line":"                    listener[\u0027sni_container_ids\u0027]):"},{"line_number":639,"context_line":"                to_validate.extend(listener[\u0027sni_container_ids\u0027])"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"        if len(to_validate) \u003e 0:"},{"line_number":642,"context_line":"            validate_tls_containers(to_validate)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_ff379ee0","line":639,"updated":"2015-02-06 05:46:04.000000000","message":"does a user have to provide the full list of sni_container_ids everytime they want to add to sni_container_ids?\n\nhow does a user remove an id from sni_container_ids?","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"6731eea052576f36d0d7ce98fb57db299801612c","unresolved":false,"context_lines":[{"line_number":636,"context_line":"            if (listener[\u0027sni_container_ids\u0027] is not None and"},{"line_number":637,"context_line":"                    old_listener[\u0027sni_container_ids\u0027] !\u003d"},{"line_number":638,"context_line":"                    listener[\u0027sni_container_ids\u0027]):"},{"line_number":639,"context_line":"                to_validate.extend(listener[\u0027sni_container_ids\u0027])"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"        if len(to_validate) \u003e 0:"},{"line_number":642,"context_line":"            validate_tls_containers(to_validate)"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_56edc7ee","line":639,"in_reply_to":"da86d52c_ff379ee0","updated":"2015-02-08 15:27:34.000000000","message":"The right code was here before I removed it by mistake. Getting it back but to the update_listener methon","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5890c0812fe59e1e14f48f8b6746d5a286e27659","unresolved":false,"context_lines":[{"line_number":674,"context_line":"        self.db.test_and_set_status(context, models.Listener, id,"},{"line_number":675,"context_line":"                                    constants.PENDING_UPDATE)"},{"line_number":676,"context_line":"        try:"},{"line_number":677,"context_line":"            curr_listener \u003d self._clean_nested_body("},{"line_number":678,"context_line":"                self.db.get_listener(context, id),"},{"line_number":679,"context_line":"                [\u0027loadbalancers\u0027])"},{"line_number":680,"context_line":"            tls_containers_changed \u003d False"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_ff65dee0","line":677,"updated":"2015-02-06 05:46:04.000000000","message":"can\u0027t ou just do old_listener.to_dict() to get the dictionary (i know the _clean_nested_body is and a to_dict() method is confusing, I was in a rush :( )","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"6731eea052576f36d0d7ce98fb57db299801612c","unresolved":false,"context_lines":[{"line_number":674,"context_line":"        self.db.test_and_set_status(context, models.Listener, id,"},{"line_number":675,"context_line":"                                    constants.PENDING_UPDATE)"},{"line_number":676,"context_line":"        try:"},{"line_number":677,"context_line":"            curr_listener \u003d self._clean_nested_body("},{"line_number":678,"context_line":"                self.db.get_listener(context, id),"},{"line_number":679,"context_line":"                [\u0027loadbalancers\u0027])"},{"line_number":680,"context_line":"            tls_containers_changed \u003d False"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_9493b74e","line":677,"in_reply_to":"da86d52c_ff65dee0","updated":"2015-02-08 15:27:34.000000000","message":"Done","commit_id":"30b9ec556d1132eff1addbb1fbbd3f71ae361d3d"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"58d918a1f5ed9249b93d7242e65440f5ae9b34b3","unresolved":false,"context_lines":[{"line_number":553,"context_line":"            try:"},{"line_number":554,"context_line":"                cert_container \u003d CERT_MANAGER_PLUGIN.CertManager.get_cert("},{"line_number":555,"context_line":"                    container_ref, check_only\u003dTrue)"},{"line_number":556,"context_line":"            except Exception:"},{"line_number":557,"context_line":"                raise loadbalancerv2.TLSContainerNotFound("},{"line_number":558,"context_line":"                    container_id\u003dcontainer_ref)"},{"line_number":559,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_a298811c","line":556,"updated":"2015-03-17 03:49:49.000000000","message":"Err, all exceptions mean container not found?","commit_id":"0cc103564b6ddf881c76140a2c413fa9488ea9f6"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"953b6f621fe76af7aefa3ff6c64c839694260107","unresolved":false,"context_lines":[{"line_number":553,"context_line":"            try:"},{"line_number":554,"context_line":"                cert_container \u003d CERT_MANAGER_PLUGIN.CertManager.get_cert("},{"line_number":555,"context_line":"                    container_ref, check_only\u003dTrue)"},{"line_number":556,"context_line":"            except Exception:"},{"line_number":557,"context_line":"                raise loadbalancerv2.TLSContainerNotFound("},{"line_number":558,"context_line":"                    container_id\u003dcontainer_ref)"},{"line_number":559,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_518eadd1","line":556,"in_reply_to":"9a80dd14_a298811c","updated":"2015-03-17 07:13:35.000000000","message":"in this case I think this works for now, we can definitley get more precise later but, in barbican\u0027s case, if the there is a problem retrieving a cert then saying its NotFound isn\u0027t terrible if any error happens.\n\nLooking at the barbican client code, it raises a LookupError if a ref can\u0027t be found so we can catch that, but we should still catch the generic exception to give the user some idea that the issue is with the tls container retrieval.\n\nOf course now, looking at our certmanager code, the exceptions being thrown aren\u0027t even consistent through the different implementations of certmanager, so there\u0027s a big problem we didn\u0027t catch when that code got added.","commit_id":"0cc103564b6ddf881c76140a2c413fa9488ea9f6"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"58d918a1f5ed9249b93d7242e65440f5ae9b34b3","unresolved":false,"context_lines":[{"line_number":564,"context_line":"                    private_key_passphrase\u003d("},{"line_number":565,"context_line":"                        cert_container.get_private_key_passphrase()),"},{"line_number":566,"context_line":"                    intermediates\u003dcert_container.get_intermediates())"},{"line_number":567,"context_line":"            except Exception as e:"},{"line_number":568,"context_line":"                raise loadbalancerv2.TLSContainerInvalid("},{"line_number":569,"context_line":"                    container_id\u003dcontainer_ref, reason\u003dstr(e))"},{"line_number":570,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_c29d750c","line":567,"updated":"2015-03-17 03:49:49.000000000","message":"Similar, this is too broad.","commit_id":"0cc103564b6ddf881c76140a2c413fa9488ea9f6"},{"author":{"_account_id":11302,"name":"Phillip Toohill","email":"phillip.toohill@rackspace.com","username":"ptoohill1"},"change_message_id":"1d11e84efd5615db0544d3e06d4418f8749a3f6b","unresolved":false,"context_lines":[{"line_number":564,"context_line":"                    private_key_passphrase\u003d("},{"line_number":565,"context_line":"                        cert_container.get_private_key_passphrase()),"},{"line_number":566,"context_line":"                    intermediates\u003dcert_container.get_intermediates())"},{"line_number":567,"context_line":"            except Exception as e:"},{"line_number":568,"context_line":"                raise loadbalancerv2.TLSContainerInvalid("},{"line_number":569,"context_line":"                    container_id\u003dcontainer_ref, reason\u003dstr(e))"},{"line_number":570,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_0903170e","line":567,"in_reply_to":"9a80dd14_6c72f8b1","updated":"2015-03-17 15:13:27.000000000","message":"Another thing for both of these comments is that if we want to raise different exceptions were going to need to add more custom exceptions for the api to respond with. Im ok with doing that, but for now i think this is \u0027generic\u0027 enough to get the error across until we can make this better.","commit_id":"0cc103564b6ddf881c76140a2c413fa9488ea9f6"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"953b6f621fe76af7aefa3ff6c64c839694260107","unresolved":false,"context_lines":[{"line_number":564,"context_line":"                    private_key_passphrase\u003d("},{"line_number":565,"context_line":"                        cert_container.get_private_key_passphrase()),"},{"line_number":566,"context_line":"                    intermediates\u003dcert_container.get_intermediates())"},{"line_number":567,"context_line":"            except Exception as e:"},{"line_number":568,"context_line":"                raise loadbalancerv2.TLSContainerInvalid("},{"line_number":569,"context_line":"                    container_id\u003dcontainer_ref, reason\u003dstr(e))"},{"line_number":570,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_6c72f8b1","line":567,"in_reply_to":"9a80dd14_c29d750c","updated":"2015-03-17 07:13:35.000000000","message":"Now this can be more precise and catch the MisMatchedKey exception and raise the TLSContainerInvalid exception.  However, I don\u0027t see much value right now in doing that, as that is the only possible exception that can be thrown by cert_parser.validate_cert.  I know its the right thing to do but given our current time situation, i don\u0027t think its major.","commit_id":"0cc103564b6ddf881c76140a2c413fa9488ea9f6"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"58d918a1f5ed9249b93d7242e65440f5ae9b34b3","unresolved":false,"context_lines":[{"line_number":660,"context_line":"                models.Listener,"},{"line_number":661,"context_line":"                curr_listener_db.id,"},{"line_number":662,"context_line":"                provisioning_status\u003dconstants.ACTIVE"},{"line_number":663,"context_line":"            )"},{"line_number":664,"context_line":"            raise exc"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"        driver \u003d self._get_driver_for_loadbalancer("}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_42a8a520","line":663,"updated":"2015-03-17 03:49:49.000000000","message":"I\u0027m not a big fan of how we put all the TLS code inline into the plugin methods.  Seems like those should be in a helper class or something to keep things separate.  But that\u0027s just a style quibble this late in the game.","commit_id":"0cc103564b6ddf881c76140a2c413fa9488ea9f6"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"953b6f621fe76af7aefa3ff6c64c839694260107","unresolved":false,"context_lines":[{"line_number":660,"context_line":"                models.Listener,"},{"line_number":661,"context_line":"                curr_listener_db.id,"},{"line_number":662,"context_line":"                provisioning_status\u003dconstants.ACTIVE"},{"line_number":663,"context_line":"            )"},{"line_number":664,"context_line":"            raise exc"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"        driver \u003d self._get_driver_for_loadbalancer("}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_d1861ddb","line":663,"in_reply_to":"9a80dd14_42a8a520","updated":"2015-03-17 07:13:35.000000000","message":"well it is using a helper method. a helper class wouldn\u0027t be bad. Most of the rest of the tls specific code here is mainly just minor validation.  I\u0027m a fan of having a validation class with specific methods to validate each one of these methods, but that might be a bit too much.  start simple of course.","commit_id":"0cc103564b6ddf881c76140a2c413fa9488ea9f6"}]}
