)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"d182dcc6e101d9ff2570033e09bd91753a3a7230","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"d2781b49_74c8d141","updated":"2023-09-07 16:26:27.000000000","message":"After testing it on my devstack, I still see that using noop drivers fail to retrieve invented certificates, I am missing something here","commit_id":"88b256ff484f7ba5dcfdef7da8d9d9cdef7be37e"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"6b1bbdd977a6b69d961e82bfb79e9f91b5367a57","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ea6ef80b_63167b56","updated":"2023-09-19 16:16:40.000000000","message":"Apart from the typo and the open question about `super()` it looks good to me.","commit_id":"58822d2ab6725af37130afffc72e1d8b8f38b641"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"159ea0c8d32715f0520849ce63901897c3e4e488","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f64863a0_d9d745ce","updated":"2023-09-25 13:19:37.000000000","message":"Thanks for the review, Tom","commit_id":"77edbef1a0a8432e7028564ad9dc4b958003b0a3"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"1fe4660044ce9a54fd38d26c47e86ed007bd2cf5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"889063ef_568671ed","updated":"2023-10-12 17:44:56.000000000","message":"I have a few concerns on this patch and have proposed a different approach.","commit_id":"15c0e4773bdc3ce9761594a77bdde03a793b283f"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"13ffa94df90d39e53f2e934a3e5cc88ef9d3b4c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"edb97d54_462e323a","updated":"2023-10-19 12:15:07.000000000","message":"Thanks for the reviews! It seems like it passes the current check pipeline, so let me make sure https://review.opendev.org/c/openstack/octavia-tempest-plugin/+/893066 passes again with its \"Depends On\" label, on this patch.","commit_id":"5da58b82cc555fab9f2350cf98bc858abee16053"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"7970c6a6bc460703cd27fb5a73df786cd1a62db7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"588354e5_ba394687","updated":"2023-11-01 18:08:59.000000000","message":"LGTM, just a minor comment","commit_id":"ed8c7a1e7e95650b4680630e39a84505dd4ac37f"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"908138d909e4bc2e898d9a89e812a1ebf3557c9c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"d85e0585_71369658","updated":"2023-11-02 10:59:16.000000000","message":"Thanks for the reviews, I will fix all those nits in another patch-set","commit_id":"ed8c7a1e7e95650b4680630e39a84505dd4ac37f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"653d27dd27c7517c54f2fb36353b347cb9c1bc1c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"fc6a34f3_21244c28","updated":"2023-11-03 18:13:00.000000000","message":"LGTM","commit_id":"7310986de9bf68ed86de90de0501a1bc46945526"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"5e7524aff10e2ad86a74644dfd370a0b1d4e3ba2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"f034810b_56d9dad0","updated":"2023-11-06 09:52:58.000000000","message":"Thanks.","commit_id":"7310986de9bf68ed86de90de0501a1bc46945526"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"c7b66df25eec693e9e0424bf9ffe4930e447e672","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"b675647c_589ca862","updated":"2023-11-06 11:36:10.000000000","message":"recheck timeout in resource setup of a non-related test","commit_id":"7310986de9bf68ed86de90de0501a1bc46945526"}],"octavia/api/drivers/utils.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"1fe4660044ce9a54fd38d26c47e86ed007bd2cf5","unresolved":true,"context_lines":[{"line_number":259,"context_line":"        ).driver"},{"line_number":260,"context_line":"        try:"},{"line_number":261,"context_line":"            cert_dict \u003d {}"},{"line_number":262,"context_line":"            if not isinstance(cert_manager, noop_cert_mgr.NoopCertManager):"},{"line_number":263,"context_line":"                cert_dict \u003d cert_parser.load_certificates_data(cert_manager,"},{"line_number":264,"context_line":"                                                               listener_obj)"},{"line_number":265,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5e861ac4_48a7ea4e","line":262,"updated":"2023-10-12 17:44:56.000000000","message":"I am uncomfortable with this conditional here. I would expect the no-op certificate manager to \"do the right thing\" such that this conditional is not needed in the actual code.\nAlso, you are defining cert_dict as an empty dictionary here, but the load_certificates_data we always return a dict with two key-value pairs.\nHaving inconsistent definitions can cause problems for future developers.\nAre we sure we can\u0027t remove this change?","commit_id":"15c0e4773bdc3ce9761594a77bdde03a793b283f"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"13ffa94df90d39e53f2e934a3e5cc88ef9d3b4c6","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        ).driver"},{"line_number":260,"context_line":"        try:"},{"line_number":261,"context_line":"            cert_dict \u003d {}"},{"line_number":262,"context_line":"            if not isinstance(cert_manager, noop_cert_mgr.NoopCertManager):"},{"line_number":263,"context_line":"                cert_dict \u003d cert_parser.load_certificates_data(cert_manager,"},{"line_number":264,"context_line":"                                                               listener_obj)"},{"line_number":265,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":4,"id":"0a7da1c8_77a8582f","line":262,"in_reply_to":"5e861ac4_48a7ea4e","updated":"2023-10-19 12:15:07.000000000","message":"Thanks Michael, yes, I kind of broke the abstraction here. I removed the conditional if here and applied a \"fake real\" certificate that should be validated correctly by all certificate validators.","commit_id":"15c0e4773bdc3ce9761594a77bdde03a793b283f"}],"octavia/certificates/manager/noop.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"1fe4660044ce9a54fd38d26c47e86ed007bd2cf5","unresolved":true,"context_lines":[{"line_number":37,"context_line":"    def get_cert(self, context, cert_ref, check_only\u003dTrue, **kwargs):"},{"line_number":38,"context_line":"        LOG.debug(\u0027Driver %s no-op, get_cert with cert_ref %s\u0027,"},{"line_number":39,"context_line":"                  self.__class__.__name__, cert_ref)"},{"line_number":40,"context_line":"        return cert_ref"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def delete_cert(self, context, cert_ref, resource_ref, service_name\u003dNone):"},{"line_number":43,"context_line":"        LOG.debug(\u0027Driver %s no-op, delete_cert with cert_ref %s\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"15630e03_7feb64f4","line":40,"updated":"2023-10-12 17:44:56.000000000","message":"I suspect returning this HREF in place of a cert is going to cause problems.\nMaybe it would be better to generate a real fake certificate in the __init()__ that can be used for get_cert() get_secret(). Something self signed with a validity of a few hours.\nI\u0027m not concerned with returning a different cert than store_cert as I don\u0027t think store_cert is really used in the main code base.\n\nYou can borrow my code in the tempest tests:\nhttps://github.com/openstack/octavia-tempest-plugin/blob/master/octavia_tempest_plugin/common/cert_utils.py#L27","commit_id":"15c0e4773bdc3ce9761594a77bdde03a793b283f"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"13ffa94df90d39e53f2e934a3e5cc88ef9d3b4c6","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def get_cert(self, context, cert_ref, check_only\u003dTrue, **kwargs):"},{"line_number":38,"context_line":"        LOG.debug(\u0027Driver %s no-op, get_cert with cert_ref %s\u0027,"},{"line_number":39,"context_line":"                  self.__class__.__name__, cert_ref)"},{"line_number":40,"context_line":"        return cert_ref"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def delete_cert(self, context, cert_ref, resource_ref, service_name\u003dNone):"},{"line_number":43,"context_line":"        LOG.debug(\u0027Driver %s no-op, delete_cert with cert_ref %s\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"837c5b7e_74ca9cb8","line":40,"in_reply_to":"15630e03_7feb64f4","updated":"2023-10-19 12:15:07.000000000","message":"Thanks Michael, yes, I kind of broke the abstraction here. I removed the conditional if here and applied a \"fake real\" certificate here that should be validated correctly by all certificate validators.","commit_id":"15c0e4773bdc3ce9761594a77bdde03a793b283f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"7970c6a6bc460703cd27fb5a73df786cd1a62db7","unresolved":true,"context_lines":[{"line_number":34,"context_line":"        self._cert_ref \u003d None"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @property"},{"line_number":37,"context_line":"    def cert_ref(self):"},{"line_number":38,"context_line":"        if self._cert_ref is None:"},{"line_number":39,"context_line":"            self._cert_ref \u003d self.store_cert("},{"line_number":40,"context_line":"                None,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fef70ef8_57659e37","line":37,"updated":"2023-11-01 18:08:59.000000000","message":"nit: cert_ref is a little confusing here as this is not just a cert href like is used to access secrets in barbican, but it is a LocalCert object.","commit_id":"ed8c7a1e7e95650b4680630e39a84505dd4ac37f"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"6c4c55cff3be60f5e784207f737153b14652065f","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self._cert_ref \u003d None"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @property"},{"line_number":37,"context_line":"    def cert_ref(self):"},{"line_number":38,"context_line":"        if self._cert_ref is None:"},{"line_number":39,"context_line":"            self._cert_ref \u003d self.store_cert("},{"line_number":40,"context_line":"                None,"}],"source_content_type":"text/x-python","patch_set":8,"id":"b2c6d530_7807b053","line":37,"in_reply_to":"fef70ef8_57659e37","updated":"2023-11-02 11:09:12.000000000","message":"Done","commit_id":"ed8c7a1e7e95650b4680630e39a84505dd4ac37f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"7970c6a6bc460703cd27fb5a73df786cd1a62db7","unresolved":true,"context_lines":[{"line_number":38,"context_line":"        if self._cert_ref is None:"},{"line_number":39,"context_line":"            self._cert_ref \u003d self.store_cert("},{"line_number":40,"context_line":"                None,"},{"line_number":41,"context_line":"                sample_certs.X509_CERT,"},{"line_number":42,"context_line":"                sample_certs.X509_CERT_KEY_ENCRYPTED,"},{"line_number":43,"context_line":"                sample_certs.X509_IMDS,"},{"line_number":44,"context_line":"                private_key_passphrase\u003dsample_certs.X509_CERT_KEY_PASSPHRASE)"}],"source_content_type":"text/x-python","patch_set":8,"id":"60ab5029_033b8808","line":41,"updated":"2023-11-01 18:08:59.000000000","message":"I totally forgot we had these. Excellent.","commit_id":"ed8c7a1e7e95650b4680630e39a84505dd4ac37f"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"e726f8d448d7aebc922f5e936a535cc00ff47bde","unresolved":true,"context_lines":[{"line_number":61,"context_line":"        :raises CertificateStorageException: if certificate storage fails"},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        cert_ref \u003d str(uuid.uuid4())"},{"line_number":64,"context_line":"        if type(certificate) \u003d\u003d bytes:"},{"line_number":65,"context_line":"            certificate \u003d certificate.decode(\u0027utf-8\u0027)"},{"line_number":66,"context_line":"        if type(private_key) \u003d\u003d bytes:"},{"line_number":67,"context_line":"            private_key \u003d private_key.decode(\u0027utf-8\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f710a11_212a92c1","line":64,"range":{"start_line":64,"start_character":11,"end_line":64,"end_character":37},"updated":"2023-10-23 13:35:51.000000000","message":"Nit: `isinstance()` is generally considered better for type comparison because it supports inheritance as well.","commit_id":"ed8c7a1e7e95650b4680630e39a84505dd4ac37f"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"6c4c55cff3be60f5e784207f737153b14652065f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        :raises CertificateStorageException: if certificate storage fails"},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        cert_ref \u003d str(uuid.uuid4())"},{"line_number":64,"context_line":"        if type(certificate) \u003d\u003d bytes:"},{"line_number":65,"context_line":"            certificate \u003d certificate.decode(\u0027utf-8\u0027)"},{"line_number":66,"context_line":"        if type(private_key) \u003d\u003d bytes:"},{"line_number":67,"context_line":"            private_key \u003d private_key.decode(\u0027utf-8\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"79835118_41b3340f","line":64,"range":{"start_line":64,"start_character":11,"end_line":64,"end_character":37},"in_reply_to":"1f710a11_212a92c1","updated":"2023-11-02 11:09:12.000000000","message":"Done","commit_id":"ed8c7a1e7e95650b4680630e39a84505dd4ac37f"}],"octavia/common/tls_utils/cert_parser.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"1fe4660044ce9a54fd38d26c47e86ed007bd2cf5","unresolved":true,"context_lines":[{"line_number":354,"context_line":"    sni_certs \u003d []"},{"line_number":355,"context_line":"    if not context:"},{"line_number":356,"context_line":"        context \u003d oslo_context.RequestContext(project_id\u003dobj.project_id)"},{"line_number":357,"context_line":"    if isinstance(cert_mngr, noop_cert_mgr.NoopCertManager):"},{"line_number":358,"context_line":"        return {"},{"line_number":359,"context_line":"            \u0027tls_cert\u0027: str(uuid.uuid4()),"},{"line_number":360,"context_line":"            \u0027sni_certs\u0027: [str(uuid.uuid4()), str(uuid.uuid4())]"}],"source_content_type":"text/x-python","patch_set":4,"id":"60cf029b_61cc3021","line":357,"updated":"2023-10-12 17:44:56.000000000","message":"Again, I am a bit uncomfortable with this conditional being in the code.\nShouldn\u0027t the no-op cert manager get_cert() call return fake data such that this isn\u0027t needed?","commit_id":"15c0e4773bdc3ce9761594a77bdde03a793b283f"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"13ffa94df90d39e53f2e934a3e5cc88ef9d3b4c6","unresolved":false,"context_lines":[{"line_number":354,"context_line":"    sni_certs \u003d []"},{"line_number":355,"context_line":"    if not context:"},{"line_number":356,"context_line":"        context \u003d oslo_context.RequestContext(project_id\u003dobj.project_id)"},{"line_number":357,"context_line":"    if isinstance(cert_mngr, noop_cert_mgr.NoopCertManager):"},{"line_number":358,"context_line":"        return {"},{"line_number":359,"context_line":"            \u0027tls_cert\u0027: str(uuid.uuid4()),"},{"line_number":360,"context_line":"            \u0027sni_certs\u0027: [str(uuid.uuid4()), str(uuid.uuid4())]"}],"source_content_type":"text/x-python","patch_set":4,"id":"0656e0f2_96b47808","line":357,"in_reply_to":"60cf029b_61cc3021","updated":"2023-10-19 12:15:07.000000000","message":"Thanks Michael, yes, I kind of broke the abstraction here. I removed the conditional if here and applied a \"fake real\" certificate here that should be validated correctly by all certificate validators.","commit_id":"15c0e4773bdc3ce9761594a77bdde03a793b283f"}],"octavia/tests/unit/certificates/manager/test_noop.py":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"6b1bbdd977a6b69d961e82bfb79e9f91b5367a57","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def setUp(self):"},{"line_number":24,"context_line":"        self.manager \u003d noop_cert_mgr.NoopCertManager()"},{"line_number":25,"context_line":"        super().setUp()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def test_store_cert(self):"},{"line_number":28,"context_line":"        certificate \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":2,"id":"27c78a61_67305e6c","line":25,"range":{"start_line":25,"start_character":8,"end_line":25,"end_character":23},"updated":"2023-09-19 16:16:40.000000000","message":"I wonder if there is any particular reason why you do this after setting `self.manager` and not before? If there is no reason, then I\u0027d suggest calling `super()` before.","commit_id":"58822d2ab6725af37130afffc72e1d8b8f38b641"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"159ea0c8d32715f0520849ce63901897c3e4e488","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def setUp(self):"},{"line_number":24,"context_line":"        self.manager \u003d noop_cert_mgr.NoopCertManager()"},{"line_number":25,"context_line":"        super().setUp()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def test_store_cert(self):"},{"line_number":28,"context_line":"        certificate \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":2,"id":"b434eb05_bc865d19","line":25,"range":{"start_line":25,"start_character":8,"end_line":25,"end_character":23},"in_reply_to":"27c78a61_67305e6c","updated":"2023-09-25 13:19:37.000000000","message":"There is no particular reason, it is just that in the rest of the test_X (certificate manager) modules/classes, they usually run that line last. Anyway, I don\u0027t object running it before the instantiation of self.manager... Done","commit_id":"58822d2ab6725af37130afffc72e1d8b8f38b641"}],"releasenotes/notes/add-noop-cert-manager-7018d3933a0ce9c6.yaml":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"6b1bbdd977a6b69d961e82bfb79e9f91b5367a57","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Noop certificate manager was added. Now any Octavia certificate operations using noop drivers will be faster (as they won\u0027y be validated)."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"cc6804f5_ca714c59","line":4,"range":{"start_line":4,"start_character":122,"end_line":4,"end_character":127},"updated":"2023-09-19 16:16:40.000000000","message":"typo. Also, IDK if this counts as a new feature or if \"other\" would be more appropriate. Other opinions?","commit_id":"58822d2ab6725af37130afffc72e1d8b8f38b641"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"13ffa94df90d39e53f2e934a3e5cc88ef9d3b4c6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Noop certificate manager was added. Now any Octavia certificate operations using noop drivers will be faster (as they won\u0027y be validated)."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"6ba2f4c6_fd7a3cc1","line":4,"range":{"start_line":4,"start_character":122,"end_line":4,"end_character":127},"in_reply_to":"cc6804f5_ca714c59","updated":"2023-10-19 12:15:07.000000000","message":"Done","commit_id":"58822d2ab6725af37130afffc72e1d8b8f38b641"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"1fe4660044ce9a54fd38d26c47e86ed007bd2cf5","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Noop certificate manager was added. Now any Octavia certificate operations using noop drivers will be faster (as they won\u0027t be validated)."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"e133d1c2_1a2c84c7","line":2,"updated":"2023-10-12 17:44:56.000000000","message":"This is not a customer facing feature (it\u0027s for testing), so I don\u0027t think we should put this under the feature category. Also, it means it can\u0027t be backported.","commit_id":"15c0e4773bdc3ce9761594a77bdde03a793b283f"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"13ffa94df90d39e53f2e934a3e5cc88ef9d3b4c6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Noop certificate manager was added. Now any Octavia certificate operations using noop drivers will be faster (as they won\u0027t be validated)."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"892b1129_e50238dd","line":2,"in_reply_to":"e133d1c2_1a2c84c7","updated":"2023-10-19 12:15:07.000000000","message":"Done","commit_id":"15c0e4773bdc3ce9761594a77bdde03a793b283f"}]}
