)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"9caea2a44746ebc6e51688e63baf081b84f22530","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    ssl_overrides \u003d {ca_file:/etc/ssl/glance_ca_file}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"The keys which can be overriden are: ca_file, key_file, cert_file."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: If3f88d8db4a726219573d0f1b65908408e3aa6a9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a890539_1ac44e40","line":23,"updated":"2014-12-05 17:01:03.000000000","message":"If this change (or a successor) moves beyond the proof-of-concept stage, please tag it with \u0027SecurityImpact\u0027 so members of the security group review it.","commit_id":"2144fbd4c97a44d354ed57b819eae2ba96ef5b09"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"2565dcb22df2b6c12373e622fbaf9402e7703140","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    ssl_overrides \u003d {ca_file:/etc/ssl/glance_ca_file}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"The keys which can be overriden are: ca_file, key_file, cert_file."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: If3f88d8db4a726219573d0f1b65908408e3aa6a9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a890539_b8234257","line":23,"in_reply_to":"5a890539_1ac44e40","updated":"2014-12-06 12:02:27.000000000","message":"Thanks Joel, I will do that.  DocImpact, too.","commit_id":"2144fbd4c97a44d354ed57b819eae2ba96ef5b09"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"ee7fd53ce0a83a2604aad99b12bc108d0fa46cda","unresolved":false,"context_lines":[{"line_number":9,"context_line":"We want to have a consistent way to apply ssl config to the various http(s)"},{"line_number":10,"context_line":"clients the nova creates."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Following an ML discussion[1], this is a POC for the approach which has each"},{"line_number":13,"context_line":"client using the global options in CONF.ssl.* with with optional local"},{"line_number":14,"context_line":"overrides.  These are DictOpts in each client\u0027s config section, for example:"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a961159_323148a3","line":12,"updated":"2014-12-06 22:06:45.000000000","message":"I need to actually footnote the link to the ML discussion.","commit_id":"5e0680bc68d3165d738b02758821375b82a250ca"},{"author":{"_account_id":1865,"name":"Andrea Rosa","email":"andrea.rosa@gmail.com","username":"andrea-rosa-m"},"change_message_id":"499c2547f36ead08b17f0c54957573948deddb17","unresolved":false,"context_lines":[{"line_number":10,"context_line":"clients the nova creates."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Following an ML discussion[1], this is a POC for the approach which has each"},{"line_number":13,"context_line":"client using the global options in CONF.ssl.* with with optional local"},{"line_number":14,"context_line":"overrides.  These are DictOpts in each client\u0027s config section, for example:"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"    [ssl]"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a961159_bbe89e7d","line":13,"updated":"2014-12-08 14:59:21.000000000","message":"double \"with\"","commit_id":"5e0680bc68d3165d738b02758821375b82a250ca"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"92b872a837bae987bf10684cb27a13c630fc28a3","unresolved":false,"context_lines":[{"line_number":17,"context_line":"and keystone will be added."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"[1] http://lists.openstack.org/pipermail/openstack-dev/2014-December/052175.html"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: If3f88d8db4a726219573d0f1b65908408e3aa6a9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1a930d6b_d6983a1e","line":20,"updated":"2015-01-26 22:27:27.000000000","message":"Please add \u0027SecurityImpact\u0027 and \u0027DocImpact\u0027 tags.","commit_id":"249fbc234a1add01a210f2a2c8195ed67bd6c28a"}],"nova/image/glance.py":[{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"2565dcb22df2b6c12373e622fbaf9402e7703140","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        \u0027X-Identity-Status\u0027: status,"},{"line_number":122,"context_line":"        \u0027X-Service-Catalog\u0027: jsonutils.dumps(context.service_catalog),"},{"line_number":123,"context_line":"    }"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"def _create_glance_client(context, host, port, use_ssl, version\u003d1):"},{"line_number":126,"context_line":"    \"\"\"Instantiate a new glanceclient.Client object.\"\"\""},{"line_number":127,"context_line":"    params \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_89170845","line":124,"updated":"2014-12-06 12:02:27.000000000","message":"put the blank line back","commit_id":"2144fbd4c97a44d354ed57b819eae2ba96ef5b09"},{"author":{"_account_id":13670,"name":"ANish","email":"anish2good@yahoo.co.in"},"change_message_id":"36d5550d16f7cc21bf544100076ee735cbb9ffce","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        # https specific params"},{"line_number":132,"context_line":"        params[\u0027insecure\u0027] \u003d CONF.glance.api_insecure"},{"line_number":133,"context_line":"        params[\u0027ssl_compression\u0027] \u003d False"},{"line_number":134,"context_line":"        params.update(utils.merge_ssl_config(CONF.ssl,"},{"line_number":135,"context_line":"                                             CONF.glance.ssl_overrides))"},{"line_number":136,"context_line":"    else:"},{"line_number":137,"context_line":"        scheme \u003d \u0027http\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_61bad9e2","line":134,"updated":"2014-12-17 14:19:30.000000000","message":"Make sure this is backward compatible ?","commit_id":"4bde0cbdf961bbbab8a056a9cf4c57ed8733f551"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"949ae41c78ba09040fb172df405b78fc0eda4be0","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        # https specific params"},{"line_number":132,"context_line":"        params[\u0027insecure\u0027] \u003d CONF.glance.api_insecure"},{"line_number":133,"context_line":"        params[\u0027ssl_compression\u0027] \u003d False"},{"line_number":134,"context_line":"        params.update(utils.merge_ssl_config(CONF.ssl,"},{"line_number":135,"context_line":"                                             CONF.glance.ssl_overrides))"},{"line_number":136,"context_line":"    else:"},{"line_number":137,"context_line":"        scheme \u003d \u0027http\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_41d6bdf2","line":134,"in_reply_to":"3a961159_61bad9e2","updated":"2014-12-17 14:24:00.000000000","message":"I believe it is. We are adding a new option which can override the current config options, but if the user doesn\u0027t specify the new one then the behaviour is as before.\n\nThat\u0027s the intention, anyway - please let me know if you find a case which isn\u0027t right and I\u0027ll fix it right away.","commit_id":"4bde0cbdf961bbbab8a056a9cf4c57ed8733f551"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dbf021ed240ff8d47f7c7467dcb881dcba902ee9","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                help\u003d\u0027A list of url scheme that can be downloaded directly \u0027"},{"line_number":68,"context_line":"                     \u0027via the direct_url.  Currently supported schemes: \u0027"},{"line_number":69,"context_line":"                     \u0027[file].\u0027),"},{"line_number":70,"context_line":"    cfg.DictOpt(\u0027ssl_overrides\u0027,"},{"line_number":71,"context_line":"                default\u003d{},"},{"line_number":72,"context_line":"                help\u003d\u0027A dict of values which can override the configuration \u0027"},{"line_number":73,"context_line":"                     \u0027values in the [ssl] group. Valid keys here are: \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_8014664e","line":70,"updated":"2015-01-09 16:20:20.000000000","message":"This doesn\u0027t actually need to be a DictOpt with the way the merge utility is written, it\u0027s already checking specific keys, you could just pass in CONF.glance and the utility will pull the keys, but then we have more options and some people are against that.","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"a19070d73189a05e867599bf961abe1018808832","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                help\u003d\u0027A list of url scheme that can be downloaded directly \u0027"},{"line_number":68,"context_line":"                     \u0027via the direct_url.  Currently supported schemes: \u0027"},{"line_number":69,"context_line":"                     \u0027[file].\u0027),"},{"line_number":70,"context_line":"    cfg.DictOpt(\u0027ssl_overrides\u0027,"},{"line_number":71,"context_line":"                default\u003d{},"},{"line_number":72,"context_line":"                help\u003d\u0027A dict of values which can override the configuration \u0027"},{"line_number":73,"context_line":"                     \u0027values in the [ssl] group. Valid keys here are: \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_fb987b77","line":70,"in_reply_to":"3a961159_8014664e","updated":"2015-01-09 16:42:11.000000000","message":"Yes, I thought the idea was to keep the number of config options down. Happy to change it if necessary.","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dbf021ed240ff8d47f7c7467dcb881dcba902ee9","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    cfg.DictOpt(\u0027ssl_overrides\u0027,"},{"line_number":71,"context_line":"                default\u003d{},"},{"line_number":72,"context_line":"                help\u003d\u0027A dict of values which can override the configuration \u0027"},{"line_number":73,"context_line":"                     \u0027values in the [ssl] group. Valid keys here are: \u0027"},{"line_number":74,"context_line":"                     \u0027\"cert_file\", \"key_file\" and \"ca_file\", which will \u0027"},{"line_number":75,"context_line":"                     \u0027override ssl.\u003cthat_key\u003e.\u0027)"},{"line_number":76,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_0029569b","line":73,"updated":"2015-01-09 16:20:20.000000000","message":"Might be useful to copy the help strings for the actual ssl options here also:\n\nhttp://git.openstack.org/cgit/openstack/oslo-incubator/tree/openstack/common/sslutils.py#n24","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"a19070d73189a05e867599bf961abe1018808832","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    cfg.DictOpt(\u0027ssl_overrides\u0027,"},{"line_number":71,"context_line":"                default\u003d{},"},{"line_number":72,"context_line":"                help\u003d\u0027A dict of values which can override the configuration \u0027"},{"line_number":73,"context_line":"                     \u0027values in the [ssl] group. Valid keys here are: \u0027"},{"line_number":74,"context_line":"                     \u0027\"cert_file\", \"key_file\" and \"ca_file\", which will \u0027"},{"line_number":75,"context_line":"                     \u0027override ssl.\u003cthat_key\u003e.\u0027)"},{"line_number":76,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_1b85470a","line":73,"in_reply_to":"3a961159_0029569b","updated":"2015-01-09 16:42:11.000000000","message":"Done","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"}],"nova/tests/unit/test_utils.py":[{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"92b872a837bae987bf10684cb27a13c630fc28a3","unresolved":false,"context_lines":[{"line_number":951,"context_line":"        CONF.set_override(\u0027ca_file\u0027, \u0027ssl_ca_file\u0027, \u0027ssl\u0027)"},{"line_number":952,"context_line":"        merged \u003d utils.merge_ssl_config(CONF.ssl, overrides)"},{"line_number":953,"context_line":"        self.assertEqual(cfg, merged)"},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"        def test_no_config(self):"},{"line_number":956,"context_line":"            self.assertEqual({}, utils.merge_ssl_config(CONF.ssl, {}))"},{"line_number":957,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_560fea36","line":954,"updated":"2015-01-26 22:27:27.000000000","message":"Incorrect indentation for following methods -- these test cases are not executed.","commit_id":"249fbc234a1add01a210f2a2c8195ed67bd6c28a"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"4d417695cdadf3b04de6ecb8dede71f718f4f420","unresolved":false,"context_lines":[{"line_number":951,"context_line":"        CONF.set_override(\u0027ca_file\u0027, \u0027ssl_ca_file\u0027, \u0027ssl\u0027)"},{"line_number":952,"context_line":"        merged \u003d utils.merge_ssl_config(CONF.ssl, overrides)"},{"line_number":953,"context_line":"        self.assertEqual(cfg, merged)"},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"        def test_no_config(self):"},{"line_number":956,"context_line":"            self.assertEqual({}, utils.merge_ssl_config(CONF.ssl, {}))"},{"line_number":957,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_82cf4c55","line":954,"in_reply_to":"1a930d6b_560fea36","updated":"2015-01-27 15:40:17.000000000","message":"Yep - thanks Joel :(  Will fix.","commit_id":"249fbc234a1add01a210f2a2c8195ed67bd6c28a"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5f74d48376f86be37d56b8e00943a46d4b180ac1","unresolved":false,"context_lines":[{"line_number":1018,"context_line":"class MergeSslConfigTestCase(test.NoDBTestCase):"},{"line_number":1019,"context_line":"    def _assert_overridden_config(self, cfg, overrides\u003dNone):"},{"line_number":1020,"context_line":"        overrides \u003d {} if overrides is None else overrides"},{"line_number":1021,"context_line":"        CONF.set_override(\u0027cert_file\u0027, \u0027ssl_cert_file\u0027, \u0027ssl\u0027)"},{"line_number":1022,"context_line":"        CONF.set_override(\u0027key_file\u0027, \u0027ssl_key_file\u0027, \u0027ssl\u0027)"},{"line_number":1023,"context_line":"        CONF.set_override(\u0027ca_file\u0027, \u0027ssl_ca_file\u0027, \u0027ssl\u0027)"},{"line_number":1024,"context_line":"        merged \u003d utils.merge_ssl_config(CONF.ssl, overrides)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9aa53dc9_5f804246","line":1021,"updated":"2015-04-08 14:41:23.000000000","message":"see, it confuses me...","commit_id":"e8e9656710d7e18cae0f37134f57666113ba5892"}],"nova/utils.py":[{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"2565dcb22df2b6c12373e622fbaf9402e7703140","unresolved":false,"context_lines":[{"line_number":1166,"context_line":"        for x, y in zip(first, second):"},{"line_number":1167,"context_line":"            result |\u003d ord(x) ^ ord(y)"},{"line_number":1168,"context_line":"        return result \u003d\u003d 0"},{"line_number":1169,"context_line":""},{"line_number":1170,"context_line":"def merge_ssl_config(global_ssl, local_ssl):"},{"line_number":1171,"context_line":"    \"\"\"Merges global_ssl options with local overrides."},{"line_number":1172,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_e91dec63","line":1169,"updated":"2014-12-06 12:02:27.000000000","message":"Needs 2 blank lines","commit_id":"2144fbd4c97a44d354ed57b819eae2ba96ef5b09"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dbf021ed240ff8d47f7c7467dcb881dcba902ee9","unresolved":false,"context_lines":[{"line_number":1243,"context_line":"    return formatted_metadata_list"},{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":""},{"line_number":1246,"context_line":"def merge_ssl_config(global_ssl, local_ssl):"},{"line_number":1247,"context_line":"    \"\"\"Merges global_ssl options with local overrides."},{"line_number":1248,"context_line":""},{"line_number":1249,"context_line":"    :param global_ssl: An object containing SSL configuration,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_c0fbce46","line":1246,"updated":"2015-01-09 16:20:20.000000000","message":"We could move this into a separate change at the bottom of the series if we\u0027re OK with the implementation.\n\nThis is pretty straight-forward though.\n\nAlso, since CONF.ssl is the global, do we even need to pass it in as a parameter, can\u0027t we just check CONF.ssl inline here?  I don\u0027t think there are any cases where we have other globals.","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"a19070d73189a05e867599bf961abe1018808832","unresolved":false,"context_lines":[{"line_number":1243,"context_line":"    return formatted_metadata_list"},{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":""},{"line_number":1246,"context_line":"def merge_ssl_config(global_ssl, local_ssl):"},{"line_number":1247,"context_line":"    \"\"\"Merges global_ssl options with local overrides."},{"line_number":1248,"context_line":""},{"line_number":1249,"context_line":"    :param global_ssl: An object containing SSL configuration,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_fbd4fbea","line":1246,"in_reply_to":"3a961159_c0fbce46","updated":"2015-01-09 16:42:11.000000000","message":"I\u0027m happy to take guidance on whether to do this as multiple patches or a single one. I\u0027d put it as multiple for easy reviewing.\n\nI\u0027d rather have us pass in the global conf - keeps the function a bit easier to reckon with if it doesn\u0027t rely on some global state being implicitly available.","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dbf021ed240ff8d47f7c7467dcb881dcba902ee9","unresolved":false,"context_lines":[{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":""},{"line_number":1246,"context_line":"def merge_ssl_config(global_ssl, local_ssl):"},{"line_number":1247,"context_line":"    \"\"\"Merges global_ssl options with local overrides."},{"line_number":1248,"context_line":""},{"line_number":1249,"context_line":"    :param global_ssl: An object containing SSL configuration,"},{"line_number":1250,"context_line":"                       normally from CONF.ssl"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_00f6b65d","line":1247,"updated":"2015-01-09 16:20:20.000000000","message":"It might be helpful to explain a bit more in the docstring where the overrides typically come from, i.e. the service-specific overrides.","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"a19070d73189a05e867599bf961abe1018808832","unresolved":false,"context_lines":[{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":""},{"line_number":1246,"context_line":"def merge_ssl_config(global_ssl, local_ssl):"},{"line_number":1247,"context_line":"    \"\"\"Merges global_ssl options with local overrides."},{"line_number":1248,"context_line":""},{"line_number":1249,"context_line":"    :param global_ssl: An object containing SSL configuration,"},{"line_number":1250,"context_line":"                       normally from CONF.ssl"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_1b8c672e","line":1247,"in_reply_to":"3a961159_00f6b65d","updated":"2015-01-09 16:42:11.000000000","message":"Done","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dbf021ed240ff8d47f7c7467dcb881dcba902ee9","unresolved":false,"context_lines":[{"line_number":1249,"context_line":"    :param global_ssl: An object containing SSL configuration,"},{"line_number":1250,"context_line":"                       normally from CONF.ssl"},{"line_number":1251,"context_line":"    :param local_ssl: A dict containing local SSL configuration,"},{"line_number":1252,"context_line":"    normally from CONF.\u003csomething\u003e.ssl_overrides"},{"line_number":1253,"context_line":"    :return: A dict of merged options where local overrides"},{"line_number":1254,"context_line":"    take precedence over global values. If a value is specified"},{"line_number":1255,"context_line":"    in neither, it will not be in the output dict."}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_80a1c648","line":1252,"updated":"2015-01-09 16:20:20.000000000","message":"Would like to see consistent formatting/alignment like you have above.  Makes the docstring easier to read in my opinion.","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"a19070d73189a05e867599bf961abe1018808832","unresolved":false,"context_lines":[{"line_number":1249,"context_line":"    :param global_ssl: An object containing SSL configuration,"},{"line_number":1250,"context_line":"                       normally from CONF.ssl"},{"line_number":1251,"context_line":"    :param local_ssl: A dict containing local SSL configuration,"},{"line_number":1252,"context_line":"    normally from CONF.\u003csomething\u003e.ssl_overrides"},{"line_number":1253,"context_line":"    :return: A dict of merged options where local overrides"},{"line_number":1254,"context_line":"    take precedence over global values. If a value is specified"},{"line_number":1255,"context_line":"    in neither, it will not be in the output dict."}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_5bfb4f7b","line":1252,"in_reply_to":"3a961159_80a1c648","updated":"2015-01-09 16:42:11.000000000","message":"Done","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dbf021ed240ff8d47f7c7467dcb881dcba902ee9","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"    :param local_ssl: A dict containing local SSL configuration,"},{"line_number":1252,"context_line":"    normally from CONF.\u003csomething\u003e.ssl_overrides"},{"line_number":1253,"context_line":"    :return: A dict of merged options where local overrides"},{"line_number":1254,"context_line":"    take precedence over global values. If a value is specified"},{"line_number":1255,"context_line":"    in neither, it will not be in the output dict."},{"line_number":1256,"context_line":"    \"\"\""},{"line_number":1257,"context_line":"    config \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_a085e2af","line":1254,"updated":"2015-01-09 16:20:20.000000000","message":"I\u0027d suggest re-wording this as \"If a value is not specified in either, ...\".","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"a19070d73189a05e867599bf961abe1018808832","unresolved":false,"context_lines":[{"line_number":1251,"context_line":"    :param local_ssl: A dict containing local SSL configuration,"},{"line_number":1252,"context_line":"    normally from CONF.\u003csomething\u003e.ssl_overrides"},{"line_number":1253,"context_line":"    :return: A dict of merged options where local overrides"},{"line_number":1254,"context_line":"    take precedence over global values. If a value is specified"},{"line_number":1255,"context_line":"    in neither, it will not be in the output dict."},{"line_number":1256,"context_line":"    \"\"\""},{"line_number":1257,"context_line":"    config \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_7b000b67","line":1254,"in_reply_to":"3a961159_a085e2af","updated":"2015-01-09 16:42:11.000000000","message":"Done","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dbf021ed240ff8d47f7c7467dcb881dcba902ee9","unresolved":false,"context_lines":[{"line_number":1255,"context_line":"    in neither, it will not be in the output dict."},{"line_number":1256,"context_line":"    \"\"\""},{"line_number":1257,"context_line":"    config \u003d {}"},{"line_number":1258,"context_line":"    if \u0027ca_file\u0027 in local_ssl or global_ssl.ca_file:"},{"line_number":1259,"context_line":"        config[\u0027cacert\u0027] \u003d local_ssl.get(\u0027ca_file\u0027) or global_ssl.ca_file"},{"line_number":1260,"context_line":"    if \u0027cert_file\u0027 in local_ssl or global_ssl.cert_file:"},{"line_number":1261,"context_line":"        config[\u0027cert_file\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_806f06fc","line":1258,"updated":"2015-01-09 16:20:20.000000000","message":"Do we really need the in check?  If I do:\n\nconfig[\u0027cacert\u0027] \u003d local_ssl.get(\u0027ca_file\u0027) or global_ssl.ca_file\n\nAnd cacert isn\u0027t in local_ssl, the get will return None and None or something will yield something.  If CONF.ssl.ca_file isn\u0027t set, it defaults to None (I think?) so nothing should be set.  Or does it default to an empty string since it\u0027s a StrOpt?","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"a19070d73189a05e867599bf961abe1018808832","unresolved":false,"context_lines":[{"line_number":1255,"context_line":"    in neither, it will not be in the output dict."},{"line_number":1256,"context_line":"    \"\"\""},{"line_number":1257,"context_line":"    config \u003d {}"},{"line_number":1258,"context_line":"    if \u0027ca_file\u0027 in local_ssl or global_ssl.ca_file:"},{"line_number":1259,"context_line":"        config[\u0027cacert\u0027] \u003d local_ssl.get(\u0027ca_file\u0027) or global_ssl.ca_file"},{"line_number":1260,"context_line":"    if \u0027cert_file\u0027 in local_ssl or global_ssl.cert_file:"},{"line_number":1261,"context_line":"        config[\u0027cert_file\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_fbeb1ba2","line":1258,"in_reply_to":"3a961159_806f06fc","updated":"2015-01-09 16:42:11.000000000","message":"Done","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"d02f0d3567ee09ff0569c87dcae8bf622f69ab13","unresolved":false,"context_lines":[{"line_number":1255,"context_line":"    in neither, it will not be in the output dict."},{"line_number":1256,"context_line":"    \"\"\""},{"line_number":1257,"context_line":"    config \u003d {}"},{"line_number":1258,"context_line":"    if \u0027ca_file\u0027 in local_ssl or global_ssl.ca_file:"},{"line_number":1259,"context_line":"        config[\u0027cacert\u0027] \u003d local_ssl.get(\u0027ca_file\u0027) or global_ssl.ca_file"},{"line_number":1260,"context_line":"    if \u0027cert_file\u0027 in local_ssl or global_ssl.cert_file:"},{"line_number":1261,"context_line":"        config[\u0027cert_file\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_4133bdaa","line":1258,"in_reply_to":"3a961159_fbeb1ba2","updated":"2015-02-04 18:12:57.000000000","message":"We do need this - to allow the \u0027if present in neither it will not be present in the output dict\u0027 behaviour.","commit_id":"6c4c592ca3202f67521c7b0233f430cfa4be3531"},{"author":{"_account_id":13670,"name":"ANish","email":"anish2good@yahoo.co.in"},"change_message_id":"efb5f88802ce87aaa62ebb91fbee834278f3e532","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"    return formatted_metadata_list"},{"line_number":1215,"context_line":""},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"def merge_ssl_config(global_ssl, local_ssl):"},{"line_number":1218,"context_line":"    \"\"\"Merges global_ssl options with local overrides."},{"line_number":1219,"context_line":""},{"line_number":1220,"context_line":"    This util method allows clients to use global ssl config, usually from"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_2de99a1a","line":1217,"updated":"2015-02-10 07:06:00.000000000","message":"Do we need a default SSL config ?","commit_id":"16ebe33290852d48960c686496bdeedf564328c8"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"12fbd0d9e3f6c42d5e1ea7ce182577d427c74cff","unresolved":false,"context_lines":[{"line_number":1214,"context_line":"    return formatted_metadata_list"},{"line_number":1215,"context_line":""},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"def merge_ssl_config(global_ssl, local_ssl):"},{"line_number":1218,"context_line":"    \"\"\"Merges global_ssl options with local overrides."},{"line_number":1219,"context_line":""},{"line_number":1220,"context_line":"    This util method allows clients to use global ssl config, usually from"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_505bc62d","line":1217,"in_reply_to":"da86d52c_2de99a1a","updated":"2015-02-10 08:10:09.000000000","message":"I don\u0027t think so. CONF.ssl is defined in nova/openstack/common/sslutils.py - if no settings are given by the user, then SSL won\u0027t be used. This doesn\u0027t change that behaviour.","commit_id":"16ebe33290852d48960c686496bdeedf564328c8"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"25374dfc61a775bc0478d077f6b5f50025e16c10","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"    return formatted_metadata_list"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":""},{"line_number":1224,"context_line":"def merge_ssl_config(global_ssl, local_ssl):"},{"line_number":1225,"context_line":"    \"\"\"Merges global_ssl options with local overrides."},{"line_number":1226,"context_line":""},{"line_number":1227,"context_line":"    This util method allows clients to use global ssl config, usually from"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_d5bcf2dd","line":1224,"updated":"2015-02-17 15:27:42.000000000","message":"This method by his natural is supposed to work with the global SSL config options. Why to pass it as parameter instead of import SSL options here? or at least a helper can do it:\n\n  def ssl_config(local_ssl):\n     merge_ssl_config(CONF.ssl, local_ssl)\n\nI mean like that we don\u0027t have to import the global SSL config in each modules (keytone, glance...)","commit_id":"04b92ba200c018e857bdabdf2c17724b5f3e5a93"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"a535dd12cb7e4e0870ec59186edba5a6f9d32271","unresolved":false,"context_lines":[{"line_number":1221,"context_line":"    return formatted_metadata_list"},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":""},{"line_number":1224,"context_line":"def merge_ssl_config(global_ssl, local_ssl):"},{"line_number":1225,"context_line":"    \"\"\"Merges global_ssl options with local overrides."},{"line_number":1226,"context_line":""},{"line_number":1227,"context_line":"    This util method allows clients to use global ssl config, usually from"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_30e63c17","line":1224,"in_reply_to":"da86d52c_d5bcf2dd","updated":"2015-02-17 15:33:29.000000000","message":"That\u0027s a good point. I\u0027ve resisted changing this in previous PS because I don\u0027t think it\u0027s nice to rely on global state. But your suggestion is nice, and if it means we can remove mentions of CONF.ssl from the other classes then it\u0027s better overall, IMO.","commit_id":"04b92ba200c018e857bdabdf2c17724b5f3e5a93"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"15f8518f524d6824974b3c1c23c7792cdada017c","unresolved":false,"context_lines":[{"line_number":1239,"context_line":""},{"line_number":1240,"context_line":"    config \u003d {}"},{"line_number":1241,"context_line":"    if \u0027ca_file\u0027 in local_ssl or global_ssl.ca_file:"},{"line_number":1242,"context_line":"        config[\u0027cacert\u0027] \u003d local_ssl.get(\u0027ca_file\u0027) or global_ssl.ca_file"},{"line_number":1243,"context_line":"    if \u0027cert_file\u0027 in local_ssl or global_ssl.cert_file:"},{"line_number":1244,"context_line":"        config[\u0027cert_file\u0027] \u003d ("},{"line_number":1245,"context_line":"            local_ssl.get(\u0027cert_file\u0027) or global_ssl.cert_file)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_301f1c0b","line":1242,"updated":"2015-02-17 15:31:33.000000000","message":"Actually you are change the key here, I guess that is expected but can you set a comment ?","commit_id":"04b92ba200c018e857bdabdf2c17724b5f3e5a93"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"a535dd12cb7e4e0870ec59186edba5a6f9d32271","unresolved":false,"context_lines":[{"line_number":1239,"context_line":""},{"line_number":1240,"context_line":"    config \u003d {}"},{"line_number":1241,"context_line":"    if \u0027ca_file\u0027 in local_ssl or global_ssl.ca_file:"},{"line_number":1242,"context_line":"        config[\u0027cacert\u0027] \u003d local_ssl.get(\u0027ca_file\u0027) or global_ssl.ca_file"},{"line_number":1243,"context_line":"    if \u0027cert_file\u0027 in local_ssl or global_ssl.cert_file:"},{"line_number":1244,"context_line":"        config[\u0027cert_file\u0027] \u003d ("},{"line_number":1245,"context_line":"            local_ssl.get(\u0027cert_file\u0027) or global_ssl.cert_file)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_b0b94cee","line":1242,"in_reply_to":"da86d52c_301f1c0b","updated":"2015-02-17 15:33:29.000000000","message":"Done","commit_id":"04b92ba200c018e857bdabdf2c17724b5f3e5a93"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5f74d48376f86be37d56b8e00943a46d4b180ac1","unresolved":false,"context_lines":[{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"    config \u003d {}"},{"line_number":1242,"context_line":"    if \u0027ca_file\u0027 in local_ssl or global_ssl.ca_file:"},{"line_number":1243,"context_line":"        config[\u0027cacert\u0027] \u003d local_ssl.get(\u0027ca_file\u0027) or global_ssl.ca_file"},{"line_number":1244,"context_line":"    if \u0027cert_file\u0027 in local_ssl or global_ssl.cert_file:"},{"line_number":1245,"context_line":"        config[\u0027cert_file\u0027] \u003d ("},{"line_number":1246,"context_line":"            local_ssl.get(\u0027cert_file\u0027) or global_ssl.cert_file)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9aa53dc9_3fb1fe47","line":1243,"updated":"2015-04-08 14:41:23.000000000","message":"why are you keying differently betweek config and the local_ssl opt_name ? IMHO that\u0027s confusing, nope?","commit_id":"e8e9656710d7e18cae0f37134f57666113ba5892"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"47862d6366822af06d08d93925c8769e049b4b68","unresolved":false,"context_lines":[{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"    config \u003d {}"},{"line_number":1242,"context_line":"    if \u0027ca_file\u0027 in local_ssl or global_ssl.ca_file:"},{"line_number":1243,"context_line":"        config[\u0027cacert\u0027] \u003d local_ssl.get(\u0027ca_file\u0027) or global_ssl.ca_file"},{"line_number":1244,"context_line":"    if \u0027cert_file\u0027 in local_ssl or global_ssl.cert_file:"},{"line_number":1245,"context_line":"        config[\u0027cert_file\u0027] \u003d ("},{"line_number":1246,"context_line":"            local_ssl.get(\u0027cert_file\u0027) or global_ssl.cert_file)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9aa53dc9_b5008f02","line":1243,"in_reply_to":"9aa53dc9_3fb1fe47","updated":"2015-04-08 15:15:04.000000000","message":"This is the keyname expected by clients, seems to be no a big deal when we see the previous reviews and by that way clients can directly use the dict returned by this function.","commit_id":"e8e9656710d7e18cae0f37134f57666113ba5892"}]}
