)]}'
{"etc/octavia.conf":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"543a0e87fa9e52fd1a0863d381aaa69f183f5695","unresolved":false,"context_lines":[{"line_number":31,"context_line":"# For local certificate signing (development only):"},{"line_number":32,"context_line":"# ca_certificate \u003d /var/lib/octavia/ca_certificate.pem"},{"line_number":33,"context_line":"# ca_private_key \u003d /var/lib/octavia/ca_private.key"},{"line_number":34,"context_line":"# storage_path \u003d /var/lib/octavia/certificates/"}],"source_content_type":"text/plain","patch_set":8,"id":"5a890539_e2afa792","line":34,"updated":"2014-11-12 12:17:12.000000000","message":"Since this is supposedly for dev only, and since ubuntu is the reference platform for openstack, should we point these default paths at the ubuntu /etc/ssl files, so it works out of the box?","commit_id":"7c286cfdcd204d2897acfdee66ae1a5f516cac3f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"5314555e87ea735863f0f1b350557dbaf10ac3a7","unresolved":false,"context_lines":[{"line_number":31,"context_line":"# For local certificate signing (development only):"},{"line_number":32,"context_line":"# ca_certificate \u003d /var/lib/octavia/ca_certificate.pem"},{"line_number":33,"context_line":"# ca_private_key \u003d /var/lib/octavia/ca_private.key"},{"line_number":34,"context_line":"# storage_path \u003d /var/lib/octavia/certificates/"}],"source_content_type":"text/plain","patch_set":8,"id":"5a890539_adfd873d","line":34,"in_reply_to":"5a890539_e2afa792","updated":"2014-11-12 16:41:18.000000000","message":"I don\u0027t have a problem with that, assuming those default snakeoil certs exist on a clean system and are viable for signing. I\u0027ll check it out.","commit_id":"7c286cfdcd204d2897acfdee66ae1a5f516cac3f"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"2da5a2db76063e5bd8ca7ed09ebe0ab2925d69c8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"# admin_user \u003d octavia"},{"line_number":24,"context_line":"# admin_password \u003d password"},{"line_number":25,"context_line":"# admin_project_id \u003d service"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"[certificates]"},{"line_number":28,"context_line":"# cert_generator_class \u003d"},{"line_number":29,"context_line":"# cert_manager_class \u003d"}],"source_content_type":"text/plain","patch_set":9,"id":"5a890539_435b0687","side":"PARENT","line":26,"updated":"2014-11-21 00:08:15.000000000","message":"test test, ignore this comment please","commit_id":"1c873900b2c051ccb3a13aa95f25aa3a74a0bea5"}],"octavia/certificates/common/local.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"543a0e87fa9e52fd1a0863d381aaa69f183f5695","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from octavia.certificates.common import cert as cert"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"TLS_BASE \u003d os.environ.get(\u0027OS_OCTAVIA_TLS_DIR\u0027, \u0027/var/lib/octavia\u0027)"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_c2838b02","line":23,"updated":"2014-11-12 12:17:12.000000000","message":"Isn\u0027t \u0027import cert as cert\u0027 redundant?","commit_id":"7c286cfdcd204d2897acfdee66ae1a5f516cac3f"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"5314555e87ea735863f0f1b350557dbaf10ac3a7","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo.config import cfg"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from octavia.certificates.common import cert as cert"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"TLS_BASE \u003d os.environ.get(\u0027OS_OCTAVIA_TLS_DIR\u0027, \u0027/var/lib/octavia\u0027)"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_2d643748","line":23,"in_reply_to":"5a890539_c2838b02","updated":"2014-11-12 16:41:18.000000000","message":"Erk, yes, I think that\u0027s a relic of the original monolithic single CR where I had to import multiple cert types. Will fix it.","commit_id":"7c286cfdcd204d2897acfdee66ae1a5f516cac3f"}],"octavia/certificates/generator/local.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"57d3b319b47569548b0287dfd62c255881fa9afb","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from OpenSSL import crypto"},{"line_number":17,"context_line":"from oslo.config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from octavia.certificates.generator import cert_gen"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8c0949_87c08a2b","line":16,"updated":"2014-11-06 23:44:28.000000000","message":"I think you need to add pyOpenSSL to the requirements.txt","commit_id":"89b21e9308f188bc3d87e4f8cb7eaeb1d01851e4"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ecdde1205c492cf72b2be3787fab04ff0c39d796","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from OpenSSL import crypto"},{"line_number":17,"context_line":"from oslo.config import cfg"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from octavia.certificates.generator import cert_gen"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8c0949_d216d2a6","line":16,"in_reply_to":"7a8c0949_87c08a2b","updated":"2014-11-07 02:47:11.000000000","message":"Ah, it *is*, but I accidentally left it in the review above this -- so it\u0027s in there by this commit, but it really should be in this review and not that one. I\u0027ll fix it.","commit_id":"89b21e9308f188bc3d87e4f8cb7eaeb1d01851e4"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"7df307f2ef4107fa173cd4167688c48455c7a991","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"certgen_opts \u003d ["},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027ca_certificate\u0027,"},{"line_number":27,"context_line":"               default\u003d\u0027/var/lib/octavia/ca_cert.pem\u0027,"},{"line_number":28,"context_line":"               help\u003d\u0027Absolute path to the CA Certificate for signing.\u0027),"},{"line_number":29,"context_line":"    cfg.StrOpt(\u0027ca_private_key\u0027,"},{"line_number":30,"context_line":"               default\u003d\u0027/var/lib/octavia/ca_private.key\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8c0949_05d81d52","line":27,"updated":"2014-11-06 13:59:15.000000000","message":"I\u0027d suggest setting a global var to the prefix /var/lib/octavia, and overriding it if a certain env variable exists (e.g. OCTAVIA_SSL_DIR or OCTAVIA_STATE_DIR), then reference that prefix in each of these defaults.","commit_id":"89b21e9308f188bc3d87e4f8cb7eaeb1d01851e4"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"1a6685d639a89149d32f63e617a514de7687d125","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"certgen_opts \u003d ["},{"line_number":26,"context_line":"    cfg.StrOpt(\u0027ca_certificate\u0027,"},{"line_number":27,"context_line":"               default\u003d\u0027/var/lib/octavia/ca_cert.pem\u0027,"},{"line_number":28,"context_line":"               help\u003d\u0027Absolute path to the CA Certificate for signing.\u0027),"},{"line_number":29,"context_line":"    cfg.StrOpt(\u0027ca_private_key\u0027,"},{"line_number":30,"context_line":"               default\u003d\u0027/var/lib/octavia/ca_private.key\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8c0949_5b2688cf","line":27,"in_reply_to":"7a8c0949_05d81d52","updated":"2014-11-06 15:09:07.000000000","message":"Ah yes, I\u0027ve seen that done before. I\u0027ll do that for this and some of the similar variables in my other reviews.","commit_id":"89b21e9308f188bc3d87e4f8cb7eaeb1d01851e4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"60ddad828ef213d91d75f957a9bc7eec28b5c2cb","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            new_cert \u003d crypto.X509()"},{"line_number":55,"context_line":"            new_cert.set_issuer(lo_cert.get_subject())"},{"line_number":56,"context_line":"            new_cert.set_subject(lo_req.get_subject())"},{"line_number":57,"context_line":"            new_cert.set_pubkey(lo_req.get_pubkey())"},{"line_number":58,"context_line":"            new_cert.sign(lo_key, CONF.certificates.signing_digest)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"            return crypto.dump_certificate(crypto.FILETYPE_PEM, new_cert)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_1426deb7","line":57,"updated":"2014-11-10 22:37:54.000000000","message":"Shouldn\u0027t we also be able to specify a validity period?  The default of 30 days may not meet all of the use cases/tests","commit_id":"176fa5bb896d4367e0459cb570bac8741b5973bf"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"9e9f08297113b543e93d2cca61399650feb4bcbb","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            new_cert \u003d crypto.X509()"},{"line_number":55,"context_line":"            new_cert.set_issuer(lo_cert.get_subject())"},{"line_number":56,"context_line":"            new_cert.set_subject(lo_req.get_subject())"},{"line_number":57,"context_line":"            new_cert.set_pubkey(lo_req.get_pubkey())"},{"line_number":58,"context_line":"            new_cert.sign(lo_key, CONF.certificates.signing_digest)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"            return crypto.dump_certificate(crypto.FILETYPE_PEM, new_cert)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_746d4c32","line":57,"in_reply_to":"5a890539_1426deb7","updated":"2014-11-11 20:36:14.000000000","message":"Yes, that is valid. I will fix it to allow setting a validity period.","commit_id":"176fa5bb896d4367e0459cb570bac8741b5973bf"}],"octavia/certificates/manager/local.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"57d3b319b47569548b0287dfd62c255881fa9afb","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            with open(filename_intermediates, \u0027r\u0027) as int_file:"},{"line_number":116,"context_line":"                cert_data[\u0027intermediates\u0027] \u003d int_file.read()"},{"line_number":117,"context_line":"        except IOError:"},{"line_number":118,"context_line":"            pass"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        try:"},{"line_number":121,"context_line":"            with open(filename_pkp, \u0027r\u0027) as pass_file:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8c0949_87eecab2","line":118,"updated":"2014-11-06 23:44:28.000000000","message":"a log would be good here, and below.","commit_id":"89b21e9308f188bc3d87e4f8cb7eaeb1d01851e4"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ecdde1205c492cf72b2be3787fab04ff0c39d796","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            with open(filename_intermediates, \u0027r\u0027) as int_file:"},{"line_number":116,"context_line":"                cert_data[\u0027intermediates\u0027] \u003d int_file.read()"},{"line_number":117,"context_line":"        except IOError:"},{"line_number":118,"context_line":"            pass"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        try:"},{"line_number":121,"context_line":"            with open(filename_pkp, \u0027r\u0027) as pass_file:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8c0949_12113aac","line":118,"in_reply_to":"7a8c0949_87eecab2","updated":"2014-11-07 02:47:11.000000000","message":"Yeah I kinda forgot about logging while making this,s I\u0027ll go through and add some meaningful log messages.","commit_id":"89b21e9308f188bc3d87e4f8cb7eaeb1d01851e4"}],"octavia/tests/unit/certificates/generator/test_local.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"60ddad828ef213d91d75f957a9bc7eec28b5c2cb","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        # Set up CSR data"},{"line_number":26,"context_line":"        csr_key \u003d crypto.PKey()"},{"line_number":27,"context_line":"        csr_key.generate_key(crypto.TYPE_RSA, 1024)"},{"line_number":28,"context_line":"        csr \u003d crypto.X509Req()"},{"line_number":29,"context_line":"        csr.set_pubkey(csr_key)"},{"line_number":30,"context_line":"        self.certificate_signing_request \u003d crypto.dump_certificate_request("}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_9431eeee","line":27,"updated":"2014-11-10 22:37:54.000000000","message":"Everyone is using 2048 or larger key sizes now.  Probably should test with the larger size.","commit_id":"176fa5bb896d4367e0459cb570bac8741b5973bf"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"9e9f08297113b543e93d2cca61399650feb4bcbb","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"        # Set up CSR data"},{"line_number":26,"context_line":"        csr_key \u003d crypto.PKey()"},{"line_number":27,"context_line":"        csr_key.generate_key(crypto.TYPE_RSA, 1024)"},{"line_number":28,"context_line":"        csr \u003d crypto.X509Req()"},{"line_number":29,"context_line":"        csr.set_pubkey(csr_key)"},{"line_number":30,"context_line":"        self.certificate_signing_request \u003d crypto.dump_certificate_request("}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_b477b401","line":27,"in_reply_to":"5a890539_9431eeee","updated":"2014-11-11 20:36:14.000000000","message":"Done","commit_id":"176fa5bb896d4367e0459cb570bac8741b5973bf"}],"octavia/tests/unit/certificates/manager/test_local.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"57d3b319b47569548b0287dfd62c255881fa9afb","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            intermediates\u003dself.intermediates,"},{"line_number":40,"context_line":"            private_key\u003dself.private_key,"},{"line_number":41,"context_line":"            private_key_passphrase\u003dself.private_key_passphrase"},{"line_number":42,"context_line":"        )"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        # Check that something came back"},{"line_number":45,"context_line":"        self.assertIsNotNone(cert_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8c0949_07d65ac5","line":42,"updated":"2014-11-06 23:44:28.000000000","message":"this is actually writing to the filesystem right? if so, mock is the answer.","commit_id":"89b21e9308f188bc3d87e4f8cb7eaeb1d01851e4"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ecdde1205c492cf72b2be3787fab04ff0c39d796","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            intermediates\u003dself.intermediates,"},{"line_number":40,"context_line":"            private_key\u003dself.private_key,"},{"line_number":41,"context_line":"            private_key_passphrase\u003dself.private_key_passphrase"},{"line_number":42,"context_line":"        )"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        # Check that something came back"},{"line_number":45,"context_line":"        self.assertIsNotNone(cert_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8c0949_32271614","line":42,"in_reply_to":"7a8c0949_07d65ac5","updated":"2014-11-07 02:47:11.000000000","message":"Yeah, I thought about this, but decided to leave it, even though this is really more of a functional test than a unit test as written. I suppose I can mock it instead of letting it \"just work\".","commit_id":"89b21e9308f188bc3d87e4f8cb7eaeb1d01851e4"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"43ec9da53cbb142a975cbe243a1b1b238de2bf36","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            intermediates\u003dself.intermediates,"},{"line_number":40,"context_line":"            private_key\u003dself.private_key,"},{"line_number":41,"context_line":"            private_key_passphrase\u003dself.private_key_passphrase"},{"line_number":42,"context_line":"        )"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        # Check that something came back"},{"line_number":45,"context_line":"        self.assertIsNotNone(cert_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_800364b7","line":42,"updated":"2014-11-11 05:13:54.000000000","message":"use mock to patch the filesystem write so it doesn\u0027t actually write to the filesystem.","commit_id":"176fa5bb896d4367e0459cb570bac8741b5973bf"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"9e9f08297113b543e93d2cca61399650feb4bcbb","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            intermediates\u003dself.intermediates,"},{"line_number":40,"context_line":"            private_key\u003dself.private_key,"},{"line_number":41,"context_line":"            private_key_passphrase\u003dself.private_key_passphrase"},{"line_number":42,"context_line":"        )"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        # Check that something came back"},{"line_number":45,"context_line":"        self.assertIsNotNone(cert_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_345bc488","line":42,"in_reply_to":"5a890539_800364b7","updated":"2014-11-11 20:36:14.000000000","message":"Will do... next patchset. I promise.","commit_id":"176fa5bb896d4367e0459cb570bac8741b5973bf"}]}
