)]}'
{"Empty file":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"c57da9f0d12439781b96b760cc5aa689338f9947","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"5a890539_287d05e8","side":"PARENT","updated":"2014-11-12 17:01:41.000000000","message":"I\u0027d rather see all of the above logic in a \u0027delete_all\u0027 method or something similar in the container class.","commit_id":"1c873900b2c051ccb3a13aa95f25aa3a74a0bea5"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"c57da9f0d12439781b96b760cc5aa689338f9947","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"5a890539_488411d4","side":"PARENT","updated":"2014-11-12 17:01:41.000000000","message":"LBaaS or Octavia?","commit_id":"1c873900b2c051ccb3a13aa95f25aa3a74a0bea5"}],"octavia/certificates/common/barbican.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5d014cfb16da98a9896b3e5df86b41507d2003a6","unresolved":false,"context_lines":[{"line_number":31,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"CONF \u003d cfg.CONF"},{"line_number":34,"context_line":"CONF.import_group(\u0027keystone_authtoken\u0027, \u0027octavia.common.config\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class BarbicanCert(cert.Cert):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_80b9a430","line":34,"updated":"2014-11-11 05:10:42.000000000","message":"ah nice didn\u0027t know this was there.  removes the need for the # no qa i was talking to you about earlier.","commit_id":"50bfb8cb20fc722582c040aabd4f1c0a82621015"}],"octavia/certificates/generator/barbican.py":[{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"5651c580c198cb45f6d7d5b67eac142698b8258d","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        :return: Signed certificate"},{"line_number":37,"context_line":"        :raises Exception: if certificate signing fails"},{"line_number":38,"context_line":"        \"\"\""},{"line_number":39,"context_line":"        raise NotImplementedError(\"Barbican does not yet support signing.\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_18759aca","line":39,"updated":"2014-11-24 21:54:40.000000000","message":"I\u0027m not sure you\u0027re supposed to speak to intentions of future releases in log lines nor error messages.  Not 100% about that myself, but I was told something similar in a review I had.","commit_id":"0f7e269821dbf18adce3e8a41bb266bf2ac32334"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"afeb2be5a381cda1f173e4130c808390bcd0c7f3","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        :return: Signed certificate"},{"line_number":37,"context_line":"        :raises Exception: if certificate signing fails"},{"line_number":38,"context_line":"        \"\"\""},{"line_number":39,"context_line":"        raise NotImplementedError(\"Barbican does not yet support signing.\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_bb0c80ed","line":39,"in_reply_to":"5a890539_18759aca","updated":"2014-11-24 22:02:06.000000000","message":"Signing is in their release plan for Kilo -- I could remove the word \"yet\", but I think this is fine.","commit_id":"0f7e269821dbf18adce3e8a41bb266bf2ac32334"}],"octavia/certificates/manager/barbican.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5d014cfb16da98a9896b3e5df86b41507d2003a6","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            return certificate_container.container_ref"},{"line_number":78,"context_line":"        except Exception as e:"},{"line_number":79,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":80,"context_line":"                LOG.error(gettextutils._LE(\"Error storing cert: %s\"), e)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @staticmethod"},{"line_number":83,"context_line":"    def get_cert(cert_ref, service_name\u003d\u0027LBaaS\u0027, resource_ref\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_c05e4ce9","line":80,"updated":"2014-11-11 05:10:42.000000000","message":"I have a feeling that one day we are going to run into the issue where the first operations in the try block succeed but then the next one fails.  basically we\u0027d need some kind of rollback. not something to stop this from getting merged right now though.","commit_id":"50bfb8cb20fc722582c040aabd4f1c0a82621015"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"4c238166cd92bc54b922ff308e2b1b9c68b93cd9","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            return certificate_container.container_ref"},{"line_number":78,"context_line":"        except Exception as e:"},{"line_number":79,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":80,"context_line":"                LOG.error(gettextutils._LE(\"Error storing cert: %s\"), e)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @staticmethod"},{"line_number":83,"context_line":"    def get_cert(cert_ref, service_name\u003d\u0027LBaaS\u0027, resource_ref\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_141888d2","line":80,"in_reply_to":"5a890539_c05e4ce9","updated":"2014-11-11 18:04:57.000000000","message":"I can give that a shot now...","commit_id":"50bfb8cb20fc722582c040aabd4f1c0a82621015"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"3e056c7a9a1ba2b4d3514b727ad4a62e6a000b66","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                ).format(str(e)))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @staticmethod"},{"line_number":112,"context_line":"    def get_cert(cert_ref, service_name\u003d\u0027LBaaS\u0027, resource_ref\u003dNone, **kwargs):"},{"line_number":113,"context_line":"        \"\"\"Retrieves the specified cert and registers as a consumer."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        :param cert_ref: the UUID of the cert to retrieve"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_fc62e2d6","line":112,"updated":"2014-11-12 17:14:41.000000000","message":"Shouldn\u0027t we use Octavia as the service name here (and below) ?","commit_id":"f85d5d62d6c228fe2a59ab97bf76fde9be5f7481"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ff25a7b1cfb250ce1712d606a599ebf0d40a589a","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                ).format(str(e)))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @staticmethod"},{"line_number":112,"context_line":"    def get_cert(cert_ref, service_name\u003d\u0027LBaaS\u0027, resource_ref\u003dNone, **kwargs):"},{"line_number":113,"context_line":"        \"\"\"Retrieves the specified cert and registers as a consumer."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        :param cert_ref: the UUID of the cert to retrieve"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_26bb71e6","line":112,"in_reply_to":"5a890539_fc62e2d6","updated":"2014-11-12 21:26:11.000000000","message":"I suppose we could.","commit_id":"f85d5d62d6c228fe2a59ab97bf76fde9be5f7481"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"3e056c7a9a1ba2b4d3514b727ad4a62e6a000b66","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            if certificate_container.private_key_passphrase:"},{"line_number":187,"context_line":"                certificate_container.private_key_passphrase.delete()"},{"line_number":188,"context_line":"            certificate_container.private_key.delete()"},{"line_number":189,"context_line":"            certificate_container.delete()"},{"line_number":190,"context_line":"        except Exception as e:"},{"line_number":191,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":192,"context_line":"                LOG.error(gettextutils._LE("}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_7ca6f211","line":189,"updated":"2014-11-12 17:14:41.000000000","message":"I would prefer to see everything from line 183-189 put into a delete_all() method in the container class.","commit_id":"f85d5d62d6c228fe2a59ab97bf76fde9be5f7481"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ff25a7b1cfb250ce1712d606a599ebf0d40a589a","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            if certificate_container.private_key_passphrase:"},{"line_number":187,"context_line":"                certificate_container.private_key_passphrase.delete()"},{"line_number":188,"context_line":"            certificate_container.private_key.delete()"},{"line_number":189,"context_line":"            certificate_container.delete()"},{"line_number":190,"context_line":"        except Exception as e:"},{"line_number":191,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":192,"context_line":"                LOG.error(gettextutils._LE("}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_66de5941","line":189,"in_reply_to":"5a890539_7ca6f211","updated":"2014-11-12 21:26:11.000000000","message":"In the python-barbicanclient Container class? That\u0027s a little bit outside of our scope... Though I suppose since I\u0027m apparently the new maintainer of that client code, I could possibly do it. :P","commit_id":"f85d5d62d6c228fe2a59ab97bf76fde9be5f7481"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"bc368dbc8817b201c023f5e5f8bb36b6e63fd1c3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        :param certificate: PEM encoded TLS certificate"},{"line_number":42,"context_line":"        :param private_key: private key for the supplied certificate"},{"line_number":43,"context_line":"        :param intermediates: ordered and concatenated intermediate certs"},{"line_number":44,"context_line":"        :param private_key_passphrase: optional passphrase for the supplied key"},{"line_number":45,"context_line":"        :param expiration: the expiration time of the cert in ISO 8601 format"},{"line_number":46,"context_line":"        :param name: a friendly name for the cert"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_5e25f3ac","line":44,"updated":"2014-11-19 00:58:47.000000000","message":"Why don\u0027t we just strip the private key passphrase before storing? It\u0027s going to be stripped on the amphorae in any case (otherwise we can\u0027t do automated service starts and restarts without retrieving the passphrase each time), so why not just decrypt the key once it\u0027s handed to us?","commit_id":"796522f0981b8a19a2f98cbc0d667c78cae16671"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"b6317c59228b975d37525753a719602fa576f51e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        :param certificate: PEM encoded TLS certificate"},{"line_number":42,"context_line":"        :param private_key: private key for the supplied certificate"},{"line_number":43,"context_line":"        :param intermediates: ordered and concatenated intermediate certs"},{"line_number":44,"context_line":"        :param private_key_passphrase: optional passphrase for the supplied key"},{"line_number":45,"context_line":"        :param expiration: the expiration time of the cert in ISO 8601 format"},{"line_number":46,"context_line":"        :param name: a friendly name for the cert"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_c8bd8504","line":44,"in_reply_to":"5a890539_5e25f3ac","updated":"2014-11-19 20:21:24.000000000","message":"Possibly, but in this case, we can choose to do that elsewhere in the code and just pass None for the passphrase if we want. This is just fully exposing the interface. It doesn\u0027t mean you *must* do it this way.","commit_id":"796522f0981b8a19a2f98cbc0d667c78cae16671"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"bc368dbc8817b201c023f5e5f8bb36b6e63fd1c3","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    @staticmethod"},{"line_number":181,"context_line":"    def _actually_delete_cert(cert_ref):"},{"line_number":182,"context_line":"        \"\"\"Deletes the specified cert. Very dangerous. Do not recommend."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        :param cert_ref: the UUID of the cert to delete"},{"line_number":185,"context_line":"        :raises Exception: if certificate deletion fails"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_9e567b05","line":182,"updated":"2014-11-19 00:58:47.000000000","message":"Totally not recommended, but apparently we\u0027re going to need this sometimes?","commit_id":"796522f0981b8a19a2f98cbc0d667c78cae16671"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"b6317c59228b975d37525753a719602fa576f51e","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    @staticmethod"},{"line_number":181,"context_line":"    def _actually_delete_cert(cert_ref):"},{"line_number":182,"context_line":"        \"\"\"Deletes the specified cert. Very dangerous. Do not recommend."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        :param cert_ref: the UUID of the cert to delete"},{"line_number":185,"context_line":"        :raises Exception: if certificate deletion fails"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_68f811e6","line":182,"in_reply_to":"5a890539_9e567b05","updated":"2014-11-19 20:21:24.000000000","message":"Yeah, this could be necessary for Certificates we store for internal use -- we want to ACTUALLY delete them when we\u0027re done, not just de-register. Also, there is a possibility that we would store certs on behalf of the user depending on the way Octavia is deployed, so in that case we are the true owner and would delete them for real when we\u0027re done with them.","commit_id":"796522f0981b8a19a2f98cbc0d667c78cae16671"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"5651c580c198cb45f6d7d5b67eac142698b8258d","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        connection \u003d barbican_common.BarbicanKeystoneAuth.get_barbican_client()"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        LOG.info(gettextutils._LI("},{"line_number":190,"context_line":"            \"Recursively deleting certificate container {0} from Barbican.\""},{"line_number":191,"context_line":"        ).format(cert_ref))"},{"line_number":192,"context_line":"        try:"},{"line_number":193,"context_line":"            certificate_container \u003d connection.containers.get(cert_ref)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_fb960893","line":190,"updated":"2014-11-24 21:54:40.000000000","message":"This method doesn\u0027t look like recursion to me, am I missing something?","commit_id":"0f7e269821dbf18adce3e8a41bb266bf2ac32334"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"afeb2be5a381cda1f173e4130c808390bcd0c7f3","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        connection \u003d barbican_common.BarbicanKeystoneAuth.get_barbican_client()"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        LOG.info(gettextutils._LI("},{"line_number":190,"context_line":"            \"Recursively deleting certificate container {0} from Barbican.\""},{"line_number":191,"context_line":"        ).format(cert_ref))"},{"line_number":192,"context_line":"        try:"},{"line_number":193,"context_line":"            certificate_container \u003d connection.containers.get(cert_ref)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_db84ec0c","line":190,"in_reply_to":"5a890539_fb960893","updated":"2014-11-24 22:02:06.000000000","message":"Yes, see this related CR: https://review.openstack.org/#/c/134578/\n\nSpecifically my first comment:\n\"The keyword \"recursive\" isn\u0027t strictly accurate, but I chose to use it because the meaning/functionality should be immediately and universally understood.\"","commit_id":"0f7e269821dbf18adce3e8a41bb266bf2ac32334"}]}
